summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author ImJezze <jezze@gmx.net>2016-03-12 12:31:13 +0100
committer ImJezze <jezze@gmx.net>2016-03-12 12:31:13 +0100
commita026a582f1a0ea8c1ede3acaddacef506ef3f3b0 (patch)
treee31573822f2359677de519f9f3b600d98e8764cd
parent477d2abd43984f076b7e45f5527591fa8fd0d241 (diff)
parentdcab55bf53b94713a6f72e9633f5101c8dd6c08c (diff)
Merge pull request #15 from mamedev/master
Sync to base master
-rw-r--r--.gitignore1
-rw-r--r--3rdparty/README.md55
-rw-r--r--3rdparty/benchmark/CMakeLists.txt134
-rw-r--r--3rdparty/benchmark/README.md16
-rw-r--r--3rdparty/benchmark/appveyor.yml84
-rw-r--r--3rdparty/benchmark/include/benchmark/benchmark_api.h13
-rw-r--r--3rdparty/benchmark/src/benchmark.cc6
-rw-r--r--3rdparty/benchmark/src/console_reporter.cc2
-rw-r--r--3rdparty/benchmark/src/csv_reporter.cc2
-rw-r--r--3rdparty/benchmark/src/cycleclock.h8
-rw-r--r--3rdparty/benchmark/src/sysinfo.cc16
-rw-r--r--3rdparty/benchmark/test/CMakeLists.txt3
-rw-r--r--3rdparty/benchmark/test/benchmark_test.cc24
-rw-r--r--3rdparty/benchmark/test/fixture_test.cc48
-rw-r--r--3rdparty/benchmark/test/map_test.cc58
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/Changelog.md9
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp6
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp12
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/list.h6
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/loop_analysis.cpp175
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/loop_analysis.h3
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/src/mesa/program/prog_hash_table.c2
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/array-const-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/array-constconst-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ast-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-loop-undeclaredinductor-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-sampler-highp-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-sampler-highpfull-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/builtin-vars-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/fragdepth-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/framebuffer_fetch-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/intrinsics-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/loop-for-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/matrix-cast-types-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/matrix-ops-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-mixed-array-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-unused-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloadstreeshadow-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/opt-grafting-precision-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/prec-expressions-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/prec-matrix-constr-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/qualifiers-layout-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/sampler-precision-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ternary-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2DArray-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dgrad-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex3D-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texCubeShadow-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texOffset-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texProj-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-DirLMBasis-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-LightShaftsCoord-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-tonemap-usercurve-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-unishader-dirlm-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-unity-spot-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/zun-SSAO24-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/glsl_optimizer_tests.cpp5
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/MF-GodRays-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/bug-swizzle-lhs-cast-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/builtin-vars-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/inputs-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-for-withvec4-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-for-withvec4inductorW-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-forlimitbreak-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/matrix-casts-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-transpose-mul-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/swizzle-casts-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/types-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/uniforms-arrays-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-NichsHybridLightVectorInsertBug-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-outES3Metal.txt1
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vk_lunarg_debug_marker.h98
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h127
-rw-r--r--3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h3775
-rw-r--r--3rdparty/bgfx/3rdparty/nvtt/nvcore/posh.h6
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp40
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h4
-rw-r--r--3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h1
-rw-r--r--3rdparty/bgfx/3rdparty/renderdoc/renderdoc_app.h17
-rw-r--r--3rdparty/bgfx/3rdparty/stb/stb_image.c3
-rw-r--r--3rdparty/bgfx/README.md26
-rw-r--r--3rdparty/bgfx/examples/01-cubes/cubes.cpp4
-rw-r--r--3rdparty/bgfx/examples/01-cubes/makefile3
-rw-r--r--3rdparty/bgfx/examples/02-metaballs/makefile2
-rw-r--r--3rdparty/bgfx/examples/02-metaballs/metaballs.cpp11
-rw-r--r--3rdparty/bgfx/examples/03-raymarch/makefile3
-rw-r--r--3rdparty/bgfx/examples/03-raymarch/raymarch.cpp269
-rw-r--r--3rdparty/bgfx/examples/04-mesh/makefile3
-rw-r--r--3rdparty/bgfx/examples/04-mesh/mesh.cpp211
-rw-r--r--3rdparty/bgfx/examples/05-instancing/instancing.cpp287
-rw-r--r--3rdparty/bgfx/examples/05-instancing/makefile3
-rw-r--r--3rdparty/bgfx/examples/06-bump/bump.cpp4
-rw-r--r--3rdparty/bgfx/examples/06-bump/makefile3
-rw-r--r--3rdparty/bgfx/examples/07-callback/makefile3
-rw-r--r--3rdparty/bgfx/examples/08-update/makefile3
-rw-r--r--3rdparty/bgfx/examples/08-update/update.cpp6
-rw-r--r--3rdparty/bgfx/examples/09-hdr/hdr.cpp4
-rw-r--r--3rdparty/bgfx/examples/09-hdr/makefile3
-rw-r--r--3rdparty/bgfx/examples/12-lod/lod.cpp4
-rw-r--r--3rdparty/bgfx/examples/12-lod/makefile3
-rw-r--r--3rdparty/bgfx/examples/13-stencil/makefile3
-rw-r--r--3rdparty/bgfx/examples/13-stencil/stencil.cpp13
-rw-r--r--3rdparty/bgfx/examples/14-shadowvolumes/makefile16
-rw-r--r--3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp4
-rw-r--r--3rdparty/bgfx/examples/15-shadowmaps-simple/makefile3
-rw-r--r--3rdparty/bgfx/examples/16-shadowmaps/fs_shadowmaps_color_lighting_main.sh6
-rw-r--r--3rdparty/bgfx/examples/16-shadowmaps/makefile14
-rw-r--r--3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp4
-rw-r--r--3rdparty/bgfx/examples/17-drawstress/drawstress.cpp4
-rw-r--r--3rdparty/bgfx/examples/17-drawstress/makefile2
-rw-r--r--3rdparty/bgfx/examples/18-ibl/fs_ibl_mesh.sc143
-rw-r--r--3rdparty/bgfx/examples/18-ibl/fs_ibl_skybox.sc19
-rw-r--r--3rdparty/bgfx/examples/18-ibl/ibl.cpp748
-rw-r--r--3rdparty/bgfx/examples/18-ibl/makefile3
-rw-r--r--3rdparty/bgfx/examples/18-ibl/screenshot.pngbin223941 -> 167265 bytes
-rw-r--r--3rdparty/bgfx/examples/18-ibl/uniforms.sh28
-rw-r--r--3rdparty/bgfx/examples/18-ibl/vs_ibl_mesh.sc8
-rw-r--r--3rdparty/bgfx/examples/18-ibl/vs_ibl_skybox.sc16
-rw-r--r--3rdparty/bgfx/examples/19-oit/makefile3
-rw-r--r--3rdparty/bgfx/examples/19-oit/oit.cpp570
-rw-r--r--3rdparty/bgfx/examples/20-nanovg/nanovg.cpp129
-rw-r--r--3rdparty/bgfx/examples/21-deferred/deferred.cpp4
-rw-r--r--3rdparty/bgfx/examples/21-deferred/makefile2
-rw-r--r--3rdparty/bgfx/examples/23-vectordisplay/makefile3
-rw-r--r--3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.cpp2
-rw-r--r--3rdparty/bgfx/examples/24-nbody/makefile3
-rw-r--r--3rdparty/bgfx/examples/25-c99/helloworld.c2
-rw-r--r--3rdparty/bgfx/examples/26-occlusion/occlusion.cpp4
-rw-r--r--3rdparty/bgfx/examples/27-terrain/makefile3
-rw-r--r--3rdparty/bgfx/examples/27-terrain/terrain.cpp15
-rw-r--r--3rdparty/bgfx/examples/28-wireframe/fs_wf_mesh.sc78
-rw-r--r--3rdparty/bgfx/examples/28-wireframe/fs_wf_wireframe.sc26
-rw-r--r--3rdparty/bgfx/examples/28-wireframe/makefile18
-rw-r--r--3rdparty/bgfx/examples/28-wireframe/screenshot.pngbin0 -> 127897 bytes
-rw-r--r--3rdparty/bgfx/examples/28-wireframe/uniforms.sh12
-rw-r--r--3rdparty/bgfx/examples/28-wireframe/varying.def.sc7
-rw-r--r--3rdparty/bgfx/examples/28-wireframe/vs_wf_mesh.sc21
-rw-r--r--3rdparty/bgfx/examples/28-wireframe/vs_wf_wireframe.sc19
-rw-r--r--3rdparty/bgfx/examples/28-wireframe/wireframe.cpp566
-rw-r--r--3rdparty/bgfx/examples/assets/meshes/makefile4
-rw-r--r--3rdparty/bgfx/examples/common/bgfx_utils.cpp44
-rw-r--r--3rdparty/bgfx/examples/common/bounds.cpp30
-rw-r--r--3rdparty/bgfx/examples/common/bounds.h3
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/debugdraw.cpp1490
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/debugdraw.h117
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.bin.h73
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.sc19
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.bin.h168
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.sc35
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.bin.h70
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.sc13
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.bin.h110
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.sc18
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/makefile9
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/varying.def.sc8
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.bin.h107
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.sc13
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.bin.h195
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.sc16
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.bin.h127
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.sc15
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.bin.h148
-rw-r--r--3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.sc16
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry.cpp2
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_noop.cpp (renamed from 3rdparty/bgfx/examples/common/entry/entry_qnx.cpp)4
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_p.h5
-rw-r--r--3rdparty/bgfx/examples/common/entry/entry_sdl.cpp4
-rw-r--r--3rdparty/bgfx/examples/common/entry/input.cpp7
-rw-r--r--3rdparty/bgfx/examples/common/font/makefile2
-rw-r--r--3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp4
-rw-r--r--3rdparty/bgfx/examples/common/imgui/fs_imgui_image_swizz.bin.h77
-rw-r--r--3rdparty/bgfx/examples/common/imgui/imgui.cpp5
-rw-r--r--3rdparty/bgfx/examples/common/imgui/makefile2
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/makefile2
-rw-r--r--3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp1
-rw-r--r--3rdparty/bgfx/examples/common/shaderlib.sh16
-rw-r--r--3rdparty/bgfx/examples/makefile24
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/bunny.binbin974323 -> 2588410 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/hollowcube.binbin24144 -> 40281 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/meshes/orb.binbin1494272 -> 2485418 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_mesh.binbin2688 -> 3378 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_skybox.binbin831 -> 1366 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm.binbin3573 -> 3573 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_csm.binbin6534 -> 6534 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear.binbin3545 -> 3545 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_csm.binbin6422 -> 6422 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_omni.binbin5203 -> 5203 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_omni.binbin5231 -> 5231 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard.binbin3457 -> 3457 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_csm.binbin6070 -> 6070 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear.binbin3429 -> 3429 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_csm.binbin5958 -> 5958 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_omni.binbin5087 -> 5087 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_omni.binbin5115 -> 5115 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf.binbin11918 -> 11918 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_csm.binbin40071 -> 40071 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear.binbin10850 -> 10850 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin35715 -> 35715 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin12436 -> 12436 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_omni.binbin13524 -> 13524 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm.binbin3717 -> 3717 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_csm.binbin7206 -> 7206 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear.binbin3689 -> 3689 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin7094 -> 7094 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin5347 -> 5347 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_omni.binbin5375 -> 5375 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_mesh.binbin0 -> 1555 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_wireframe.binbin0 -> 887 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_mesh.binbin991 -> 915 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_skybox.binbin674 -> 717 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_mesh.binbin0 -> 1017 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_wireframe.binbin0 -> 759 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_mesh.binbin1661 -> 1963 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_skybox.binbin560 -> 1023 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm.binbin2730 -> 2730 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_csm.binbin4511 -> 4511 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear.binbin2726 -> 2726 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_csm.binbin4475 -> 4475 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_omni.binbin3776 -> 3776 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_omni.binbin3780 -> 3780 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard.binbin2690 -> 2690 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_csm.binbin4379 -> 4379 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear.binbin2686 -> 2686 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_csm.binbin4423 -> 4423 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_omni.binbin3748 -> 3748 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_omni.binbin3732 -> 3732 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf.binbin7591 -> 7591 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_csm.binbin24496 -> 24496 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear.binbin7267 -> 7267 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin22316 -> 22316 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin7965 -> 7965 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_omni.binbin8669 -> 8669 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm.binbin2810 -> 2810 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_csm.binbin4895 -> 4895 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear.binbin2794 -> 2794 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin4831 -> 4831 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin3876 -> 3876 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_omni.binbin3892 -> 3892 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_mesh.binbin0 -> 1020 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_wireframe.binbin0 -> 568 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_mesh.binbin676 -> 632 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_skybox.binbin447 -> 486 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_mesh.binbin0 -> 668 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_wireframe.binbin0 -> 544 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/cs_indirect.binbin1167 -> 1332 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/cs_init_instances.binbin3319 -> 3490 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/cs_update_instances.binbin2627 -> 2798 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_ibl_mesh.binbin2008 -> 3507 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_ibl_skybox.binbin594 -> 1855 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_oit_wb.binbin371 -> 373 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_oit_wb_separate.binbin318 -> 441 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm.binbin4207 -> 4213 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_csm.binbin10204 -> 10222 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear.binbin4251 -> 4257 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear_csm.binbin10424 -> 10442 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear_omni.binbin7581 -> 7587 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_omni.binbin7535 -> 7541 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard.binbin4079 -> 4085 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_csm.binbin9660 -> 9678 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear.binbin4111 -> 4117 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear_csm.binbin9796 -> 9814 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear_omni.binbin7442 -> 7448 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_omni.binbin7408 -> 7414 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf.binbin15670 -> 15736 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_csm.binbin63214 -> 63472 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear.binbin15721 -> 15787 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin63660 -> 63918 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin19262 -> 19317 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_omni.binbin19207 -> 19262 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm.binbin4633 -> 4635 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_csm.binbin12150 -> 12152 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear.binbin4677 -> 4679 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin12370 -> 12372 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin8009 -> 8011 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_omni.binbin7963 -> 7965 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_hblur.binbin1708 -> 1746 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_packdepth.binbin300 -> 302 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_packdepth_linear.binbin252 -> 254 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_unpackdepth.binbin417 -> 421 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_vblur.binbin1708 -> 1746 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowvolume_svbackblank.binbin76 -> 165 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowvolume_svfrontblank.binbin99 -> 173 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_mesh_pd.binbin8588 -> 8652 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_shadow.binbin76 -> 165 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_shadow_pd.binbin398 -> 400 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_stencil_color_lighting.binbin2164 -> 2240 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_stencil_texture_lighting.binbin2486 -> 2562 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_update_3d.binbin375 -> 519 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_wf_mesh.binbin0 -> 1521 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/fs_wf_wireframe.binbin0 -> 759 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/vs_ibl_mesh.binbin681 -> 671 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/vs_ibl_skybox.binbin474 -> 633 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/vs_wf_mesh.binbin0 -> 745 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/gles/vs_wf_wireframe.binbin0 -> 557 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_indirect.binbin1340 -> 1676 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_init_instances.binbin3492 -> 3834 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update_instances.binbin2800 -> 3142 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_mesh.binbin1855 -> 3255 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_skybox.binbin511 -> 1708 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb.binbin353 -> 355 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate.binbin300 -> 413 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm.binbin3970 -> 3976 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_csm.binbin9822 -> 9840 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear.binbin4014 -> 4020 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_csm.binbin10042 -> 10060 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_omni.binbin7225 -> 7231 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_omni.binbin7179 -> 7185 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard.binbin3848 -> 3854 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_csm.binbin9302 -> 9320 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear.binbin3880 -> 3886 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_csm.binbin9438 -> 9456 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_omni.binbin7092 -> 7098 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_omni.binbin7058 -> 7064 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf.binbin15057 -> 15123 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_csm.binbin61375 -> 61633 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear.binbin15102 -> 15168 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin61797 -> 62055 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin18518 -> 18573 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_omni.binbin18469 -> 18524 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm.binbin4371 -> 4373 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_csm.binbin11668 -> 11670 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear.binbin4415 -> 4417 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin11888 -> 11890 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin7628 -> 7630 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_omni.binbin7582 -> 7584 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur.binbin1581 -> 1619 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.binbin288 -> 290 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.binbin240 -> 242 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.binbin352 -> 356 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur.binbin1581 -> 1619 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackblank.binbin76 -> 157 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontblank.binbin99 -> 165 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh_pd.binbin8222 -> 8286 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow.binbin76 -> 157 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow_pd.binbin380 -> 382 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_lighting.binbin2050 -> 2120 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture_lighting.binbin2308 -> 2378 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_3d.binbin307 -> 438 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_mesh.binbin0 -> 1479 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_wireframe.binbin0 -> 707 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_mesh.binbin627 -> 623 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_skybox.binbin432 -> 591 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_mesh.binbin0 -> 685 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_wireframe.binbin0 -> 515 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_mesh.binbin2838 -> 4135 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_skybox.binbin1086 -> 2320 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb.binbin750 -> 751 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_blit.binbin933 -> 933 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate.binbin683 -> 795 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate_blit.binbin933 -> 933 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.binbin4597 -> 4600 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.binbin11097 -> 11106 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.binbin4641 -> 4644 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.binbin11317 -> 11326 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.binbin7861 -> 7864 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.binbin7815 -> 7818 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.binbin4425 -> 4428 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.binbin10377 -> 10386 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.binbin4457 -> 4460 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.binbin10513 -> 10522 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.binbin7678 -> 7681 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.binbin7644 -> 7647 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.binbin16606 -> 16639 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.binbin66411 -> 66540 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.binbin16555 -> 16588 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.binbin66449 -> 66578 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.binbin19991 -> 20011 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.binbin19940 -> 19960 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.binbin5037 -> 5038 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.binbin13099 -> 13100 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.binbin5081 -> 5082 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.binbin13319 -> 13320 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.binbin8303 -> 8304 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.binbin8257 -> 8258 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.binbin1045 -> 1045 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur.binbin2840 -> 2859 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.binbin3934 -> 3934 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth.binbin623 -> 624 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_linear.binbin566 -> 567 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_texture.binbin598 -> 598 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.binbin815 -> 817 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.binbin790 -> 790 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur.binbin2840 -> 2859 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.binbin3934 -> 3934 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackblank.binbin396 -> 477 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontblank.binbin426 -> 492 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh.binbin9729 -> 9729 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh_pd.binbin9605 -> 9637 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow.binbin396 -> 477 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow_pd.binbin700 -> 701 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_lighting.binbin2345 -> 2415 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture_lighting.binbin2745 -> 2815 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_terrain.binbin0 -> 541 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_tree.binbin1846 -> 1855 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_3d.binbin737 -> 868 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_mesh.binbin0 -> 1861 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_wireframe.binbin0 -> 1099 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_mesh.binbin979 -> 975 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_skybox.binbin781 -> 962 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain.binbin0 -> 721 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain_height_texture.binbin0 -> 1037 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_mesh.binbin0 -> 1058 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_wireframe.binbin0 -> 858 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/bolonga_irr.ddsbin0 -> 786580 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/bolonga_lod.ddsbin0 -> 4194436 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/ennis_irr.ddsbin393344 -> 0 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/ennis_lod.ddsbin8388728 -> 0 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/grace_irr.ddsbin393344 -> 0 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/grace_lod.ddsbin8388728 -> 0 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/kyoto_irr.ddsbin0 -> 786580 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/kyoto_lod.ddsbin0 -> 4194436 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/pisa_irr.ddsbin393344 -> 0 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/pisa_lod.ddsbin8388728 -> 0 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/uffizi_irr.ddsbin393344 -> 0 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/uffizi_lod.ddsbin8388728 -> 0 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/wells_irr.ddsbin393344 -> 0 bytes
-rw-r--r--3rdparty/bgfx/examples/runtime/textures/wells_lod.ddsbin8388728 -> 0 bytes
-rw-r--r--3rdparty/bgfx/include/bgfx/bgfx.h110
-rw-r--r--3rdparty/bgfx/include/bgfx/bgfxdefines.h38
-rw-r--r--3rdparty/bgfx/include/bgfx/bgfxplatform.h2
-rw-r--r--3rdparty/bgfx/include/bgfx/c99/bgfx.h23
-rw-r--r--3rdparty/bgfx/include/bgfx/c99/bgfxplatform.h9
-rw-r--r--3rdparty/bgfx/makefile220
-rw-r--r--3rdparty/bgfx/scripts/genie.lua20
-rw-r--r--3rdparty/bgfx/scripts/shader-embeded.mk14
-rw-r--r--3rdparty/bgfx/scripts/shader.mk2
-rw-r--r--3rdparty/bgfx/scripts/tools.mk2
-rw-r--r--3rdparty/bgfx/src/amalgamated.cpp1
-rw-r--r--3rdparty/bgfx/src/bgfx.cpp198
-rw-r--r--3rdparty/bgfx/src/bgfx_p.h66
-rw-r--r--3rdparty/bgfx/src/bgfx_shader.sh31
-rw-r--r--3rdparty/bgfx/src/config.h2
-rw-r--r--3rdparty/bgfx/src/glcontext_ppapi.cpp6
-rw-r--r--3rdparty/bgfx/src/image.cpp281
-rw-r--r--3rdparty/bgfx/src/image.h216
-rw-r--r--3rdparty/bgfx/src/makefile2
-rw-r--r--3rdparty/bgfx/src/renderer_d3d.h8
-rw-r--r--3rdparty/bgfx/src/renderer_d3d11.cpp261
-rw-r--r--3rdparty/bgfx/src/renderer_d3d11.h14
-rw-r--r--3rdparty/bgfx/src/renderer_d3d12.cpp179
-rw-r--r--3rdparty/bgfx/src/renderer_d3d12.h23
-rw-r--r--3rdparty/bgfx/src/renderer_d3d9.cpp270
-rw-r--r--3rdparty/bgfx/src/renderer_d3d9.h16
-rw-r--r--3rdparty/bgfx/src/renderer_gl.cpp53
-rw-r--r--3rdparty/bgfx/src/renderer_gl.h26
-rw-r--r--3rdparty/bgfx/src/renderer_mtl.mm18
-rw-r--r--3rdparty/bgfx/src/renderer_vk.cpp2
-rw-r--r--3rdparty/bgfx/src/shader_dx9bc.cpp98
-rw-r--r--3rdparty/bgfx/src/shader_dx9bc.h18
-rw-r--r--3rdparty/bgfx/src/shader_dxbc.cpp237
-rw-r--r--3rdparty/bgfx/src/shader_dxbc.h20
-rw-r--r--3rdparty/bgfx/src/shader_spirv.cpp1132
-rw-r--r--3rdparty/bgfx/src/shader_spirv.h406
-rw-r--r--3rdparty/bgfx/src/topology.cpp216
-rw-r--r--3rdparty/bgfx/src/topology.h33
-rw-r--r--3rdparty/bgfx/src/vertexdecl.cpp56
-rw-r--r--3rdparty/bgfx/src/vertexdecl.h4
-rw-r--r--3rdparty/bgfx/tools/geometryc/geometryc.cpp32
-rw-r--r--3rdparty/bgfx/tools/shaderc/shaderc.h2
-rw-r--r--3rdparty/bgfx/tools/texturec/texturec.cpp8
-rw-r--r--3rdparty/bx/include/bx/allocator.h68
-rw-r--r--3rdparty/bx/include/bx/config.h14
-rw-r--r--3rdparty/bx/include/bx/crtimpl.h197
-rw-r--r--3rdparty/bx/include/bx/fpumath.h72
-rw-r--r--3rdparty/bx/include/bx/mutex.h4
-rw-r--r--3rdparty/bx/include/bx/os.h11
-rw-r--r--3rdparty/bx/include/bx/platform.h2
-rw-r--r--3rdparty/bx/include/bx/radixsort.h8
-rw-r--r--3rdparty/bx/include/bx/readerwriter.h124
-rw-r--r--3rdparty/bx/include/bx/sem.h14
-rw-r--r--3rdparty/bx/include/bx/thread.h6
-rw-r--r--3rdparty/bx/include/bx/timer.h6
-rw-r--r--3rdparty/bx/include/bx/uint32_t.h2
-rw-r--r--3rdparty/bx/scripts/toolchain.lua37
-rw-r--r--3rdparty/bx/tools/bin/darwin/geniebin422176 -> 422176 bytes
-rw-r--r--3rdparty/bx/tools/bin/linux/geniebin396856 -> 396856 bytes
-rw-r--r--3rdparty/bx/tools/bin/windows/genie.exebin400896 -> 403456 bytes
-rw-r--r--3rdparty/bx/tools/bin2c/bin2c.cpp2
-rw-r--r--3rdparty/compat/mingw/alloca.h6
-rw-r--r--3rdparty/compat/mingw/xaudio2.h6491
-rw-r--r--3rdparty/googletest/.gitignore2
-rw-r--r--3rdparty/googletest/.travis.yml18
-rw-r--r--3rdparty/googletest/CMakeLists.txt16
-rw-r--r--3rdparty/googletest/README.md13
-rw-r--r--3rdparty/googletest/googlemock/CMakeLists.txt16
-rw-r--r--3rdparty/googletest/googlemock/README.md2
-rw-r--r--3rdparty/googletest/googlemock/docs/CheatSheet.md14
-rw-r--r--3rdparty/googletest/googlemock/docs/CookBook.md18
-rw-r--r--3rdparty/googletest/googlemock/docs/DevGuide.md14
-rw-r--r--3rdparty/googletest/googlemock/docs/Documentation.md2
-rw-r--r--3rdparty/googletest/googlemock/docs/ForDummies.md16
-rw-r--r--3rdparty/googletest/googlemock/docs/FrequentlyAskedQuestions.md22
-rw-r--r--3rdparty/googletest/googlemock/docs/v1_5/ForDummies.md2
-rw-r--r--3rdparty/googletest/googlemock/docs/v1_6/ForDummies.md2
-rw-r--r--3rdparty/googletest/googlemock/docs/v1_7/ForDummies.md2
-rw-r--r--3rdparty/googletest/googlemock/include/gmock/gmock-actions.h8
-rw-r--r--3rdparty/googletest/googlemock/make/Makefile2
-rw-r--r--3rdparty/googletest/googlemock/src/gmock-spec-builders.cc4
-rw-r--r--3rdparty/googletest/googlemock/test/gmock-actions_test.cc4
-rw-r--r--3rdparty/googletest/googlemock/test/gmock-matchers_test.cc44
-rw-r--r--3rdparty/googletest/googlemock/test/gmock-spec-builders_test.cc4
-rw-r--r--3rdparty/googletest/googlemock/test/gmock_output_test_golden.txt8
-rw-r--r--3rdparty/googletest/googletest/.gitignore2
-rw-r--r--3rdparty/googletest/googletest/CMakeLists.txt26
-rw-r--r--3rdparty/googletest/googletest/README.md6
-rw-r--r--3rdparty/googletest/googletest/docs/AdvancedGuide.md50
-rw-r--r--3rdparty/googletest/googletest/docs/DevGuide.md37
-rw-r--r--3rdparty/googletest/googletest/docs/FAQ.md108
-rw-r--r--3rdparty/googletest/googletest/docs/Primer.md32
-rw-r--r--3rdparty/googletest/googletest/docs/V1_5_AdvancedGuide.md48
-rw-r--r--3rdparty/googletest/googletest/docs/V1_5_FAQ.md11
-rw-r--r--3rdparty/googletest/googletest/docs/V1_5_Primer.md4
-rw-r--r--3rdparty/googletest/googletest/docs/V1_6_AdvancedGuide.md50
-rw-r--r--3rdparty/googletest/googletest/docs/V1_6_FAQ.md25
-rw-r--r--3rdparty/googletest/googletest/docs/V1_6_Primer.md6
-rw-r--r--3rdparty/googletest/googletest/docs/V1_6_PumpManual.md4
-rw-r--r--3rdparty/googletest/googletest/docs/V1_6_Samples.md22
-rw-r--r--3rdparty/googletest/googletest/docs/V1_7_AdvancedGuide.md50
-rw-r--r--3rdparty/googletest/googletest/docs/V1_7_FAQ.md27
-rw-r--r--3rdparty/googletest/googletest/docs/V1_7_Primer.md6
-rw-r--r--3rdparty/googletest/googletest/docs/V1_7_PumpManual.md4
-rw-r--r--3rdparty/googletest/googletest/docs/V1_7_Samples.md22
-rw-r--r--3rdparty/googletest/googletest/include/gtest/gtest.h204
-rw-r--r--3rdparty/googletest/googletest/include/gtest/internal/gtest-port.h18
-rw-r--r--3rdparty/googletest/googletest/scripts/fuse_gtest_files.py33
-rw-r--r--3rdparty/googletest/googletest/src/gtest-internal-inl.h2
-rw-r--r--3rdparty/googletest/googletest/src/gtest-port.cc18
-rw-r--r--3rdparty/googletest/googletest/src/gtest-printers.cc5
-rw-r--r--3rdparty/googletest/googletest/src/gtest.cc122
-rw-r--r--3rdparty/googletest/googletest/test/gtest-port_test.cc4
-rw-r--r--3rdparty/googletest/googletest/test/gtest_env_var_test.py4
-rw-r--r--3rdparty/googletest/googletest/test/gtest_filter_unittest.py13
-rw-r--r--3rdparty/googletest/googletest/test/gtest_output_test.py2
-rw-r--r--3rdparty/googletest/googletest/test/gtest_output_test_golden_lin.txt114
-rw-r--r--3rdparty/googletest/googletest/test/gtest_test_utils.py2
-rw-r--r--3rdparty/googletest/googletest/test/gtest_throw_on_failure_test.py2
-rw-r--r--3rdparty/googletest/googletest/test/gtest_uninitialized_test.py4
-rw-r--r--3rdparty/googletest/googletest/test/gtest_unittest.cc101
-rw-r--r--3rdparty/googletest/googletest/test/gtest_xml_output_unittest.py21
-rw-r--r--3rdparty/googletest/googletest/test/gtest_xml_test_utils.py2
-rw-r--r--3rdparty/luv/.ci/install.bat270
-rw-r--r--3rdparty/luv/.ci/platform.sh15
-rw-r--r--3rdparty/luv/.ci/set_compiler_env.bat40
-rw-r--r--3rdparty/luv/.ci/setenv_lua.sh3
-rw-r--r--3rdparty/luv/.ci/setup_lua.sh122
-rw-r--r--3rdparty/luv/.ci/winmake.bat457
-rw-r--r--3rdparty/luv/.gitignore10
-rw-r--r--3rdparty/luv/.travis.yml36
-rw-r--r--3rdparty/luv/CMakeLists.txt191
-rw-r--r--3rdparty/luv/LICENSE.txt202
-rw-r--r--3rdparty/luv/Makefile61
-rw-r--r--3rdparty/luv/README.md213
-rw-r--r--3rdparty/luv/appveyor.yml42
-rw-r--r--3rdparty/luv/cmake/Modules/FindLibuv.cmake11
-rw-r--r--3rdparty/luv/cmake/Modules/FindLuaJIT.cmake55
-rw-r--r--3rdparty/luv/deps/lua.cmake128
-rw-r--r--3rdparty/luv/deps/lua_one.c97
-rw-r--r--3rdparty/luv/deps/luajit.cmake407
-rw-r--r--3rdparty/luv/deps/uv.cmake224
-rw-r--r--3rdparty/luv/docs.md1309
-rw-r--r--3rdparty/luv/examples/cqueues-main.lua31
-rw-r--r--3rdparty/luv/examples/cqueues-slave.lua55
-rw-r--r--3rdparty/luv/examples/echo-server-client.lua68
-rw-r--r--3rdparty/luv/examples/killing-children.lua24
-rw-r--r--3rdparty/luv/examples/lots-o-dns.lua49
-rw-r--r--3rdparty/luv/examples/repl.lua89
-rw-r--r--3rdparty/luv/examples/talking-to-children.lua47
-rw-r--r--3rdparty/luv/examples/tcp-cluster.lua84
-rw-r--r--3rdparty/luv/examples/timers.lua68
-rw-r--r--3rdparty/luv/examples/uvbook/helloworld.lua5
-rw-r--r--3rdparty/luv/examples/uvbook/idle-basic.lua14
-rw-r--r--3rdparty/luv/examples/uvbook/onchange.lua30
-rw-r--r--3rdparty/luv/examples/uvbook/queue-work.lua19
-rw-r--r--3rdparty/luv/examples/uvbook/tcp-echo-client.lua21
-rw-r--r--3rdparty/luv/examples/uvbook/tcp-echo-server.lua22
-rw-r--r--3rdparty/luv/examples/uvbook/thread-create.lua38
-rw-r--r--3rdparty/luv/examples/uvbook/uvcat.lua37
-rw-r--r--3rdparty/luv/examples/uvbook/uvtee.lua35
-rw-r--r--3rdparty/luv/lib/tap.lua165
-rw-r--r--3rdparty/luv/lib/utils.lua165
-rw-r--r--3rdparty/luv/luv-1.8.0-4.rockspec34
-rw-r--r--3rdparty/luv/msvcbuild.bat13
-rw-r--r--3rdparty/luv/src/async.c63
-rw-r--r--3rdparty/luv/src/check.c59
-rw-r--r--3rdparty/luv/src/constants.c649
-rw-r--r--3rdparty/luv/src/dns.c296
-rw-r--r--3rdparty/luv/src/fs.c614
-rw-r--r--3rdparty/luv/src/fs_event.c97
-rw-r--r--3rdparty/luv/src/fs_poll.c90
-rw-r--r--3rdparty/luv/src/handle.c173
-rw-r--r--3rdparty/luv/src/idle.c59
-rw-r--r--3rdparty/luv/src/lhandle.c116
-rw-r--r--3rdparty/luv/src/lhandle.h67
-rw-r--r--3rdparty/luv/src/loop.c92
-rw-r--r--3rdparty/luv/src/lreq.c71
-rw-r--r--3rdparty/luv/src/lreq.h43
-rw-r--r--3rdparty/luv/src/lthreadpool.h48
-rw-r--r--3rdparty/luv/src/luv.c519
-rw-r--r--3rdparty/luv/src/luv.h109
-rw-r--r--3rdparty/luv/src/misc.c316
-rw-r--r--3rdparty/luv/src/pipe.c114
-rw-r--r--3rdparty/luv/src/poll.c100
-rw-r--r--3rdparty/luv/src/prepare.c59
-rw-r--r--3rdparty/luv/src/process.c266
-rw-r--r--3rdparty/luv/src/req.c52
-rw-r--r--3rdparty/luv/src/schema.c16
-rw-r--r--3rdparty/luv/src/signal.c72
-rw-r--r--3rdparty/luv/src/stream.c263
-rw-r--r--3rdparty/luv/src/tcp.c182
-rw-r--r--3rdparty/luv/src/thread.c353
-rw-r--r--3rdparty/luv/src/timer.c84
-rw-r--r--3rdparty/luv/src/tty.c65
-rw-r--r--3rdparty/luv/src/udp.c260
-rw-r--r--3rdparty/luv/src/util.c56
-rw-r--r--3rdparty/luv/src/util.h26
-rw-r--r--3rdparty/luv/src/work.c224
-rw-r--r--3rdparty/luv/tests/manual-test-cluster.lua213
-rw-r--r--3rdparty/luv/tests/run.lua33
-rw-r--r--3rdparty/luv/tests/test-async.lua32
-rw-r--r--3rdparty/luv/tests/test-conversions.lua6
-rw-r--r--3rdparty/luv/tests/test-dns.lua125
-rw-r--r--3rdparty/luv/tests/test-fs.lua90
-rw-r--r--3rdparty/luv/tests/test-leaks.lua186
-rw-r--r--3rdparty/luv/tests/test-misc.lua85
-rw-r--r--3rdparty/luv/tests/test-prepare-check-idle-async.lua49
-rw-r--r--3rdparty/luv/tests/test-process.lua101
-rw-r--r--3rdparty/luv/tests/test-sigchld-after-lua_close.sh45
-rw-r--r--3rdparty/luv/tests/test-signal.lua40
-rw-r--r--3rdparty/luv/tests/test-tcp.lua114
-rw-r--r--3rdparty/luv/tests/test-thread.lua47
-rw-r--r--3rdparty/luv/tests/test-timer.lua87
-rw-r--r--3rdparty/luv/tests/test-work.lua48
-rw-r--r--3rdparty/rapidjson/.gitattributes22
-rw-r--r--3rdparty/rapidjson/.travis.yml199
-rw-r--r--3rdparty/rapidjson/CMakeLists.txt9
-rw-r--r--3rdparty/rapidjson/appveyor.yml21
-rw-r--r--3rdparty/rapidjson/bin/data/glossary.json42
-rw-r--r--3rdparty/rapidjson/bin/data/menu.json52
-rw-r--r--3rdparty/rapidjson/bin/data/sample.json6628
-rw-r--r--3rdparty/rapidjson/bin/data/webapp.json174
-rw-r--r--3rdparty/rapidjson/bin/data/widget.json50
-rw-r--r--3rdparty/rapidjson/bin/encodings/utf8.json12
-rw-r--r--3rdparty/rapidjson/bin/encodings/utf8bom.json12
-rw-r--r--3rdparty/rapidjson/bin/jsonchecker/fail27.json2
-rw-r--r--3rdparty/rapidjson/bin/jsonchecker/fail28.json2
-rw-r--r--3rdparty/rapidjson/bin/jsonchecker/pass1.json114
-rw-r--r--3rdparty/rapidjson/bin/jsonchecker/pass3.json12
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/remotes/folder/folderInteger.json4
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/remotes/integer.json4
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/remotes/subSchemas.json14
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/additionalItems.json164
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/additionalProperties.json176
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/default.json98
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/dependencies.json216
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/disallow.json160
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/divisibleBy.json120
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/enum.json142
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/extends.json188
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/items.json92
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/maxItems.json56
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/maxLength.json66
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/maximum.json84
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/minItems.json56
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/minLength.json66
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/minimum.json84
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/bignum.json214
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/format.json444
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/jsregex.json36
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/zeroTerminatedFloats.json30
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/pattern.json68
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/patternProperties.json220
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/properties.json184
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/ref.json318
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/refRemote.json148
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/required.json106
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/type.json948
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft3/uniqueItems.json158
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/additionalItems.json164
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/additionalProperties.json176
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/allOf.json224
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/anyOf.json136
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/default.json98
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/definitions.json64
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/dependencies.json226
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/enum.json144
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/items.json92
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxItems.json56
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxLength.json66
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxProperties.json56
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/maximum.json84
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/minItems.json56
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/minLength.json66
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/minProperties.json56
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/minimum.json84
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/multipleOf.json120
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/not.json192
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/oneOf.json136
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/bignum.json214
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/format.json296
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/zeroTerminatedFloats.json30
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/pattern.json68
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/patternProperties.json220
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/properties.json184
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/ref.json318
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/refRemote.json148
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/required.json78
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/type.json660
-rw-r--r--3rdparty/rapidjson/bin/jsonschema/tests/draft4/uniqueItems.json158
-rw-r--r--3rdparty/rapidjson/bin/types/booleans.json202
-rw-r--r--3rdparty/rapidjson/bin/types/floats.json204
-rw-r--r--3rdparty/rapidjson/bin/types/guids.json202
-rw-r--r--3rdparty/rapidjson/bin/types/integers.json202
-rw-r--r--3rdparty/rapidjson/bin/types/mixed.json1182
-rw-r--r--3rdparty/rapidjson/bin/types/nulls.json202
-rw-r--r--3rdparty/rapidjson/bin/types/paragraphs.json202
-rw-r--r--3rdparty/rapidjson/doc/schema.md14
-rw-r--r--3rdparty/rapidjson/docker/debian/Dockerfile8
-rw-r--r--3rdparty/rapidjson/example/CMakeLists.txt10
-rw-r--r--3rdparty/rapidjson/example/capitalize/capitalize.cpp3
-rw-r--r--3rdparty/rapidjson/example/jsonx/jsonx.cpp7
-rw-r--r--3rdparty/rapidjson/example/parsebyparts/parsebyparts.cpp172
-rw-r--r--3rdparty/rapidjson/example/simplereader/simplereader.cpp4
-rw-r--r--3rdparty/rapidjson/example/simplewriter/simplewriter.cpp23
-rw-r--r--3rdparty/rapidjson/include/rapidjson/document.h665
-rw-r--r--3rdparty/rapidjson/include/rapidjson/encodedstream.h25
-rw-r--r--3rdparty/rapidjson/include/rapidjson/internal/dtoa.h7
-rw-r--r--3rdparty/rapidjson/include/rapidjson/istreamwrapper.h7
-rw-r--r--3rdparty/rapidjson/include/rapidjson/memorystream.h4
-rw-r--r--3rdparty/rapidjson/include/rapidjson/prettywriter.h6
-rw-r--r--3rdparty/rapidjson/include/rapidjson/rapidjson.h50
-rw-r--r--3rdparty/rapidjson/include/rapidjson/reader.h170
-rw-r--r--3rdparty/rapidjson/include/rapidjson/schema.h30
-rw-r--r--3rdparty/rapidjson/include/rapidjson/writer.h16
-rw-r--r--3rdparty/rapidjson/library.json24
-rw-r--r--3rdparty/rapidjson/test/perftest/CMakeLists.txt9
-rw-r--r--3rdparty/rapidjson/test/perftest/perftest.h2
-rw-r--r--3rdparty/rapidjson/test/perftest/rapidjsontest.cpp19
-rw-r--r--3rdparty/rapidjson/test/unittest/CMakeLists.txt9
-rw-r--r--3rdparty/rapidjson/test/unittest/documenttest.cpp63
-rw-r--r--3rdparty/rapidjson/test/unittest/dtoatest.cpp6
-rw-r--r--3rdparty/rapidjson/test/unittest/readertest.cpp72
-rw-r--r--3rdparty/rapidjson/test/unittest/schematest.cpp18
-rw-r--r--3rdparty/rapidjson/test/unittest/simdtest.cpp22
-rw-r--r--3rdparty/rapidjson/test/unittest/valuetest.cpp370
-rw-r--r--3rdparty/win81sdk/Include/um/xaudio2.h1196
-rw-r--r--LICENSE.md365
-rw-r--r--README.md70
-rw-r--r--artwork/LICENSE116
-rw-r--r--artwork/README.md5
-rw-r--r--benchmarks/LICENSE27
-rw-r--r--benchmarks/README.md5
-rw-r--r--benchmarks/eminline_native.cpp4
-rw-r--r--benchmarks/eminline_noasm.cpp3
-rw-r--r--benchmarks/main.cpp3
-rw-r--r--bgfx/LICENSE27
-rw-r--r--bgfx/README.md5
-rw-r--r--docs/LICENSE116
-rw-r--r--docs/README.md5
-rw-r--r--docs/mame.txt82
-rw-r--r--docs/mamelicense.txt40
-rw-r--r--doxygen/LICENSE116
-rw-r--r--hash/LICENSE116
-rw-r--r--hash/README.md6
-rw-r--r--hash/ibm5170.xml20
-rw-r--r--hash/tutor.xml12
-rw-r--r--keymaps/LICENSE116
-rw-r--r--keymaps/README.md6
-rw-r--r--language/Afrikaans/strings.po269
-rw-r--r--language/Albanian/strings.po269
-rw-r--r--language/Arabic/strings.po269
-rw-r--r--language/Basque/strings.po269
-rw-r--r--language/Belarusian/strings.po269
-rw-r--r--language/Bosnian/strings.po269
-rw-r--r--language/Bulgarian/strings.po269
-rw-r--r--language/Burmese/strings.po269
-rw-r--r--language/Catalan/strings.po269
-rw-r--r--language/Chinese_Simplified/strings.po304
-rw-r--r--language/Chinese_Traditional/strings.po301
-rw-r--r--language/Croatian/strings.po269
-rw-r--r--language/Czech/strings.po269
-rw-r--r--language/Danish/strings.po269
-rw-r--r--language/Dutch/strings.po948
-rw-r--r--language/English/strings.po269
-rw-r--r--language/Estonian/strings.po269
-rw-r--r--language/Finnish/strings.po269
-rw-r--r--language/French/strings.po506
-rw-r--r--language/French_Belgium/strings.po500
-rw-r--r--language/French_Canada/strings.po269
-rw-r--r--language/Georgian/strings.po269
-rw-r--r--language/German/strings.po458
-rw-r--r--language/Greek/strings.po485
-rw-r--r--language/Hebrew/strings.po269
-rw-r--r--language/Hindi/strings.po269
-rw-r--r--language/Hungarian/strings.po269
-rw-r--r--language/Indonesian/strings.po269
-rw-r--r--language/Italian/strings.po313
-rw-r--r--language/Japanese/strings.po379
-rw-r--r--language/Korean/strings.po269
-rw-r--r--language/LICENSE116
-rw-r--r--language/Latvian/strings.po269
-rw-r--r--language/Lithuanian/strings.po269
-rw-r--r--language/Macedonian/strings.po269
-rw-r--r--language/Norwegian/strings.po269
-rw-r--r--language/Persian/strings.po269
-rw-r--r--language/Polish/strings.po269
-rw-r--r--language/Portuguese/strings.po269
-rw-r--r--language/Portuguese_Brazil/strings.po677
-rw-r--r--language/README.md5
-rw-r--r--language/Romanian/strings.po269
-rw-r--r--language/Russian/strings.po311
-rw-r--r--language/Serbian/strings.po1033
-rw-r--r--language/Serbian_Cyrillic/strings.po1028
-rw-r--r--language/Slovak/strings.po269
-rw-r--r--language/Slovenian/strings.po269
-rw-r--r--language/Spanish/strings.po1132
-rw-r--r--language/Spanish_Mexico/strings.po269
-rw-r--r--language/Swedish/strings.po269
-rw-r--r--language/Thai/strings.po269
-rw-r--r--language/Turkish/strings.po269
-rw-r--r--language/Ukrainian/strings.po269
-rw-r--r--language/Vietnamese/strings.po269
-rw-r--r--makefile34
-rw-r--r--nl_examples/7400_astable.c2
-rw-r--r--nl_examples/74123_mstable.c2
-rw-r--r--nl_examples/9602_mstable.c2
-rw-r--r--nl_examples/bjt.c2
-rw-r--r--nl_examples/bjt_eb.c2
-rw-r--r--nl_examples/bjt_eb_pnp.c2
-rw-r--r--nl_examples/breakout.c3
-rw-r--r--nl_examples/cd4066.c2
-rw-r--r--nl_examples/cdelay.c2
-rw-r--r--nl_examples/congo_bongo.c3
-rw-r--r--nl_examples/kidniki.c3
-rw-r--r--nl_examples/mm5837_noise.c2
-rw-r--r--nl_examples/msx_mixer_stage.c2
-rw-r--r--nl_examples/ne555_astable.c2
-rw-r--r--nl_examples/opamp.c2
-rw-r--r--nl_examples/sn74ls629_osc.c2
-rw-r--r--nl_examples/test.c2
-rw-r--r--nl_examples/todo.c2
-rw-r--r--nl_examples/vccs.c2
-rw-r--r--nl_examples/vccs1.c2
-rw-r--r--nl_examples/vs_cs.c2
-rw-r--r--plugins/README.md3
-rw-r--r--plugins/boot.lua5
-rw-r--r--plugins/coro-channel/LICENSE22
-rw-r--r--plugins/coro-channel/README.md2
-rw-r--r--plugins/coro-channel/init.lua128
-rw-r--r--plugins/coro-channel/plugin.json8
-rw-r--r--plugins/coro-fs/LICENSE22
-rw-r--r--plugins/coro-fs/README.md2
-rw-r--r--plugins/coro-fs/init.lua222
-rw-r--r--plugins/coro-fs/plugin.json8
-rw-r--r--plugins/coro-http/LICENSE22
-rw-r--r--plugins/coro-http/README.md2
-rw-r--r--plugins/coro-http/init.lua187
-rw-r--r--plugins/coro-http/plugin.json8
-rw-r--r--plugins/coro-net/LICENSE22
-rw-r--r--plugins/coro-net/README.md2
-rw-r--r--plugins/coro-net/init.lua113
-rw-r--r--plugins/coro-net/plugin.json8
-rw-r--r--plugins/coro-tls/LICENSE22
-rw-r--r--plugins/coro-tls/README.md2
-rw-r--r--plugins/coro-tls/init.lua122
-rw-r--r--plugins/coro-tls/plugin.json8
-rw-r--r--plugins/coro-wrapper/LICENSE22
-rw-r--r--plugins/coro-wrapper/README.md2
-rw-r--r--plugins/coro-wrapper/init.lua41
-rw-r--r--plugins/coro-wrapper/plugin.json8
-rw-r--r--plugins/dummy/init.lua4
-rw-r--r--plugins/http-codec/LICENSE202
-rw-r--r--plugins/http-codec/README.md2
-rw-r--r--plugins/http-codec/init.lua291
-rw-r--r--plugins/http-codec/plugin.json8
-rw-r--r--plugins/json/init.lua3
-rw-r--r--plugins/mime/LICENSE22
-rw-r--r--plugins/mime/README.md2
-rw-r--r--plugins/mime/init.lua194
-rw-r--r--plugins/mime/plugin.json8
-rw-r--r--plugins/path/LICENSE202
-rw-r--r--plugins/path/README.md2
-rw-r--r--plugins/path/init.lua139
-rw-r--r--plugins/path/plugin.json8
-rw-r--r--plugins/pretty-print/LICENSE202
-rw-r--r--plugins/pretty-print/README.md2
-rw-r--r--plugins/pretty-print/init.lua362
-rw-r--r--plugins/pretty-print/plugin.json8
-rw-r--r--plugins/querystring/LICENSE202
-rw-r--r--plugins/querystring/README.md2
-rw-r--r--plugins/querystring/init.lua105
-rw-r--r--plugins/querystring/plugin.json8
-rw-r--r--plugins/weblit/LICENSE22
-rw-r--r--plugins/weblit/README.md239
-rw-r--r--plugins/weblit/app.lua261
-rw-r--r--plugins/weblit/auto-headers.lua92
-rw-r--r--plugins/weblit/etag-cache.lua39
-rw-r--r--plugins/weblit/init.lua8
-rw-r--r--plugins/weblit/logger.lua10
-rw-r--r--plugins/weblit/plugin.json8
-rw-r--r--plugins/weblit/static.lua62
-rw-r--r--plugins/weblit/websocket.lua82
-rw-r--r--plugins/webserver/init.lua34
-rw-r--r--plugins/webserver/plugin.json9
-rw-r--r--plugins/websocket-codec/LICENSE22
-rw-r--r--plugins/websocket-codec/README.md2
-rw-r--r--plugins/websocket-codec/init.lua261
-rw-r--r--plugins/websocket-codec/plugin.json8
-rw-r--r--regtests/LICENSE27
-rw-r--r--regtests/README.md5
-rw-r--r--samples/LICENSE116
-rw-r--r--samples/README.md5
-rw-r--r--scripts/build/makelist.py19
-rw-r--r--scripts/genie.lua13
-rw-r--r--scripts/src/3rdparty.lua63
-rw-r--r--scripts/src/devices.lua37
-rw-r--r--scripts/src/emu.lua13
-rw-r--r--scripts/src/machine.lua12
-rw-r--r--scripts/src/main.lua6
-rw-r--r--scripts/src/osd/modules.lua24
-rw-r--r--scripts/src/osd/osdmini.lua1
-rw-r--r--scripts/src/osd/windows.lua2
-rw-r--r--scripts/src/tests.lua5
-rw-r--r--scripts/src/tools.lua16
-rw-r--r--scripts/target/mame/arcade.lua14
-rw-r--r--scripts/target/mame/mess.lua12
-rw-r--r--scripts/toolchain.lua26
-rw-r--r--shaders/README.md3
-rw-r--r--src/devices/bus/a7800/a78_slot.cpp4
-rw-r--r--src/devices/bus/a800/a800_slot.cpp12
-rw-r--r--src/devices/bus/apf/slot.cpp2
-rw-r--r--src/devices/bus/astrocde/slot.cpp2
-rw-r--r--src/devices/bus/c64/exp.cpp6
-rw-r--r--src/devices/bus/c64/xl80.cpp4
-rw-r--r--src/devices/bus/cbm2/hrg.cpp8
-rw-r--r--src/devices/bus/chanf/slot.cpp2
-rw-r--r--src/devices/bus/coleco/exp.cpp2
-rw-r--r--src/devices/bus/comx35/clm.cpp4
-rw-r--r--src/devices/bus/crvision/slot.cpp2
-rw-r--r--src/devices/bus/ecbbus/grip.cpp4
-rw-r--r--src/devices/bus/gameboy/gb_slot.cpp4
-rw-r--r--src/devices/bus/gba/gba_slot.cpp4
-rw-r--r--src/devices/bus/intv/slot.cpp4
-rw-r--r--src/devices/bus/isa/isa_cards.cpp2
-rw-r--r--src/devices/bus/isa/omti8621.cpp2
-rw-r--r--src/devices/bus/isa/sc499.cpp2
-rw-r--r--src/devices/bus/megadrive/md_slot.cpp4
-rw-r--r--src/devices/bus/msx_slot/cartridge.cpp4
-rw-r--r--src/devices/bus/nes/aladdin.cpp4
-rw-r--r--src/devices/bus/nes/nes_slot.cpp4
-rw-r--r--src/devices/bus/odyssey2/slot.cpp2
-rw-r--r--src/devices/bus/pce/pce_slot.cpp4
-rw-r--r--src/devices/bus/pet/hsg.cpp8
-rw-r--r--src/devices/bus/scv/slot.cpp4
-rw-r--r--src/devices/bus/sega8/sega8_slot.cpp4
-rw-r--r--src/devices/bus/snes/snes_slot.cpp4
-rw-r--r--src/devices/bus/vc4000/slot.cpp2
-rw-r--r--[-rwxr-xr-x]src/devices/bus/vcs/vcs_slot.cpp4
-rw-r--r--src/devices/bus/vectrex/slot.cpp4
-rw-r--r--src/devices/bus/vic10/exp.cpp6
-rw-r--r--src/devices/bus/wangpc/tig.cpp4
-rw-r--r--src/devices/bus/wswan/slot.cpp4
-rw-r--r--src/devices/cpu/arcompact/arcompact_make.py3
-rw-r--r--src/devices/cpu/es5510/es5510.cpp22
-rw-r--r--src/devices/cpu/h8/h8.lst2
-rw-r--r--src/devices/cpu/h8/h8make.py3
-rw-r--r--src/devices/cpu/m6502/ddeco16.lst2
-rw-r--r--src/devices/cpu/m6502/dm4510.lst2
-rw-r--r--src/devices/cpu/m6502/dm6502.lst2
-rw-r--r--src/devices/cpu/m6502/dm6509.lst2
-rw-r--r--src/devices/cpu/m6502/dm6510.lst2
-rw-r--r--src/devices/cpu/m6502/dm65c02.lst2
-rw-r--r--src/devices/cpu/m6502/dm65ce02.lst2
-rw-r--r--src/devices/cpu/m6502/dm740.lst2
-rw-r--r--src/devices/cpu/m6502/dn2a03.lst2
-rw-r--r--src/devices/cpu/m6502/dr65c02.lst2
-rwxr-xr-xsrc/devices/cpu/m6502/m6502make.py2
-rw-r--r--src/devices/cpu/m6502/odeco16.lst2
-rw-r--r--src/devices/cpu/m6502/om4510.lst2
-rw-r--r--src/devices/cpu/m6502/om6502.lst2
-rw-r--r--src/devices/cpu/m6502/om6509.lst2
-rw-r--r--src/devices/cpu/m6502/om6510.lst2
-rw-r--r--src/devices/cpu/m6502/om65c02.lst2
-rw-r--r--src/devices/cpu/m6502/om65ce02.lst2
-rw-r--r--src/devices/cpu/m6502/om740.lst2
-rw-r--r--src/devices/cpu/m6502/on2a03.lst2
-rw-r--r--src/devices/cpu/m6800/6800ops.inc3
-rw-r--r--src/devices/cpu/m6800/6800tbl.inc3
-rw-r--r--src/devices/cpu/m68000/m68000.h3
-rw-r--r--src/devices/cpu/m68000/m68kcpu.cpp22
-rw-r--r--src/devices/cpu/m6805/6805ops.inc3
-rw-r--r--src/devices/cpu/m6809/base6x09.ops2
-rw-r--r--src/devices/cpu/m6809/hd6309.ops2
-rw-r--r--src/devices/cpu/m6809/konami.ops2
-rw-r--r--src/devices/cpu/m6809/m6809.ops2
-rw-r--r--src/devices/cpu/m6809/m6809make.py2
-rw-r--r--src/devices/cpu/mcs51/mcs51ops.inc2
-rw-r--r--src/devices/cpu/mcs96/mcs96make.py2
-rw-r--r--src/devices/cpu/mcs96/mcs96ops.lst2
-rw-r--r--src/devices/cpu/powerpc/ppcdrc.cpp14
-rw-r--r--src/devices/cpu/sh4/sh4dmac.h2
-rw-r--r--src/devices/cpu/tms0980/tms0980.cpp3
-rw-r--r--src/devices/cpu/tms0980/tms0980d.cpp72
-rwxr-xr-xsrc/devices/cpu/tms57002/tmsmake.py2
-rw-r--r--src/devices/imagedev/chd_cd.cpp2
-rw-r--r--src/devices/imagedev/diablo.cpp6
-rw-r--r--src/devices/imagedev/floppy.cpp33
-rw-r--r--src/devices/imagedev/harddriv.cpp6
-rw-r--r--src/devices/machine/68307tmu.cpp15
-rw-r--r--src/devices/machine/68307tmu.h4
-rw-r--r--src/devices/machine/74123.cpp4
-rw-r--r--src/devices/machine/8042kbdc.cpp10
-rw-r--r--src/devices/machine/bcreader.cpp1
-rw-r--r--src/devices/machine/f3853.cpp10
-rw-r--r--src/devices/machine/f3853.h5
-rw-r--r--src/devices/machine/genpc.cpp (renamed from src/mame/machine/genpc.cpp)87
-rw-r--r--src/devices/machine/genpc.h (renamed from src/mame/includes/genpc.h)39
-rw-r--r--src/devices/machine/k056230.cpp9
-rw-r--r--src/devices/machine/k056230.h3
-rw-r--r--src/devices/machine/nvram.cpp2
-rw-r--r--src/devices/machine/ram.cpp2
-rw-r--r--src/devices/machine/ram.h2
-rw-r--r--src/devices/machine/rtc65271.cpp32
-rw-r--r--src/devices/machine/rtc65271.h10
-rw-r--r--src/devices/machine/rtc9701.cpp9
-rw-r--r--src/devices/machine/rtc9701.h4
-rw-r--r--src/devices/machine/s3520cf.cpp8
-rw-r--r--src/devices/machine/s3520cf.h4
-rw-r--r--src/devices/machine/s3c24xx.inc2
-rw-r--r--src/devices/machine/serflash.cpp2
-rw-r--r--src/devices/machine/terminal.cpp4
-rw-r--r--src/devices/machine/v3021.cpp9
-rw-r--r--src/devices/machine/v3021.h4
-rw-r--r--src/devices/machine/wd_fdc.cpp161
-rw-r--r--src/devices/machine/wd_fdc.h4
-rw-r--r--src/devices/machine/z80ctc.cpp6
-rw-r--r--src/devices/machine/z80ctc.h5
-rw-r--r--src/devices/machine/z80dma.cpp10
-rw-r--r--src/devices/machine/z80dma.h6
-rw-r--r--src/devices/sound/315-5641.cpp2
-rw-r--r--src/devices/sound/315-5641.h2
-rw-r--r--src/devices/sound/disc_sys.inc2
-rw-r--r--src/devices/sound/discrete.cpp17
-rw-r--r--src/devices/sound/esqpump.cpp10
-rw-r--r--src/devices/sound/samples.cpp2
-rw-r--r--src/devices/video/315_5313.cpp32
-rw-r--r--src/devices/video/315_5313.h6
-rw-r--r--src/devices/video/epic12in.inc2
-rw-r--r--src/devices/video/epic12pixel.inc2
-rw-r--r--src/devices/video/voodoo_rast.inc3
-rw-r--r--src/emu/cheat.cpp3
-rw-r--r--src/emu/cheat.h2
-rw-r--r--src/emu/clifront.cpp2
-rw-r--r--src/emu/diexec.cpp29
-rw-r--r--src/emu/diexec.h13
-rw-r--r--src/emu/diimage.cpp31
-rw-r--r--src/emu/diimage.h23
-rw-r--r--src/emu/drawgfx.cpp27
-rw-r--r--src/emu/drivers/xtal.h2
-rw-r--r--src/emu/emu.h1
-rw-r--r--src/emu/emuopts.cpp14
-rw-r--r--src/emu/emuopts.h3
-rw-r--r--src/emu/emupal.cpp65
-rw-r--r--src/emu/emupal.h38
-rw-r--r--src/emu/fileio.cpp97
-rw-r--r--src/emu/fileio.h18
-rw-r--r--src/emu/ioport.cpp60
-rw-r--r--src/emu/ioport.h164
-rw-r--r--src/emu/layout/LICENSE116
-rw-r--r--src/emu/layout/README.md6
-rw-r--r--src/emu/luaengine.cpp26
-rw-r--r--src/emu/machine.cpp1
-rw-r--r--src/emu/mame.cpp2
-rw-r--r--src/emu/schedule.h2
-rw-r--r--src/emu/screen.cpp13
-rw-r--r--src/emu/screen.h9
-rw-r--r--src/emu/tilemap.cpp46
-rw-r--r--src/emu/tilemap.h16
-rw-r--r--src/emu/ui/custui.cpp10
-rw-r--r--src/emu/ui/datfile.h5
-rw-r--r--src/emu/ui/datmenu.cpp14
-rw-r--r--src/emu/ui/dirmenu.cpp12
-rw-r--r--src/emu/ui/filesel.cpp4
-rw-r--r--src/emu/ui/mainmenu.cpp2
-rw-r--r--src/emu/ui/menu.cpp25
-rw-r--r--src/emu/ui/menu.h9
-rw-r--r--src/emu/ui/miscmenu.cpp8
-rw-r--r--src/emu/ui/optsmenu.cpp16
-rw-r--r--src/emu/ui/selector.cpp2
-rw-r--r--src/emu/ui/selgame.cpp88
-rw-r--r--src/emu/ui/selsoft.cpp18
-rw-r--r--src/emu/ui/ui.cpp4
-rw-r--r--src/emu/uismall.pngbin0 -> 1488 bytes
-rw-r--r--src/emu/validity.cpp24
-rw-r--r--src/ldplayer/layout/LICENSE116
-rw-r--r--src/ldplayer/layout/README.md6
-rw-r--r--src/lib/formats/atom_dsk.cpp2
-rw-r--r--src/lib/formats/atom_dsk.h2
-rw-r--r--src/lib/formats/cbm_crt.cpp28
-rw-r--r--src/lib/formats/cbm_crt.h6
-rw-r--r--src/lib/formats/ioprocs.cpp21
-rw-r--r--src/lib/netlist/macro/nlm_cd4xxx.cpp3
-rw-r--r--src/lib/netlist/macro/nlm_cd4xxx.h2
-rw-r--r--src/lib/netlist/macro/nlm_opamp.cpp3
-rw-r--r--src/lib/netlist/macro/nlm_opamp.h2
-rw-r--r--src/lib/netlist/macro/nlm_other.cpp3
-rw-r--r--src/lib/netlist/macro/nlm_other.h2
-rw-r--r--src/lib/netlist/macro/nlm_ttl74xx.cpp3
-rw-r--r--src/lib/netlist/macro/nlm_ttl74xx.h2
-rw-r--r--src/lib/netlist/prg/nlwav.cpp2
-rw-r--r--src/lib/util/cdrom.cpp12
-rw-r--r--src/lib/util/chd.cpp68
-rw-r--r--src/lib/util/chd.h10
-rw-r--r--src/lib/util/corefile.cpp1642
-rw-r--r--src/lib/util/corefile.h127
-rw-r--r--src/lib/util/flac.cpp14
-rw-r--r--src/lib/util/flac.h12
-rw-r--r--src/lib/util/options.cpp4
-rw-r--r--src/lib/util/options.h2
-rw-r--r--src/lib/util/palette.cpp8
-rw-r--r--src/lib/util/palette.h2
-rw-r--r--src/lib/util/png.cpp62
-rw-r--r--src/lib/util/png.h12
-rw-r--r--src/lib/util/strformat.h178
-rw-r--r--src/lib/util/vecstream.h27
-rw-r--r--src/lib/util/xmlfile.cpp30
-rw-r--r--src/lib/util/xmlfile.h4
-rw-r--r--src/lib/util/zippath.cpp12
-rw-r--r--src/lib/util/zippath.h2
-rw-r--r--src/mame/audio/atarijsa.cpp4
-rw-r--r--src/mame/audio/cyberbal.cpp5
-rw-r--r--src/mame/audio/flower.cpp337
-rw-r--r--src/mame/audio/nl_kidniki.inc3
-rw-r--r--src/mame/audio/segam1audio.cpp5
-rw-r--r--src/mame/audio/segam1audio.h2
-rw-r--r--src/mame/audio/taito_en.cpp47
-rw-r--r--src/mame/audio/taito_en.h6
-rw-r--r--src/mame/drivers/8080bw.cpp4
-rw-r--r--src/mame/drivers/a51xx.cpp2
-rw-r--r--src/mame/drivers/a7150.cpp2
-rw-r--r--src/mame/drivers/ac1.cpp2
-rw-r--r--src/mame/drivers/ace.cpp2
-rw-r--r--src/mame/drivers/aerofgt.cpp21
-rw-r--r--src/mame/drivers/alesis.cpp2
-rw-r--r--src/mame/drivers/alto2.cpp4
-rw-r--r--src/mame/drivers/amstr_pc.cpp127
-rw-r--r--src/mame/drivers/amust.cpp4
-rw-r--r--src/mame/drivers/apple1.cpp2
-rw-r--r--src/mame/drivers/apricot.cpp4
-rw-r--r--src/mame/drivers/argo.cpp2
-rw-r--r--src/mame/drivers/argox.cpp2
-rw-r--r--src/mame/drivers/asst128.cpp61
-rw-r--r--src/mame/drivers/at.cpp2
-rw-r--r--src/mame/drivers/atarig1.cpp55
-rw-r--r--src/mame/drivers/atarig42.cpp15
-rw-r--r--src/mame/drivers/atarigx2.cpp70
-rw-r--r--src/mame/drivers/atarist.cpp2
-rw-r--r--src/mame/drivers/attache.cpp4
-rw-r--r--src/mame/drivers/aussiebyte.cpp2
-rw-r--r--src/mame/drivers/ax20.cpp3
-rw-r--r--src/mame/drivers/badlands.cpp17
-rw-r--r--src/mame/drivers/batman.cpp5
-rw-r--r--src/mame/drivers/bcs3.cpp4
-rw-r--r--src/mame/drivers/beathead.cpp5
-rw-r--r--src/mame/drivers/beehive.cpp4
-rw-r--r--src/mame/drivers/bfm_sc4.cpp21
-rw-r--r--src/mame/drivers/bigbord2.cpp2
-rw-r--r--src/mame/drivers/binbug.cpp8
-rw-r--r--src/mame/drivers/bitgraph.cpp2
-rw-r--r--src/mame/drivers/bk.cpp2
-rw-r--r--src/mame/drivers/bking.cpp4
-rw-r--r--src/mame/drivers/blockade.cpp2
-rw-r--r--src/mame/drivers/blstroid.cpp25
-rw-r--r--src/mame/drivers/bw12.cpp4
-rw-r--r--src/mame/drivers/c10.cpp2
-rw-r--r--src/mame/drivers/c900.cpp2
-rw-r--r--src/mame/drivers/canon_s80.cpp2
-rw-r--r--src/mame/drivers/carjmbre.cpp399
-rw-r--r--src/mame/drivers/cat.cpp2
-rw-r--r--src/mame/drivers/cbm2.cpp4
-rw-r--r--src/mame/drivers/cd2650.cpp2
-rw-r--r--src/mame/drivers/chihiro.cpp48
-rw-r--r--src/mame/drivers/circus.cpp8
-rw-r--r--src/mame/drivers/compis.cpp4
-rw-r--r--src/mame/drivers/comquest.cpp2
-rw-r--r--src/mame/drivers/concept.cpp2
-rw-r--r--src/mame/drivers/copsnrob.cpp2
-rw-r--r--src/mame/drivers/cxhumax.cpp2
-rw-r--r--src/mame/drivers/cyberbal.cpp56
-rw-r--r--src/mame/drivers/d6800.cpp2
-rw-r--r--src/mame/drivers/dai3wksi.cpp2
-rw-r--r--src/mame/drivers/dct11em.cpp2
-rw-r--r--src/mame/drivers/dim68k.cpp2
-rw-r--r--src/mame/drivers/dms5000.cpp2
-rw-r--r--src/mame/drivers/dmv.cpp4
-rw-r--r--src/mame/drivers/dvk_kcgd.cpp2
-rw-r--r--src/mame/drivers/dvk_ksm.cpp4
-rw-r--r--src/mame/drivers/ec184x.cpp148
-rw-r--r--src/mame/drivers/ec65.cpp4
-rw-r--r--src/mame/drivers/eprom.cpp25
-rw-r--r--src/mame/drivers/esq5505.cpp8
-rw-r--r--src/mame/drivers/europc.cpp29
-rw-r--r--src/mame/drivers/fastinvaders.cpp2
-rw-r--r--src/mame/drivers/fc100.cpp3
-rw-r--r--src/mame/drivers/fidel6502.cpp38
-rw-r--r--src/mame/drivers/fidel68k.cpp20
-rw-r--r--src/mame/drivers/fidelz80.cpp40
-rw-r--r--src/mame/drivers/fk1.cpp4
-rw-r--r--src/mame/drivers/flower.cpp218
-rw-r--r--src/mame/drivers/galastrm.cpp6
-rw-r--r--src/mame/drivers/galaxy.cpp4
-rw-r--r--src/mame/drivers/galeb.cpp2
-rw-r--r--src/mame/drivers/galgame.cpp2
-rw-r--r--src/mame/drivers/gamepock.cpp2
-rw-r--r--src/mame/drivers/genpc.cpp190
-rw-r--r--src/mame/drivers/glasgow.cpp90
-rw-r--r--src/mame/drivers/goldstar.cpp123
-rw-r--r--src/mame/drivers/goupil.cpp26
-rw-r--r--src/mame/drivers/grfd2301.cpp2
-rw-r--r--src/mame/drivers/groundfx.cpp4
-rw-r--r--src/mame/drivers/gunbustr.cpp8
-rw-r--r--src/mame/drivers/h19.cpp4
-rw-r--r--src/mame/drivers/harddriv.cpp75
-rw-r--r--src/mame/drivers/headonb.cpp2
-rw-r--r--src/mame/drivers/hh_cop400.cpp212
-rw-r--r--src/mame/drivers/hh_hmcs40.cpp25
-rw-r--r--src/mame/drivers/hh_tms1k.cpp555
-rw-r--r--src/mame/drivers/hh_ucom4.cpp117
-rw-r--r--src/mame/drivers/hitme.cpp2
-rw-r--r--src/mame/drivers/homelab.cpp12
-rw-r--r--src/mame/drivers/homez80.cpp2
-rw-r--r--src/mame/drivers/hp64k.cpp4
-rw-r--r--src/mame/drivers/hp9845.cpp4
-rw-r--r--src/mame/drivers/hp9k.cpp2
-rw-r--r--src/mame/drivers/huebler.cpp2
-rw-r--r--src/mame/drivers/ibmpc.cpp107
-rw-r--r--src/mame/drivers/ibmpcjr.cpp40
-rw-r--r--src/mame/drivers/ie15.cpp4
-rw-r--r--src/mame/drivers/imds2.cpp2
-rw-r--r--src/mame/drivers/ipds.cpp4
-rw-r--r--src/mame/drivers/iq151.cpp4
-rw-r--r--src/mame/drivers/irisha.cpp2
-rw-r--r--src/mame/drivers/iskr103x.cpp69
-rw-r--r--src/mame/drivers/itt3030.cpp2
-rw-r--r--src/mame/drivers/jonos.cpp2
-rw-r--r--src/mame/drivers/jr100.cpp2
-rw-r--r--src/mame/drivers/jtc.cpp4
-rw-r--r--src/mame/drivers/jupace.cpp2
-rw-r--r--src/mame/drivers/jupiter.cpp2
-rw-r--r--src/mame/drivers/k8915.cpp4
-rw-r--r--src/mame/drivers/kaypro.cpp4
-rw-r--r--src/mame/drivers/konin.cpp2
-rw-r--r--src/mame/drivers/kramermc.cpp2
-rw-r--r--src/mame/drivers/lg-dvd.cpp2
-rw-r--r--src/mame/drivers/lisa.cpp2
-rw-r--r--src/mame/drivers/llc.cpp4
-rw-r--r--src/mame/drivers/m20.cpp2
-rw-r--r--src/mame/drivers/m24.cpp15
-rw-r--r--src/mame/drivers/m79152pc.cpp2
-rw-r--r--src/mame/drivers/macpci.cpp2
-rw-r--r--src/mame/drivers/marinedt.cpp668
-rw-r--r--src/mame/drivers/marywu.cpp2
-rw-r--r--src/mame/drivers/mbc200.cpp2
-rw-r--r--src/mame/drivers/mbdtower.cpp2
-rw-r--r--src/mame/drivers/mc1502.cpp69
-rw-r--r--src/mame/drivers/mc80.cpp4
-rw-r--r--src/mame/drivers/meadows.cpp6
-rw-r--r--src/mame/drivers/mephisto.cpp50
-rw-r--r--src/mame/drivers/mes.cpp2
-rw-r--r--src/mame/drivers/metro.cpp2
-rw-r--r--src/mame/drivers/micral.cpp4
-rw-r--r--src/mame/drivers/microtan.cpp2
-rw-r--r--src/mame/drivers/mikro80.cpp2
-rw-r--r--src/mame/drivers/mk85.cpp2
-rw-r--r--src/mame/drivers/mk90.cpp2
-rw-r--r--src/mame/drivers/mmodular.cpp161
-rw-r--r--src/mame/drivers/model2.cpp4
-rw-r--r--src/mame/drivers/modellot.cpp4
-rw-r--r--src/mame/drivers/mt735.cpp2
-rw-r--r--src/mame/drivers/mx2178.cpp4
-rw-r--r--src/mame/drivers/myb3k.cpp2
-rw-r--r--src/mame/drivers/mycom.cpp2
-rw-r--r--src/mame/drivers/mz80.cpp2
-rw-r--r--src/mame/drivers/nanos.cpp2
-rw-r--r--src/mame/drivers/naomi.cpp10
-rw-r--r--src/mame/drivers/nascom1.cpp2
-rw-r--r--src/mame/drivers/neogeo_noslot.cpp30
-rw-r--r--src/mame/drivers/nitedrvr.cpp2
-rw-r--r--src/mame/drivers/nokia_3310.cpp4
-rw-r--r--src/mame/drivers/notetaker.cpp401
-rw-r--r--src/mame/drivers/novag6502.cpp437
-rw-r--r--src/mame/drivers/octopus.cpp2
-rw-r--r--src/mame/drivers/offtwall.cpp10
-rw-r--r--src/mame/drivers/okean240.cpp2
-rw-r--r--src/mame/drivers/ondra.cpp2
-rw-r--r--src/mame/drivers/orao.cpp2
-rw-r--r--src/mame/drivers/orbit.cpp2
-rw-r--r--src/mame/drivers/osbexec.cpp4
-rw-r--r--src/mame/drivers/osborne1.cpp4
-rw-r--r--src/mame/drivers/p112.cpp2
-rw-r--r--src/mame/drivers/pasogo.cpp11
-rw-r--r--src/mame/drivers/pc.cpp187
-rw-r--r--src/mame/drivers/pcat_dyn.cpp120
-rw-r--r--src/mame/drivers/pcm.cpp2
-rw-r--r--src/mame/drivers/pcxt.cpp410
-rw-r--r--src/mame/drivers/pda600.cpp2
-rw-r--r--src/mame/drivers/pegasus.cpp2
-rw-r--r--src/mame/drivers/peoplepc.cpp4
-rw-r--r--src/mame/drivers/peplus.cpp5
-rw-r--r--src/mame/drivers/pet.cpp8
-rw-r--r--src/mame/drivers/plan80.cpp4
-rw-r--r--src/mame/drivers/pmd85.cpp4
-rw-r--r--src/mame/drivers/pockstat.cpp2
-rw-r--r--src/mame/drivers/poisk1.cpp398
-rw-r--r--src/mame/drivers/poly88.cpp2
-rw-r--r--src/mame/drivers/popper.cpp360
-rw-r--r--src/mame/drivers/primo.cpp2
-rw-r--r--src/mame/drivers/proteus3.cpp2
-rw-r--r--src/mame/drivers/ptcsol.cpp2
-rw-r--r--src/mame/drivers/pv9234.cpp2
-rw-r--r--src/mame/drivers/pyl601.cpp4
-rw-r--r--src/mame/drivers/qdrmfgp.cpp6
-rw-r--r--src/mame/drivers/rd100.cpp4
-rw-r--r--src/mame/drivers/rm380z.cpp2
-rw-r--r--src/mame/drivers/sansa_fuze.cpp3
-rw-r--r--src/mame/drivers/sapi1.cpp2
-rw-r--r--src/mame/drivers/sbrain.cpp4
-rw-r--r--src/mame/drivers/sbrkout.cpp2
-rw-r--r--src/mame/drivers/sdk80.cpp2
-rw-r--r--src/mame/drivers/segapm.cpp2
-rw-r--r--src/mame/drivers/skullxbo.cpp25
-rw-r--r--src/mame/drivers/skylncr.cpp70
-rw-r--r--src/mame/drivers/sorcerer.cpp2
-rw-r--r--src/mame/drivers/spoker.cpp474
-rw-r--r--src/mame/drivers/sprcros2.cpp452
-rw-r--r--src/mame/drivers/ssem.cpp43
-rw-r--r--src/mame/drivers/sshot.cpp2
-rw-r--r--src/mame/drivers/starcrus.cpp2
-rw-r--r--src/mame/drivers/suna8.cpp6
-rw-r--r--src/mame/drivers/super80.cpp4
-rw-r--r--src/mame/drivers/superchs.cpp10
-rw-r--r--src/mame/drivers/supercon.cpp811
-rw-r--r--src/mame/drivers/suprnova.cpp126
-rw-r--r--src/mame/drivers/svi318.cpp871
-rw-r--r--src/mame/drivers/swyft.cpp2
-rw-r--r--src/mame/drivers/sys2900.cpp2
-rw-r--r--src/mame/drivers/taito_f3.cpp188
-rw-r--r--src/mame/drivers/taitojc.cpp28
-rw-r--r--src/mame/drivers/tandy1t.cpp311
-rw-r--r--src/mame/drivers/tandy2k.cpp4
-rw-r--r--src/mame/drivers/tavernie.cpp2
-rw-r--r--src/mame/drivers/tdv2324.cpp4
-rw-r--r--src/mame/drivers/tecmo16.cpp6
-rw-r--r--src/mame/drivers/tek405x.cpp8
-rw-r--r--src/mame/drivers/terak.cpp2
-rw-r--r--src/mame/drivers/thunderj.cpp10
-rw-r--r--src/mame/drivers/ti99_2.cpp4
-rw-r--r--src/mame/drivers/ticalc1x.cpp28
-rw-r--r--src/mame/drivers/tim011.cpp2
-rw-r--r--src/mame/drivers/tispeak.cpp23
-rw-r--r--src/mame/drivers/tispellb.cpp4
-rw-r--r--src/mame/drivers/tk80bs.cpp2
-rw-r--r--src/mame/drivers/toobin.cpp30
-rw-r--r--src/mame/drivers/toypop.cpp559
-rw-r--r--src/mame/drivers/trackfld.cpp47
-rw-r--r--src/mame/drivers/trs80.cpp2
-rw-r--r--src/mame/drivers/trs80m2.cpp8
-rw-r--r--src/mame/drivers/ts803.cpp4
-rw-r--r--src/mame/drivers/tsamurai.cpp10
-rw-r--r--src/mame/drivers/tsispch.cpp9
-rw-r--r--src/mame/drivers/tvgame.cpp2
-rw-r--r--src/mame/drivers/uknc.cpp2
-rw-r--r--src/mame/drivers/undrfire.cpp16
-rw-r--r--src/mame/drivers/univac.cpp4
-rw-r--r--src/mame/drivers/unixpc.cpp2
-rw-r--r--src/mame/drivers/ut88.cpp2
-rw-r--r--src/mame/drivers/v6809.cpp2
-rw-r--r--src/mame/drivers/victor9k.cpp4
-rw-r--r--src/mame/drivers/videopin.cpp2
-rw-r--r--src/mame/drivers/vindictr.cpp40
-rw-r--r--src/mame/drivers/vixen.cpp4
-rw-r--r--src/mame/drivers/vk100.cpp2
-rw-r--r--src/mame/drivers/vt100.cpp4
-rw-r--r--src/mame/drivers/vt220.cpp2
-rw-r--r--src/mame/drivers/vt240.cpp2
-rw-r--r--src/mame/drivers/vt320.cpp2
-rw-r--r--src/mame/drivers/vt520.cpp2
-rw-r--r--src/mame/drivers/wacky_gator.cpp2
-rw-r--r--src/mame/drivers/wicat.cpp4
-rw-r--r--src/mame/drivers/xerox820.cpp4
-rw-r--r--src/mame/drivers/xybots.cpp25
-rw-r--r--src/mame/drivers/yiear.cpp6
-rw-r--r--src/mame/drivers/z1013.cpp2
-rw-r--r--src/mame/drivers/zapcomputer.cpp2
-rw-r--r--src/mame/drivers/zorba.cpp4
-rw-r--r--src/mame/drivers/zrt80.cpp4
-rw-r--r--src/mame/includes/aerofgt.h1
-rw-r--r--src/mame/includes/badlands.h5
-rw-r--r--src/mame/includes/bking.h4
-rw-r--r--src/mame/includes/carjmbre.h44
-rw-r--r--src/mame/includes/cyberbal.h2
-rw-r--r--src/mame/includes/ec184x.h2
-rw-r--r--src/mame/includes/flower.h126
-rw-r--r--src/mame/includes/galastrm.h2
-rw-r--r--src/mame/includes/hh_tms1k.h4
-rw-r--r--src/mame/includes/kaypro.h12
-rw-r--r--src/mame/includes/mac.h2
-rw-r--r--src/mame/includes/mboard.h122
-rw-r--r--src/mame/includes/poisk1.h101
-rw-r--r--src/mame/includes/popper.h71
-rw-r--r--src/mame/includes/qdrmfgp.h4
-rw-r--r--src/mame/includes/sprcros2.h49
-rw-r--r--src/mame/includes/suprnova.h45
-rw-r--r--src/mame/includes/svi318.h159
-rw-r--r--src/mame/includes/taito_f3.h2
-rw-r--r--src/mame/includes/tecmo16.h4
-rw-r--r--src/mame/includes/toypop.h92
-rw-r--r--src/mame/includes/xbox.h68
-rw-r--r--src/mame/includes/yiear.h5
-rw-r--r--src/mame/layout/LICENSE116
-rw-r--r--src/mame/layout/README.md6
-rw-r--r--src/mame/layout/cnfball.lay68
-rw-r--r--src/mame/layout/ctstein.lay99
-rw-r--r--src/mame/layout/fxmcr165.lay57
-rw-r--r--src/mame/layout/h2hbaskb.lay137
-rw-r--r--src/mame/layout/sc4fd7tha.lay6388
-rw-r--r--src/mame/layout/supercon.lay447
-rw-r--r--src/mame/machine/apollo_kbd.cpp9
-rw-r--r--src/mame/machine/apollo_kbd.h3
-rw-r--r--src/mame/machine/dc.cpp12
-rw-r--r--src/mame/machine/dccons.cpp2
-rw-r--r--src/mame/machine/kay_kbd.cpp39
-rw-r--r--src/mame/machine/kaypro.cpp6
-rw-r--r--src/mame/machine/mac.cpp7
-rw-r--r--src/mame/machine/macadb.cpp132
-rw-r--r--src/mame/machine/mboard.cpp568
-rw-r--r--src/mame/machine/mega32x.cpp13
-rw-r--r--src/mame/machine/mega32x.h2
-rw-r--r--src/mame/machine/ns10crypt.cpp2
-rw-r--r--src/mame/machine/ns10crypt.h2
-rw-r--r--src/mame/machine/pcshare.cpp20
-rw-r--r--src/mame/machine/pcshare.h2
-rw-r--r--src/mame/machine/rx01.cpp6
-rw-r--r--src/mame/machine/rx01.h3
-rw-r--r--src/mame/machine/svi318.cpp767
-rw-r--r--src/mame/machine/xbox.cpp315
-rw-r--r--src/mame/mame.lst4008
-rw-r--r--src/mame/mess.flt27
-rw-r--r--src/mame/video/abc1600.cpp4
-rw-r--r--src/mame/video/abc80.cpp2
-rw-r--r--src/mame/video/abc800.cpp4
-rw-r--r--src/mame/video/abc802.cpp4
-rw-r--r--src/mame/video/apollo.cpp2
-rw-r--r--src/mame/video/bking.cpp4
-rw-r--r--src/mame/video/carjmbre.cpp156
-rw-r--r--src/mame/video/flower.cpp192
-rw-r--r--src/mame/video/galastrm.cpp2
-rw-r--r--src/mame/video/igs017_igs031.cpp2
-rw-r--r--src/mame/video/n64.cpp2
-rw-r--r--src/mame/video/newbrain.cpp4
-rw-r--r--src/mame/video/osi.cpp4
-rw-r--r--src/mame/video/pc_t1t.cpp168
-rw-r--r--src/mame/video/pc_t1t.h14
-rw-r--r--src/mame/video/pcd.cpp2
-rw-r--r--src/mame/video/poisk1.cpp322
-rw-r--r--src/mame/video/poisk1.h10
-rw-r--r--src/mame/video/popper.cpp245
-rw-r--r--src/mame/video/powervr2.cpp2
-rw-r--r--src/mame/video/qdrmfgp.cpp4
-rw-r--r--src/mame/video/snk68_spr.h2
-rw-r--r--src/mame/video/sprcros2.cpp187
-rw-r--r--src/mame/video/suprnova.cpp53
-rw-r--r--src/mame/video/tecmo16.cpp4
-rw-r--r--src/mame/video/toypop.cpp275
-rw-r--r--src/mame/video/v1050.cpp4
-rw-r--r--src/mame/video/vtvideo.cpp4
-rw-r--r--src/mame/video/yiear.cpp5
-rw-r--r--src/osd/eigccppc.h19
-rw-r--r--src/osd/eigccx86.h36
-rw-r--r--src/osd/eivcx86.h41
-rw-r--r--src/osd/modules/debugger/debugosx.mm98
-rw-r--r--src/osd/modules/debugger/debugqt.cpp2
-rw-r--r--src/osd/modules/debugger/osx/debugview.mm2
-rw-r--r--src/osd/modules/debugger/osx/debugwindowhandler.h1
-rw-r--r--src/osd/modules/debugger/osx/debugwindowhandler.mm15
-rw-r--r--src/osd/modules/font/font_dwrite.cpp23
-rw-r--r--src/osd/modules/input/input_common.cpp12
-rw-r--r--src/osd/modules/input/input_dinput.cpp8
-rw-r--r--src/osd/modules/input/input_rawinput.cpp106
-rw-r--r--src/osd/modules/input/input_sdl.cpp19
-rw-r--r--src/osd/modules/input/input_win32.cpp13
-rw-r--r--src/osd/modules/input/input_xinput.cpp4
-rw-r--r--src/osd/modules/lib/osdlib_macosx.cpp146
-rw-r--r--src/osd/modules/lib/osdlib_unix.cpp67
-rw-r--r--src/osd/modules/lib/osdlib_win32.cpp106
-rw-r--r--src/osd/modules/opengl/shader/glsl_bilinear_idx16_lut.fsh3
-rw-r--r--src/osd/modules/opengl/shader/glsl_bilinear_rgb32_dir.fsh3
-rw-r--r--src/osd/modules/opengl/shader/glsl_bilinear_rgb32_lut.fsh3
-rw-r--r--src/osd/modules/opengl/shader/glsl_plain_idx16_lut.fsh3
-rw-r--r--src/osd/modules/opengl/shader/glsl_plain_rgb32_dir.fsh3
-rw-r--r--src/osd/modules/opengl/shader/glsl_plain_rgb32_lut.fsh3
-rw-r--r--src/osd/modules/render/bgfx/chainmanager.cpp1
-rw-r--r--src/osd/modules/render/bgfx/effectmanager.cpp1
-rw-r--r--src/osd/modules/render/bgfx/shadermanager.cpp1
-rw-r--r--src/osd/modules/render/bgfx/statereader.cpp2
-rw-r--r--src/osd/modules/render/bgfx/statereader.h2
-rw-r--r--src/osd/modules/render/bgfx/writereader.cpp2
-rw-r--r--src/osd/modules/render/bgfx/writereader.h2
-rw-r--r--src/osd/modules/render/binpacker.h2
-rw-r--r--src/osd/modules/render/drawbgfx.h2
-rw-r--r--src/osd/modules/sound/xaudio2_sound.cpp141
-rw-r--r--src/osd/osdcomm.h42
-rw-r--r--src/osd/osdcore.cpp40
-rw-r--r--src/osd/sdl/aueffectutil.mm2
-rw-r--r--src/osd/sdl/keymaps/km-be.txt23
-rw-r--r--src/osd/sdl/keymaps/km-ch.txt14
-rw-r--r--src/osd/sdl/keymaps/km-de.txt26
-rw-r--r--src/osd/sdl/keymaps/km-fr-OSX.txt13
-rw-r--r--src/osd/sdl/keymaps/km-fr.txt23
-rw-r--r--src/osd/sdl/keymaps/km_it.txt12
-rw-r--r--src/osd/sdl/ledutil.sh3
-rw-r--r--src/osd/sdl/man/LICENSE116
-rw-r--r--src/osd/sdl/man/README.md5
-rw-r--r--src/osd/sdl/sdlmain.cpp7
-rw-r--r--src/osd/sdl/taputil.sh3
-rw-r--r--src/osd/sdl/window.cpp6
-rw-r--r--src/osd/windows/window.cpp5
-rw-r--r--src/osd/windows/winfile.cpp13
-rw-r--r--src/osd/windows/winutil.cpp8
-rw-r--r--src/osd/windows/winutil.h22
-rw-r--r--src/tools/chdman.cpp215
-rw-r--r--src/tools/imgtool/stream.cpp237
-rw-r--r--src/tools/imgtool/stream.h2
-rw-r--r--src/tools/ldresample.cpp2
-rw-r--r--src/tools/pngcmp.cpp20
-rw-r--r--src/tools/regrep.cpp140
-rw-r--r--src/tools/split.cpp68
-rw-r--r--src/tools/src2html.cpp92
-rw-r--r--src/tools/unidasm.cpp2
-rw-r--r--tests/LICENSE27
-rw-r--r--tests/README.md5
-rw-r--r--tests/lib/util/corestr.cpp3
-rw-r--r--tests/main.cpp3
1556 files changed, 61045 insertions, 55764 deletions
diff --git a/.gitignore b/.gitignore
index a2f4aa1c861..f01c2c01e05 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,7 @@
!/makefile
!/mame.doxygen
!/*.md
+!/LICENSE
/.idea
regtests/chdman/temp
regtests/jedutil/output
diff --git a/3rdparty/README.md b/3rdparty/README.md
new file mode 100644
index 00000000000..4868144ee2c
--- /dev/null
+++ b/3rdparty/README.md
@@ -0,0 +1,55 @@
+# **3rdparty** #
+
+benchmark - [Apache License, Version 2.0](http://opensource.org/licenses/Apache-2.0) (used only for testing, not part of distribution)
+
+bgfx - [The BSD 2-Clause License](http://opensource.org/licenses/BSD-2-Clause)
+
+bx - [The BSD 2-Clause License](http://opensource.org/licenses/BSD-2-Clause)
+
+compat - Wine headers missing in MinGW [The GNU Lesser General Public License, version 2.1 (LGPL-2.1)](http://opensource.org/licenses/LGPL-2.1)
+
+**note that this one contain headers only and that real library/dll is dynamically loaded so use in commercial project is allowed, will be removed when becomes part of MinGW distribution**
+
+dxsdk - [DirectX SDK EULA](https://github.com/mamedev/mame/blob/master/3rdparty/dxsdk/Documentation/License%20Agreements/DirectX%20SDK%20EULA.txt)
+
+expat - [The MIT License (MIT)](http://opensource.org/licenses/MIT)
+
+genie - [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause)
+
+googletest - [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause)
+
+http-parser - [The MIT License (MIT)](http://opensource.org/licenses/MIT)
+
+libflac - [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause)
+
+libjpeg - [Custom BSD-like](https://github.com/numenta/nupic/blob/master/external/licenses/LICENSE.libjpeg-6b.txt)
+
+libuv - [Node License (BSD-like)](https://github.com/mamedev/mame/blob/master/3rdparty/libuv/LICENSE)
+
+lsqlite3 - [The MIT License (MIT)](http://opensource.org/licenses/MIT)
+
+lua - [The MIT License (MIT)](http://opensource.org/licenses/MIT)
+
+lua-zlib - [The MIT License (MIT)](http://opensource.org/licenses/MIT)
+
+luabridge - [The MIT License (MIT)](http://opensource.org/licenses/MIT)
+
+luafilesystem - [The MIT License (MIT)](http://opensource.org/licenses/MIT)
+
+lzma - [The GNU Lesser General Public License](http://opensource.org/licenses/LGPL-2.1)
+
+portaudio - [The MIT License (MIT)](http://opensource.org/licenses/MIT) explanation at [their site](http://www.portaudio.com/license.html)
+
+portmidi - [The MIT License (MIT)](http://opensource.org/licenses/MIT)
+
+rapidjson - [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause)
+
+sdl2 - [zlib license](http://opensource.org/licenses/Zlib)
+
+softfloat - [U.C. Berkeley open-source license](https://github.com/mamedev/mame/blob/master/3rdparty/softfloat/README.txt) MIT compatible
+
+sqlite3 - Public Domain
+
+winpcap - [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause)
+
+zlib - [zlib license](http://opensource.org/licenses/Zlib)
diff --git a/3rdparty/benchmark/CMakeLists.txt b/3rdparty/benchmark/CMakeLists.txt
index a753ad64b35..2c722526216 100644
--- a/3rdparty/benchmark/CMakeLists.txt
+++ b/3rdparty/benchmark/CMakeLists.txt
@@ -1,6 +1,14 @@
cmake_minimum_required (VERSION 2.8.11)
project (benchmark)
+foreach(p
+ CMP0054 # CMake 3.1
+ )
+ if(POLICY ${p})
+ cmake_policy(SET ${p} NEW)
+ endif()
+endforeach()
+
option(BENCHMARK_ENABLE_TESTING "Enable testing of the benchmark library." ON)
option(BENCHMARK_ENABLE_LTO "Enable link time optimisation of the benchmark library." OFF)
# Make sure we can import out CMake functions
@@ -23,73 +31,83 @@ include(CheckCXXCompilerFlag)
include(AddCXXCompilerFlag)
include(CXXFeatureCheck)
-# Try and enable C++11. Don't use C++14 because it doesn't work in some
-# configurations.
-add_cxx_compiler_flag(-std=c++11)
-if (NOT HAVE_CXX_FLAG_STD_CXX11)
- add_cxx_compiler_flag(-std=c++0x)
-endif()
-
-# Turn compiler warnings up to 11
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+ # Turn compiler warnings up to 11
add_cxx_compiler_flag(-W4)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
+
+ # Link time optimisation
+ if (BENCHMARK_ENABLE_LTO)
+ set(CMAKE_CXX_FLAGS_RELEASE "/GL")
+ set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "/LTCG")
+ set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/LTCG")
+ set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
+ endif()
else()
+ # Try and enable C++11. Don't use C++14 because it doesn't work in some
+ # configurations.
+ add_cxx_compiler_flag(-std=c++11)
+ if (NOT HAVE_CXX_FLAG_STD_CXX11)
+ add_cxx_compiler_flag(-std=c++0x)
+ endif()
+
+ # Turn compiler warnings up to 11
add_cxx_compiler_flag(-Wall)
-endif()
-add_cxx_compiler_flag(-Wextra)
-add_cxx_compiler_flag(-Wshadow)
-add_cxx_compiler_flag(-Werror RELEASE)
-add_cxx_compiler_flag(-pedantic)
-add_cxx_compiler_flag(-pedantic-errors)
-add_cxx_compiler_flag(-Wshorten-64-to-32)
-add_cxx_compiler_flag(-Wfloat-equal)
-add_cxx_compiler_flag(-Wzero-as-null-pointer-constant)
-add_cxx_compiler_flag(-fstrict-aliasing)
-if (HAVE_CXX_FLAG_FSTRICT_ALIASING)
- add_cxx_compiler_flag(-Wstrict-aliasing)
-endif()
-add_cxx_compiler_flag(-Wthread-safety)
-if (HAVE_WTHREAD_SAFETY)
- add_definitions(-DHAVE_WTHREAD_SAFETY)
- cxx_feature_check(THREAD_SAFETY_ATTRIBUTES)
-endif()
-# Link time optimisation
-if (BENCHMARK_ENABLE_LTO)
- add_cxx_compiler_flag(-flto)
- if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
- find_program(GCC_AR gcc-ar)
- if (GCC_AR)
- set(CMAKE_AR ${GCC_AR})
- endif()
- find_program(GCC_RANLIB gcc-ranlib)
- if (GCC_RANLIB)
- set(CMAKE_RANLIB ${GCC_RANLIB})
+ add_cxx_compiler_flag(-Wextra)
+ add_cxx_compiler_flag(-Wshadow)
+ add_cxx_compiler_flag(-Werror RELEASE)
+ add_cxx_compiler_flag(-pedantic)
+ add_cxx_compiler_flag(-pedantic-errors)
+ add_cxx_compiler_flag(-Wshorten-64-to-32)
+ add_cxx_compiler_flag(-Wfloat-equal)
+ add_cxx_compiler_flag(-Wzero-as-null-pointer-constant)
+ add_cxx_compiler_flag(-fstrict-aliasing)
+ if (HAVE_CXX_FLAG_FSTRICT_ALIASING)
+ add_cxx_compiler_flag(-Wstrict-aliasing)
+ endif()
+ add_cxx_compiler_flag(-Wthread-safety)
+ if (HAVE_WTHREAD_SAFETY)
+ add_definitions(-DHAVE_WTHREAD_SAFETY)
+ cxx_feature_check(THREAD_SAFETY_ATTRIBUTES)
+ endif()
+
+ # Link time optimisation
+ if (BENCHMARK_ENABLE_LTO)
+ add_cxx_compiler_flag(-flto)
+ if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
+ find_program(GCC_AR gcc-ar)
+ if (GCC_AR)
+ set(CMAKE_AR ${GCC_AR})
+ endif()
+ find_program(GCC_RANLIB gcc-ranlib)
+ if (GCC_RANLIB)
+ set(CMAKE_RANLIB ${GCC_RANLIB})
+ endif()
endif()
endif()
-endif()
-# Coverage build type
-set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING
- "Flags used by the C++ compiler during coverage builds."
- FORCE)
-set(CMAKE_EXE_LINKER_FLAGS_COVERAGE
- "${CMAKE_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING
- "Flags used for linking binaries during coverage builds."
- FORCE)
-set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
- "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}" CACHE STRING
- "Flags used by the shared libraries linker during coverage builds."
- FORCE)
-mark_as_advanced(
- CMAKE_CXX_FLAGS_COVERAGE
- CMAKE_EXE_LINKER_FLAGS_COVERAGE
- CMAKE_SHARED_LINKER_FLAGS_COVERAGE)
-set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
- "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel Coverage."
- FORCE)
-add_cxx_compiler_flag(--coverage COVERAGE)
+ # Coverage build type
+ set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING
+ "Flags used by the C++ compiler during coverage builds."
+ FORCE)
+ set(CMAKE_EXE_LINKER_FLAGS_COVERAGE
+ "${CMAKE_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING
+ "Flags used for linking binaries during coverage builds."
+ FORCE)
+ set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
+ "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}" CACHE STRING
+ "Flags used by the shared libraries linker during coverage builds."
+ FORCE)
+ mark_as_advanced(
+ CMAKE_CXX_FLAGS_COVERAGE
+ CMAKE_EXE_LINKER_FLAGS_COVERAGE
+ CMAKE_SHARED_LINKER_FLAGS_COVERAGE)
+ set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
+ "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel Coverage."
+ FORCE)
+ add_cxx_compiler_flag(--coverage COVERAGE)
+endif()
# C++ feature checks
cxx_feature_check(STD_REGEX)
diff --git a/3rdparty/benchmark/README.md b/3rdparty/benchmark/README.md
index 1fa7186ec40..21ae478b893 100644
--- a/3rdparty/benchmark/README.md
+++ b/3rdparty/benchmark/README.md
@@ -243,7 +243,7 @@ The `context` attribute contains information about the run in general, including
information about the CPU and the date.
The `benchmarks` attribute contains a list of ever benchmark run. Example json
output looks like:
-```
+``` json
{
"context": {
"date": "2015/03/17-18:40:25",
@@ -290,6 +290,20 @@ name,iterations,real_time,cpu_time,bytes_per_second,items_per_second,label
"BM_SetInsert/1024/10",106365,17238.4,8421.53,4.74973e+06,1.18743e+06,
```
+Debug vs Release
+----------------
+By default, benchmark builds as a debug library. You will see a warning in the output when this is the case. To build it as a release library instead, use:
+
+```
+cmake -DCMAKE_BUILD_TYPE=Release
+```
+
+To enable link-time optimisation, use
+
+```
+cmake -DCMAKE_BUILD_TYPE=Release -DBENCHMARK_ENABLE_LTO=true
+```
+
Linking against the library
---------------------------
When using gcc, it is necessary to link against pthread to avoid runtime exceptions. This is due to how gcc implements std::thread. See [issue #67](https://github.com/google/benchmark/issues/67) for more details.
diff --git a/3rdparty/benchmark/appveyor.yml b/3rdparty/benchmark/appveyor.yml
index 5368a4ac009..13be7fa4059 100644
--- a/3rdparty/benchmark/appveyor.yml
+++ b/3rdparty/benchmark/appveyor.yml
@@ -12,9 +12,16 @@ platform:
environment:
matrix:
+ - compiler: msvc-12-seh
+ - compiler: msvc-14-seh
- compiler: gcc-4.9.2-posix
# - compiler: gcc-4.8.4-posix
-# - compiler: msvc-12-seh
+
+artifacts:
+ - path: '_build/CMakeFiles/*.log'
+ name: logs
+ - path: '_build/Testing/**/*.xml'
+ name: test_results
install:
# derive some extra information
@@ -35,18 +42,83 @@ before_build:
- if "%compiler_name%"=="gcc" (set "build=mingw32-make -j4")
- if "%compiler_name%"=="gcc" (set "test=mingw32-make CTEST_OUTPUT_ON_FAILURE=1 test")
# msvc specific commands
- # TODO :)
+ - if "%compiler_name%"=="msvc" if "%compiler_version%"=="12" if "%platform%"=="x86" (set "generator=Visual Studio 12 2013")
+ - if "%compiler_name%"=="msvc" if "%compiler_version%"=="12" if "%platform%"=="x64" (set "generator=Visual Studio 12 2013 Win64")
+ - if "%compiler_name%"=="msvc" if "%compiler_version%"=="14" if "%platform%"=="x86" (set "generator=Visual Studio 14 2015")
+ - if "%compiler_name%"=="msvc" if "%compiler_version%"=="14" if "%platform%"=="x64" (set "generator=Visual Studio 14 2015 Win64")
+ - if "%compiler_name%"=="msvc" (set "build=cmake --build . --config %variant%")
+ - if "%compiler_name%"=="msvc" (set "test=ctest -c Release -D CTEST_OUTPUT_ON_FAILURE:STRING=1")
# add the compiler path if needed
- if not "%compiler_path%"=="" (set "PATH=%PATH%;%compiler_path%")
# git bash conflicts with MinGW makefiles
- - if "%generator%"=="MinGW Makefiles" (set "PATH=%PATH:C:\Program Files (x86)\Git\bin=%")
+ - if "%generator%"=="MinGW Makefiles" (set "PATH=%PATH:C:\Program Files\Git\usr\bin;=%")
build_script:
- - cmake -G "%generator%" "-DCMAKE_BUILD_TYPE=%variant%" "-DBUILD_SHARED_LIBS=%shared%"
- - cmd /c "%build%"
+- ps: |
+ md _build -Force
+ cd _build
+ & cmake -G "$env:generator" "-DCMAKE_BUILD_TYPE=$env:variant" "-DBUILD_SHARED_LIBS=$env:shared" ..
+ if ($LastExitCode -ne 0) {
+ throw "Exec: $ErrorMessage"
+ }
+ iex "& $env:build"
+ if ($LastExitCode -ne 0) {
+ throw "Exec: $ErrorMessage"
+ }
test_script:
- - cmd /c "%test%"
+- ps: |
+ iex "& $env:test"
+ if ($LastExitCode -ne 0) {
+ throw "Exec: $ErrorMessage"
+ }
+
+ function Add-CTest-Result($testResult)
+ {
+ $tests = ([xml](get-content $testResult)).Site.Testing
+ $testsCount = 0
+ $anyFailures = $FALSE
+
+ foreach ($test in $tests.test) {
+ $testsCount++
+ $testName = $test.Name
+ $testpath = $test.Path
+ $timeNode = $test.SelectSingleNode('Results/NamedMeasurement[@name="Execution Time"]/Value')
+ if ($test.status -eq "failure") {
+ $time = ([double]$timeNode.InnerText * 1000)
+ Add-AppveyorTest $testName -Outcome Failed -FileName $testpath -Duration $time -ErrorMessage $($test.results.measurement.value)
+ Add-AppveyorMessage `"$testName failed`" -Category Error
+ $anyFailures = $TRUE
+ }
+ elseif ($test.status -eq "skipped") {
+ Add-AppveyorTest $testName -Outcome Ignored -Filename $testpath
+ }
+ else {
+ $time = ([double]$timeNode.InnerText * 1000)
+ Add-AppveyorTest $testName -Outcome Passed -FileName $testpath -Duration $time -StdOut $($test.results.measurement.value)
+ }
+ }
+ return $testsCount, $anyFailures
+ }
+
+ $testsCount = 0
+ $anyFailures = $FALSE
+
+ # Run tests and upload results to AppVeyor one by one
+ Get-ChildItem ".\Testing\*.xml" -Recurse | foreach {
+ $testfile = $_.fullname
+ $count, $testsResult = Add-CTest-Result $testfile
+ Write-Host "Found $testfile with $count tests"
+ $testsCount = $testsCount + $count
+ $anyFailures = $anyFailures -or $testsResult
+ }
+
+ Write-Host "There are $testsCount tests found"
+
+ if ($anyFailures -eq $TRUE){
+ Write-Host "Failing build as there are broken tests"
+ $host.SetShouldExit(1)
+ }
matrix:
fast_finish: true
diff --git a/3rdparty/benchmark/include/benchmark/benchmark_api.h b/3rdparty/benchmark/include/benchmark/benchmark_api.h
index 5523587834a..7a42025a457 100644
--- a/3rdparty/benchmark/include/benchmark/benchmark_api.h
+++ b/3rdparty/benchmark/include/benchmark/benchmark_api.h
@@ -221,7 +221,7 @@ inline BENCHMARK_ALWAYS_INLINE void DoNotOptimize(Tp const& value) {
// benchmark to use.
class State {
public:
- State(size_t max_iters, bool has_x, int x, bool has_y, int y, int thread_i);
+ State(size_t max_iters, bool has_x, int x, bool has_y, int y, int thread_i, int n_threads);
// Returns true iff the benchmark should continue through another iteration.
// NOTE: A benchmark may not return from the test until KeepRunning() has
@@ -358,7 +358,10 @@ private:
size_t items_processed_;
public:
+ // Index of the executing thread. Values from [0, threads).
const int thread_index;
+ // Number of threads concurrently executing the benchmark.
+ const int threads;
const size_t max_iterations;
private:
@@ -486,13 +489,13 @@ public:
Fixture() : internal::Benchmark("") {}
virtual void Run(State& st) {
- this->SetUp();
+ this->SetUp(st);
this->BenchmarkCase(st);
- this->TearDown();
+ this->TearDown(st);
}
- virtual void SetUp() {}
- virtual void TearDown() {}
+ virtual void SetUp(const State&) {}
+ virtual void TearDown(const State&) {}
protected:
virtual void BenchmarkCase(State&) = 0;
diff --git a/3rdparty/benchmark/src/benchmark.cc b/3rdparty/benchmark/src/benchmark.cc
index 269b7978023..08b180e37e6 100644
--- a/3rdparty/benchmark/src/benchmark.cc
+++ b/3rdparty/benchmark/src/benchmark.cc
@@ -599,7 +599,7 @@ namespace {
void RunInThread(const benchmark::internal::Benchmark::Instance* b,
size_t iters, int thread_id,
ThreadStats* total) EXCLUDES(GetBenchmarkLock()) {
- State st(iters, b->has_arg1, b->arg1, b->has_arg2, b->arg2, thread_id);
+ State st(iters, b->has_arg1, b->arg1, b->has_arg2, b->arg2, thread_id, b->threads);
b->benchmark->Run(st);
CHECK(st.iterations() == st.max_iterations) <<
"Benchmark returned before State::KeepRunning() returned false!";
@@ -736,15 +736,17 @@ void RunBenchmark(const benchmark::internal::Benchmark::Instance& b,
} // namespace
State::State(size_t max_iters, bool has_x, int x, bool has_y, int y,
- int thread_i)
+ int thread_i, int n_threads)
: started_(false), total_iterations_(0),
has_range_x_(has_x), range_x_(x),
has_range_y_(has_y), range_y_(y),
bytes_processed_(0), items_processed_(0),
thread_index(thread_i),
+ threads(n_threads),
max_iterations(max_iters)
{
CHECK(max_iterations != 0) << "At least one iteration must be run";
+ CHECK_LT(thread_index, threads) << "thread_index must be less than threads";
}
void State::PauseTiming() {
diff --git a/3rdparty/benchmark/src/console_reporter.cc b/3rdparty/benchmark/src/console_reporter.cc
index bee3c8576c0..092936d5935 100644
--- a/3rdparty/benchmark/src/console_reporter.cc
+++ b/3rdparty/benchmark/src/console_reporter.cc
@@ -37,7 +37,7 @@ bool ConsoleReporter::ReportContext(const Context& context) {
if (context.cpu_scaling_enabled) {
std::cerr << "***WARNING*** CPU scaling is enabled, the benchmark "
- "real time measurements may be noisy and will incure extra "
+ "real time measurements may be noisy and will incur extra "
"overhead.\n";
}
diff --git a/3rdparty/benchmark/src/csv_reporter.cc b/3rdparty/benchmark/src/csv_reporter.cc
index a83694338bd..d78a9dfb267 100644
--- a/3rdparty/benchmark/src/csv_reporter.cc
+++ b/3rdparty/benchmark/src/csv_reporter.cc
@@ -34,7 +34,7 @@ bool CSVReporter::ReportContext(const Context& context) {
if (context.cpu_scaling_enabled) {
std::cerr << "***WARNING*** CPU scaling is enabled, the benchmark "
- "real time measurements may be noisy and will incure extra "
+ "real time measurements may be noisy and will incur extra "
"overhead.\n";
}
diff --git a/3rdparty/benchmark/src/cycleclock.h b/3rdparty/benchmark/src/cycleclock.h
index 42541dafc88..3110804634c 100644
--- a/3rdparty/benchmark/src/cycleclock.h
+++ b/3rdparty/benchmark/src/cycleclock.h
@@ -99,6 +99,14 @@ inline BENCHMARK_ALWAYS_INLINE int64_t Now() {
_asm rdtsc
#elif defined(COMPILER_MSVC)
return __rdtsc();
+#elif defined(__aarch64__)
+ // System timer of ARMv8 runs at a different frequency than the CPU's.
+ // The frequency is fixed, typically in the range 1-50MHz. It can be
+ // read at CNTFRQ special register. We assume the OS has set up
+ // the virtual timer properly.
+ int64_t virtual_timer_value;
+ asm volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value));
+ return virtual_timer_value;
#elif defined(__ARM_ARCH)
#if (__ARM_ARCH >= 6) // V6 is the earliest arch that has a standard cyclecount
uint32_t pmccntr;
diff --git a/3rdparty/benchmark/src/sysinfo.cc b/3rdparty/benchmark/src/sysinfo.cc
index d1f312024d3..e10e19df086 100644
--- a/3rdparty/benchmark/src/sysinfo.cc
+++ b/3rdparty/benchmark/src/sysinfo.cc
@@ -174,12 +174,16 @@ void InitializeSystemInfo() {
if (freqstr[1] != '\0' && *err == '\0' && bogo_clock > 0)
saw_bogo = true;
}
- } else if (strncasecmp(line, "processor", sizeof("processor") - 1) == 0) {
+ } else if (strncmp(line, "processor", sizeof("processor") - 1) == 0) {
+ // The above comparison is case-sensitive because ARM kernels often
+ // include a "Processor" line that tells you about the CPU, distinct
+ // from the usual "processor" lines that give you CPU ids. No current
+ // Linux architecture is using "Processor" for CPU ids.
num_cpus++; // count up every time we see an "processor :" entry
- const char* freqstr = strchr(line, ':');
- if (freqstr) {
- const long cpu_id = strtol(freqstr + 1, &err, 10);
- if (freqstr[1] != '\0' && *err == '\0' && max_cpu_id < cpu_id)
+ const char* id_str = strchr(line, ':');
+ if (id_str) {
+ const long cpu_id = strtol(id_str + 1, &err, 10);
+ if (id_str[1] != '\0' && *err == '\0' && max_cpu_id < cpu_id)
max_cpu_id = cpu_id;
}
}
@@ -201,7 +205,7 @@ void InitializeSystemInfo() {
} else {
if ((max_cpu_id + 1) != num_cpus) {
fprintf(stderr,
- "CPU ID assignments in /proc/cpuinfo seems messed up."
+ "CPU ID assignments in /proc/cpuinfo seem messed up."
" This is usually caused by a bad BIOS.\n");
}
cpuinfo_num_cpus = num_cpus;
diff --git a/3rdparty/benchmark/test/CMakeLists.txt b/3rdparty/benchmark/test/CMakeLists.txt
index 7e4f4854710..a10a53a9748 100644
--- a/3rdparty/benchmark/test/CMakeLists.txt
+++ b/3rdparty/benchmark/test/CMakeLists.txt
@@ -39,6 +39,9 @@ add_test(basic_benchmark basic_test --benchmark_min_time=0.01)
compile_benchmark_test(fixture_test)
add_test(fixture_test fixture_test --benchmark_min_time=0.01)
+compile_benchmark_test(map_test)
+add_test(map_test map_test --benchmark_min_time=0.01)
+
compile_benchmark_test(cxx03_test)
set_target_properties(cxx03_test
PROPERTIES COMPILE_FLAGS "${CXX03_FLAGS}")
diff --git a/3rdparty/benchmark/test/benchmark_test.cc b/3rdparty/benchmark/test/benchmark_test.cc
index 2d268ce4121..97abb68fdb8 100644
--- a/3rdparty/benchmark/test/benchmark_test.cc
+++ b/3rdparty/benchmark/test/benchmark_test.cc
@@ -150,5 +150,29 @@ static void BM_LongTest(benchmark::State& state) {
}
BENCHMARK(BM_LongTest)->Range(1<<16,1<<28);
+static void BM_ParallelMemset(benchmark::State& state) {
+ int size = state.range_x() / sizeof(int);
+ int thread_size = size / state.threads;
+ int from = thread_size * state.thread_index;
+ int to = from + thread_size;
+
+ if (state.thread_index == 0) {
+ test_vector = new std::vector<int>(size);
+ }
+
+ while (state.KeepRunning()) {
+ for (int i = from; i < to; i++) {
+ // No need to lock test_vector_mu as ranges
+ // do not overlap between threads.
+ benchmark::DoNotOptimize(test_vector->at(i) = 1);
+ }
+ }
+
+ if (state.thread_index == 0) {
+ delete test_vector;
+ }
+}
+BENCHMARK(BM_ParallelMemset)->Arg(10 << 20)->ThreadRange(1, 4);
+
BENCHMARK_MAIN()
diff --git a/3rdparty/benchmark/test/fixture_test.cc b/3rdparty/benchmark/test/fixture_test.cc
index 8aea6ef0601..bf800fda20d 100644
--- a/3rdparty/benchmark/test/fixture_test.cc
+++ b/3rdparty/benchmark/test/fixture_test.cc
@@ -2,41 +2,51 @@
#include "benchmark/benchmark.h"
#include <cassert>
-
-class MyFixture : public ::benchmark::Fixture
-{
-public:
- void SetUp() {
- data = new int(42);
+#include <memory>
+
+class MyFixture : public ::benchmark::Fixture {
+ public:
+ void SetUp(const ::benchmark::State& state) {
+ if (state.thread_index == 0) {
+ assert(data.get() == nullptr);
+ data.reset(new int(42));
}
+ }
- void TearDown() {
- assert(data != nullptr);
- delete data;
- data = nullptr;
+ void TearDown(const ::benchmark::State& state) {
+ if (state.thread_index == 0) {
+ assert(data.get() != nullptr);
+ data.reset();
}
+ }
- ~MyFixture() {
- assert(data == nullptr);
- }
+ ~MyFixture() {
+ assert(data == nullptr);
+ }
- int* data;
+ std::unique_ptr<int> data;
};
BENCHMARK_F(MyFixture, Foo)(benchmark::State& st) {
- assert(data != nullptr);
- assert(*data == 42);
- while (st.KeepRunning()) {
- }
+ assert(data.get() != nullptr);
+ assert(*data == 42);
+ while (st.KeepRunning()) {
+ }
}
BENCHMARK_DEFINE_F(MyFixture, Bar)(benchmark::State& st) {
+ if (st.thread_index == 0) {
+ assert(data.get() != nullptr);
+ assert(*data == 42);
+ }
while (st.KeepRunning()) {
+ assert(data.get() != nullptr);
+ assert(*data == 42);
}
st.SetItemsProcessed(st.range_x());
}
BENCHMARK_REGISTER_F(MyFixture, Bar)->Arg(42);
-
+BENCHMARK_REGISTER_F(MyFixture, Bar)->Arg(42)->ThreadPerCpu();
BENCHMARK_MAIN()
diff --git a/3rdparty/benchmark/test/map_test.cc b/3rdparty/benchmark/test/map_test.cc
new file mode 100644
index 00000000000..5eccf8d39c4
--- /dev/null
+++ b/3rdparty/benchmark/test/map_test.cc
@@ -0,0 +1,58 @@
+#include "benchmark/benchmark.h"
+
+#include <cstdlib>
+#include <map>
+
+namespace {
+
+std::map<int, int> ConstructRandomMap(int size) {
+ std::map<int, int> m;
+ for (int i = 0; i < size; ++i) {
+ m.insert(std::make_pair(rand() % size, rand() % size));
+ }
+ return m;
+}
+
+} // namespace
+
+// Basic version.
+static void BM_MapLookup(benchmark::State& state) {
+ const int size = state.range_x();
+ while (state.KeepRunning()) {
+ state.PauseTiming();
+ std::map<int, int> m = ConstructRandomMap(size);
+ state.ResumeTiming();
+ for (int i = 0; i < size; ++i) {
+ benchmark::DoNotOptimize(m.find(rand() % size));
+ }
+ }
+ state.SetItemsProcessed(state.iterations() * size);
+}
+BENCHMARK(BM_MapLookup)->Range(1 << 3, 1 << 12);
+
+// Using fixtures.
+class MapFixture : public ::benchmark::Fixture {
+ public:
+ void SetUp(const ::benchmark::State& st) {
+ m = ConstructRandomMap(st.range_x());
+ }
+
+ void TearDown(const ::benchmark::State&) {
+ m.clear();
+ }
+
+ std::map<int, int> m;
+};
+
+BENCHMARK_DEFINE_F(MapFixture, Lookup)(benchmark::State& state) {
+ const int size = state.range_x();
+ while (state.KeepRunning()) {
+ for (int i = 0; i < size; ++i) {
+ benchmark::DoNotOptimize(m.find(rand() % size));
+ }
+ }
+ state.SetItemsProcessed(state.iterations() * size);
+}
+BENCHMARK_REGISTER_F(MapFixture, Lookup)->Range(1<<3, 1<<12);
+
+BENCHMARK_MAIN()
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/Changelog.md b/3rdparty/bgfx/3rdparty/glsl-optimizer/Changelog.md
index ee09e0250e6..39ce18b2541 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/Changelog.md
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/Changelog.md
@@ -1,6 +1,14 @@
GLSL optimizer Change Log
=========================
+2016 03
+-------
+
+Fixed:
+
+* Fixed translation performance regression in loop analysis (regressed in 2015 06 fixes).
+
+
2015 08
-------
@@ -35,6 +43,7 @@ Fixes:
-------
Goodies:
+
* GLES2: support EXT_draw_instanced / gl_InstanceIDEXT.
* Support gl_VertexID in GLSL < 1.30 when EXT_gpu_shader4 is used.
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp
index c4e7a03cccc..e91b86a935e 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/glsl_optimizer.cpp
@@ -440,8 +440,12 @@ static bool propagate_precision(exec_list* list, bool assign_high_to_undefined)
static void do_optimization_passes(exec_list* ir, bool linked, _mesa_glsl_parse_state* state, void* mem_ctx)
{
bool progress;
+ // FIXME: Shouldn't need to bound the number of passes
+ int passes = 0,
+ kMaximumPasses = 1000;
do {
progress = false;
+ ++passes;
bool progress2;
debug_print_ir ("Initial", ir, state, mem_ctx);
if (linked) {
@@ -497,7 +501,7 @@ static void do_optimization_passes(exec_list* ir, bool linked, _mesa_glsl_parse_
}
delete ls;
}
- } while (progress);
+ } while (progress && passes < kMaximumPasses);
if (!state->metal_target)
{
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp
index 9f7071d9564..f9988a31f61 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/ir_print_metal_visitor.cpp
@@ -1020,17 +1020,7 @@ void ir_print_metal_visitor::visit(ir_expression *ir)
const bool halfCast = (arg_prec == glsl_precision_medium || arg_prec == glsl_precision_low);
buffer.asprintf_append (halfCast ? "((half)1.0/(" : "(1.0/(");
} else {
- switch(ir->operation) {
- case ir_unop_dFdy:
- case ir_unop_dFdy_coarse:
- case ir_unop_dFdy_fine:
- buffer.asprintf_append ("%s(-", operator_glsl_strs[ir->operation]);
- break;
-
- default:
- buffer.asprintf_append ("%s(", operator_glsl_strs[ir->operation]);
- break;
- }
+ buffer.asprintf_append ("%s(", operator_glsl_strs[ir->operation]);
}
if (ir->operands[0])
ir->operands[0]->accept(this);
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/list.h b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/list.h
index b6c32bcccaf..ae0a15cae5b 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/list.h
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/list.h
@@ -163,8 +163,10 @@ exec_node_get_prev(struct exec_node *n)
static inline void
exec_node_remove(struct exec_node *n)
{
- n->next->prev = n->prev;
- n->prev->next = n->next;
+ if (n->next)
+ n->next->prev = n->prev;
+ if (n->prev)
+ n->prev->next = n->next;
n->next = NULL;
n->prev = NULL;
}
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/loop_analysis.cpp b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/loop_analysis.cpp
index 240ffc7399d..b0d3e306375 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/loop_analysis.cpp
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/loop_analysis.cpp
@@ -25,11 +25,10 @@
#include "loop_analysis.h"
#include "ir_hierarchical_visitor.h"
#include "ir_variable_refcount.h"
+#include "util/hash_table.h"
static bool is_loop_terminator(ir_if *ir);
-static bool used_outside_loops(exec_node *head, ir_variable *var, bool first_assignment);
-
static bool all_expression_operands_are_loop_constant(ir_rvalue *,
hash_table *);
@@ -84,6 +83,8 @@ loop_state::loop_state()
hash_table_pointer_compare);
this->ht_non_inductors = hash_table_ctor(0, hash_table_pointer_hash,
hash_table_pointer_compare);
+ this->ht_variables = hash_table_ctor(0, hash_table_pointer_hash,
+ hash_table_pointer_compare);
this->mem_ctx = ralloc_context(NULL);
this->loop_found = false;
}
@@ -94,6 +95,7 @@ loop_state::~loop_state()
hash_table_dtor(this->ht);
hash_table_dtor(this->ht_inductors);
hash_table_dtor(this->ht_non_inductors);
+ hash_table_dtor(this->ht_variables);
ralloc_free(this->mem_ctx);
}
@@ -122,10 +124,36 @@ loop_state::get_for_inductor(const ir_variable *ir)
return (loop_variable_state *) hash_table_find(this->ht_inductors, ir);
}
+static void *unreferenced_variable = (void *)1;
+static void *assigned_variable = (void *)2;
+
void
-loop_state::insert_non_inductor(ir_variable *var)
+loop_state::insert_variable(ir_variable *var)
{
- // key doesn't matter, just needs to be non-NULL
+ // data starts as 1. If an assignment is seen, it's replaced with 2.
+ // this way we can mark a variable as a non-inductor if it's referenced
+ // other than the first assignment
+ hash_table_insert(this->ht_variables, unreferenced_variable, var);
+}
+
+void
+loop_state::reference_variable(ir_variable *var, bool assignment)
+{
+ void *ref = hash_table_find(this->ht_variables, var);
+
+ // variable declaration was not seen or already discarded, just ignore
+ if (ref == NULL)
+ return;
+
+ if (ref == unreferenced_variable && assignment)
+ {
+ hash_table_replace(this->ht_variables, assigned_variable, var);
+ return;
+ }
+
+ // variable is referenced and not just in an initial assignment,
+ // so it cannot be an inductor
+ hash_table_remove(this->ht_variables, var);
hash_table_insert(this->ht_non_inductors, this, var);
}
@@ -266,10 +294,14 @@ public:
virtual ir_visitor_status visit_enter(ir_if *);
virtual ir_visitor_status visit_leave(ir_if *);
+ void visit_general(ir_instruction *);
+
loop_state *loops;
int if_statement_depth;
+ bool first_pass;
+
ir_assignment *current_assignment;
exec_list state;
@@ -277,10 +309,17 @@ public:
} /* anonymous namespace */
+void loop_enter_callback(class ir_instruction *ir, void *data)
+{
+ ((loop_analysis *)data)->visit_general(ir);
+}
+
loop_analysis::loop_analysis(loop_state *loops)
- : loops(loops), if_statement_depth(0), current_assignment(NULL)
+ : loops(loops), if_statement_depth(0), current_assignment(NULL), first_pass(false)
{
/* empty */
+ data_enter = this;
+ callback_enter = &loop_enter_callback;
}
@@ -308,16 +347,11 @@ loop_analysis::visit(ir_variable *var)
if (!this->state.is_empty())
return visit_continue;
- // Check if this variable is used outside a loop anywhere. If it is, it can't be a
- // variable that's private to the loop, so can't be an inductor.
- // This doesn't reject all possible non-inductors, notably anything declared in an
- // outer loop that isn't an inductor in an inner loop, but it can eliminate some
- // problem cases
- if (used_outside_loops(var->next, var, false))
- {
- // add to list of "non inductors"
- loops->insert_non_inductor(var);
- }
+ // In the first pass over the instructions we look at variables declared and
+ // examine their references to determine if they can be an inductor or not
+ // for the second pass
+ if (this->first_pass)
+ loops->insert_variable(var);
return visit_continue;
}
@@ -339,10 +373,15 @@ loop_analysis::visit_enter(ir_call *)
ir_visitor_status
loop_analysis::visit(ir_dereference_variable *ir)
{
- /* If we're not somewhere inside a loop, there's nothing to do.
+ /* If we're not somewhere inside a loop, just check for
+ * non-inductors
*/
- if (this->state.is_empty())
+ if (this->state.is_empty() || this->first_pass)
+ {
+ if (this->state.is_empty() && this->first_pass)
+ loops->reference_variable(ir->variable_referenced(), this->in_assignee);
return visit_continue;
+ }
bool nested = false;
@@ -382,8 +421,11 @@ loop_analysis::visit_leave(ir_loop *ir)
* We could perform some conservative analysis (prove there's no statically
* possible assignment, etc.) but it isn't worth it for now; function
* inlining will allow us to unroll loops anyway.
+ *
+ * We also skip doing any work in the first pass, where we are just identifying
+ * variables that cannot be inductors.
*/
- if (ls->contains_calls)
+ if (ls->contains_calls || this->first_pass)
return visit_continue;
foreach_in_list(ir_instruction, node, &ir->body_instructions) {
@@ -591,7 +633,7 @@ loop_analysis::visit_enter(ir_assignment *ir)
/* If we're not somewhere inside a loop, there's nothing to do.
*/
if (this->state.is_empty())
- return visit_continue_with_parent;
+ return visit_continue;
this->current_assignment = ir;
@@ -601,10 +643,8 @@ loop_analysis::visit_enter(ir_assignment *ir)
ir_visitor_status
loop_analysis::visit_leave(ir_assignment *ir)
{
- /* Since the visit_enter exits with visit_continue_with_parent for this
- * case, the loop state stack should never be empty here.
- */
- assert(!this->state.is_empty());
+ if (this->state.is_empty())
+ return visit_continue;
assert(this->current_assignment == ir);
this->current_assignment = NULL;
@@ -612,6 +652,24 @@ loop_analysis::visit_leave(ir_assignment *ir)
return visit_continue;
}
+void
+loop_analysis::visit_general(ir_instruction *ir)
+{
+ /* If we're inside a loop, we can't start marking things as non-inductors
+ * Likewise in the second pass we've done all this work, so return early
+ */
+ if (!this->state.is_empty() || !this->first_pass)
+ return;
+
+ ir_variable_refcount_visitor refs;
+ ir->accept (&refs);
+
+ struct hash_entry *referenced_var;
+ hash_table_foreach (refs.ht, referenced_var) {
+ ir_variable *var = (ir_variable *)referenced_var->key;
+ loops->reference_variable(var, false);
+ }
+}
class examine_rhs : public ir_hierarchical_visitor {
public:
@@ -733,72 +791,23 @@ is_loop_terminator(ir_if *ir)
return true;
}
-
-bool
-used_outside_loops(exec_node *head, ir_variable *var, bool first_assignment)
-{
- ir_variable_refcount_visitor refs;
- for (exec_node* node = head;
- !node->is_tail_sentinel();
- node = node->next)
- {
- ir_instruction *ir = (ir_instruction *) node;
- if (ir->ir_type == ir_type_variable)
- continue;
-
- // ignore the first assignment
- if (!first_assignment && ir->ir_type == ir_type_assignment)
- {
- ir_assignment *assign = ir->as_assignment();
- ir_variable *assignee = assign->lhs->whole_variable_referenced();
-
- if(assignee == var)
- {
- first_assignment = true;
- continue;
- }
- }
-
- // we don't want to recurse into loops
- if (ir->ir_type == ir_type_loop)
- continue;
-
- // recurse only for if statements, the other case we would need to recurse is
- // loops, but we are looking for uses outside of loops.
- if (ir->ir_type == ir_type_if)
- {
- ir_if *irif = ir->as_if();
- if (used_outside_loops(irif->then_instructions.head, var, first_assignment))
- return true;
- if (used_outside_loops(irif->else_instructions.head, var, first_assignment))
- return true;
-
- // if we didn't find in each branch with our recursion, skip
- // otherwise the accept (&refs) below will recurse into loops
- // and may give a false positive.
- continue;
- }
-
- // we know that we're not inside a loop as we haven't recursed inside,
- // and we started outside of a loop, so any references to this variable
- // mean it is used outside of any loops
- ir->accept (&refs);
- if (refs.find_variable_entry(var))
- {
- return true;
- }
- }
-
- return false;
-}
-
-
loop_state *
analyze_loop_variables(exec_list *instructions)
{
loop_state *loops = new loop_state;
loop_analysis v(loops);
+ /* Do two passes over the instructions. The first pass builds a view
+ * of the variables declared and whether or not they're used outside
+ * of loops (if so, they cannot be inductors).
+ *
+ * In the second pass we apply this information to do the loop analysis
+ * itself.
+ */
+ v.first_pass = true;
v.run(instructions);
+ v.first_pass = false;
+ v.run(instructions);
+
return v.loops;
}
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/loop_analysis.h b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/loop_analysis.h
index 299dbcfc89b..3b6b2d011f9 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/loop_analysis.h
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/glsl/loop_analysis.h
@@ -251,6 +251,8 @@ public:
loop_variable_state* get_for_inductor (const ir_variable*);
bool insert_inductor(loop_variable* loopvar, loop_variable_state* state, ir_loop* loop);
void insert_non_inductor(ir_variable *var);
+ void insert_variable(ir_variable *var);
+ void reference_variable(ir_variable *var, bool assignment);
bool loop_found;
@@ -267,6 +269,7 @@ private:
*/
hash_table *ht_inductors;
hash_table *ht_non_inductors;
+ hash_table *ht_variables;
void *mem_ctx;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/mesa/program/prog_hash_table.c b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/mesa/program/prog_hash_table.c
index 3b2152b69e2..680699b567f 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/src/mesa/program/prog_hash_table.c
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/src/mesa/program/prog_hash_table.c
@@ -84,6 +84,8 @@ hash_table_ctor(unsigned num_buckets, hash_func_t hash,
void
hash_table_dtor(struct hash_table *ht)
{
+ if (!ht)
+ return;
hash_table_clear(ht);
free(ht);
}
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/array-const-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/array-const-outES3Metal.txt
index cb270ab79c7..3021d1f2eb8 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/array-const-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/array-const-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
};
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/array-constconst-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/array-constconst-outES3Metal.txt
index cb270ab79c7..3021d1f2eb8 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/array-constconst-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/array-constconst-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
};
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ast-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ast-outES3Metal.txt
index 0069dadf46a..4bd58f3258f 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ast-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ast-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 gl_FragCoord [[position]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-loop-undeclaredinductor-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-loop-undeclaredinductor-outES3Metal.txt
index 7961441587a..c794c125922 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-loop-undeclaredinductor-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-loop-undeclaredinductor-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
half2 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-sampler-highp-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-sampler-highp-outES3Metal.txt
index 993c73706a7..424ef01645f 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-sampler-highp-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-sampler-highp-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float2 varUV;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-sampler-highpfull-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-sampler-highpfull-outES3Metal.txt
index 504f13c2fa0..f6753627729 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-sampler-highpfull-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/bug-sampler-highpfull-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
constant float2 _xlat_mtl_const1[12] = {float2(-0.326212, -0.40581), float2(-0.840144, -0.07358), float2(-0.695914, 0.457137), float2(-0.203345, 0.620716), float2(0.96234, -0.194983), float2(0.473434, -0.480026), float2(0.519456, 0.767022), float2(0.185461, -0.893124), float2(0.507431, 0.064425), float2(0.89642, 0.412458), float2(-0.32194, -0.932615), float2(-0.791559, -0.59771)};
struct xlatMtlShaderInput {
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/builtin-vars-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/builtin-vars-outES3Metal.txt
index c9a6e79087d..82058c2372d 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/builtin-vars-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/builtin-vars-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float2 gl_PointCoord [[point_coord]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/fragdepth-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/fragdepth-outES3Metal.txt
index 4e428db7521..b3ab30301ab 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/fragdepth-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/fragdepth-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
};
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/framebuffer_fetch-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/framebuffer_fetch-outES3Metal.txt
index 1d924da0d56..c2470caf352 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/framebuffer_fetch-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/framebuffer_fetch-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
half4 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-outES3Metal.txt
index 94760a640d9..4f5521cde7d 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/glsl120-basic-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
};
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/intrinsics-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/intrinsics-outES3Metal.txt
index ef6d9b456b7..223b512f488 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/intrinsics-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/intrinsics-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/loop-for-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/loop-for-outES3Metal.txt
index 0017785998c..87ded88ac8e 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/loop-for-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/loop-for-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float2 xlv_uv;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-outES3Metal.txt
index 171650fb84d..562cb9acb7c 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/loop-forafterdiscard-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float2 xlv_uv;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/matrix-cast-types-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/matrix-cast-types-outES3Metal.txt
index bb6013bd8b7..f0df5674877 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/matrix-cast-types-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/matrix-cast-types-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
inline float4x4 _xlcast_float4x4(half4x4 v) { return float4x4(float4(v[0]), float4(v[1]), float4(v[2]), float4(v[3])); }
inline float3x3 _xlcast_float3x3(half3x3 v) { return float3x3(float3(v[0]), float3(v[1]), float3(v[2])); }
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/matrix-ops-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/matrix-ops-outES3Metal.txt
index 458ecd3d401..1fbb32d9b16 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/matrix-ops-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/matrix-ops-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
inline float4x4 _xlinit_float4x4(float v) { return float4x4(float4(v), float4(v), float4(v), float4(v)); }
inline float3x3 _xlinit_float3x3(float v) { return float3x3(float3(v), float3(v), float3(v)); }
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-mixed-array-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-mixed-array-outES3Metal.txt
index 3e3ab12588e..4c9c30d5bcf 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-mixed-array-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-mixed-array-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
};
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-outES3Metal.txt
index fed2b03d345..e4b3f820a94 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
};
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-unused-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-unused-outES3Metal.txt
index 1f1a28a901a..a39c1b7d7af 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-unused-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/mrt-unused-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
half4 xlv_COLOR0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloadstreeshadow-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloadstreeshadow-outES3Metal.txt
index 31df0dfed37..369965c5f31 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloadstreeshadow-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/opt-dead-texloadstreeshadow-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
};
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/opt-grafting-precision-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/opt-grafting-precision-outES3Metal.txt
index 5c809e6093b..0d959ebe648 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/opt-grafting-precision-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/opt-grafting-precision-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
half3 normal;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/prec-expressions-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/prec-expressions-outES3Metal.txt
index ddfda4d46e1..eb189493adb 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/prec-expressions-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/prec-expressions-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
};
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/prec-matrix-constr-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/prec-matrix-constr-outES3Metal.txt
index 80891a9b762..3462062ac51 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/prec-matrix-constr-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/prec-matrix-constr-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
half3 inNormal;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/qualifiers-layout-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/qualifiers-layout-outES3Metal.txt
index 64f92a1ed5d..5edc1f20775 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/qualifiers-layout-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/qualifiers-layout-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
};
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/sampler-precision-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/sampler-precision-outES3Metal.txt
index 7d8a5f943ab..82d78249c8b 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/sampler-precision-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/sampler-precision-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 varUV;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ternary-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ternary-outES3Metal.txt
index aff9cd484d4..ca234064fb3 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ternary-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ternary-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-outES3Metal.txt
index 314f5f7cb75..4471023a756 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/ternary-vec4-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2DArray-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2DArray-outES3Metal.txt
index f74638ff102..606d3bb3f82 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2DArray-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2DArray-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 uv;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dgrad-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dgrad-outES3Metal.txt
index 3c81d626ae6..a070be52ede 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dgrad-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dgrad-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
half3 uv1;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-outES3Metal.txt
index bbe17239838..e8f1746eb68 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dlod-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 uvHi;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-outES3Metal.txt
index 2d85a7fc869..3171b51a5a1 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex2dshadow-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
constexpr sampler _mtl_xl_shadow_sampler(address::clamp_to_edge, filter::linear, compare_func::less);
struct xlatMtlShaderInput {
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex3D-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex3D-outES3Metal.txt
index 5999947328d..91d9515cb04 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex3D-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/tex3D-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float3 uv;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texCubeShadow-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texCubeShadow-outES3Metal.txt
index 68ec16019bd..e98663c919c 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texCubeShadow-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texCubeShadow-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
constexpr sampler _mtl_xl_shadow_sampler(address::clamp_to_edge, filter::linear, compare_func::less);
struct xlatMtlShaderInput {
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texOffset-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texOffset-outES3Metal.txt
index 2a1b68ce5c3..282db076b6e 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texOffset-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texOffset-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
half3 uv;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texProj-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texProj-outES3Metal.txt
index 961349b0a26..454f41277c8 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texProj-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/texProj-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
constexpr sampler _mtl_xl_shadow_sampler(address::clamp_to_edge, filter::linear, compare_func::less);
struct xlatMtlShaderInput {
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-DirLMBasis-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-DirLMBasis-outES3Metal.txt
index 88dbe7f737a..2fefeb706b1 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-DirLMBasis-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-DirLMBasis-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float2 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-LightShaftsCoord-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-LightShaftsCoord-outES3Metal.txt
index 1ae45cf3f1b..a336ad7a463 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-LightShaftsCoord-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-LightShaftsCoord-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float2 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-outES3Metal.txt
index 40f554b18a3..46530468113 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-alphabumpspec-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 _uv0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-outES3Metal.txt
index 39ecc369149..1d2fdeaed7e 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-collectshadows-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float2 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-outES3Metal.txt
index 852c4e0d203..6fa4138a027 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-fxaa-preset3-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float2 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-outES3Metal.txt
index 1e43ec7a3f2..57b1c341d4d 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-prepasslight-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-tonemap-usercurve-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-tonemap-usercurve-outES3Metal.txt
index ccff9b03516..97b273a9011 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-tonemap-usercurve-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-tonemap-usercurve-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float2 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-outES3Metal.txt
index bbec809e1f8..4a8dc6d47f1 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-treeleafloop-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float2 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-unishader-dirlm-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-unishader-dirlm-outES3Metal.txt
index 86355a1c017..0984cae0fe0 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-unishader-dirlm-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-unishader-dirlm-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-unity-spot-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-unity-spot-outES3Metal.txt
index a488e9feccf..5a77ed42947 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-unity-spot-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/z-unity-spot-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float2 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-outES3Metal.txt
index 469afd23c5d..4743f651c8e 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/zun-MobileBumpSpec-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
half2 xlv_TEXCOORD0;
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/zun-SSAO24-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/zun-SSAO24-outES3Metal.txt
index de7007b9112..3e2c3d4f34f 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/zun-SSAO24-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/zun-SSAO24-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
constant float3 _xlat_mtl_const1[8] = {float3(0.0130572, 0.587232, -0.119337), float3(0.323078, 0.0220727, -0.418873), float3(-0.310725, -0.191367, 0.0561369), float3(-0.479646, 0.0939877, -0.580265), float3(0.139999, -0.33577, 0.559679), float3(-0.248458, 0.255532, 0.348944), float3(0.18719, -0.702764, -0.231748), float3(0.884915, 0.284208, 0.368524)};
struct xlatMtlShaderInput {
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/glsl_optimizer_tests.cpp b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/glsl_optimizer_tests.cpp
index ddca5d1f288..caf87f267bb 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/glsl_optimizer_tests.cpp
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/glsl_optimizer_tests.cpp
@@ -315,9 +315,9 @@ static bool CheckGLSL (bool vertex, bool gles, const std::string& testName, cons
static bool CheckMetal (bool vertex, bool gles, const std::string& testName, const char* prefix, const std::string& source)
{
-#if !GOT_GFX
+#if !GOT_GFX || !defined(__APPLE__)
return true; // just assume it's ok
-#endif
+#else
FILE* f = fopen ("metalTemp.metal", "wb");
fwrite (source.c_str(), source.size(), 1, f);
@@ -333,6 +333,7 @@ static bool CheckMetal (bool vertex, bool gles, const std::string& testName, con
#endif //
return true;
+#endif
}
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/MF-GodRays-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/MF-GodRays-outES3Metal.txt
index 36efe5b06e8..c52c31b97ad 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/MF-GodRays-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/MF-GodRays-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 _inVertex [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/bug-swizzle-lhs-cast-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/bug-swizzle-lhs-cast-outES3Metal.txt
index d2b15808665..1da74693be8 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/bug-swizzle-lhs-cast-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/bug-swizzle-lhs-cast-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 _glesVertex [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/builtin-vars-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/builtin-vars-outES3Metal.txt
index 3c5b6e33b38..8d3e95e4ab6 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/builtin-vars-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/builtin-vars-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float3 _inPos [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/inputs-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/inputs-outES3Metal.txt
index 69cc59a3de7..f896ff66cd4 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/inputs-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/inputs-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 _glesVertex [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-for-withvec4-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-for-withvec4-outES3Metal.txt
index 8976a6750d2..fc95a3de659 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-for-withvec4-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-for-withvec4-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 dcl_Input0_POSITION0 [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-for-withvec4inductorW-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-for-withvec4inductorW-outES3Metal.txt
index a6e6c9b72a8..00690e14860 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-for-withvec4inductorW-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-for-withvec4inductorW-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 in_POSITION0 [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-forlimitbreak-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-forlimitbreak-outES3Metal.txt
index 4fff005a315..097f161d566 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-forlimitbreak-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-forlimitbreak-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 _glesVertex [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-outES3Metal.txt
index 6e94ee11d38..a87dcb7854b 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/loops-forvarious-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 _inVertex [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/matrix-casts-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/matrix-casts-outES3Metal.txt
index 8e8bf35087f..b888c4c9825 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/matrix-casts-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/matrix-casts-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
inline float4x4 _xlcast_float4x4(half4x4 v) { return float4x4(float4(v[0]), float4(v[1]), float4(v[2]), float4(v[3])); }
inline float3x3 _xlcast_float3x3(half3x3 v) { return float3x3(float3(v[0]), float3(v[1]), float3(v[2])); }
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-transpose-mul-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-transpose-mul-outES3Metal.txt
index 98b2075bd91..78a49f1cabf 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-transpose-mul-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/opt-matrix-transpose-mul-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 attrVertex [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/swizzle-casts-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/swizzle-casts-outES3Metal.txt
index b657adeb7fe..0667465cea4 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/swizzle-casts-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/swizzle-casts-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 _glesVertex [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/types-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/types-outES3Metal.txt
index 40a4d863b38..310cef2db24 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/types-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/types-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 _inVertex [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/uniforms-arrays-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/uniforms-arrays-outES3Metal.txt
index 979ea56165e..c6557d378a7 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/uniforms-arrays-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/uniforms-arrays-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 _glesVertex [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-NichsHybridLightVectorInsertBug-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-NichsHybridLightVectorInsertBug-outES3Metal.txt
index a56f7df0793..680204bd85e 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-NichsHybridLightVectorInsertBug-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-NichsHybridLightVectorInsertBug-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 _glesVertex [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-outES3Metal.txt
index a6f6f5c03fb..36a8c79b23a 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-prepasslight-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 _vertex [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-outES3Metal.txt b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-outES3Metal.txt
index f825c2f87bd..3d9bc6f8dff 100644
--- a/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-outES3Metal.txt
+++ b/3rdparty/bgfx/3rdparty/glsl-optimizer/tests/vertex/z-treeleaf-outES3Metal.txt
@@ -1,4 +1,5 @@
#include <metal_stdlib>
+#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
float4 _inVertex [[attribute(0)]];
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_lunarg_debug_marker.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_lunarg_debug_marker.h
new file mode 100644
index 00000000000..edff2b9eee8
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_lunarg_debug_marker.h
@@ -0,0 +1,98 @@
+//
+// File: vk_lunarg_debug_marker.h
+//
+/*
+ * Copyright (c) 2015-2016 The Khronos Group Inc.
+ * Copyright (c) 2015-2016 Valve Corporation
+ * Copyright (c) 2015-2016 LunarG, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and/or associated documentation files (the "Materials"), to
+ * deal in the Materials without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Materials, and to permit persons to whom the Materials are
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice(s) and this permission notice shall be included in
+ * all copies or substantial portions of the Materials.
+ *
+ * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ *
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
+ * USE OR OTHER DEALINGS IN THE MATERIALS.
+ *
+ * Authors:
+ * Jon Ashburn <jon@lunarg.com>
+ * Courtney Goeltzenleuchter <courtney@lunarg.com>
+ */
+
+#ifndef __VK_DEBUG_MARKER_H__
+#define __VK_DEBUG_MARKER_H__
+
+#include "vulkan.h"
+
+#define VK_DEBUG_MARKER_EXTENSION_NUMBER 6
+#define VK_DEBUG_MARKER_EXTENSION_REVISION 1
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/*
+***************************************************************************************************
+* DebugMarker Vulkan Extension API
+***************************************************************************************************
+*/
+
+#define DEBUG_MARKER_EXTENSION_NAME "VK_LUNARG_DEBUG_MARKER"
+
+// ------------------------------------------------------------------------------------------------
+// Enumerations
+
+#define VK_DEBUG_MARKER_ENUM_EXTEND(type, id) \
+ ((type)(VK_DEBUG_MARKER_EXTENSION_NUMBER * -1000 + (id)))
+
+#define VK_OBJECT_INFO_TYPE_DBG_OBJECT_TAG \
+ VK_DEBUG_MARKER_ENUM_EXTEND(VkDbgObjectInfoType, 0)
+#define VK_OBJECT_INFO_TYPE_DBG_OBJECT_NAME \
+ VK_DEBUG_MARKER_ENUM_EXTEND(VkDbgObjectInfoType, 1)
+
+// ------------------------------------------------------------------------------------------------
+// API functions
+
+typedef void(VKAPI_PTR *PFN_vkCmdDbgMarkerBegin)(VkCommandBuffer commandBuffer,
+ const char *pMarker);
+typedef void(VKAPI_PTR *PFN_vkCmdDbgMarkerEnd)(VkCommandBuffer commandBuffer);
+typedef VkResult(VKAPI_PTR *PFN_vkDbgSetObjectTag)(
+ VkDevice device, VkDebugReportObjectTypeEXT objType, uint64_t object,
+ size_t tagSize, const void *pTag);
+typedef VkResult(VKAPI_PTR *PFN_vkDbgSetObjectName)(
+ VkDevice device, VkDebugReportObjectTypeEXT objType, uint64_t object,
+ size_t nameSize, const char *pName);
+
+#ifndef VK_NO_PROTOTYPES
+
+// DebugMarker extension entrypoints
+VKAPI_ATTR void VKAPI_CALL
+vkCmdDbgMarkerBegin(VkCommandBuffer commandBuffer, const char *pMarker);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDbgMarkerEnd(VkCommandBuffer commandBuffer);
+
+VKAPI_ATTR VkResult VKAPI_CALL
+vkDbgSetObjectTag(VkDevice device, VkDebugReportObjectTypeEXT objType,
+ uint64_t object, size_t tagSize, const void *pTag);
+
+VKAPI_ATTR VkResult VKAPI_CALL
+vkDbgSetObjectName(VkDevice device, VkDebugReportObjectTypeEXT objType,
+ uint64_t object, size_t nameSize, const char *pName);
+
+#endif // VK_NO_PROTOTYPES
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // __VK_DEBUG_MARKER_H__
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h
new file mode 100644
index 00000000000..a53e725a9a6
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h
@@ -0,0 +1,127 @@
+//
+// File: vk_platform.h
+//
+/*
+** Copyright (c) 2014-2015 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+
+#ifndef __VK_PLATFORM_H__
+#define __VK_PLATFORM_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+/*
+***************************************************************************************************
+* Platform-specific directives and type declarations
+***************************************************************************************************
+*/
+
+/* Platform-specific calling convention macros.
+ *
+ * Platforms should define these so that Vulkan clients call Vulkan commands
+ * with the same calling conventions that the Vulkan implementation expects.
+ *
+ * VKAPI_ATTR - Placed before the return type in function declarations.
+ * Useful for C++11 and GCC/Clang-style function attribute syntax.
+ * VKAPI_CALL - Placed after the return type in function declarations.
+ * Useful for MSVC-style calling convention syntax.
+ * VKAPI_PTR - Placed between the '(' and '*' in function pointer types.
+ *
+ * Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void);
+ * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void);
+ */
+#if defined(_WIN32)
+ // On Windows, Vulkan commands use the stdcall convention
+ #define VKAPI_ATTR
+ #define VKAPI_CALL __stdcall
+ #define VKAPI_PTR VKAPI_CALL
+#elif defined(__ANDROID__) && defined(__ARM_EABI__) && !defined(__ARM_ARCH_7A__)
+ // Android does not support Vulkan in native code using the "armeabi" ABI.
+ #error "Vulkan requires the 'armeabi-v7a' or 'armeabi-v7a-hard' ABI on 32-bit ARM CPUs"
+#elif defined(__ANDROID__) && defined(__ARM_ARCH_7A__)
+ // On Android/ARMv7a, Vulkan functions use the armeabi-v7a-hard calling
+ // convention, even if the application's native code is compiled with the
+ // armeabi-v7a calling convention.
+ #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp")))
+ #define VKAPI_CALL
+ #define VKAPI_PTR VKAPI_ATTR
+#else
+ // On other platforms, use the default calling convention
+ #define VKAPI_ATTR
+ #define VKAPI_CALL
+ #define VKAPI_PTR
+#endif
+
+#include <stddef.h>
+
+#if !defined(VK_NO_STDINT_H)
+ #if defined(_MSC_VER) && (_MSC_VER < 1600)
+ typedef signed __int8 int8_t;
+ typedef unsigned __int8 uint8_t;
+ typedef signed __int16 int16_t;
+ typedef unsigned __int16 uint16_t;
+ typedef signed __int32 int32_t;
+ typedef unsigned __int32 uint32_t;
+ typedef signed __int64 int64_t;
+ typedef unsigned __int64 uint64_t;
+ #else
+ #include <stdint.h>
+ #endif
+#endif // !defined(VK_NO_STDINT_H)
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+// Platform-specific headers required by platform window system extensions.
+// These are enabled prior to #including "vulkan.h". The same enable then
+// controls inclusion of the extension interfaces in vulkan.h.
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+#include <android/native_window.h>
+#endif
+
+#ifdef VK_USE_PLATFORM_MIR_KHR
+#include <mir_toolkit/client_types.h>
+#endif
+
+#ifdef VK_USE_PLATFORM_WAYLAND_KHR
+#include <wayland-client.h>
+#endif
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+#include <windows.h>
+#endif
+
+#ifdef VK_USE_PLATFORM_XLIB_KHR
+#include <X11/Xlib.h>
+#endif
+
+#ifdef VK_USE_PLATFORM_XCB_KHR
+#include <xcb/xcb.h>
+#endif
+
+#endif // __VK_PLATFORM_H__
diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h
new file mode 100644
index 00000000000..cd6a71ac1a9
--- /dev/null
+++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h
@@ -0,0 +1,3775 @@
+#ifndef __vulkan_h_
+#define __vulkan_h_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2015-2016 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#define VK_VERSION_1_0 1
+#include "vk_platform.h"
+
+#define VK_MAKE_VERSION(major, minor, patch) \
+ (((major) << 22) | ((minor) << 12) | (patch))
+
+// Vulkan API version supported by this file
+#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 3)
+
+#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
+#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
+#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
+
+#define VK_NULL_HANDLE 0
+
+
+
+#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
+
+
+#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
+ #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
+#else
+ #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
+#endif
+
+
+
+typedef uint32_t VkFlags;
+typedef uint32_t VkBool32;
+typedef uint64_t VkDeviceSize;
+typedef uint32_t VkSampleMask;
+
+VK_DEFINE_HANDLE(VkInstance)
+VK_DEFINE_HANDLE(VkPhysicalDevice)
+VK_DEFINE_HANDLE(VkDevice)
+VK_DEFINE_HANDLE(VkQueue)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore)
+VK_DEFINE_HANDLE(VkCommandBuffer)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
+
+#define VK_LOD_CLAMP_NONE 1000.0f
+#define VK_REMAINING_MIP_LEVELS (~0U)
+#define VK_REMAINING_ARRAY_LAYERS (~0U)
+#define VK_WHOLE_SIZE (~0ULL)
+#define VK_ATTACHMENT_UNUSED (~0U)
+#define VK_TRUE 1
+#define VK_FALSE 0
+#define VK_QUEUE_FAMILY_IGNORED (~0U)
+#define VK_SUBPASS_EXTERNAL (~0U)
+#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256
+#define VK_UUID_SIZE 16
+#define VK_MAX_MEMORY_TYPES 32
+#define VK_MAX_MEMORY_HEAPS 16
+#define VK_MAX_EXTENSION_NAME_SIZE 256
+#define VK_MAX_DESCRIPTION_SIZE 256
+
+
+typedef enum VkPipelineCacheHeaderVersion {
+ VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1,
+ VK_PIPELINE_CACHE_HEADER_VERSION_BEGIN_RANGE = VK_PIPELINE_CACHE_HEADER_VERSION_ONE,
+ VK_PIPELINE_CACHE_HEADER_VERSION_END_RANGE = VK_PIPELINE_CACHE_HEADER_VERSION_ONE,
+ VK_PIPELINE_CACHE_HEADER_VERSION_RANGE_SIZE = (VK_PIPELINE_CACHE_HEADER_VERSION_ONE - VK_PIPELINE_CACHE_HEADER_VERSION_ONE + 1),
+ VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineCacheHeaderVersion;
+
+typedef enum VkResult {
+ VK_SUCCESS = 0,
+ VK_NOT_READY = 1,
+ VK_TIMEOUT = 2,
+ VK_EVENT_SET = 3,
+ VK_EVENT_RESET = 4,
+ VK_INCOMPLETE = 5,
+ VK_ERROR_OUT_OF_HOST_MEMORY = -1,
+ VK_ERROR_OUT_OF_DEVICE_MEMORY = -2,
+ VK_ERROR_INITIALIZATION_FAILED = -3,
+ VK_ERROR_DEVICE_LOST = -4,
+ VK_ERROR_MEMORY_MAP_FAILED = -5,
+ VK_ERROR_LAYER_NOT_PRESENT = -6,
+ VK_ERROR_EXTENSION_NOT_PRESENT = -7,
+ VK_ERROR_FEATURE_NOT_PRESENT = -8,
+ VK_ERROR_INCOMPATIBLE_DRIVER = -9,
+ VK_ERROR_TOO_MANY_OBJECTS = -10,
+ VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
+ VK_ERROR_SURFACE_LOST_KHR = -1000000000,
+ VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001,
+ VK_SUBOPTIMAL_KHR = 1000001003,
+ VK_ERROR_OUT_OF_DATE_KHR = -1000001004,
+ VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
+ VK_ERROR_VALIDATION_FAILED_EXT = -1000011001,
+ VK_RESULT_BEGIN_RANGE = VK_ERROR_FORMAT_NOT_SUPPORTED,
+ VK_RESULT_END_RANGE = VK_INCOMPLETE,
+ VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FORMAT_NOT_SUPPORTED + 1),
+ VK_RESULT_MAX_ENUM = 0x7FFFFFFF
+} VkResult;
+
+typedef enum VkStructureType {
+ VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
+ VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1,
+ VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
+ VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3,
+ VK_STRUCTURE_TYPE_SUBMIT_INFO = 4,
+ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5,
+ VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6,
+ VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7,
+ VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8,
+ VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9,
+ VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
+ VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11,
+ VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12,
+ VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13,
+ VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14,
+ VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15,
+ VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16,
+ VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17,
+ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18,
+ VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19,
+ VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
+ VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21,
+ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22,
+ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23,
+ VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24,
+ VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25,
+ VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26,
+ VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27,
+ VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28,
+ VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29,
+ VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30,
+ VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34,
+ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35,
+ VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36,
+ VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37,
+ VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38,
+ VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39,
+ VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40,
+ VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41,
+ VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42,
+ VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
+ VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44,
+ VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45,
+ VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46,
+ VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47,
+ VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48,
+ VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000,
+ VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001,
+ VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000,
+ VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001,
+ VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 1000003000,
+ VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000,
+ VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000,
+ VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000,
+ VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR = 1000007000,
+ VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = 1000008000,
+ VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000,
+ VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = 1000011000,
+ VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
+ VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
+ VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
+ VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkStructureType;
+
+typedef enum VkSystemAllocationScope {
+ VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0,
+ VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1,
+ VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2,
+ VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3,
+ VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4,
+ VK_SYSTEM_ALLOCATION_SCOPE_BEGIN_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND,
+ VK_SYSTEM_ALLOCATION_SCOPE_END_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE,
+ VK_SYSTEM_ALLOCATION_SCOPE_RANGE_SIZE = (VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE - VK_SYSTEM_ALLOCATION_SCOPE_COMMAND + 1),
+ VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF
+} VkSystemAllocationScope;
+
+typedef enum VkInternalAllocationType {
+ VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0,
+ VK_INTERNAL_ALLOCATION_TYPE_BEGIN_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
+ VK_INTERNAL_ALLOCATION_TYPE_END_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
+ VK_INTERNAL_ALLOCATION_TYPE_RANGE_SIZE = (VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE - VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE + 1),
+ VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkInternalAllocationType;
+
+typedef enum VkFormat {
+ VK_FORMAT_UNDEFINED = 0,
+ VK_FORMAT_R4G4_UNORM_PACK8 = 1,
+ VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2,
+ VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3,
+ VK_FORMAT_R5G6B5_UNORM_PACK16 = 4,
+ VK_FORMAT_B5G6R5_UNORM_PACK16 = 5,
+ VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
+ VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
+ VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
+ VK_FORMAT_R8_UNORM = 9,
+ VK_FORMAT_R8_SNORM = 10,
+ VK_FORMAT_R8_USCALED = 11,
+ VK_FORMAT_R8_SSCALED = 12,
+ VK_FORMAT_R8_UINT = 13,
+ VK_FORMAT_R8_SINT = 14,
+ VK_FORMAT_R8_SRGB = 15,
+ VK_FORMAT_R8G8_UNORM = 16,
+ VK_FORMAT_R8G8_SNORM = 17,
+ VK_FORMAT_R8G8_USCALED = 18,
+ VK_FORMAT_R8G8_SSCALED = 19,
+ VK_FORMAT_R8G8_UINT = 20,
+ VK_FORMAT_R8G8_SINT = 21,
+ VK_FORMAT_R8G8_SRGB = 22,
+ VK_FORMAT_R8G8B8_UNORM = 23,
+ VK_FORMAT_R8G8B8_SNORM = 24,
+ VK_FORMAT_R8G8B8_USCALED = 25,
+ VK_FORMAT_R8G8B8_SSCALED = 26,
+ VK_FORMAT_R8G8B8_UINT = 27,
+ VK_FORMAT_R8G8B8_SINT = 28,
+ VK_FORMAT_R8G8B8_SRGB = 29,
+ VK_FORMAT_B8G8R8_UNORM = 30,
+ VK_FORMAT_B8G8R8_SNORM = 31,
+ VK_FORMAT_B8G8R8_USCALED = 32,
+ VK_FORMAT_B8G8R8_SSCALED = 33,
+ VK_FORMAT_B8G8R8_UINT = 34,
+ VK_FORMAT_B8G8R8_SINT = 35,
+ VK_FORMAT_B8G8R8_SRGB = 36,
+ VK_FORMAT_R8G8B8A8_UNORM = 37,
+ VK_FORMAT_R8G8B8A8_SNORM = 38,
+ VK_FORMAT_R8G8B8A8_USCALED = 39,
+ VK_FORMAT_R8G8B8A8_SSCALED = 40,
+ VK_FORMAT_R8G8B8A8_UINT = 41,
+ VK_FORMAT_R8G8B8A8_SINT = 42,
+ VK_FORMAT_R8G8B8A8_SRGB = 43,
+ VK_FORMAT_B8G8R8A8_UNORM = 44,
+ VK_FORMAT_B8G8R8A8_SNORM = 45,
+ VK_FORMAT_B8G8R8A8_USCALED = 46,
+ VK_FORMAT_B8G8R8A8_SSCALED = 47,
+ VK_FORMAT_B8G8R8A8_UINT = 48,
+ VK_FORMAT_B8G8R8A8_SINT = 49,
+ VK_FORMAT_B8G8R8A8_SRGB = 50,
+ VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51,
+ VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52,
+ VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53,
+ VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54,
+ VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55,
+ VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56,
+ VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57,
+ VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58,
+ VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59,
+ VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60,
+ VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61,
+ VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62,
+ VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63,
+ VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64,
+ VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65,
+ VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66,
+ VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67,
+ VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68,
+ VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69,
+ VK_FORMAT_R16_UNORM = 70,
+ VK_FORMAT_R16_SNORM = 71,
+ VK_FORMAT_R16_USCALED = 72,
+ VK_FORMAT_R16_SSCALED = 73,
+ VK_FORMAT_R16_UINT = 74,
+ VK_FORMAT_R16_SINT = 75,
+ VK_FORMAT_R16_SFLOAT = 76,
+ VK_FORMAT_R16G16_UNORM = 77,
+ VK_FORMAT_R16G16_SNORM = 78,
+ VK_FORMAT_R16G16_USCALED = 79,
+ VK_FORMAT_R16G16_SSCALED = 80,
+ VK_FORMAT_R16G16_UINT = 81,
+ VK_FORMAT_R16G16_SINT = 82,
+ VK_FORMAT_R16G16_SFLOAT = 83,
+ VK_FORMAT_R16G16B16_UNORM = 84,
+ VK_FORMAT_R16G16B16_SNORM = 85,
+ VK_FORMAT_R16G16B16_USCALED = 86,
+ VK_FORMAT_R16G16B16_SSCALED = 87,
+ VK_FORMAT_R16G16B16_UINT = 88,
+ VK_FORMAT_R16G16B16_SINT = 89,
+ VK_FORMAT_R16G16B16_SFLOAT = 90,
+ VK_FORMAT_R16G16B16A16_UNORM = 91,
+ VK_FORMAT_R16G16B16A16_SNORM = 92,
+ VK_FORMAT_R16G16B16A16_USCALED = 93,
+ VK_FORMAT_R16G16B16A16_SSCALED = 94,
+ VK_FORMAT_R16G16B16A16_UINT = 95,
+ VK_FORMAT_R16G16B16A16_SINT = 96,
+ VK_FORMAT_R16G16B16A16_SFLOAT = 97,
+ VK_FORMAT_R32_UINT = 98,
+ VK_FORMAT_R32_SINT = 99,
+ VK_FORMAT_R32_SFLOAT = 100,
+ VK_FORMAT_R32G32_UINT = 101,
+ VK_FORMAT_R32G32_SINT = 102,
+ VK_FORMAT_R32G32_SFLOAT = 103,
+ VK_FORMAT_R32G32B32_UINT = 104,
+ VK_FORMAT_R32G32B32_SINT = 105,
+ VK_FORMAT_R32G32B32_SFLOAT = 106,
+ VK_FORMAT_R32G32B32A32_UINT = 107,
+ VK_FORMAT_R32G32B32A32_SINT = 108,
+ VK_FORMAT_R32G32B32A32_SFLOAT = 109,
+ VK_FORMAT_R64_UINT = 110,
+ VK_FORMAT_R64_SINT = 111,
+ VK_FORMAT_R64_SFLOAT = 112,
+ VK_FORMAT_R64G64_UINT = 113,
+ VK_FORMAT_R64G64_SINT = 114,
+ VK_FORMAT_R64G64_SFLOAT = 115,
+ VK_FORMAT_R64G64B64_UINT = 116,
+ VK_FORMAT_R64G64B64_SINT = 117,
+ VK_FORMAT_R64G64B64_SFLOAT = 118,
+ VK_FORMAT_R64G64B64A64_UINT = 119,
+ VK_FORMAT_R64G64B64A64_SINT = 120,
+ VK_FORMAT_R64G64B64A64_SFLOAT = 121,
+ VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122,
+ VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123,
+ VK_FORMAT_D16_UNORM = 124,
+ VK_FORMAT_X8_D24_UNORM_PACK32 = 125,
+ VK_FORMAT_D32_SFLOAT = 126,
+ VK_FORMAT_S8_UINT = 127,
+ VK_FORMAT_D16_UNORM_S8_UINT = 128,
+ VK_FORMAT_D24_UNORM_S8_UINT = 129,
+ VK_FORMAT_D32_SFLOAT_S8_UINT = 130,
+ VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131,
+ VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132,
+ VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133,
+ VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134,
+ VK_FORMAT_BC2_UNORM_BLOCK = 135,
+ VK_FORMAT_BC2_SRGB_BLOCK = 136,
+ VK_FORMAT_BC3_UNORM_BLOCK = 137,
+ VK_FORMAT_BC3_SRGB_BLOCK = 138,
+ VK_FORMAT_BC4_UNORM_BLOCK = 139,
+ VK_FORMAT_BC4_SNORM_BLOCK = 140,
+ VK_FORMAT_BC5_UNORM_BLOCK = 141,
+ VK_FORMAT_BC5_SNORM_BLOCK = 142,
+ VK_FORMAT_BC6H_UFLOAT_BLOCK = 143,
+ VK_FORMAT_BC6H_SFLOAT_BLOCK = 144,
+ VK_FORMAT_BC7_UNORM_BLOCK = 145,
+ VK_FORMAT_BC7_SRGB_BLOCK = 146,
+ VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147,
+ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148,
+ VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149,
+ VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150,
+ VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151,
+ VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152,
+ VK_FORMAT_EAC_R11_UNORM_BLOCK = 153,
+ VK_FORMAT_EAC_R11_SNORM_BLOCK = 154,
+ VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155,
+ VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156,
+ VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157,
+ VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158,
+ VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159,
+ VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160,
+ VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161,
+ VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162,
+ VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163,
+ VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164,
+ VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165,
+ VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166,
+ VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167,
+ VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168,
+ VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169,
+ VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170,
+ VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171,
+ VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172,
+ VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173,
+ VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174,
+ VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175,
+ VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176,
+ VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177,
+ VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178,
+ VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179,
+ VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180,
+ VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181,
+ VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
+ VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
+ VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
+ VK_FORMAT_BEGIN_RANGE = VK_FORMAT_UNDEFINED,
+ VK_FORMAT_END_RANGE = VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
+ VK_FORMAT_RANGE_SIZE = (VK_FORMAT_ASTC_12x12_SRGB_BLOCK - VK_FORMAT_UNDEFINED + 1),
+ VK_FORMAT_MAX_ENUM = 0x7FFFFFFF
+} VkFormat;
+
+typedef enum VkImageType {
+ VK_IMAGE_TYPE_1D = 0,
+ VK_IMAGE_TYPE_2D = 1,
+ VK_IMAGE_TYPE_3D = 2,
+ VK_IMAGE_TYPE_BEGIN_RANGE = VK_IMAGE_TYPE_1D,
+ VK_IMAGE_TYPE_END_RANGE = VK_IMAGE_TYPE_3D,
+ VK_IMAGE_TYPE_RANGE_SIZE = (VK_IMAGE_TYPE_3D - VK_IMAGE_TYPE_1D + 1),
+ VK_IMAGE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkImageType;
+
+typedef enum VkImageTiling {
+ VK_IMAGE_TILING_OPTIMAL = 0,
+ VK_IMAGE_TILING_LINEAR = 1,
+ VK_IMAGE_TILING_BEGIN_RANGE = VK_IMAGE_TILING_OPTIMAL,
+ VK_IMAGE_TILING_END_RANGE = VK_IMAGE_TILING_LINEAR,
+ VK_IMAGE_TILING_RANGE_SIZE = (VK_IMAGE_TILING_LINEAR - VK_IMAGE_TILING_OPTIMAL + 1),
+ VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF
+} VkImageTiling;
+
+typedef enum VkPhysicalDeviceType {
+ VK_PHYSICAL_DEVICE_TYPE_OTHER = 0,
+ VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1,
+ VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2,
+ VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3,
+ VK_PHYSICAL_DEVICE_TYPE_CPU = 4,
+ VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE = VK_PHYSICAL_DEVICE_TYPE_OTHER,
+ VK_PHYSICAL_DEVICE_TYPE_END_RANGE = VK_PHYSICAL_DEVICE_TYPE_CPU,
+ VK_PHYSICAL_DEVICE_TYPE_RANGE_SIZE = (VK_PHYSICAL_DEVICE_TYPE_CPU - VK_PHYSICAL_DEVICE_TYPE_OTHER + 1),
+ VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkPhysicalDeviceType;
+
+typedef enum VkQueryType {
+ VK_QUERY_TYPE_OCCLUSION = 0,
+ VK_QUERY_TYPE_PIPELINE_STATISTICS = 1,
+ VK_QUERY_TYPE_TIMESTAMP = 2,
+ VK_QUERY_TYPE_BEGIN_RANGE = VK_QUERY_TYPE_OCCLUSION,
+ VK_QUERY_TYPE_END_RANGE = VK_QUERY_TYPE_TIMESTAMP,
+ VK_QUERY_TYPE_RANGE_SIZE = (VK_QUERY_TYPE_TIMESTAMP - VK_QUERY_TYPE_OCCLUSION + 1),
+ VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkQueryType;
+
+typedef enum VkSharingMode {
+ VK_SHARING_MODE_EXCLUSIVE = 0,
+ VK_SHARING_MODE_CONCURRENT = 1,
+ VK_SHARING_MODE_BEGIN_RANGE = VK_SHARING_MODE_EXCLUSIVE,
+ VK_SHARING_MODE_END_RANGE = VK_SHARING_MODE_CONCURRENT,
+ VK_SHARING_MODE_RANGE_SIZE = (VK_SHARING_MODE_CONCURRENT - VK_SHARING_MODE_EXCLUSIVE + 1),
+ VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkSharingMode;
+
+typedef enum VkImageLayout {
+ VK_IMAGE_LAYOUT_UNDEFINED = 0,
+ VK_IMAGE_LAYOUT_GENERAL = 1,
+ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2,
+ VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3,
+ VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4,
+ VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5,
+ VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6,
+ VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7,
+ VK_IMAGE_LAYOUT_PREINITIALIZED = 8,
+ VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
+ VK_IMAGE_LAYOUT_BEGIN_RANGE = VK_IMAGE_LAYOUT_UNDEFINED,
+ VK_IMAGE_LAYOUT_END_RANGE = VK_IMAGE_LAYOUT_PREINITIALIZED,
+ VK_IMAGE_LAYOUT_RANGE_SIZE = (VK_IMAGE_LAYOUT_PREINITIALIZED - VK_IMAGE_LAYOUT_UNDEFINED + 1),
+ VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF
+} VkImageLayout;
+
+typedef enum VkImageViewType {
+ VK_IMAGE_VIEW_TYPE_1D = 0,
+ VK_IMAGE_VIEW_TYPE_2D = 1,
+ VK_IMAGE_VIEW_TYPE_3D = 2,
+ VK_IMAGE_VIEW_TYPE_CUBE = 3,
+ VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4,
+ VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5,
+ VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6,
+ VK_IMAGE_VIEW_TYPE_BEGIN_RANGE = VK_IMAGE_VIEW_TYPE_1D,
+ VK_IMAGE_VIEW_TYPE_END_RANGE = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY,
+ VK_IMAGE_VIEW_TYPE_RANGE_SIZE = (VK_IMAGE_VIEW_TYPE_CUBE_ARRAY - VK_IMAGE_VIEW_TYPE_1D + 1),
+ VK_IMAGE_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkImageViewType;
+
+typedef enum VkComponentSwizzle {
+ VK_COMPONENT_SWIZZLE_IDENTITY = 0,
+ VK_COMPONENT_SWIZZLE_ZERO = 1,
+ VK_COMPONENT_SWIZZLE_ONE = 2,
+ VK_COMPONENT_SWIZZLE_R = 3,
+ VK_COMPONENT_SWIZZLE_G = 4,
+ VK_COMPONENT_SWIZZLE_B = 5,
+ VK_COMPONENT_SWIZZLE_A = 6,
+ VK_COMPONENT_SWIZZLE_BEGIN_RANGE = VK_COMPONENT_SWIZZLE_IDENTITY,
+ VK_COMPONENT_SWIZZLE_END_RANGE = VK_COMPONENT_SWIZZLE_A,
+ VK_COMPONENT_SWIZZLE_RANGE_SIZE = (VK_COMPONENT_SWIZZLE_A - VK_COMPONENT_SWIZZLE_IDENTITY + 1),
+ VK_COMPONENT_SWIZZLE_MAX_ENUM = 0x7FFFFFFF
+} VkComponentSwizzle;
+
+typedef enum VkVertexInputRate {
+ VK_VERTEX_INPUT_RATE_VERTEX = 0,
+ VK_VERTEX_INPUT_RATE_INSTANCE = 1,
+ VK_VERTEX_INPUT_RATE_BEGIN_RANGE = VK_VERTEX_INPUT_RATE_VERTEX,
+ VK_VERTEX_INPUT_RATE_END_RANGE = VK_VERTEX_INPUT_RATE_INSTANCE,
+ VK_VERTEX_INPUT_RATE_RANGE_SIZE = (VK_VERTEX_INPUT_RATE_INSTANCE - VK_VERTEX_INPUT_RATE_VERTEX + 1),
+ VK_VERTEX_INPUT_RATE_MAX_ENUM = 0x7FFFFFFF
+} VkVertexInputRate;
+
+typedef enum VkPrimitiveTopology {
+ VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0,
+ VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1,
+ VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2,
+ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3,
+ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4,
+ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5,
+ VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6,
+ VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7,
+ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8,
+ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9,
+ VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10,
+ VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE = VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
+ VK_PRIMITIVE_TOPOLOGY_END_RANGE = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST,
+ VK_PRIMITIVE_TOPOLOGY_RANGE_SIZE = (VK_PRIMITIVE_TOPOLOGY_PATCH_LIST - VK_PRIMITIVE_TOPOLOGY_POINT_LIST + 1),
+ VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF
+} VkPrimitiveTopology;
+
+typedef enum VkPolygonMode {
+ VK_POLYGON_MODE_FILL = 0,
+ VK_POLYGON_MODE_LINE = 1,
+ VK_POLYGON_MODE_POINT = 2,
+ VK_POLYGON_MODE_BEGIN_RANGE = VK_POLYGON_MODE_FILL,
+ VK_POLYGON_MODE_END_RANGE = VK_POLYGON_MODE_POINT,
+ VK_POLYGON_MODE_RANGE_SIZE = (VK_POLYGON_MODE_POINT - VK_POLYGON_MODE_FILL + 1),
+ VK_POLYGON_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkPolygonMode;
+
+typedef enum VkFrontFace {
+ VK_FRONT_FACE_COUNTER_CLOCKWISE = 0,
+ VK_FRONT_FACE_CLOCKWISE = 1,
+ VK_FRONT_FACE_BEGIN_RANGE = VK_FRONT_FACE_COUNTER_CLOCKWISE,
+ VK_FRONT_FACE_END_RANGE = VK_FRONT_FACE_CLOCKWISE,
+ VK_FRONT_FACE_RANGE_SIZE = (VK_FRONT_FACE_CLOCKWISE - VK_FRONT_FACE_COUNTER_CLOCKWISE + 1),
+ VK_FRONT_FACE_MAX_ENUM = 0x7FFFFFFF
+} VkFrontFace;
+
+typedef enum VkCompareOp {
+ VK_COMPARE_OP_NEVER = 0,
+ VK_COMPARE_OP_LESS = 1,
+ VK_COMPARE_OP_EQUAL = 2,
+ VK_COMPARE_OP_LESS_OR_EQUAL = 3,
+ VK_COMPARE_OP_GREATER = 4,
+ VK_COMPARE_OP_NOT_EQUAL = 5,
+ VK_COMPARE_OP_GREATER_OR_EQUAL = 6,
+ VK_COMPARE_OP_ALWAYS = 7,
+ VK_COMPARE_OP_BEGIN_RANGE = VK_COMPARE_OP_NEVER,
+ VK_COMPARE_OP_END_RANGE = VK_COMPARE_OP_ALWAYS,
+ VK_COMPARE_OP_RANGE_SIZE = (VK_COMPARE_OP_ALWAYS - VK_COMPARE_OP_NEVER + 1),
+ VK_COMPARE_OP_MAX_ENUM = 0x7FFFFFFF
+} VkCompareOp;
+
+typedef enum VkStencilOp {
+ VK_STENCIL_OP_KEEP = 0,
+ VK_STENCIL_OP_ZERO = 1,
+ VK_STENCIL_OP_REPLACE = 2,
+ VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3,
+ VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4,
+ VK_STENCIL_OP_INVERT = 5,
+ VK_STENCIL_OP_INCREMENT_AND_WRAP = 6,
+ VK_STENCIL_OP_DECREMENT_AND_WRAP = 7,
+ VK_STENCIL_OP_BEGIN_RANGE = VK_STENCIL_OP_KEEP,
+ VK_STENCIL_OP_END_RANGE = VK_STENCIL_OP_DECREMENT_AND_WRAP,
+ VK_STENCIL_OP_RANGE_SIZE = (VK_STENCIL_OP_DECREMENT_AND_WRAP - VK_STENCIL_OP_KEEP + 1),
+ VK_STENCIL_OP_MAX_ENUM = 0x7FFFFFFF
+} VkStencilOp;
+
+typedef enum VkLogicOp {
+ VK_LOGIC_OP_CLEAR = 0,
+ VK_LOGIC_OP_AND = 1,
+ VK_LOGIC_OP_AND_REVERSE = 2,
+ VK_LOGIC_OP_COPY = 3,
+ VK_LOGIC_OP_AND_INVERTED = 4,
+ VK_LOGIC_OP_NO_OP = 5,
+ VK_LOGIC_OP_XOR = 6,
+ VK_LOGIC_OP_OR = 7,
+ VK_LOGIC_OP_NOR = 8,
+ VK_LOGIC_OP_EQUIVALENT = 9,
+ VK_LOGIC_OP_INVERT = 10,
+ VK_LOGIC_OP_OR_REVERSE = 11,
+ VK_LOGIC_OP_COPY_INVERTED = 12,
+ VK_LOGIC_OP_OR_INVERTED = 13,
+ VK_LOGIC_OP_NAND = 14,
+ VK_LOGIC_OP_SET = 15,
+ VK_LOGIC_OP_BEGIN_RANGE = VK_LOGIC_OP_CLEAR,
+ VK_LOGIC_OP_END_RANGE = VK_LOGIC_OP_SET,
+ VK_LOGIC_OP_RANGE_SIZE = (VK_LOGIC_OP_SET - VK_LOGIC_OP_CLEAR + 1),
+ VK_LOGIC_OP_MAX_ENUM = 0x7FFFFFFF
+} VkLogicOp;
+
+typedef enum VkBlendFactor {
+ VK_BLEND_FACTOR_ZERO = 0,
+ VK_BLEND_FACTOR_ONE = 1,
+ VK_BLEND_FACTOR_SRC_COLOR = 2,
+ VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3,
+ VK_BLEND_FACTOR_DST_COLOR = 4,
+ VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5,
+ VK_BLEND_FACTOR_SRC_ALPHA = 6,
+ VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7,
+ VK_BLEND_FACTOR_DST_ALPHA = 8,
+ VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9,
+ VK_BLEND_FACTOR_CONSTANT_COLOR = 10,
+ VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11,
+ VK_BLEND_FACTOR_CONSTANT_ALPHA = 12,
+ VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13,
+ VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14,
+ VK_BLEND_FACTOR_SRC1_COLOR = 15,
+ VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16,
+ VK_BLEND_FACTOR_SRC1_ALPHA = 17,
+ VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18,
+ VK_BLEND_FACTOR_BEGIN_RANGE = VK_BLEND_FACTOR_ZERO,
+ VK_BLEND_FACTOR_END_RANGE = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA,
+ VK_BLEND_FACTOR_RANGE_SIZE = (VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA - VK_BLEND_FACTOR_ZERO + 1),
+ VK_BLEND_FACTOR_MAX_ENUM = 0x7FFFFFFF
+} VkBlendFactor;
+
+typedef enum VkBlendOp {
+ VK_BLEND_OP_ADD = 0,
+ VK_BLEND_OP_SUBTRACT = 1,
+ VK_BLEND_OP_REVERSE_SUBTRACT = 2,
+ VK_BLEND_OP_MIN = 3,
+ VK_BLEND_OP_MAX = 4,
+ VK_BLEND_OP_BEGIN_RANGE = VK_BLEND_OP_ADD,
+ VK_BLEND_OP_END_RANGE = VK_BLEND_OP_MAX,
+ VK_BLEND_OP_RANGE_SIZE = (VK_BLEND_OP_MAX - VK_BLEND_OP_ADD + 1),
+ VK_BLEND_OP_MAX_ENUM = 0x7FFFFFFF
+} VkBlendOp;
+
+typedef enum VkDynamicState {
+ VK_DYNAMIC_STATE_VIEWPORT = 0,
+ VK_DYNAMIC_STATE_SCISSOR = 1,
+ VK_DYNAMIC_STATE_LINE_WIDTH = 2,
+ VK_DYNAMIC_STATE_DEPTH_BIAS = 3,
+ VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4,
+ VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5,
+ VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6,
+ VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7,
+ VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8,
+ VK_DYNAMIC_STATE_BEGIN_RANGE = VK_DYNAMIC_STATE_VIEWPORT,
+ VK_DYNAMIC_STATE_END_RANGE = VK_DYNAMIC_STATE_STENCIL_REFERENCE,
+ VK_DYNAMIC_STATE_RANGE_SIZE = (VK_DYNAMIC_STATE_STENCIL_REFERENCE - VK_DYNAMIC_STATE_VIEWPORT + 1),
+ VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF
+} VkDynamicState;
+
+typedef enum VkFilter {
+ VK_FILTER_NEAREST = 0,
+ VK_FILTER_LINEAR = 1,
+ VK_FILTER_BEGIN_RANGE = VK_FILTER_NEAREST,
+ VK_FILTER_END_RANGE = VK_FILTER_LINEAR,
+ VK_FILTER_RANGE_SIZE = (VK_FILTER_LINEAR - VK_FILTER_NEAREST + 1),
+ VK_FILTER_MAX_ENUM = 0x7FFFFFFF
+} VkFilter;
+
+typedef enum VkSamplerMipmapMode {
+ VK_SAMPLER_MIPMAP_MODE_NEAREST = 0,
+ VK_SAMPLER_MIPMAP_MODE_LINEAR = 1,
+ VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE = VK_SAMPLER_MIPMAP_MODE_NEAREST,
+ VK_SAMPLER_MIPMAP_MODE_END_RANGE = VK_SAMPLER_MIPMAP_MODE_LINEAR,
+ VK_SAMPLER_MIPMAP_MODE_RANGE_SIZE = (VK_SAMPLER_MIPMAP_MODE_LINEAR - VK_SAMPLER_MIPMAP_MODE_NEAREST + 1),
+ VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerMipmapMode;
+
+typedef enum VkSamplerAddressMode {
+ VK_SAMPLER_ADDRESS_MODE_REPEAT = 0,
+ VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1,
+ VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2,
+ VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3,
+ VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4,
+ VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE = VK_SAMPLER_ADDRESS_MODE_REPEAT,
+ VK_SAMPLER_ADDRESS_MODE_END_RANGE = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE,
+ VK_SAMPLER_ADDRESS_MODE_RANGE_SIZE = (VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE - VK_SAMPLER_ADDRESS_MODE_REPEAT + 1),
+ VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkSamplerAddressMode;
+
+typedef enum VkBorderColor {
+ VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0,
+ VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1,
+ VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2,
+ VK_BORDER_COLOR_INT_OPAQUE_BLACK = 3,
+ VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 4,
+ VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5,
+ VK_BORDER_COLOR_BEGIN_RANGE = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
+ VK_BORDER_COLOR_END_RANGE = VK_BORDER_COLOR_INT_OPAQUE_WHITE,
+ VK_BORDER_COLOR_RANGE_SIZE = (VK_BORDER_COLOR_INT_OPAQUE_WHITE - VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK + 1),
+ VK_BORDER_COLOR_MAX_ENUM = 0x7FFFFFFF
+} VkBorderColor;
+
+typedef enum VkDescriptorType {
+ VK_DESCRIPTOR_TYPE_SAMPLER = 0,
+ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1,
+ VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2,
+ VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3,
+ VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4,
+ VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5,
+ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6,
+ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7,
+ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8,
+ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9,
+ VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10,
+ VK_DESCRIPTOR_TYPE_BEGIN_RANGE = VK_DESCRIPTOR_TYPE_SAMPLER,
+ VK_DESCRIPTOR_TYPE_END_RANGE = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
+ VK_DESCRIPTOR_TYPE_RANGE_SIZE = (VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT - VK_DESCRIPTOR_TYPE_SAMPLER + 1),
+ VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkDescriptorType;
+
+typedef enum VkAttachmentLoadOp {
+ VK_ATTACHMENT_LOAD_OP_LOAD = 0,
+ VK_ATTACHMENT_LOAD_OP_CLEAR = 1,
+ VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
+ VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE = VK_ATTACHMENT_LOAD_OP_LOAD,
+ VK_ATTACHMENT_LOAD_OP_END_RANGE = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+ VK_ATTACHMENT_LOAD_OP_RANGE_SIZE = (VK_ATTACHMENT_LOAD_OP_DONT_CARE - VK_ATTACHMENT_LOAD_OP_LOAD + 1),
+ VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF
+} VkAttachmentLoadOp;
+
+typedef enum VkAttachmentStoreOp {
+ VK_ATTACHMENT_STORE_OP_STORE = 0,
+ VK_ATTACHMENT_STORE_OP_DONT_CARE = 1,
+ VK_ATTACHMENT_STORE_OP_BEGIN_RANGE = VK_ATTACHMENT_STORE_OP_STORE,
+ VK_ATTACHMENT_STORE_OP_END_RANGE = VK_ATTACHMENT_STORE_OP_DONT_CARE,
+ VK_ATTACHMENT_STORE_OP_RANGE_SIZE = (VK_ATTACHMENT_STORE_OP_DONT_CARE - VK_ATTACHMENT_STORE_OP_STORE + 1),
+ VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF
+} VkAttachmentStoreOp;
+
+typedef enum VkPipelineBindPoint {
+ VK_PIPELINE_BIND_POINT_GRAPHICS = 0,
+ VK_PIPELINE_BIND_POINT_COMPUTE = 1,
+ VK_PIPELINE_BIND_POINT_BEGIN_RANGE = VK_PIPELINE_BIND_POINT_GRAPHICS,
+ VK_PIPELINE_BIND_POINT_END_RANGE = VK_PIPELINE_BIND_POINT_COMPUTE,
+ VK_PIPELINE_BIND_POINT_RANGE_SIZE = (VK_PIPELINE_BIND_POINT_COMPUTE - VK_PIPELINE_BIND_POINT_GRAPHICS + 1),
+ VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineBindPoint;
+
+typedef enum VkCommandBufferLevel {
+ VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0,
+ VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1,
+ VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
+ VK_COMMAND_BUFFER_LEVEL_END_RANGE = VK_COMMAND_BUFFER_LEVEL_SECONDARY,
+ VK_COMMAND_BUFFER_LEVEL_RANGE_SIZE = (VK_COMMAND_BUFFER_LEVEL_SECONDARY - VK_COMMAND_BUFFER_LEVEL_PRIMARY + 1),
+ VK_COMMAND_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF
+} VkCommandBufferLevel;
+
+typedef enum VkIndexType {
+ VK_INDEX_TYPE_UINT16 = 0,
+ VK_INDEX_TYPE_UINT32 = 1,
+ VK_INDEX_TYPE_BEGIN_RANGE = VK_INDEX_TYPE_UINT16,
+ VK_INDEX_TYPE_END_RANGE = VK_INDEX_TYPE_UINT32,
+ VK_INDEX_TYPE_RANGE_SIZE = (VK_INDEX_TYPE_UINT32 - VK_INDEX_TYPE_UINT16 + 1),
+ VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF
+} VkIndexType;
+
+typedef enum VkSubpassContents {
+ VK_SUBPASS_CONTENTS_INLINE = 0,
+ VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
+ VK_SUBPASS_CONTENTS_BEGIN_RANGE = VK_SUBPASS_CONTENTS_INLINE,
+ VK_SUBPASS_CONTENTS_END_RANGE = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS,
+ VK_SUBPASS_CONTENTS_RANGE_SIZE = (VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS - VK_SUBPASS_CONTENTS_INLINE + 1),
+ VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF
+} VkSubpassContents;
+
+typedef VkFlags VkInstanceCreateFlags;
+
+typedef enum VkFormatFeatureFlagBits {
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
+ VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002,
+ VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004,
+ VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008,
+ VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010,
+ VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020,
+ VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040,
+ VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080,
+ VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100,
+ VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200,
+ VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400,
+ VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800,
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000,
+} VkFormatFeatureFlagBits;
+typedef VkFlags VkFormatFeatureFlags;
+
+typedef enum VkImageUsageFlagBits {
+ VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001,
+ VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002,
+ VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004,
+ VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008,
+ VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010,
+ VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020,
+ VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040,
+ VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080,
+} VkImageUsageFlagBits;
+typedef VkFlags VkImageUsageFlags;
+
+typedef enum VkImageCreateFlagBits {
+ VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001,
+ VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
+ VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
+ VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008,
+ VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010,
+} VkImageCreateFlagBits;
+typedef VkFlags VkImageCreateFlags;
+
+typedef enum VkSampleCountFlagBits {
+ VK_SAMPLE_COUNT_1_BIT = 0x00000001,
+ VK_SAMPLE_COUNT_2_BIT = 0x00000002,
+ VK_SAMPLE_COUNT_4_BIT = 0x00000004,
+ VK_SAMPLE_COUNT_8_BIT = 0x00000008,
+ VK_SAMPLE_COUNT_16_BIT = 0x00000010,
+ VK_SAMPLE_COUNT_32_BIT = 0x00000020,
+ VK_SAMPLE_COUNT_64_BIT = 0x00000040,
+} VkSampleCountFlagBits;
+typedef VkFlags VkSampleCountFlags;
+
+typedef enum VkQueueFlagBits {
+ VK_QUEUE_GRAPHICS_BIT = 0x00000001,
+ VK_QUEUE_COMPUTE_BIT = 0x00000002,
+ VK_QUEUE_TRANSFER_BIT = 0x00000004,
+ VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
+} VkQueueFlagBits;
+typedef VkFlags VkQueueFlags;
+
+typedef enum VkMemoryPropertyFlagBits {
+ VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001,
+ VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002,
+ VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004,
+ VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008,
+ VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010,
+} VkMemoryPropertyFlagBits;
+typedef VkFlags VkMemoryPropertyFlags;
+
+typedef enum VkMemoryHeapFlagBits {
+ VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
+} VkMemoryHeapFlagBits;
+typedef VkFlags VkMemoryHeapFlags;
+typedef VkFlags VkDeviceCreateFlags;
+typedef VkFlags VkDeviceQueueCreateFlags;
+
+typedef enum VkPipelineStageFlagBits {
+ VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001,
+ VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002,
+ VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004,
+ VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008,
+ VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010,
+ VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020,
+ VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040,
+ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080,
+ VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100,
+ VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200,
+ VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400,
+ VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800,
+ VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000,
+ VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 0x00002000,
+ VK_PIPELINE_STAGE_HOST_BIT = 0x00004000,
+ VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000,
+ VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000,
+} VkPipelineStageFlagBits;
+typedef VkFlags VkPipelineStageFlags;
+typedef VkFlags VkMemoryMapFlags;
+
+typedef enum VkImageAspectFlagBits {
+ VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
+ VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
+ VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
+ VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
+} VkImageAspectFlagBits;
+typedef VkFlags VkImageAspectFlags;
+
+typedef enum VkSparseImageFormatFlagBits {
+ VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001,
+ VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002,
+ VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004,
+} VkSparseImageFormatFlagBits;
+typedef VkFlags VkSparseImageFormatFlags;
+
+typedef enum VkSparseMemoryBindFlagBits {
+ VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001,
+} VkSparseMemoryBindFlagBits;
+typedef VkFlags VkSparseMemoryBindFlags;
+
+typedef enum VkFenceCreateFlagBits {
+ VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
+} VkFenceCreateFlagBits;
+typedef VkFlags VkFenceCreateFlags;
+typedef VkFlags VkSemaphoreCreateFlags;
+typedef VkFlags VkEventCreateFlags;
+typedef VkFlags VkQueryPoolCreateFlags;
+
+typedef enum VkQueryPipelineStatisticFlagBits {
+ VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001,
+ VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002,
+ VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004,
+ VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008,
+ VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010,
+ VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020,
+ VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040,
+ VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080,
+ VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100,
+ VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200,
+ VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400,
+} VkQueryPipelineStatisticFlagBits;
+typedef VkFlags VkQueryPipelineStatisticFlags;
+
+typedef enum VkQueryResultFlagBits {
+ VK_QUERY_RESULT_64_BIT = 0x00000001,
+ VK_QUERY_RESULT_WAIT_BIT = 0x00000002,
+ VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004,
+ VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008,
+} VkQueryResultFlagBits;
+typedef VkFlags VkQueryResultFlags;
+
+typedef enum VkBufferCreateFlagBits {
+ VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001,
+ VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
+ VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
+} VkBufferCreateFlagBits;
+typedef VkFlags VkBufferCreateFlags;
+
+typedef enum VkBufferUsageFlagBits {
+ VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001,
+ VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002,
+ VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
+ VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008,
+ VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010,
+ VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020,
+ VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040,
+ VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080,
+ VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100,
+} VkBufferUsageFlagBits;
+typedef VkFlags VkBufferUsageFlags;
+typedef VkFlags VkBufferViewCreateFlags;
+typedef VkFlags VkImageViewCreateFlags;
+typedef VkFlags VkShaderModuleCreateFlags;
+typedef VkFlags VkPipelineCacheCreateFlags;
+
+typedef enum VkPipelineCreateFlagBits {
+ VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
+ VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
+ VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
+} VkPipelineCreateFlagBits;
+typedef VkFlags VkPipelineCreateFlags;
+typedef VkFlags VkPipelineShaderStageCreateFlags;
+
+typedef enum VkShaderStageFlagBits {
+ VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
+ VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
+ VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
+ VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
+ VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
+ VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
+ VK_SHADER_STAGE_ALL_GRAPHICS = 0x1F,
+ VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
+} VkShaderStageFlagBits;
+typedef VkFlags VkPipelineVertexInputStateCreateFlags;
+typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;
+typedef VkFlags VkPipelineTessellationStateCreateFlags;
+typedef VkFlags VkPipelineViewportStateCreateFlags;
+typedef VkFlags VkPipelineRasterizationStateCreateFlags;
+
+typedef enum VkCullModeFlagBits {
+ VK_CULL_MODE_NONE = 0,
+ VK_CULL_MODE_FRONT_BIT = 0x00000001,
+ VK_CULL_MODE_BACK_BIT = 0x00000002,
+ VK_CULL_MODE_FRONT_AND_BACK = 0x3,
+} VkCullModeFlagBits;
+typedef VkFlags VkCullModeFlags;
+typedef VkFlags VkPipelineMultisampleStateCreateFlags;
+typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
+typedef VkFlags VkPipelineColorBlendStateCreateFlags;
+
+typedef enum VkColorComponentFlagBits {
+ VK_COLOR_COMPONENT_R_BIT = 0x00000001,
+ VK_COLOR_COMPONENT_G_BIT = 0x00000002,
+ VK_COLOR_COMPONENT_B_BIT = 0x00000004,
+ VK_COLOR_COMPONENT_A_BIT = 0x00000008,
+} VkColorComponentFlagBits;
+typedef VkFlags VkColorComponentFlags;
+typedef VkFlags VkPipelineDynamicStateCreateFlags;
+typedef VkFlags VkPipelineLayoutCreateFlags;
+typedef VkFlags VkShaderStageFlags;
+typedef VkFlags VkSamplerCreateFlags;
+typedef VkFlags VkDescriptorSetLayoutCreateFlags;
+
+typedef enum VkDescriptorPoolCreateFlagBits {
+ VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
+} VkDescriptorPoolCreateFlagBits;
+typedef VkFlags VkDescriptorPoolCreateFlags;
+typedef VkFlags VkDescriptorPoolResetFlags;
+typedef VkFlags VkFramebufferCreateFlags;
+typedef VkFlags VkRenderPassCreateFlags;
+
+typedef enum VkAttachmentDescriptionFlagBits {
+ VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
+} VkAttachmentDescriptionFlagBits;
+typedef VkFlags VkAttachmentDescriptionFlags;
+typedef VkFlags VkSubpassDescriptionFlags;
+
+typedef enum VkAccessFlagBits {
+ VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001,
+ VK_ACCESS_INDEX_READ_BIT = 0x00000002,
+ VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004,
+ VK_ACCESS_UNIFORM_READ_BIT = 0x00000008,
+ VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010,
+ VK_ACCESS_SHADER_READ_BIT = 0x00000020,
+ VK_ACCESS_SHADER_WRITE_BIT = 0x00000040,
+ VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080,
+ VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100,
+ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200,
+ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400,
+ VK_ACCESS_TRANSFER_READ_BIT = 0x00000800,
+ VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000,
+ VK_ACCESS_HOST_READ_BIT = 0x00002000,
+ VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
+ VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
+ VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
+} VkAccessFlagBits;
+typedef VkFlags VkAccessFlags;
+
+typedef enum VkDependencyFlagBits {
+ VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
+} VkDependencyFlagBits;
+typedef VkFlags VkDependencyFlags;
+
+typedef enum VkCommandPoolCreateFlagBits {
+ VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001,
+ VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
+} VkCommandPoolCreateFlagBits;
+typedef VkFlags VkCommandPoolCreateFlags;
+
+typedef enum VkCommandPoolResetFlagBits {
+ VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+} VkCommandPoolResetFlagBits;
+typedef VkFlags VkCommandPoolResetFlags;
+
+typedef enum VkCommandBufferUsageFlagBits {
+ VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
+ VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
+ VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
+} VkCommandBufferUsageFlagBits;
+typedef VkFlags VkCommandBufferUsageFlags;
+
+typedef enum VkQueryControlFlagBits {
+ VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
+} VkQueryControlFlagBits;
+typedef VkFlags VkQueryControlFlags;
+
+typedef enum VkCommandBufferResetFlagBits {
+ VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+} VkCommandBufferResetFlagBits;
+typedef VkFlags VkCommandBufferResetFlags;
+
+typedef enum VkStencilFaceFlagBits {
+ VK_STENCIL_FACE_FRONT_BIT = 0x00000001,
+ VK_STENCIL_FACE_BACK_BIT = 0x00000002,
+ VK_STENCIL_FRONT_AND_BACK = 0x3,
+} VkStencilFaceFlagBits;
+typedef VkFlags VkStencilFaceFlags;
+
+typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)(
+ void* pUserData,
+ size_t size,
+ size_t alignment,
+ VkSystemAllocationScope allocationScope);
+
+typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)(
+ void* pUserData,
+ void* pOriginal,
+ size_t size,
+ size_t alignment,
+ VkSystemAllocationScope allocationScope);
+
+typedef void (VKAPI_PTR *PFN_vkFreeFunction)(
+ void* pUserData,
+ void* pMemory);
+
+typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)(
+ void* pUserData,
+ size_t size,
+ VkInternalAllocationType allocationType,
+ VkSystemAllocationScope allocationScope);
+
+typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)(
+ void* pUserData,
+ size_t size,
+ VkInternalAllocationType allocationType,
+ VkSystemAllocationScope allocationScope);
+
+typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void);
+
+typedef struct VkApplicationInfo {
+ VkStructureType sType;
+ const void* pNext;
+ const char* pApplicationName;
+ uint32_t applicationVersion;
+ const char* pEngineName;
+ uint32_t engineVersion;
+ uint32_t apiVersion;
+} VkApplicationInfo;
+
+typedef struct VkInstanceCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkInstanceCreateFlags flags;
+ const VkApplicationInfo* pApplicationInfo;
+ uint32_t enabledLayerCount;
+ const char* const* ppEnabledLayerNames;
+ uint32_t enabledExtensionCount;
+ const char* const* ppEnabledExtensionNames;
+} VkInstanceCreateInfo;
+
+typedef struct VkAllocationCallbacks {
+ void* pUserData;
+ PFN_vkAllocationFunction pfnAllocation;
+ PFN_vkReallocationFunction pfnReallocation;
+ PFN_vkFreeFunction pfnFree;
+ PFN_vkInternalAllocationNotification pfnInternalAllocation;
+ PFN_vkInternalFreeNotification pfnInternalFree;
+} VkAllocationCallbacks;
+
+typedef struct VkPhysicalDeviceFeatures {
+ VkBool32 robustBufferAccess;
+ VkBool32 fullDrawIndexUint32;
+ VkBool32 imageCubeArray;
+ VkBool32 independentBlend;
+ VkBool32 geometryShader;
+ VkBool32 tessellationShader;
+ VkBool32 sampleRateShading;
+ VkBool32 dualSrcBlend;
+ VkBool32 logicOp;
+ VkBool32 multiDrawIndirect;
+ VkBool32 drawIndirectFirstInstance;
+ VkBool32 depthClamp;
+ VkBool32 depthBiasClamp;
+ VkBool32 fillModeNonSolid;
+ VkBool32 depthBounds;
+ VkBool32 wideLines;
+ VkBool32 largePoints;
+ VkBool32 alphaToOne;
+ VkBool32 multiViewport;
+ VkBool32 samplerAnisotropy;
+ VkBool32 textureCompressionETC2;
+ VkBool32 textureCompressionASTC_LDR;
+ VkBool32 textureCompressionBC;
+ VkBool32 occlusionQueryPrecise;
+ VkBool32 pipelineStatisticsQuery;
+ VkBool32 vertexPipelineStoresAndAtomics;
+ VkBool32 fragmentStoresAndAtomics;
+ VkBool32 shaderTessellationAndGeometryPointSize;
+ VkBool32 shaderImageGatherExtended;
+ VkBool32 shaderStorageImageExtendedFormats;
+ VkBool32 shaderStorageImageMultisample;
+ VkBool32 shaderStorageImageReadWithoutFormat;
+ VkBool32 shaderStorageImageWriteWithoutFormat;
+ VkBool32 shaderUniformBufferArrayDynamicIndexing;
+ VkBool32 shaderSampledImageArrayDynamicIndexing;
+ VkBool32 shaderStorageBufferArrayDynamicIndexing;
+ VkBool32 shaderStorageImageArrayDynamicIndexing;
+ VkBool32 shaderClipDistance;
+ VkBool32 shaderCullDistance;
+ VkBool32 shaderFloat64;
+ VkBool32 shaderInt64;
+ VkBool32 shaderInt16;
+ VkBool32 shaderResourceResidency;
+ VkBool32 shaderResourceMinLod;
+ VkBool32 sparseBinding;
+ VkBool32 sparseResidencyBuffer;
+ VkBool32 sparseResidencyImage2D;
+ VkBool32 sparseResidencyImage3D;
+ VkBool32 sparseResidency2Samples;
+ VkBool32 sparseResidency4Samples;
+ VkBool32 sparseResidency8Samples;
+ VkBool32 sparseResidency16Samples;
+ VkBool32 sparseResidencyAliased;
+ VkBool32 variableMultisampleRate;
+ VkBool32 inheritedQueries;
+} VkPhysicalDeviceFeatures;
+
+typedef struct VkFormatProperties {
+ VkFormatFeatureFlags linearTilingFeatures;
+ VkFormatFeatureFlags optimalTilingFeatures;
+ VkFormatFeatureFlags bufferFeatures;
+} VkFormatProperties;
+
+typedef struct VkExtent3D {
+ uint32_t width;
+ uint32_t height;
+ uint32_t depth;
+} VkExtent3D;
+
+typedef struct VkImageFormatProperties {
+ VkExtent3D maxExtent;
+ uint32_t maxMipLevels;
+ uint32_t maxArrayLayers;
+ VkSampleCountFlags sampleCounts;
+ VkDeviceSize maxResourceSize;
+} VkImageFormatProperties;
+
+typedef struct VkPhysicalDeviceLimits {
+ uint32_t maxImageDimension1D;
+ uint32_t maxImageDimension2D;
+ uint32_t maxImageDimension3D;
+ uint32_t maxImageDimensionCube;
+ uint32_t maxImageArrayLayers;
+ uint32_t maxTexelBufferElements;
+ uint32_t maxUniformBufferRange;
+ uint32_t maxStorageBufferRange;
+ uint32_t maxPushConstantsSize;
+ uint32_t maxMemoryAllocationCount;
+ uint32_t maxSamplerAllocationCount;
+ VkDeviceSize bufferImageGranularity;
+ VkDeviceSize sparseAddressSpaceSize;
+ uint32_t maxBoundDescriptorSets;
+ uint32_t maxPerStageDescriptorSamplers;
+ uint32_t maxPerStageDescriptorUniformBuffers;
+ uint32_t maxPerStageDescriptorStorageBuffers;
+ uint32_t maxPerStageDescriptorSampledImages;
+ uint32_t maxPerStageDescriptorStorageImages;
+ uint32_t maxPerStageDescriptorInputAttachments;
+ uint32_t maxPerStageResources;
+ uint32_t maxDescriptorSetSamplers;
+ uint32_t maxDescriptorSetUniformBuffers;
+ uint32_t maxDescriptorSetUniformBuffersDynamic;
+ uint32_t maxDescriptorSetStorageBuffers;
+ uint32_t maxDescriptorSetStorageBuffersDynamic;
+ uint32_t maxDescriptorSetSampledImages;
+ uint32_t maxDescriptorSetStorageImages;
+ uint32_t maxDescriptorSetInputAttachments;
+ uint32_t maxVertexInputAttributes;
+ uint32_t maxVertexInputBindings;
+ uint32_t maxVertexInputAttributeOffset;
+ uint32_t maxVertexInputBindingStride;
+ uint32_t maxVertexOutputComponents;
+ uint32_t maxTessellationGenerationLevel;
+ uint32_t maxTessellationPatchSize;
+ uint32_t maxTessellationControlPerVertexInputComponents;
+ uint32_t maxTessellationControlPerVertexOutputComponents;
+ uint32_t maxTessellationControlPerPatchOutputComponents;
+ uint32_t maxTessellationControlTotalOutputComponents;
+ uint32_t maxTessellationEvaluationInputComponents;
+ uint32_t maxTessellationEvaluationOutputComponents;
+ uint32_t maxGeometryShaderInvocations;
+ uint32_t maxGeometryInputComponents;
+ uint32_t maxGeometryOutputComponents;
+ uint32_t maxGeometryOutputVertices;
+ uint32_t maxGeometryTotalOutputComponents;
+ uint32_t maxFragmentInputComponents;
+ uint32_t maxFragmentOutputAttachments;
+ uint32_t maxFragmentDualSrcAttachments;
+ uint32_t maxFragmentCombinedOutputResources;
+ uint32_t maxComputeSharedMemorySize;
+ uint32_t maxComputeWorkGroupCount[3];
+ uint32_t maxComputeWorkGroupInvocations;
+ uint32_t maxComputeWorkGroupSize[3];
+ uint32_t subPixelPrecisionBits;
+ uint32_t subTexelPrecisionBits;
+ uint32_t mipmapPrecisionBits;
+ uint32_t maxDrawIndexedIndexValue;
+ uint32_t maxDrawIndirectCount;
+ float maxSamplerLodBias;
+ float maxSamplerAnisotropy;
+ uint32_t maxViewports;
+ uint32_t maxViewportDimensions[2];
+ float viewportBoundsRange[2];
+ uint32_t viewportSubPixelBits;
+ size_t minMemoryMapAlignment;
+ VkDeviceSize minTexelBufferOffsetAlignment;
+ VkDeviceSize minUniformBufferOffsetAlignment;
+ VkDeviceSize minStorageBufferOffsetAlignment;
+ int32_t minTexelOffset;
+ uint32_t maxTexelOffset;
+ int32_t minTexelGatherOffset;
+ uint32_t maxTexelGatherOffset;
+ float minInterpolationOffset;
+ float maxInterpolationOffset;
+ uint32_t subPixelInterpolationOffsetBits;
+ uint32_t maxFramebufferWidth;
+ uint32_t maxFramebufferHeight;
+ uint32_t maxFramebufferLayers;
+ VkSampleCountFlags framebufferColorSampleCounts;
+ VkSampleCountFlags framebufferDepthSampleCounts;
+ VkSampleCountFlags framebufferStencilSampleCounts;
+ VkSampleCountFlags framebufferNoAttachmentsSampleCounts;
+ uint32_t maxColorAttachments;
+ VkSampleCountFlags sampledImageColorSampleCounts;
+ VkSampleCountFlags sampledImageIntegerSampleCounts;
+ VkSampleCountFlags sampledImageDepthSampleCounts;
+ VkSampleCountFlags sampledImageStencilSampleCounts;
+ VkSampleCountFlags storageImageSampleCounts;
+ uint32_t maxSampleMaskWords;
+ VkBool32 timestampComputeAndGraphics;
+ float timestampPeriod;
+ uint32_t maxClipDistances;
+ uint32_t maxCullDistances;
+ uint32_t maxCombinedClipAndCullDistances;
+ uint32_t discreteQueuePriorities;
+ float pointSizeRange[2];
+ float lineWidthRange[2];
+ float pointSizeGranularity;
+ float lineWidthGranularity;
+ VkBool32 strictLines;
+ VkBool32 standardSampleLocations;
+ VkDeviceSize optimalBufferCopyOffsetAlignment;
+ VkDeviceSize optimalBufferCopyRowPitchAlignment;
+ VkDeviceSize nonCoherentAtomSize;
+} VkPhysicalDeviceLimits;
+
+typedef struct VkPhysicalDeviceSparseProperties {
+ VkBool32 residencyStandard2DBlockShape;
+ VkBool32 residencyStandard2DMultisampleBlockShape;
+ VkBool32 residencyStandard3DBlockShape;
+ VkBool32 residencyAlignedMipSize;
+ VkBool32 residencyNonResidentStrict;
+} VkPhysicalDeviceSparseProperties;
+
+typedef struct VkPhysicalDeviceProperties {
+ uint32_t apiVersion;
+ uint32_t driverVersion;
+ uint32_t vendorID;
+ uint32_t deviceID;
+ VkPhysicalDeviceType deviceType;
+ char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
+ uint8_t pipelineCacheUUID[VK_UUID_SIZE];
+ VkPhysicalDeviceLimits limits;
+ VkPhysicalDeviceSparseProperties sparseProperties;
+} VkPhysicalDeviceProperties;
+
+typedef struct VkQueueFamilyProperties {
+ VkQueueFlags queueFlags;
+ uint32_t queueCount;
+ uint32_t timestampValidBits;
+ VkExtent3D minImageTransferGranularity;
+} VkQueueFamilyProperties;
+
+typedef struct VkMemoryType {
+ VkMemoryPropertyFlags propertyFlags;
+ uint32_t heapIndex;
+} VkMemoryType;
+
+typedef struct VkMemoryHeap {
+ VkDeviceSize size;
+ VkMemoryHeapFlags flags;
+} VkMemoryHeap;
+
+typedef struct VkPhysicalDeviceMemoryProperties {
+ uint32_t memoryTypeCount;
+ VkMemoryType memoryTypes[VK_MAX_MEMORY_TYPES];
+ uint32_t memoryHeapCount;
+ VkMemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS];
+} VkPhysicalDeviceMemoryProperties;
+
+typedef struct VkDeviceQueueCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceQueueCreateFlags flags;
+ uint32_t queueFamilyIndex;
+ uint32_t queueCount;
+ const float* pQueuePriorities;
+} VkDeviceQueueCreateInfo;
+
+typedef struct VkDeviceCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceCreateFlags flags;
+ uint32_t queueCreateInfoCount;
+ const VkDeviceQueueCreateInfo* pQueueCreateInfos;
+ uint32_t enabledLayerCount;
+ const char* const* ppEnabledLayerNames;
+ uint32_t enabledExtensionCount;
+ const char* const* ppEnabledExtensionNames;
+ const VkPhysicalDeviceFeatures* pEnabledFeatures;
+} VkDeviceCreateInfo;
+
+typedef struct VkExtensionProperties {
+ char extensionName[VK_MAX_EXTENSION_NAME_SIZE];
+ uint32_t specVersion;
+} VkExtensionProperties;
+
+typedef struct VkLayerProperties {
+ char layerName[VK_MAX_EXTENSION_NAME_SIZE];
+ uint32_t specVersion;
+ uint32_t implementationVersion;
+ char description[VK_MAX_DESCRIPTION_SIZE];
+} VkLayerProperties;
+
+typedef struct VkSubmitInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t waitSemaphoreCount;
+ const VkSemaphore* pWaitSemaphores;
+ const VkPipelineStageFlags* pWaitDstStageMask;
+ uint32_t commandBufferCount;
+ const VkCommandBuffer* pCommandBuffers;
+ uint32_t signalSemaphoreCount;
+ const VkSemaphore* pSignalSemaphores;
+} VkSubmitInfo;
+
+typedef struct VkMemoryAllocateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceSize allocationSize;
+ uint32_t memoryTypeIndex;
+} VkMemoryAllocateInfo;
+
+typedef struct VkMappedMemoryRange {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceMemory memory;
+ VkDeviceSize offset;
+ VkDeviceSize size;
+} VkMappedMemoryRange;
+
+typedef struct VkMemoryRequirements {
+ VkDeviceSize size;
+ VkDeviceSize alignment;
+ uint32_t memoryTypeBits;
+} VkMemoryRequirements;
+
+typedef struct VkSparseImageFormatProperties {
+ VkImageAspectFlags aspectMask;
+ VkExtent3D imageGranularity;
+ VkSparseImageFormatFlags flags;
+} VkSparseImageFormatProperties;
+
+typedef struct VkSparseImageMemoryRequirements {
+ VkSparseImageFormatProperties formatProperties;
+ uint32_t imageMipTailFirstLod;
+ VkDeviceSize imageMipTailSize;
+ VkDeviceSize imageMipTailOffset;
+ VkDeviceSize imageMipTailStride;
+} VkSparseImageMemoryRequirements;
+
+typedef struct VkSparseMemoryBind {
+ VkDeviceSize resourceOffset;
+ VkDeviceSize size;
+ VkDeviceMemory memory;
+ VkDeviceSize memoryOffset;
+ VkSparseMemoryBindFlags flags;
+} VkSparseMemoryBind;
+
+typedef struct VkSparseBufferMemoryBindInfo {
+ VkBuffer buffer;
+ uint32_t bindCount;
+ const VkSparseMemoryBind* pBinds;
+} VkSparseBufferMemoryBindInfo;
+
+typedef struct VkSparseImageOpaqueMemoryBindInfo {
+ VkImage image;
+ uint32_t bindCount;
+ const VkSparseMemoryBind* pBinds;
+} VkSparseImageOpaqueMemoryBindInfo;
+
+typedef struct VkImageSubresource {
+ VkImageAspectFlags aspectMask;
+ uint32_t mipLevel;
+ uint32_t arrayLayer;
+} VkImageSubresource;
+
+typedef struct VkOffset3D {
+ int32_t x;
+ int32_t y;
+ int32_t z;
+} VkOffset3D;
+
+typedef struct VkSparseImageMemoryBind {
+ VkImageSubresource subresource;
+ VkOffset3D offset;
+ VkExtent3D extent;
+ VkDeviceMemory memory;
+ VkDeviceSize memoryOffset;
+ VkSparseMemoryBindFlags flags;
+} VkSparseImageMemoryBind;
+
+typedef struct VkSparseImageMemoryBindInfo {
+ VkImage image;
+ uint32_t bindCount;
+ const VkSparseImageMemoryBind* pBinds;
+} VkSparseImageMemoryBindInfo;
+
+typedef struct VkBindSparseInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t waitSemaphoreCount;
+ const VkSemaphore* pWaitSemaphores;
+ uint32_t bufferBindCount;
+ const VkSparseBufferMemoryBindInfo* pBufferBinds;
+ uint32_t imageOpaqueBindCount;
+ const VkSparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds;
+ uint32_t imageBindCount;
+ const VkSparseImageMemoryBindInfo* pImageBinds;
+ uint32_t signalSemaphoreCount;
+ const VkSemaphore* pSignalSemaphores;
+} VkBindSparseInfo;
+
+typedef struct VkFenceCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkFenceCreateFlags flags;
+} VkFenceCreateInfo;
+
+typedef struct VkSemaphoreCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkSemaphoreCreateFlags flags;
+} VkSemaphoreCreateInfo;
+
+typedef struct VkEventCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkEventCreateFlags flags;
+} VkEventCreateInfo;
+
+typedef struct VkQueryPoolCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkQueryPoolCreateFlags flags;
+ VkQueryType queryType;
+ uint32_t queryCount;
+ VkQueryPipelineStatisticFlags pipelineStatistics;
+} VkQueryPoolCreateInfo;
+
+typedef struct VkBufferCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkBufferCreateFlags flags;
+ VkDeviceSize size;
+ VkBufferUsageFlags usage;
+ VkSharingMode sharingMode;
+ uint32_t queueFamilyIndexCount;
+ const uint32_t* pQueueFamilyIndices;
+} VkBufferCreateInfo;
+
+typedef struct VkBufferViewCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkBufferViewCreateFlags flags;
+ VkBuffer buffer;
+ VkFormat format;
+ VkDeviceSize offset;
+ VkDeviceSize range;
+} VkBufferViewCreateInfo;
+
+typedef struct VkImageCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageCreateFlags flags;
+ VkImageType imageType;
+ VkFormat format;
+ VkExtent3D extent;
+ uint32_t mipLevels;
+ uint32_t arrayLayers;
+ VkSampleCountFlagBits samples;
+ VkImageTiling tiling;
+ VkImageUsageFlags usage;
+ VkSharingMode sharingMode;
+ uint32_t queueFamilyIndexCount;
+ const uint32_t* pQueueFamilyIndices;
+ VkImageLayout initialLayout;
+} VkImageCreateInfo;
+
+typedef struct VkSubresourceLayout {
+ VkDeviceSize offset;
+ VkDeviceSize size;
+ VkDeviceSize rowPitch;
+ VkDeviceSize arrayPitch;
+ VkDeviceSize depthPitch;
+} VkSubresourceLayout;
+
+typedef struct VkComponentMapping {
+ VkComponentSwizzle r;
+ VkComponentSwizzle g;
+ VkComponentSwizzle b;
+ VkComponentSwizzle a;
+} VkComponentMapping;
+
+typedef struct VkImageSubresourceRange {
+ VkImageAspectFlags aspectMask;
+ uint32_t baseMipLevel;
+ uint32_t levelCount;
+ uint32_t baseArrayLayer;
+ uint32_t layerCount;
+} VkImageSubresourceRange;
+
+typedef struct VkImageViewCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageViewCreateFlags flags;
+ VkImage image;
+ VkImageViewType viewType;
+ VkFormat format;
+ VkComponentMapping components;
+ VkImageSubresourceRange subresourceRange;
+} VkImageViewCreateInfo;
+
+typedef struct VkShaderModuleCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkShaderModuleCreateFlags flags;
+ size_t codeSize;
+ const uint32_t* pCode;
+} VkShaderModuleCreateInfo;
+
+typedef struct VkPipelineCacheCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineCacheCreateFlags flags;
+ size_t initialDataSize;
+ const void* pInitialData;
+} VkPipelineCacheCreateInfo;
+
+typedef struct VkSpecializationMapEntry {
+ uint32_t constantID;
+ uint32_t offset;
+ size_t size;
+} VkSpecializationMapEntry;
+
+typedef struct VkSpecializationInfo {
+ uint32_t mapEntryCount;
+ const VkSpecializationMapEntry* pMapEntries;
+ size_t dataSize;
+ const void* pData;
+} VkSpecializationInfo;
+
+typedef struct VkPipelineShaderStageCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineShaderStageCreateFlags flags;
+ VkShaderStageFlagBits stage;
+ VkShaderModule module;
+ const char* pName;
+ const VkSpecializationInfo* pSpecializationInfo;
+} VkPipelineShaderStageCreateInfo;
+
+typedef struct VkVertexInputBindingDescription {
+ uint32_t binding;
+ uint32_t stride;
+ VkVertexInputRate inputRate;
+} VkVertexInputBindingDescription;
+
+typedef struct VkVertexInputAttributeDescription {
+ uint32_t location;
+ uint32_t binding;
+ VkFormat format;
+ uint32_t offset;
+} VkVertexInputAttributeDescription;
+
+typedef struct VkPipelineVertexInputStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineVertexInputStateCreateFlags flags;
+ uint32_t vertexBindingDescriptionCount;
+ const VkVertexInputBindingDescription* pVertexBindingDescriptions;
+ uint32_t vertexAttributeDescriptionCount;
+ const VkVertexInputAttributeDescription* pVertexAttributeDescriptions;
+} VkPipelineVertexInputStateCreateInfo;
+
+typedef struct VkPipelineInputAssemblyStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineInputAssemblyStateCreateFlags flags;
+ VkPrimitiveTopology topology;
+ VkBool32 primitiveRestartEnable;
+} VkPipelineInputAssemblyStateCreateInfo;
+
+typedef struct VkPipelineTessellationStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineTessellationStateCreateFlags flags;
+ uint32_t patchControlPoints;
+} VkPipelineTessellationStateCreateInfo;
+
+typedef struct VkViewport {
+ float x;
+ float y;
+ float width;
+ float height;
+ float minDepth;
+ float maxDepth;
+} VkViewport;
+
+typedef struct VkOffset2D {
+ int32_t x;
+ int32_t y;
+} VkOffset2D;
+
+typedef struct VkExtent2D {
+ uint32_t width;
+ uint32_t height;
+} VkExtent2D;
+
+typedef struct VkRect2D {
+ VkOffset2D offset;
+ VkExtent2D extent;
+} VkRect2D;
+
+typedef struct VkPipelineViewportStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineViewportStateCreateFlags flags;
+ uint32_t viewportCount;
+ const VkViewport* pViewports;
+ uint32_t scissorCount;
+ const VkRect2D* pScissors;
+} VkPipelineViewportStateCreateInfo;
+
+typedef struct VkPipelineRasterizationStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineRasterizationStateCreateFlags flags;
+ VkBool32 depthClampEnable;
+ VkBool32 rasterizerDiscardEnable;
+ VkPolygonMode polygonMode;
+ VkCullModeFlags cullMode;
+ VkFrontFace frontFace;
+ VkBool32 depthBiasEnable;
+ float depthBiasConstantFactor;
+ float depthBiasClamp;
+ float depthBiasSlopeFactor;
+ float lineWidth;
+} VkPipelineRasterizationStateCreateInfo;
+
+typedef struct VkPipelineMultisampleStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineMultisampleStateCreateFlags flags;
+ VkSampleCountFlagBits rasterizationSamples;
+ VkBool32 sampleShadingEnable;
+ float minSampleShading;
+ const VkSampleMask* pSampleMask;
+ VkBool32 alphaToCoverageEnable;
+ VkBool32 alphaToOneEnable;
+} VkPipelineMultisampleStateCreateInfo;
+
+typedef struct VkStencilOpState {
+ VkStencilOp failOp;
+ VkStencilOp passOp;
+ VkStencilOp depthFailOp;
+ VkCompareOp compareOp;
+ uint32_t compareMask;
+ uint32_t writeMask;
+ uint32_t reference;
+} VkStencilOpState;
+
+typedef struct VkPipelineDepthStencilStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineDepthStencilStateCreateFlags flags;
+ VkBool32 depthTestEnable;
+ VkBool32 depthWriteEnable;
+ VkCompareOp depthCompareOp;
+ VkBool32 depthBoundsTestEnable;
+ VkBool32 stencilTestEnable;
+ VkStencilOpState front;
+ VkStencilOpState back;
+ float minDepthBounds;
+ float maxDepthBounds;
+} VkPipelineDepthStencilStateCreateInfo;
+
+typedef struct VkPipelineColorBlendAttachmentState {
+ VkBool32 blendEnable;
+ VkBlendFactor srcColorBlendFactor;
+ VkBlendFactor dstColorBlendFactor;
+ VkBlendOp colorBlendOp;
+ VkBlendFactor srcAlphaBlendFactor;
+ VkBlendFactor dstAlphaBlendFactor;
+ VkBlendOp alphaBlendOp;
+ VkColorComponentFlags colorWriteMask;
+} VkPipelineColorBlendAttachmentState;
+
+typedef struct VkPipelineColorBlendStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineColorBlendStateCreateFlags flags;
+ VkBool32 logicOpEnable;
+ VkLogicOp logicOp;
+ uint32_t attachmentCount;
+ const VkPipelineColorBlendAttachmentState* pAttachments;
+ float blendConstants[4];
+} VkPipelineColorBlendStateCreateInfo;
+
+typedef struct VkPipelineDynamicStateCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineDynamicStateCreateFlags flags;
+ uint32_t dynamicStateCount;
+ const VkDynamicState* pDynamicStates;
+} VkPipelineDynamicStateCreateInfo;
+
+typedef struct VkGraphicsPipelineCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineCreateFlags flags;
+ uint32_t stageCount;
+ const VkPipelineShaderStageCreateInfo* pStages;
+ const VkPipelineVertexInputStateCreateInfo* pVertexInputState;
+ const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState;
+ const VkPipelineTessellationStateCreateInfo* pTessellationState;
+ const VkPipelineViewportStateCreateInfo* pViewportState;
+ const VkPipelineRasterizationStateCreateInfo* pRasterizationState;
+ const VkPipelineMultisampleStateCreateInfo* pMultisampleState;
+ const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState;
+ const VkPipelineColorBlendStateCreateInfo* pColorBlendState;
+ const VkPipelineDynamicStateCreateInfo* pDynamicState;
+ VkPipelineLayout layout;
+ VkRenderPass renderPass;
+ uint32_t subpass;
+ VkPipeline basePipelineHandle;
+ int32_t basePipelineIndex;
+} VkGraphicsPipelineCreateInfo;
+
+typedef struct VkComputePipelineCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineCreateFlags flags;
+ VkPipelineShaderStageCreateInfo stage;
+ VkPipelineLayout layout;
+ VkPipeline basePipelineHandle;
+ int32_t basePipelineIndex;
+} VkComputePipelineCreateInfo;
+
+typedef struct VkPushConstantRange {
+ VkShaderStageFlags stageFlags;
+ uint32_t offset;
+ uint32_t size;
+} VkPushConstantRange;
+
+typedef struct VkPipelineLayoutCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineLayoutCreateFlags flags;
+ uint32_t setLayoutCount;
+ const VkDescriptorSetLayout* pSetLayouts;
+ uint32_t pushConstantRangeCount;
+ const VkPushConstantRange* pPushConstantRanges;
+} VkPipelineLayoutCreateInfo;
+
+typedef struct VkSamplerCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkSamplerCreateFlags flags;
+ VkFilter magFilter;
+ VkFilter minFilter;
+ VkSamplerMipmapMode mipmapMode;
+ VkSamplerAddressMode addressModeU;
+ VkSamplerAddressMode addressModeV;
+ VkSamplerAddressMode addressModeW;
+ float mipLodBias;
+ VkBool32 anisotropyEnable;
+ float maxAnisotropy;
+ VkBool32 compareEnable;
+ VkCompareOp compareOp;
+ float minLod;
+ float maxLod;
+ VkBorderColor borderColor;
+ VkBool32 unnormalizedCoordinates;
+} VkSamplerCreateInfo;
+
+typedef struct VkDescriptorSetLayoutBinding {
+ uint32_t binding;
+ VkDescriptorType descriptorType;
+ uint32_t descriptorCount;
+ VkShaderStageFlags stageFlags;
+ const VkSampler* pImmutableSamplers;
+} VkDescriptorSetLayoutBinding;
+
+typedef struct VkDescriptorSetLayoutCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkDescriptorSetLayoutCreateFlags flags;
+ uint32_t bindingCount;
+ const VkDescriptorSetLayoutBinding* pBindings;
+} VkDescriptorSetLayoutCreateInfo;
+
+typedef struct VkDescriptorPoolSize {
+ VkDescriptorType type;
+ uint32_t descriptorCount;
+} VkDescriptorPoolSize;
+
+typedef struct VkDescriptorPoolCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkDescriptorPoolCreateFlags flags;
+ uint32_t maxSets;
+ uint32_t poolSizeCount;
+ const VkDescriptorPoolSize* pPoolSizes;
+} VkDescriptorPoolCreateInfo;
+
+typedef struct VkDescriptorSetAllocateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkDescriptorPool descriptorPool;
+ uint32_t descriptorSetCount;
+ const VkDescriptorSetLayout* pSetLayouts;
+} VkDescriptorSetAllocateInfo;
+
+typedef struct VkDescriptorImageInfo {
+ VkSampler sampler;
+ VkImageView imageView;
+ VkImageLayout imageLayout;
+} VkDescriptorImageInfo;
+
+typedef struct VkDescriptorBufferInfo {
+ VkBuffer buffer;
+ VkDeviceSize offset;
+ VkDeviceSize range;
+} VkDescriptorBufferInfo;
+
+typedef struct VkWriteDescriptorSet {
+ VkStructureType sType;
+ const void* pNext;
+ VkDescriptorSet dstSet;
+ uint32_t dstBinding;
+ uint32_t dstArrayElement;
+ uint32_t descriptorCount;
+ VkDescriptorType descriptorType;
+ const VkDescriptorImageInfo* pImageInfo;
+ const VkDescriptorBufferInfo* pBufferInfo;
+ const VkBufferView* pTexelBufferView;
+} VkWriteDescriptorSet;
+
+typedef struct VkCopyDescriptorSet {
+ VkStructureType sType;
+ const void* pNext;
+ VkDescriptorSet srcSet;
+ uint32_t srcBinding;
+ uint32_t srcArrayElement;
+ VkDescriptorSet dstSet;
+ uint32_t dstBinding;
+ uint32_t dstArrayElement;
+ uint32_t descriptorCount;
+} VkCopyDescriptorSet;
+
+typedef struct VkFramebufferCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkFramebufferCreateFlags flags;
+ VkRenderPass renderPass;
+ uint32_t attachmentCount;
+ const VkImageView* pAttachments;
+ uint32_t width;
+ uint32_t height;
+ uint32_t layers;
+} VkFramebufferCreateInfo;
+
+typedef struct VkAttachmentDescription {
+ VkAttachmentDescriptionFlags flags;
+ VkFormat format;
+ VkSampleCountFlagBits samples;
+ VkAttachmentLoadOp loadOp;
+ VkAttachmentStoreOp storeOp;
+ VkAttachmentLoadOp stencilLoadOp;
+ VkAttachmentStoreOp stencilStoreOp;
+ VkImageLayout initialLayout;
+ VkImageLayout finalLayout;
+} VkAttachmentDescription;
+
+typedef struct VkAttachmentReference {
+ uint32_t attachment;
+ VkImageLayout layout;
+} VkAttachmentReference;
+
+typedef struct VkSubpassDescription {
+ VkSubpassDescriptionFlags flags;
+ VkPipelineBindPoint pipelineBindPoint;
+ uint32_t inputAttachmentCount;
+ const VkAttachmentReference* pInputAttachments;
+ uint32_t colorAttachmentCount;
+ const VkAttachmentReference* pColorAttachments;
+ const VkAttachmentReference* pResolveAttachments;
+ const VkAttachmentReference* pDepthStencilAttachment;
+ uint32_t preserveAttachmentCount;
+ const uint32_t* pPreserveAttachments;
+} VkSubpassDescription;
+
+typedef struct VkSubpassDependency {
+ uint32_t srcSubpass;
+ uint32_t dstSubpass;
+ VkPipelineStageFlags srcStageMask;
+ VkPipelineStageFlags dstStageMask;
+ VkAccessFlags srcAccessMask;
+ VkAccessFlags dstAccessMask;
+ VkDependencyFlags dependencyFlags;
+} VkSubpassDependency;
+
+typedef struct VkRenderPassCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkRenderPassCreateFlags flags;
+ uint32_t attachmentCount;
+ const VkAttachmentDescription* pAttachments;
+ uint32_t subpassCount;
+ const VkSubpassDescription* pSubpasses;
+ uint32_t dependencyCount;
+ const VkSubpassDependency* pDependencies;
+} VkRenderPassCreateInfo;
+
+typedef struct VkCommandPoolCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkCommandPoolCreateFlags flags;
+ uint32_t queueFamilyIndex;
+} VkCommandPoolCreateInfo;
+
+typedef struct VkCommandBufferAllocateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkCommandPool commandPool;
+ VkCommandBufferLevel level;
+ uint32_t commandBufferCount;
+} VkCommandBufferAllocateInfo;
+
+typedef struct VkCommandBufferInheritanceInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkRenderPass renderPass;
+ uint32_t subpass;
+ VkFramebuffer framebuffer;
+ VkBool32 occlusionQueryEnable;
+ VkQueryControlFlags queryFlags;
+ VkQueryPipelineStatisticFlags pipelineStatistics;
+} VkCommandBufferInheritanceInfo;
+
+typedef struct VkCommandBufferBeginInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkCommandBufferUsageFlags flags;
+ const VkCommandBufferInheritanceInfo* pInheritanceInfo;
+} VkCommandBufferBeginInfo;
+
+typedef struct VkBufferCopy {
+ VkDeviceSize srcOffset;
+ VkDeviceSize dstOffset;
+ VkDeviceSize size;
+} VkBufferCopy;
+
+typedef struct VkImageSubresourceLayers {
+ VkImageAspectFlags aspectMask;
+ uint32_t mipLevel;
+ uint32_t baseArrayLayer;
+ uint32_t layerCount;
+} VkImageSubresourceLayers;
+
+typedef struct VkImageCopy {
+ VkImageSubresourceLayers srcSubresource;
+ VkOffset3D srcOffset;
+ VkImageSubresourceLayers dstSubresource;
+ VkOffset3D dstOffset;
+ VkExtent3D extent;
+} VkImageCopy;
+
+typedef struct VkImageBlit {
+ VkImageSubresourceLayers srcSubresource;
+ VkOffset3D srcOffsets[2];
+ VkImageSubresourceLayers dstSubresource;
+ VkOffset3D dstOffsets[2];
+} VkImageBlit;
+
+typedef struct VkBufferImageCopy {
+ VkDeviceSize bufferOffset;
+ uint32_t bufferRowLength;
+ uint32_t bufferImageHeight;
+ VkImageSubresourceLayers imageSubresource;
+ VkOffset3D imageOffset;
+ VkExtent3D imageExtent;
+} VkBufferImageCopy;
+
+typedef union VkClearColorValue {
+ float float32[4];
+ int32_t int32[4];
+ uint32_t uint32[4];
+} VkClearColorValue;
+
+typedef struct VkClearDepthStencilValue {
+ float depth;
+ uint32_t stencil;
+} VkClearDepthStencilValue;
+
+typedef union VkClearValue {
+ VkClearColorValue color;
+ VkClearDepthStencilValue depthStencil;
+} VkClearValue;
+
+typedef struct VkClearAttachment {
+ VkImageAspectFlags aspectMask;
+ uint32_t colorAttachment;
+ VkClearValue clearValue;
+} VkClearAttachment;
+
+typedef struct VkClearRect {
+ VkRect2D rect;
+ uint32_t baseArrayLayer;
+ uint32_t layerCount;
+} VkClearRect;
+
+typedef struct VkImageResolve {
+ VkImageSubresourceLayers srcSubresource;
+ VkOffset3D srcOffset;
+ VkImageSubresourceLayers dstSubresource;
+ VkOffset3D dstOffset;
+ VkExtent3D extent;
+} VkImageResolve;
+
+typedef struct VkMemoryBarrier {
+ VkStructureType sType;
+ const void* pNext;
+ VkAccessFlags srcAccessMask;
+ VkAccessFlags dstAccessMask;
+} VkMemoryBarrier;
+
+typedef struct VkBufferMemoryBarrier {
+ VkStructureType sType;
+ const void* pNext;
+ VkAccessFlags srcAccessMask;
+ VkAccessFlags dstAccessMask;
+ uint32_t srcQueueFamilyIndex;
+ uint32_t dstQueueFamilyIndex;
+ VkBuffer buffer;
+ VkDeviceSize offset;
+ VkDeviceSize size;
+} VkBufferMemoryBarrier;
+
+typedef struct VkImageMemoryBarrier {
+ VkStructureType sType;
+ const void* pNext;
+ VkAccessFlags srcAccessMask;
+ VkAccessFlags dstAccessMask;
+ VkImageLayout oldLayout;
+ VkImageLayout newLayout;
+ uint32_t srcQueueFamilyIndex;
+ uint32_t dstQueueFamilyIndex;
+ VkImage image;
+ VkImageSubresourceRange subresourceRange;
+} VkImageMemoryBarrier;
+
+typedef struct VkRenderPassBeginInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkRenderPass renderPass;
+ VkFramebuffer framebuffer;
+ VkRect2D renderArea;
+ uint32_t clearValueCount;
+ const VkClearValue* pClearValues;
+} VkRenderPassBeginInfo;
+
+typedef struct VkDispatchIndirectCommand {
+ uint32_t x;
+ uint32_t y;
+ uint32_t z;
+} VkDispatchIndirectCommand;
+
+typedef struct VkDrawIndexedIndirectCommand {
+ uint32_t indexCount;
+ uint32_t instanceCount;
+ uint32_t firstIndex;
+ int32_t vertexOffset;
+ uint32_t firstInstance;
+} VkDrawIndexedIndirectCommand;
+
+typedef struct VkDrawIndirectCommand {
+ uint32_t vertexCount;
+ uint32_t instanceCount;
+ uint32_t firstVertex;
+ uint32_t firstInstance;
+} VkDrawIndirectCommand;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
+typedef void (VKAPI_PTR *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName);
+typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
+typedef void (VKAPI_PTR *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueWaitIdle)(VkQueue queue);
+typedef VkResult (VKAPI_PTR *PFN_vkDeviceWaitIdle)(VkDevice device);
+typedef VkResult (VKAPI_PTR *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
+typedef void (VKAPI_PTR *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
+typedef void (VKAPI_PTR *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory);
+typedef VkResult (VKAPI_PTR *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
+typedef VkResult (VKAPI_PTR *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
+typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset);
+typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset);
+typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+typedef void (VKAPI_PTR *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
+typedef VkResult (VKAPI_PTR *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence);
+typedef VkResult (VKAPI_PTR *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
+typedef void (VKAPI_PTR *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent);
+typedef void (VKAPI_PTR *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetEventStatus)(VkDevice device, VkEvent event);
+typedef VkResult (VKAPI_PTR *PFN_vkSetEvent)(VkDevice device, VkEvent event);
+typedef VkResult (VKAPI_PTR *PFN_vkResetEvent)(VkDevice device, VkEvent event);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
+typedef void (VKAPI_PTR *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
+typedef void (VKAPI_PTR *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView);
+typedef void (VKAPI_PTR *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage);
+typedef void (VKAPI_PTR *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView);
+typedef void (VKAPI_PTR *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule);
+typedef void (VKAPI_PTR *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
+typedef void (VKAPI_PTR *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
+typedef VkResult (VKAPI_PTR *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
+typedef void (VKAPI_PTR *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
+typedef void (VKAPI_PTR *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
+typedef void (VKAPI_PTR *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
+typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
+typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
+typedef VkResult (VKAPI_PTR *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets);
+typedef VkResult (VKAPI_PTR *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets);
+typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
+typedef void (VKAPI_PTR *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
+typedef void (VKAPI_PTR *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
+typedef void (VKAPI_PTR *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags);
+typedef VkResult (VKAPI_PTR *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers);
+typedef void (VKAPI_PTR *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
+typedef VkResult (VKAPI_PTR *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer);
+typedef VkResult (VKAPI_PTR *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
+typedef void (VKAPI_PTR *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
+typedef void (VKAPI_PTR *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports);
+typedef void (VKAPI_PTR *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors);
+typedef void (VKAPI_PTR *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
+typedef void (VKAPI_PTR *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference);
+typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
+typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
+typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
+typedef void (VKAPI_PTR *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
+typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const uint32_t* pData);
+typedef void (VKAPI_PTR *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data);
+typedef void (VKAPI_PTR *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+typedef void (VKAPI_PTR *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+typedef void (VKAPI_PTR *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
+typedef void (VKAPI_PTR *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
+typedef void (VKAPI_PTR *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+typedef void (VKAPI_PTR *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
+typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags);
+typedef void (VKAPI_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query);
+typedef void (VKAPI_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount);
+typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
+typedef void (VKAPI_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
+typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents);
+typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer);
+typedef void (VKAPI_PTR *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
+ const VkInstanceCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkInstance* pInstance);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
+ VkInstance instance,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
+ VkInstance instance,
+ uint32_t* pPhysicalDeviceCount,
+ VkPhysicalDevice* pPhysicalDevices);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceFeatures* pFeatures);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
+ VkPhysicalDevice physicalDevice,
+ VkFormat format,
+ VkFormatProperties* pFormatProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
+ VkPhysicalDevice physicalDevice,
+ VkFormat format,
+ VkImageType type,
+ VkImageTiling tiling,
+ VkImageUsageFlags usage,
+ VkImageCreateFlags flags,
+ VkImageFormatProperties* pImageFormatProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceProperties* pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pQueueFamilyPropertyCount,
+ VkQueueFamilyProperties* pQueueFamilyProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
+ VkPhysicalDevice physicalDevice,
+ VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+
+VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(
+ VkInstance instance,
+ const char* pName);
+
+VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(
+ VkDevice device,
+ const char* pName);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
+ VkPhysicalDevice physicalDevice,
+ const VkDeviceCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDevice* pDevice);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
+ VkDevice device,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
+ const char* pLayerName,
+ uint32_t* pPropertyCount,
+ VkExtensionProperties* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
+ VkPhysicalDevice physicalDevice,
+ const char* pLayerName,
+ uint32_t* pPropertyCount,
+ VkExtensionProperties* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
+ uint32_t* pPropertyCount,
+ VkLayerProperties* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pPropertyCount,
+ VkLayerProperties* pProperties);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
+ VkDevice device,
+ uint32_t queueFamilyIndex,
+ uint32_t queueIndex,
+ VkQueue* pQueue);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
+ VkQueue queue,
+ uint32_t submitCount,
+ const VkSubmitInfo* pSubmits,
+ VkFence fence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
+ VkQueue queue);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
+ VkDevice device);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
+ VkDevice device,
+ const VkMemoryAllocateInfo* pAllocateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDeviceMemory* pMemory);
+
+VKAPI_ATTR void VKAPI_CALL vkFreeMemory(
+ VkDevice device,
+ VkDeviceMemory memory,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
+ VkDevice device,
+ VkDeviceMemory memory,
+ VkDeviceSize offset,
+ VkDeviceSize size,
+ VkMemoryMapFlags flags,
+ void** ppData);
+
+VKAPI_ATTR void VKAPI_CALL vkUnmapMemory(
+ VkDevice device,
+ VkDeviceMemory memory);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
+ VkDevice device,
+ uint32_t memoryRangeCount,
+ const VkMappedMemoryRange* pMemoryRanges);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
+ VkDevice device,
+ uint32_t memoryRangeCount,
+ const VkMappedMemoryRange* pMemoryRanges);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
+ VkDevice device,
+ VkDeviceMemory memory,
+ VkDeviceSize* pCommittedMemoryInBytes);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
+ VkDevice device,
+ VkBuffer buffer,
+ VkDeviceMemory memory,
+ VkDeviceSize memoryOffset);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
+ VkDevice device,
+ VkImage image,
+ VkDeviceMemory memory,
+ VkDeviceSize memoryOffset);
+
+VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
+ VkDevice device,
+ VkBuffer buffer,
+ VkMemoryRequirements* pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
+ VkDevice device,
+ VkImage image,
+ VkMemoryRequirements* pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
+ VkDevice device,
+ VkImage image,
+ uint32_t* pSparseMemoryRequirementCount,
+ VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
+ VkPhysicalDevice physicalDevice,
+ VkFormat format,
+ VkImageType type,
+ VkSampleCountFlagBits samples,
+ VkImageUsageFlags usage,
+ VkImageTiling tiling,
+ uint32_t* pPropertyCount,
+ VkSparseImageFormatProperties* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
+ VkQueue queue,
+ uint32_t bindInfoCount,
+ const VkBindSparseInfo* pBindInfo,
+ VkFence fence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
+ VkDevice device,
+ const VkFenceCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkFence* pFence);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyFence(
+ VkDevice device,
+ VkFence fence,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
+ VkDevice device,
+ uint32_t fenceCount,
+ const VkFence* pFences);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
+ VkDevice device,
+ VkFence fence);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
+ VkDevice device,
+ uint32_t fenceCount,
+ const VkFence* pFences,
+ VkBool32 waitAll,
+ uint64_t timeout);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
+ VkDevice device,
+ const VkSemaphoreCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSemaphore* pSemaphore);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(
+ VkDevice device,
+ VkSemaphore semaphore,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
+ VkDevice device,
+ const VkEventCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkEvent* pEvent);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(
+ VkDevice device,
+ VkEvent event,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
+ VkDevice device,
+ VkEvent event);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
+ VkDevice device,
+ VkEvent event);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
+ VkDevice device,
+ VkEvent event);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
+ VkDevice device,
+ const VkQueryPoolCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkQueryPool* pQueryPool);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool(
+ VkDevice device,
+ VkQueryPool queryPool,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
+ VkDevice device,
+ VkQueryPool queryPool,
+ uint32_t firstQuery,
+ uint32_t queryCount,
+ size_t dataSize,
+ void* pData,
+ VkDeviceSize stride,
+ VkQueryResultFlags flags);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
+ VkDevice device,
+ const VkBufferCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkBuffer* pBuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(
+ VkDevice device,
+ VkBuffer buffer,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
+ VkDevice device,
+ const VkBufferViewCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkBufferView* pView);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(
+ VkDevice device,
+ VkBufferView bufferView,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
+ VkDevice device,
+ const VkImageCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkImage* pImage);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyImage(
+ VkDevice device,
+ VkImage image,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
+ VkDevice device,
+ VkImage image,
+ const VkImageSubresource* pSubresource,
+ VkSubresourceLayout* pLayout);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
+ VkDevice device,
+ const VkImageViewCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkImageView* pView);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(
+ VkDevice device,
+ VkImageView imageView,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
+ VkDevice device,
+ const VkShaderModuleCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkShaderModule* pShaderModule);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule(
+ VkDevice device,
+ VkShaderModule shaderModule,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
+ VkDevice device,
+ const VkPipelineCacheCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkPipelineCache* pPipelineCache);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(
+ VkDevice device,
+ VkPipelineCache pipelineCache,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
+ VkDevice device,
+ VkPipelineCache pipelineCache,
+ size_t* pDataSize,
+ void* pData);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
+ VkDevice device,
+ VkPipelineCache dstCache,
+ uint32_t srcCacheCount,
+ const VkPipelineCache* pSrcCaches);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
+ VkDevice device,
+ VkPipelineCache pipelineCache,
+ uint32_t createInfoCount,
+ const VkGraphicsPipelineCreateInfo* pCreateInfos,
+ const VkAllocationCallbacks* pAllocator,
+ VkPipeline* pPipelines);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
+ VkDevice device,
+ VkPipelineCache pipelineCache,
+ uint32_t createInfoCount,
+ const VkComputePipelineCreateInfo* pCreateInfos,
+ const VkAllocationCallbacks* pAllocator,
+ VkPipeline* pPipelines);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(
+ VkDevice device,
+ VkPipeline pipeline,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
+ VkDevice device,
+ const VkPipelineLayoutCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkPipelineLayout* pPipelineLayout);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout(
+ VkDevice device,
+ VkPipelineLayout pipelineLayout,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
+ VkDevice device,
+ const VkSamplerCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSampler* pSampler);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroySampler(
+ VkDevice device,
+ VkSampler sampler,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
+ VkDevice device,
+ const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDescriptorSetLayout* pSetLayout);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(
+ VkDevice device,
+ VkDescriptorSetLayout descriptorSetLayout,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
+ VkDevice device,
+ const VkDescriptorPoolCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDescriptorPool* pDescriptorPool);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool(
+ VkDevice device,
+ VkDescriptorPool descriptorPool,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
+ VkDevice device,
+ VkDescriptorPool descriptorPool,
+ VkDescriptorPoolResetFlags flags);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
+ VkDevice device,
+ const VkDescriptorSetAllocateInfo* pAllocateInfo,
+ VkDescriptorSet* pDescriptorSets);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
+ VkDevice device,
+ VkDescriptorPool descriptorPool,
+ uint32_t descriptorSetCount,
+ const VkDescriptorSet* pDescriptorSets);
+
+VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
+ VkDevice device,
+ uint32_t descriptorWriteCount,
+ const VkWriteDescriptorSet* pDescriptorWrites,
+ uint32_t descriptorCopyCount,
+ const VkCopyDescriptorSet* pDescriptorCopies);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
+ VkDevice device,
+ const VkFramebufferCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkFramebuffer* pFramebuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(
+ VkDevice device,
+ VkFramebuffer framebuffer,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
+ VkDevice device,
+ const VkRenderPassCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkRenderPass* pRenderPass);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(
+ VkDevice device,
+ VkRenderPass renderPass,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
+ VkDevice device,
+ VkRenderPass renderPass,
+ VkExtent2D* pGranularity);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
+ VkDevice device,
+ const VkCommandPoolCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkCommandPool* pCommandPool);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool(
+ VkDevice device,
+ VkCommandPool commandPool,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
+ VkDevice device,
+ VkCommandPool commandPool,
+ VkCommandPoolResetFlags flags);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
+ VkDevice device,
+ const VkCommandBufferAllocateInfo* pAllocateInfo,
+ VkCommandBuffer* pCommandBuffers);
+
+VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(
+ VkDevice device,
+ VkCommandPool commandPool,
+ uint32_t commandBufferCount,
+ const VkCommandBuffer* pCommandBuffers);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
+ VkCommandBuffer commandBuffer,
+ const VkCommandBufferBeginInfo* pBeginInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
+ VkCommandBuffer commandBuffer);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
+ VkCommandBuffer commandBuffer,
+ VkCommandBufferResetFlags flags);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
+ VkCommandBuffer commandBuffer,
+ VkPipelineBindPoint pipelineBindPoint,
+ VkPipeline pipeline);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstViewport,
+ uint32_t viewportCount,
+ const VkViewport* pViewports);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstScissor,
+ uint32_t scissorCount,
+ const VkRect2D* pScissors);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(
+ VkCommandBuffer commandBuffer,
+ float lineWidth);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(
+ VkCommandBuffer commandBuffer,
+ float depthBiasConstantFactor,
+ float depthBiasClamp,
+ float depthBiasSlopeFactor);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(
+ VkCommandBuffer commandBuffer,
+ const float blendConstants[4]);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(
+ VkCommandBuffer commandBuffer,
+ float minDepthBounds,
+ float maxDepthBounds);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(
+ VkCommandBuffer commandBuffer,
+ VkStencilFaceFlags faceMask,
+ uint32_t compareMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(
+ VkCommandBuffer commandBuffer,
+ VkStencilFaceFlags faceMask,
+ uint32_t writeMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(
+ VkCommandBuffer commandBuffer,
+ VkStencilFaceFlags faceMask,
+ uint32_t reference);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
+ VkCommandBuffer commandBuffer,
+ VkPipelineBindPoint pipelineBindPoint,
+ VkPipelineLayout layout,
+ uint32_t firstSet,
+ uint32_t descriptorSetCount,
+ const VkDescriptorSet* pDescriptorSets,
+ uint32_t dynamicOffsetCount,
+ const uint32_t* pDynamicOffsets);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset,
+ VkIndexType indexType);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstBinding,
+ uint32_t bindingCount,
+ const VkBuffer* pBuffers,
+ const VkDeviceSize* pOffsets);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
+ VkCommandBuffer commandBuffer,
+ uint32_t vertexCount,
+ uint32_t instanceCount,
+ uint32_t firstVertex,
+ uint32_t firstInstance);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
+ VkCommandBuffer commandBuffer,
+ uint32_t indexCount,
+ uint32_t instanceCount,
+ uint32_t firstIndex,
+ int32_t vertexOffset,
+ uint32_t firstInstance);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset,
+ uint32_t drawCount,
+ uint32_t stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset,
+ uint32_t drawCount,
+ uint32_t stride);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
+ VkCommandBuffer commandBuffer,
+ uint32_t x,
+ uint32_t y,
+ uint32_t z);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
+ VkCommandBuffer commandBuffer,
+ VkBuffer buffer,
+ VkDeviceSize offset);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
+ VkCommandBuffer commandBuffer,
+ VkBuffer srcBuffer,
+ VkBuffer dstBuffer,
+ uint32_t regionCount,
+ const VkBufferCopy* pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
+ VkCommandBuffer commandBuffer,
+ VkImage srcImage,
+ VkImageLayout srcImageLayout,
+ VkImage dstImage,
+ VkImageLayout dstImageLayout,
+ uint32_t regionCount,
+ const VkImageCopy* pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
+ VkCommandBuffer commandBuffer,
+ VkImage srcImage,
+ VkImageLayout srcImageLayout,
+ VkImage dstImage,
+ VkImageLayout dstImageLayout,
+ uint32_t regionCount,
+ const VkImageBlit* pRegions,
+ VkFilter filter);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
+ VkCommandBuffer commandBuffer,
+ VkBuffer srcBuffer,
+ VkImage dstImage,
+ VkImageLayout dstImageLayout,
+ uint32_t regionCount,
+ const VkBufferImageCopy* pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
+ VkCommandBuffer commandBuffer,
+ VkImage srcImage,
+ VkImageLayout srcImageLayout,
+ VkBuffer dstBuffer,
+ uint32_t regionCount,
+ const VkBufferImageCopy* pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
+ VkCommandBuffer commandBuffer,
+ VkBuffer dstBuffer,
+ VkDeviceSize dstOffset,
+ VkDeviceSize dataSize,
+ const uint32_t* pData);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
+ VkCommandBuffer commandBuffer,
+ VkBuffer dstBuffer,
+ VkDeviceSize dstOffset,
+ VkDeviceSize size,
+ uint32_t data);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
+ VkCommandBuffer commandBuffer,
+ VkImage image,
+ VkImageLayout imageLayout,
+ const VkClearColorValue* pColor,
+ uint32_t rangeCount,
+ const VkImageSubresourceRange* pRanges);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
+ VkCommandBuffer commandBuffer,
+ VkImage image,
+ VkImageLayout imageLayout,
+ const VkClearDepthStencilValue* pDepthStencil,
+ uint32_t rangeCount,
+ const VkImageSubresourceRange* pRanges);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
+ VkCommandBuffer commandBuffer,
+ uint32_t attachmentCount,
+ const VkClearAttachment* pAttachments,
+ uint32_t rectCount,
+ const VkClearRect* pRects);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
+ VkCommandBuffer commandBuffer,
+ VkImage srcImage,
+ VkImageLayout srcImageLayout,
+ VkImage dstImage,
+ VkImageLayout dstImageLayout,
+ uint32_t regionCount,
+ const VkImageResolve* pRegions);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
+ VkCommandBuffer commandBuffer,
+ VkEvent event,
+ VkPipelineStageFlags stageMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
+ VkCommandBuffer commandBuffer,
+ VkEvent event,
+ VkPipelineStageFlags stageMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
+ VkCommandBuffer commandBuffer,
+ uint32_t eventCount,
+ const VkEvent* pEvents,
+ VkPipelineStageFlags srcStageMask,
+ VkPipelineStageFlags dstStageMask,
+ uint32_t memoryBarrierCount,
+ const VkMemoryBarrier* pMemoryBarriers,
+ uint32_t bufferMemoryBarrierCount,
+ const VkBufferMemoryBarrier* pBufferMemoryBarriers,
+ uint32_t imageMemoryBarrierCount,
+ const VkImageMemoryBarrier* pImageMemoryBarriers);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
+ VkCommandBuffer commandBuffer,
+ VkPipelineStageFlags srcStageMask,
+ VkPipelineStageFlags dstStageMask,
+ VkDependencyFlags dependencyFlags,
+ uint32_t memoryBarrierCount,
+ const VkMemoryBarrier* pMemoryBarriers,
+ uint32_t bufferMemoryBarrierCount,
+ const VkBufferMemoryBarrier* pBufferMemoryBarriers,
+ uint32_t imageMemoryBarrierCount,
+ const VkImageMemoryBarrier* pImageMemoryBarriers);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
+ VkCommandBuffer commandBuffer,
+ VkQueryPool queryPool,
+ uint32_t query,
+ VkQueryControlFlags flags);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
+ VkCommandBuffer commandBuffer,
+ VkQueryPool queryPool,
+ uint32_t query);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
+ VkCommandBuffer commandBuffer,
+ VkQueryPool queryPool,
+ uint32_t firstQuery,
+ uint32_t queryCount);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
+ VkCommandBuffer commandBuffer,
+ VkPipelineStageFlagBits pipelineStage,
+ VkQueryPool queryPool,
+ uint32_t query);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
+ VkCommandBuffer commandBuffer,
+ VkQueryPool queryPool,
+ uint32_t firstQuery,
+ uint32_t queryCount,
+ VkBuffer dstBuffer,
+ VkDeviceSize dstOffset,
+ VkDeviceSize stride,
+ VkQueryResultFlags flags);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
+ VkCommandBuffer commandBuffer,
+ VkPipelineLayout layout,
+ VkShaderStageFlags stageFlags,
+ uint32_t offset,
+ uint32_t size,
+ const void* pValues);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
+ VkCommandBuffer commandBuffer,
+ const VkRenderPassBeginInfo* pRenderPassBegin,
+ VkSubpassContents contents);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
+ VkCommandBuffer commandBuffer,
+ VkSubpassContents contents);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
+ VkCommandBuffer commandBuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
+ VkCommandBuffer commandBuffer,
+ uint32_t commandBufferCount,
+ const VkCommandBuffer* pCommandBuffers);
+#endif
+
+#define VK_KHR_surface 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
+
+#define VK_KHR_SURFACE_SPEC_VERSION 25
+#define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface"
+
+
+typedef enum VkColorSpaceKHR {
+ VK_COLORSPACE_SRGB_NONLINEAR_KHR = 0,
+ VK_COLORSPACE_BEGIN_RANGE = VK_COLORSPACE_SRGB_NONLINEAR_KHR,
+ VK_COLORSPACE_END_RANGE = VK_COLORSPACE_SRGB_NONLINEAR_KHR,
+ VK_COLORSPACE_RANGE_SIZE = (VK_COLORSPACE_SRGB_NONLINEAR_KHR - VK_COLORSPACE_SRGB_NONLINEAR_KHR + 1),
+ VK_COLORSPACE_MAX_ENUM = 0x7FFFFFFF
+} VkColorSpaceKHR;
+
+typedef enum VkPresentModeKHR {
+ VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
+ VK_PRESENT_MODE_MAILBOX_KHR = 1,
+ VK_PRESENT_MODE_FIFO_KHR = 2,
+ VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
+ VK_PRESENT_MODE_BEGIN_RANGE = VK_PRESENT_MODE_IMMEDIATE_KHR,
+ VK_PRESENT_MODE_END_RANGE = VK_PRESENT_MODE_FIFO_RELAXED_KHR,
+ VK_PRESENT_MODE_RANGE_SIZE = (VK_PRESENT_MODE_FIFO_RELAXED_KHR - VK_PRESENT_MODE_IMMEDIATE_KHR + 1),
+ VK_PRESENT_MODE_MAX_ENUM = 0x7FFFFFFF
+} VkPresentModeKHR;
+
+
+typedef enum VkSurfaceTransformFlagBitsKHR {
+ VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001,
+ VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002,
+ VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004,
+ VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008,
+ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010,
+ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020,
+ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040,
+ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080,
+ VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
+} VkSurfaceTransformFlagBitsKHR;
+typedef VkFlags VkSurfaceTransformFlagsKHR;
+
+typedef enum VkCompositeAlphaFlagBitsKHR {
+ VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
+ VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
+ VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
+ VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008,
+} VkCompositeAlphaFlagBitsKHR;
+typedef VkFlags VkCompositeAlphaFlagsKHR;
+
+typedef struct VkSurfaceCapabilitiesKHR {
+ uint32_t minImageCount;
+ uint32_t maxImageCount;
+ VkExtent2D currentExtent;
+ VkExtent2D minImageExtent;
+ VkExtent2D maxImageExtent;
+ uint32_t maxImageArrayLayers;
+ VkSurfaceTransformFlagsKHR supportedTransforms;
+ VkSurfaceTransformFlagBitsKHR currentTransform;
+ VkCompositeAlphaFlagsKHR supportedCompositeAlpha;
+ VkImageUsageFlags supportedUsageFlags;
+} VkSurfaceCapabilitiesKHR;
+
+typedef struct VkSurfaceFormatKHR {
+ VkFormat format;
+ VkColorSpaceKHR colorSpace;
+} VkSurfaceFormatKHR;
+
+
+typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(
+ VkInstance instance,
+ VkSurfaceKHR surface,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t queueFamilyIndex,
+ VkSurfaceKHR surface,
+ VkBool32* pSupported);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
+ VkPhysicalDevice physicalDevice,
+ VkSurfaceKHR surface,
+ VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR(
+ VkPhysicalDevice physicalDevice,
+ VkSurfaceKHR surface,
+ uint32_t* pSurfaceFormatCount,
+ VkSurfaceFormatKHR* pSurfaceFormats);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(
+ VkPhysicalDevice physicalDevice,
+ VkSurfaceKHR surface,
+ uint32_t* pPresentModeCount,
+ VkPresentModeKHR* pPresentModes);
+#endif
+
+#define VK_KHR_swapchain 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
+
+#define VK_KHR_SWAPCHAIN_SPEC_VERSION 67
+#define VK_KHR_SWAPCHAIN_EXTENSION_NAME "VK_KHR_swapchain"
+
+typedef VkFlags VkSwapchainCreateFlagsKHR;
+
+typedef struct VkSwapchainCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkSwapchainCreateFlagsKHR flags;
+ VkSurfaceKHR surface;
+ uint32_t minImageCount;
+ VkFormat imageFormat;
+ VkColorSpaceKHR imageColorSpace;
+ VkExtent2D imageExtent;
+ uint32_t imageArrayLayers;
+ VkImageUsageFlags imageUsage;
+ VkSharingMode imageSharingMode;
+ uint32_t queueFamilyIndexCount;
+ const uint32_t* pQueueFamilyIndices;
+ VkSurfaceTransformFlagBitsKHR preTransform;
+ VkCompositeAlphaFlagBitsKHR compositeAlpha;
+ VkPresentModeKHR presentMode;
+ VkBool32 clipped;
+ VkSwapchainKHR oldSwapchain;
+} VkSwapchainCreateInfoKHR;
+
+typedef struct VkPresentInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t waitSemaphoreCount;
+ const VkSemaphore* pWaitSemaphores;
+ uint32_t swapchainCount;
+ const VkSwapchainKHR* pSwapchains;
+ const uint32_t* pImageIndices;
+ VkResult* pResults;
+} VkPresentInfoKHR;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain);
+typedef void (VKAPI_PTR *PFN_vkDestroySwapchainKHR)(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages);
+typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImageKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex);
+typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue queue, const VkPresentInfoKHR* pPresentInfo);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(
+ VkDevice device,
+ const VkSwapchainCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSwapchainKHR* pSwapchain);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR(
+ VkDevice device,
+ VkSwapchainKHR swapchain,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(
+ VkDevice device,
+ VkSwapchainKHR swapchain,
+ uint32_t* pSwapchainImageCount,
+ VkImage* pSwapchainImages);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR(
+ VkDevice device,
+ VkSwapchainKHR swapchain,
+ uint64_t timeout,
+ VkSemaphore semaphore,
+ VkFence fence,
+ uint32_t* pImageIndex);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR(
+ VkQueue queue,
+ const VkPresentInfoKHR* pPresentInfo);
+#endif
+
+#define VK_KHR_display 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR)
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR)
+
+#define VK_KHR_DISPLAY_SPEC_VERSION 21
+#define VK_KHR_DISPLAY_EXTENSION_NAME "VK_KHR_display"
+
+
+typedef enum VkDisplayPlaneAlphaFlagBitsKHR {
+ VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
+ VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000002,
+ VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000004,
+ VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000008,
+} VkDisplayPlaneAlphaFlagBitsKHR;
+typedef VkFlags VkDisplayModeCreateFlagsKHR;
+typedef VkFlags VkDisplayPlaneAlphaFlagsKHR;
+typedef VkFlags VkDisplaySurfaceCreateFlagsKHR;
+
+typedef struct VkDisplayPropertiesKHR {
+ VkDisplayKHR display;
+ const char* displayName;
+ VkExtent2D physicalDimensions;
+ VkExtent2D physicalResolution;
+ VkSurfaceTransformFlagsKHR supportedTransforms;
+ VkBool32 planeReorderPossible;
+ VkBool32 persistentContent;
+} VkDisplayPropertiesKHR;
+
+typedef struct VkDisplayModeParametersKHR {
+ VkExtent2D visibleRegion;
+ uint32_t refreshRate;
+} VkDisplayModeParametersKHR;
+
+typedef struct VkDisplayModePropertiesKHR {
+ VkDisplayModeKHR displayMode;
+ VkDisplayModeParametersKHR parameters;
+} VkDisplayModePropertiesKHR;
+
+typedef struct VkDisplayModeCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkDisplayModeCreateFlagsKHR flags;
+ VkDisplayModeParametersKHR parameters;
+} VkDisplayModeCreateInfoKHR;
+
+typedef struct VkDisplayPlaneCapabilitiesKHR {
+ VkDisplayPlaneAlphaFlagsKHR supportedAlpha;
+ VkOffset2D minSrcPosition;
+ VkOffset2D maxSrcPosition;
+ VkExtent2D minSrcExtent;
+ VkExtent2D maxSrcExtent;
+ VkOffset2D minDstPosition;
+ VkOffset2D maxDstPosition;
+ VkExtent2D minDstExtent;
+ VkExtent2D maxDstExtent;
+} VkDisplayPlaneCapabilitiesKHR;
+
+typedef struct VkDisplayPlanePropertiesKHR {
+ VkDisplayKHR currentDisplay;
+ uint32_t currentStackIndex;
+} VkDisplayPlanePropertiesKHR;
+
+typedef struct VkDisplaySurfaceCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkDisplaySurfaceCreateFlagsKHR flags;
+ VkDisplayModeKHR displayMode;
+ uint32_t planeIndex;
+ uint32_t planeStackIndex;
+ VkSurfaceTransformFlagBitsKHR transform;
+ float globalAlpha;
+ VkDisplayPlaneAlphaFlagBitsKHR alphaMode;
+ VkExtent2D imageExtent;
+} VkDisplaySurfaceCreateInfoKHR;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR*pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pPropertyCount,
+ VkDisplayPropertiesKHR* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pPropertyCount,
+ VkDisplayPlanePropertiesKHR* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t planeIndex,
+ uint32_t* pDisplayCount,
+ VkDisplayKHR* pDisplays);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR(
+ VkPhysicalDevice physicalDevice,
+ VkDisplayKHR display,
+ uint32_t* pPropertyCount,
+ VkDisplayModePropertiesKHR* pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR(
+ VkPhysicalDevice physicalDevice,
+ VkDisplayKHR display,
+ const VkDisplayModeCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDisplayModeKHR* pMode);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR(
+ VkPhysicalDevice physicalDevice,
+ VkDisplayModeKHR mode,
+ uint32_t planeIndex,
+ VkDisplayPlaneCapabilitiesKHR* pCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(
+ VkInstance instance,
+ const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+#endif
+
+#define VK_KHR_display_swapchain 1
+#define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 9
+#define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain"
+
+typedef struct VkDisplayPresentInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkRect2D srcRect;
+ VkRect2D dstRect;
+ VkBool32 persistent;
+} VkDisplayPresentInfoKHR;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateSharedSwapchainsKHR)(VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR(
+ VkDevice device,
+ uint32_t swapchainCount,
+ const VkSwapchainCreateInfoKHR* pCreateInfos,
+ const VkAllocationCallbacks* pAllocator,
+ VkSwapchainKHR* pSwapchains);
+#endif
+
+#ifdef VK_USE_PLATFORM_XLIB_KHR
+#define VK_KHR_xlib_surface 1
+#include <X11/Xlib.h>
+
+#define VK_KHR_XLIB_SURFACE_SPEC_VERSION 6
+#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface"
+
+typedef VkFlags VkXlibSurfaceCreateFlagsKHR;
+
+typedef struct VkXlibSurfaceCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkXlibSurfaceCreateFlagsKHR flags;
+ Display* dpy;
+ Window window;
+} VkXlibSurfaceCreateInfoKHR;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(
+ VkInstance instance,
+ const VkXlibSurfaceCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+
+VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t queueFamilyIndex,
+ Display* dpy,
+ VisualID visualID);
+#endif
+#endif /* VK_USE_PLATFORM_XLIB_KHR */
+
+#ifdef VK_USE_PLATFORM_XCB_KHR
+#define VK_KHR_xcb_surface 1
+#include <xcb/xcb.h>
+
+#define VK_KHR_XCB_SURFACE_SPEC_VERSION 6
+#define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface"
+
+typedef VkFlags VkXcbSurfaceCreateFlagsKHR;
+
+typedef struct VkXcbSurfaceCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkXcbSurfaceCreateFlagsKHR flags;
+ xcb_connection_t* connection;
+ xcb_window_t window;
+} VkXcbSurfaceCreateInfoKHR;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(
+ VkInstance instance,
+ const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+
+VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t queueFamilyIndex,
+ xcb_connection_t* connection,
+ xcb_visualid_t visual_id);
+#endif
+#endif /* VK_USE_PLATFORM_XCB_KHR */
+
+#ifdef VK_USE_PLATFORM_WAYLAND_KHR
+#define VK_KHR_wayland_surface 1
+#include <wayland-client.h>
+
+#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 5
+#define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface"
+
+typedef VkFlags VkWaylandSurfaceCreateFlagsKHR;
+
+typedef struct VkWaylandSurfaceCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkWaylandSurfaceCreateFlagsKHR flags;
+ struct wl_display* display;
+ struct wl_surface* surface;
+} VkWaylandSurfaceCreateInfoKHR;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(
+ VkInstance instance,
+ const VkWaylandSurfaceCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+
+VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t queueFamilyIndex,
+ struct wl_display* display);
+#endif
+#endif /* VK_USE_PLATFORM_WAYLAND_KHR */
+
+#ifdef VK_USE_PLATFORM_MIR_KHR
+#define VK_KHR_mir_surface 1
+#include <mir_toolkit/client_types.h>
+
+#define VK_KHR_MIR_SURFACE_SPEC_VERSION 4
+#define VK_KHR_MIR_SURFACE_EXTENSION_NAME "VK_KHR_mir_surface"
+
+typedef VkFlags VkMirSurfaceCreateFlagsKHR;
+
+typedef struct VkMirSurfaceCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkMirSurfaceCreateFlagsKHR flags;
+ MirConnection* connection;
+ MirSurface* mirSurface;
+} VkMirSurfaceCreateInfoKHR;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateMirSurfaceKHR)(VkInstance instance, const VkMirSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, MirConnection* connection);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateMirSurfaceKHR(
+ VkInstance instance,
+ const VkMirSurfaceCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+
+VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceMirPresentationSupportKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t queueFamilyIndex,
+ MirConnection* connection);
+#endif
+#endif /* VK_USE_PLATFORM_MIR_KHR */
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+#define VK_KHR_android_surface 1
+#include <android/native_window.h>
+
+#define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6
+#define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface"
+
+typedef VkFlags VkAndroidSurfaceCreateFlagsKHR;
+
+typedef struct VkAndroidSurfaceCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkAndroidSurfaceCreateFlagsKHR flags;
+ ANativeWindow* window;
+} VkAndroidSurfaceCreateInfoKHR;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
+ VkInstance instance,
+ const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+#endif
+#endif /* VK_USE_PLATFORM_ANDROID_KHR */
+
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+#define VK_KHR_win32_surface 1
+#include <windows.h>
+
+#define VK_KHR_WIN32_SURFACE_SPEC_VERSION 5
+#define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface"
+
+typedef VkFlags VkWin32SurfaceCreateFlagsKHR;
+
+typedef struct VkWin32SurfaceCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkWin32SurfaceCreateFlagsKHR flags;
+ HINSTANCE hinstance;
+ HWND hwnd;
+} VkWin32SurfaceCreateInfoKHR;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(
+ VkInstance instance,
+ const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkSurfaceKHR* pSurface);
+
+VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR(
+ VkPhysicalDevice physicalDevice,
+ uint32_t queueFamilyIndex);
+#endif
+#endif /* VK_USE_PLATFORM_WIN32_KHR */
+
+#define VK_EXT_debug_report 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)
+
+#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 1
+#define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report"
+
+
+typedef enum VkDebugReportObjectTypeEXT {
+ VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = 0,
+ VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = 1,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = 2,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = 3,
+ VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = 4,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = 5,
+ VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = 6,
+ VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = 7,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = 8,
+ VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = 9,
+ VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = 10,
+ VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = 11,
+ VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = 12,
+ VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = 13,
+ VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = 14,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = 15,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = 16,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = 17,
+ VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = 18,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = 19,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = 20,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = 21,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = 22,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = 23,
+ VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = 24,
+ VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26,
+ VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27,
+ VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = 28,
+} VkDebugReportObjectTypeEXT;
+
+typedef enum VkDebugReportErrorEXT {
+ VK_DEBUG_REPORT_ERROR_NONE_EXT = 0,
+ VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT = 1,
+} VkDebugReportErrorEXT;
+
+
+typedef enum VkDebugReportFlagBitsEXT {
+ VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 0x00000001,
+ VK_DEBUG_REPORT_WARNING_BIT_EXT = 0x00000002,
+ VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = 0x00000004,
+ VK_DEBUG_REPORT_ERROR_BIT_EXT = 0x00000008,
+ VK_DEBUG_REPORT_DEBUG_BIT_EXT = 0x00000010,
+} VkDebugReportFlagBitsEXT;
+typedef VkFlags VkDebugReportFlagsEXT;
+
+typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)(
+ VkDebugReportFlagsEXT flags,
+ VkDebugReportObjectTypeEXT objectType,
+ uint64_t object,
+ size_t location,
+ int32_t messageCode,
+ const char* pLayerPrefix,
+ const char* pMessage,
+ void* pUserData);
+
+
+typedef struct VkDebugReportCallbackCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkDebugReportFlagsEXT flags;
+ PFN_vkDebugReportCallbackEXT pfnCallback;
+ void* pUserData;
+} VkDebugReportCallbackCreateInfoEXT;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugReportCallbackEXT)(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback);
+typedef void (VKAPI_PTR *PFN_vkDestroyDebugReportCallbackEXT)(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator);
+typedef void (VKAPI_PTR *PFN_vkDebugReportMessageEXT)(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(
+ VkInstance instance,
+ const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkDebugReportCallbackEXT* pCallback);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(
+ VkInstance instance,
+ VkDebugReportCallbackEXT callback,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
+ VkInstance instance,
+ VkDebugReportFlagsEXT flags,
+ VkDebugReportObjectTypeEXT objectType,
+ uint64_t object,
+ size_t location,
+ int32_t messageCode,
+ const char* pLayerPrefix,
+ const char* pMessage);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/3rdparty/bgfx/3rdparty/nvtt/nvcore/posh.h b/3rdparty/bgfx/3rdparty/nvtt/nvcore/posh.h
index e401fb8f498..45d2d9e3ce9 100644
--- a/3rdparty/bgfx/3rdparty/nvtt/nvcore/posh.h
+++ b/3rdparty/bgfx/3rdparty/nvtt/nvcore/posh.h
@@ -412,7 +412,9 @@ LLVM:
# if !defined POSH_OS_XBOX
# if defined _WIN64
# define POSH_OS_WIN64 1
-# define POSH_OS_STRING "Win64"
+# if !defined POSH_OS_STRING
+# define POSH_OS_STRING "Win64"
+# endif // !defined POSH_OS_STRING
# else
# if !defined POSH_OS_STRING
# define POSH_OS_STRING "Win32"
@@ -1026,5 +1028,3 @@ extern posh_i64_t POSH_ReadI64FromBig( const void *src );
#ifdef __cplusplus
}
#endif
-
-
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp
index aa8d8f1d657..2cfcdfd369d 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp
@@ -595,7 +595,7 @@ static void SetWindowScrollY(ImGuiWindow* window, float new_scroll_y
static void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiSetCond cond);
static void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiSetCond cond);
static void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiSetCond cond);
-static ImGuiWindow* FindWindowByName(const char* name);
+ImGuiWindow* FindWindowByName(const char* name);
static ImGuiWindow* FindHoveredWindow(ImVec2 pos, bool excluding_childs);
static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags);
static inline bool IsWindowContentHoverable(ImGuiWindow* window);
@@ -2286,25 +2286,26 @@ static void AddWindowToSortedBuffer(ImVector<ImGuiWindow*>& out_sorted_windows,
static void AddDrawListToRenderList(ImVector<ImDrawList*>& out_render_list, ImDrawList* draw_list)
{
- if (!draw_list->CmdBuffer.empty() && !draw_list->VtxBuffer.empty())
- {
- // Remove trailing command if unused
- ImDrawCmd& last_cmd = draw_list->CmdBuffer.back();
- if (last_cmd.ElemCount == 0 && last_cmd.UserCallback == NULL)
- draw_list->CmdBuffer.pop_back();
+ if (draw_list->CmdBuffer.empty())
+ return;
- out_render_list.push_back(draw_list);
+ // Remove trailing command if unused
+ ImDrawCmd& last_cmd = draw_list->CmdBuffer.back();
+ if (last_cmd.ElemCount == 0 && last_cmd.UserCallback == NULL)
+ {
+ draw_list->CmdBuffer.pop_back();
+ if (draw_list->CmdBuffer.empty())
+ return;
+ }
- // Check that draw_list doesn't use more vertices than indexable (default ImDrawIdx = 2 bytes = 64K vertices)
- // If this assert triggers because you are drawing lots of stuff manually, A) workaround by calling BeginChild()/EndChild() to put your draw commands in multiple draw lists, B) #define ImDrawIdx to a 'unsigned int' in imconfig.h and render accordingly.
- const unsigned long long int max_vtx_idx = (unsigned long long int)1L << (sizeof(ImDrawIdx)*8);
- (void)max_vtx_idx;
- IM_ASSERT((int)draw_list->_VtxCurrentIdx == draw_list->VtxBuffer.Size); // Sanity check. Bug or mismatch between PrimReserve() calls and incrementing _VtxCurrentIdx, _VtxWritePtr etc.
- IM_ASSERT((unsigned long long int)draw_list->_VtxCurrentIdx <= max_vtx_idx); // Too many vertices in same ImDrawList. See comment above.
+ // Check that draw_list doesn't use more vertices than indexable (default ImDrawIdx = 2 bytes = 64K vertices)
+ // If this assert triggers because you are drawing lots of stuff manually, A) workaround by calling BeginChild()/EndChild() to put your draw commands in multiple draw lists, B) #define ImDrawIdx to a 'unsigned int' in imconfig.h and render accordingly.
+ IM_ASSERT((int)draw_list->_VtxCurrentIdx == draw_list->VtxBuffer.Size); // Sanity check. Bug or mismatch between PrimReserve() calls and incrementing _VtxCurrentIdx, _VtxWritePtr etc.
+ IM_ASSERT((unsigned long long int)draw_list->_VtxCurrentIdx <= ((unsigned long long int)1L << (sizeof(ImDrawIdx)*8))); // Too many vertices in same ImDrawList. See comment above.
- GImGui->IO.MetricsRenderVertices += draw_list->VtxBuffer.Size;
- GImGui->IO.MetricsRenderIndices += draw_list->IdxBuffer.Size;
- }
+ out_render_list.push_back(draw_list);
+ GImGui->IO.MetricsRenderVertices += draw_list->VtxBuffer.Size;
+ GImGui->IO.MetricsRenderIndices += draw_list->IdxBuffer.Size;
}
static void AddWindowToRenderList(ImVector<ImDrawList*>& out_render_list, ImGuiWindow* window)
@@ -3458,9 +3459,9 @@ static ImVec2 FindBestPopupWindowPos(const ImVec2& base_pos, const ImVec2& size,
return pos;
}
-static ImGuiWindow* FindWindowByName(const char* name)
+ImGuiWindow* ImGui::FindWindowByName(const char* name)
{
- // FIXME-OPT: Store sorted hashes -> pointers.
+ // FIXME-OPT: Store sorted hashes -> pointers so we can do a bissection in a contiguous block
ImGuiState& g = *GImGui;
ImGuiID id = ImHash(name, 0);
for (int i = 0; i < g.Windows.Size; i++)
@@ -7209,6 +7210,7 @@ static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags f
}
// Edit a string of text
+// NB: when active, hold on a privately held copy of the text (and apply back to 'buf'). So changing 'buf' while active has no effect.
// FIXME: Rather messy function partly because we are doing UTF8 > u16 > UTF8 conversions on the go to more easily handle stb_textedit calls. Ideally we should stay in UTF-8 all the time. See https://github.com/nothings/stb/issues/188
bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiTextEditCallback callback, void* user_data)
{
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h
index 9e4a6c892ad..d00a936d6e0 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h
@@ -146,8 +146,8 @@ namespace ImGui
IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiSetCond cond = 0); // set current window size. set to ImVec2(0,0) to force an auto-fit. may incur tearing
IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiSetCond cond = 0); // set current window collapsed state
IMGUI_API void SetWindowFocus(); // set current window to be focused / front-most
- IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiSetCond cond = 0); // set named window position - call within Begin()/End(). may incur tearing
- IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiSetCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. may incur tearing
+ IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiSetCond cond = 0); // set named window position.
+ IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiSetCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis.
IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiSetCond cond = 0); // set named window collapsed state
IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus.
diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h
index 54c777e0dfa..a4caacff7c1 100644
--- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h
+++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h
@@ -675,6 +675,7 @@ namespace ImGui
inline ImGuiWindow* GetCurrentWindowRead() { ImGuiState& g = *GImGui; return g.CurrentWindow; }
inline ImGuiWindow* GetCurrentWindow() { ImGuiState& g = *GImGui; g.CurrentWindow->Accessed = true; return g.CurrentWindow; }
IMGUI_API ImGuiWindow* GetParentWindow();
+ IMGUI_API ImGuiWindow* FindWindowByName(const char* name);
IMGUI_API void FocusWindow(ImGuiWindow* window);
IMGUI_API void SetActiveID(ImGuiID id, ImGuiWindow* window);
diff --git a/3rdparty/bgfx/3rdparty/renderdoc/renderdoc_app.h b/3rdparty/bgfx/3rdparty/renderdoc/renderdoc_app.h
index 4666d1e4c5b..0e59b4d430a 100644
--- a/3rdparty/bgfx/3rdparty/renderdoc/renderdoc_app.h
+++ b/3rdparty/bgfx/3rdparty/renderdoc/renderdoc_app.h
@@ -1,7 +1,7 @@
/******************************************************************************
* The MIT License (MIT)
*
- * Copyright (c) 2015 Baldur Karlsson
+ * Copyright (c) 2015-2016 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -445,10 +445,17 @@ typedef uint32_t (RENDERDOC_CC *pRENDERDOC_EndFrameCapture)(RENDERDOC_DevicePoin
// instead of 1.0.0. You can check this with the GetAPIVersion entry point
typedef enum
{
- eRENDERDOC_API_Version_1_0_0 = 10000, // RENDERDOC_API_1_0_0 = 1 000 000
+ eRENDERDOC_API_Version_1_0_0 = 10000, // RENDERDOC_API_1_0_0 = 1 00 00
+ eRENDERDOC_API_Version_1_0_1 = 10001, // RENDERDOC_API_1_0_1 = 1 00 01
} RENDERDOC_Version;
-// eRENDERDOC_API_Version_1_0_0
+// API version changelog:
+//
+// 1.0.0 - initial release
+// 1.0.1 - Bugfix: IsFrameCapturing() was returning false for captures that were triggered
+// by keypress or TriggerCapture, instead of Start/EndFrameCapture.
+
+// eRENDERDOC_API_Version_1_0_1
typedef struct
{
pRENDERDOC_GetAPIVersion GetAPIVersion;
@@ -484,7 +491,9 @@ typedef struct
pRENDERDOC_StartFrameCapture StartFrameCapture;
pRENDERDOC_IsFrameCapturing IsFrameCapturing;
pRENDERDOC_EndFrameCapture EndFrameCapture;
-} RENDERDOC_API_1_0_0;
+} RENDERDOC_API_1_0_1;
+
+typedef RENDERDOC_API_1_0_1 RENDERDOC_API_1_0_0;
//////////////////////////////////////////////////////////////////////////////////////////////////
// RenderDoc API entry point
diff --git a/3rdparty/bgfx/3rdparty/stb/stb_image.c b/3rdparty/bgfx/3rdparty/stb/stb_image.c
index 130d6c01d61..e98f211dcd8 100644
--- a/3rdparty/bgfx/3rdparty/stb/stb_image.c
+++ b/3rdparty/bgfx/3rdparty/stb/stb_image.c
@@ -1,6 +1,9 @@
#ifdef __GNUC__
# pragma GCC diagnostic ignored "-Wshadow"
# pragma GCC diagnostic ignored "-Warray-bounds"
+# ifndef __clang__
+# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+# endif // __clang__
#elif defined(_MSC_VER)
# pragma warning(disable:4312) // warning C4312: 'type cast': conversion from '' to '' of greater size
# pragma warning(disable:4456) // warning C4456: declaration of 'k' hides previous local declaration
diff --git a/3rdparty/bgfx/README.md b/3rdparty/bgfx/README.md
index 521853b6f2b..09115745af2 100644
--- a/3rdparty/bgfx/README.md
+++ b/3rdparty/bgfx/README.md
@@ -55,14 +55,24 @@ Languages:
* [Go language API bindings](https://github.com/james4k/go-bgfx)
* [Java language API bindings](https://github.com/enleeten/twilight-bgfx)
* [Haskell language API bindings](https://github.com/haskell-game/bgfx)
+ * [Python language API bindings](https://github.com/jnadro/pybgfx#pybgf)
* [Rust language API bindings](https://github.com/rhoot/bgfx-rs)
-Build
------
+[Building](https://bkaradzic.github.io/bgfx/build.html)
+----------------------------------------------------
- AppVeyor https://ci.appveyor.com/project/bkaradzic/bgfx
- TravisCI https://travis-ci.org/bkaradzic/bgfx
+[Examples](https://bkaradzic.github.io/bgfx/examples.html)
+----------------------------------------------------------
+
+[API Reference](https://bkaradzic.github.io/bgfx/bgfx.html)
+-----------------------------------------------------------
+
+[Tools](https://bkaradzic.github.io/bgfx/tools.html)
+----------------------------------------------------
+
Who is using it?
----------------
@@ -118,18 +128,6 @@ http://makingartstudios.itch.io/dls - DLS the digital logic simulator game.
https://github.com/mamedev/mame MAME - Multiple Arcade Machine Emulator
-[Building](https://bkaradzic.github.io/bgfx/build.html)
--------------------------------------------------------
-
-[Examples](https://bkaradzic.github.io/bgfx/examples.html)
-----------------------------------------------------------
-
-[API Reference](https://bkaradzic.github.io/bgfx/bgfx.html)
------------------------------------------------------------
-
-[Tools](https://bkaradzic.github.io/bgfx/tools.html)
-----------------------------------------------------
-
[License (BSD 2-clause)](https://bkaradzic.github.io/bgfx/license.html)
-----------------------------------------------------------------------
diff --git a/3rdparty/bgfx/examples/01-cubes/cubes.cpp b/3rdparty/bgfx/examples/01-cubes/cubes.cpp
index de74b89e6d0..bf88eb3f7f0 100644
--- a/3rdparty/bgfx/examples/01-cubes/cubes.cpp
+++ b/3rdparty/bgfx/examples/01-cubes/cubes.cpp
@@ -55,7 +55,7 @@ static const uint16_t s_cubeIndices[36] =
6, 3, 7,
};
-class Cubes : public entry::AppI
+class ExampleCubes : public entry::AppI
{
void init(int _argc, char** _argv) BX_OVERRIDE
{
@@ -218,4 +218,4 @@ class Cubes : public entry::AppI
int64_t m_timeOffset;
};
-ENTRY_IMPLEMENT_MAIN(Cubes);
+ENTRY_IMPLEMENT_MAIN(ExampleCubes);
diff --git a/3rdparty/bgfx/examples/01-cubes/makefile b/3rdparty/bgfx/examples/01-cubes/makefile
index 011773e023f..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/01-cubes/makefile
+++ b/3rdparty/bgfx/examples/01-cubes/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/02-metaballs/makefile b/3rdparty/bgfx/examples/02-metaballs/makefile
index 2d351e1d215..818fe30cbd7 100644
--- a/3rdparty/bgfx/examples/02-metaballs/makefile
+++ b/3rdparty/bgfx/examples/02-metaballs/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
diff --git a/3rdparty/bgfx/examples/02-metaballs/metaballs.cpp b/3rdparty/bgfx/examples/02-metaballs/metaballs.cpp
index be919f56538..bedf55497eb 100644
--- a/3rdparty/bgfx/examples/02-metaballs/metaballs.cpp
+++ b/3rdparty/bgfx/examples/02-metaballs/metaballs.cpp
@@ -462,16 +462,16 @@ uint32_t triangulate(uint8_t* _result, uint32_t _stride, const float* __restrict
#define DIMS 32
-class Metaballs : public entry::AppI
+class ExampleMetaballs : public entry::AppI
{
void init(int _argc, char** _argv) BX_OVERRIDE
{
Args args(_argc, _argv);
- m_width = 1280;
+ m_width = 1280;
m_height = 720;
- m_debug = BGFX_DEBUG_TEXT;
- m_reset = BGFX_RESET_VSYNC;
+ m_debug = BGFX_DEBUG_TEXT;
+ m_reset = BGFX_RESET_VSYNC;
bgfx::init(args.m_type, args.m_pciId);
bgfx::reset(m_width, m_height, m_reset);
@@ -778,7 +778,6 @@ class Metaballs : public entry::AppI
Grid* m_grid;
int64_t m_timeOffset;
-
};
-ENTRY_IMPLEMENT_MAIN(Metaballs);
+ENTRY_IMPLEMENT_MAIN(ExampleMetaballs);
diff --git a/3rdparty/bgfx/examples/03-raymarch/makefile b/3rdparty/bgfx/examples/03-raymarch/makefile
index 011773e023f..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/03-raymarch/makefile
+++ b/3rdparty/bgfx/examples/03-raymarch/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/03-raymarch/raymarch.cpp b/3rdparty/bgfx/examples/03-raymarch/raymarch.cpp
index df07fc7ea42..60a4664546e 100644
--- a/3rdparty/bgfx/examples/03-raymarch/raymarch.cpp
+++ b/3rdparty/bgfx/examples/03-raymarch/raymarch.cpp
@@ -102,138 +102,163 @@ void renderScreenSpaceQuad(uint32_t _view, bgfx::ProgramHandle _program, float _
}
}
-int _main_(int _argc, char** _argv)
+class ExampleRaymarch : public entry::AppI
{
- Args args(_argc, _argv);
-
- uint32_t width = 1280;
- uint32_t height = 720;
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
-
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(width, height, reset);
-
- // Enable debug text.
- bgfx::setDebug(debug);
-
- // Set view 0 clear state.
- bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 0x303030ff
- , 1.0f
- , 0
- );
-
- // Setup root path for binary shaders. Shader binaries are different
- // for each renderer.
- switch (bgfx::getRendererType() )
+ void init(int _argc, char** _argv) BX_OVERRIDE
{
- default:
- break;
-
- case bgfx::RendererType::OpenGL:
- case bgfx::RendererType::OpenGLES:
- s_oglNdc = true;
- break;
+ Args args(_argc, _argv);
+
+ m_width = 1280;
+ m_height = 720;
+ m_debug = BGFX_DEBUG_TEXT;
+ m_reset = BGFX_RESET_VSYNC;
+
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
+
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
+
+ // Set view 0 clear state.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
+
+ // Setup root path for binary shaders. Shader binaries are different
+ // for each renderer.
+ switch (bgfx::getRendererType() )
+ {
+ default:
+ break;
+
+ case bgfx::RendererType::OpenGL:
+ case bgfx::RendererType::OpenGLES:
+ s_oglNdc = true;
+ break;
+ }
+
+ // Create vertex stream declaration.
+ PosColorTexCoord0Vertex::init();
+
+ u_mtx = bgfx::createUniform("u_mtx", bgfx::UniformType::Mat4);
+ u_lightDirTime = bgfx::createUniform("u_lightDirTime", bgfx::UniformType::Vec4);
+
+ // Create program from shaders.
+ m_program = loadProgram("vs_raymarching", "fs_raymarching");
+
+ m_timeOffset = bx::getHPCounter();
}
- // Create vertex stream declaration.
- PosColorTexCoord0Vertex::init();
+ int shutdown() BX_OVERRIDE
+ {
+ // Cleanup.
+ bgfx::destroyProgram(m_program);
- bgfx::UniformHandle u_mtx = bgfx::createUniform("u_mtx", bgfx::UniformType::Mat4);
- bgfx::UniformHandle u_lightDirTime = bgfx::createUniform("u_lightDirTime", bgfx::UniformType::Vec4);
+ bgfx::destroyUniform(u_mtx);
+ bgfx::destroyUniform(u_lightDirTime);
- // Create program from shaders.
- bgfx::ProgramHandle raymarching = loadProgram("vs_raymarching", "fs_raymarching");
+ // Shutdown bgfx.
+ bgfx::shutdown();
- int64_t timeOffset = bx::getHPCounter();
+ return 0;
+ }
- while (!entry::processEvents(width, height, debug, reset) )
+ bool update() BX_OVERRIDE
{
- // Set view 0 default viewport.
- bgfx::setViewRect(0, 0, 0, width, height);
-
- // Set view 1 default viewport.
- bgfx::setViewRect(1, 0, 0, width, height);
-
- // This dummy draw call is here to make sure that view 0 is cleared
- // if no other draw calls are submitted to viewZ 0.
- bgfx::touch(0);
-
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/03-raymarch");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Updating shader uniforms.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
- float at[3] = { 0.0f, 0.0f, 0.0f };
- float eye[3] = { 0.0f, 0.0f, -15.0f };
-
- float view[16];
- float proj[16];
- bx::mtxLookAt(view, eye, at);
- mtxProj(proj, 60.0f, float(width)/float(height), 0.1f, 100.0f);
-
- // Set view and projection matrix for view 1.
- bgfx::setViewTransform(0, view, proj);
-
- float ortho[16];
- bx::mtxOrtho(ortho, 0.0f, 1280.0f, 720.0f, 0.0f, 0.0f, 100.0f);
-
- // Set view and projection matrix for view 0.
- bgfx::setViewTransform(1, NULL, ortho);
-
- float time = (float)( (bx::getHPCounter()-timeOffset)/double(bx::getHPFrequency() ) );
-
- float vp[16];
- bx::mtxMul(vp, view, proj);
-
- float mtx[16];
- bx::mtxRotateXY(mtx
- , time
- , time*0.37f
- );
-
- float mtxInv[16];
- bx::mtxInverse(mtxInv, mtx);
- float lightDirModel[4] = { -0.4f, -0.5f, -1.0f, 0.0f };
- float lightDirModelN[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
- bx::vec3Norm(lightDirModelN, lightDirModel);
- float lightDirTime[4];
- bx::vec4MulMtx(lightDirTime, lightDirModelN, mtxInv);
- lightDirTime[3] = time;
- bgfx::setUniform(u_lightDirTime, lightDirTime);
-
- float mvp[16];
- bx::mtxMul(mvp, mtx, vp);
-
- float invMvp[16];
- bx::mtxInverse(invMvp, mvp);
- bgfx::setUniform(u_mtx, invMvp);
-
- renderScreenSpaceQuad(1, raymarching, 0.0f, 0.0f, 1280.0f, 720.0f);
-
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset) )
+ {
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, m_width, m_height);
+
+ // Set view 1 default viewport.
+ bgfx::setViewRect(1, 0, 0, m_width, m_height);
+
+ // This dummy draw call is here to make sure that view 0 is cleared
+ // if no other draw calls are submitted to viewZ 0.
+ bgfx::touch(0);
+
+ int64_t now = bx::getHPCounter();
+ static int64_t last = now;
+ const int64_t frameTime = now - last;
+ last = now;
+ const double freq = double(bx::getHPFrequency() );
+ const double toMs = 1000.0/freq;
+
+ // Use debug font to print information about this example.
+ bgfx::dbgTextClear();
+ bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/03-raymarch");
+ bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Updating shader uniforms.");
+ bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
+
+ float at[3] = { 0.0f, 0.0f, 0.0f };
+ float eye[3] = { 0.0f, 0.0f, -15.0f };
+
+ float view[16];
+ float proj[16];
+ bx::mtxLookAt(view, eye, at);
+ mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f);
+
+ // Set view and projection matrix for view 1.
+ bgfx::setViewTransform(0, view, proj);
+
+ float ortho[16];
+ bx::mtxOrtho(ortho, 0.0f, 1280.0f, 720.0f, 0.0f, 0.0f, 100.0f);
+
+ // Set view and projection matrix for view 0.
+ bgfx::setViewTransform(1, NULL, ortho);
+
+ float time = (float)( (bx::getHPCounter()-m_timeOffset)/double(bx::getHPFrequency() ) );
+
+ float vp[16];
+ bx::mtxMul(vp, view, proj);
+
+ float mtx[16];
+ bx::mtxRotateXY(mtx
+ , time
+ , time*0.37f
+ );
+
+ float mtxInv[16];
+ bx::mtxInverse(mtxInv, mtx);
+ float lightDirModel[4] = { -0.4f, -0.5f, -1.0f, 0.0f };
+ float lightDirModelN[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
+ bx::vec3Norm(lightDirModelN, lightDirModel);
+ float lightDirTime[4];
+ bx::vec4MulMtx(lightDirTime, lightDirModelN, mtxInv);
+ lightDirTime[3] = time;
+ bgfx::setUniform(u_lightDirTime, lightDirTime);
+
+ float mvp[16];
+ bx::mtxMul(mvp, mtx, vp);
+
+ float invMvp[16];
+ bx::mtxInverse(invMvp, mvp);
+ bgfx::setUniform(u_mtx, invMvp);
+
+ renderScreenSpaceQuad(1, m_program, 0.0f, 0.0f, 1280.0f, 720.0f);
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
+ }
+
+ return false;
}
- // Cleanup.
- bgfx::destroyProgram(raymarching);
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
- bgfx::destroyUniform(u_mtx);
- bgfx::destroyUniform(u_lightDirTime);
-
- // Shutdown bgfx.
- bgfx::shutdown();
+ int64_t m_timeOffset;
+ bgfx::UniformHandle u_mtx;
+ bgfx::UniformHandle u_lightDirTime;
+ bgfx::ProgramHandle m_program;
+};
- return 0;
-}
+ENTRY_IMPLEMENT_MAIN(ExampleRaymarch);
diff --git a/3rdparty/bgfx/examples/04-mesh/makefile b/3rdparty/bgfx/examples/04-mesh/makefile
index 011773e023f..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/04-mesh/makefile
+++ b/3rdparty/bgfx/examples/04-mesh/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/04-mesh/mesh.cpp b/3rdparty/bgfx/examples/04-mesh/mesh.cpp
index 854cf1a23a3..bfe61df6a3f 100644
--- a/3rdparty/bgfx/examples/04-mesh/mesh.cpp
+++ b/3rdparty/bgfx/examples/04-mesh/mesh.cpp
@@ -6,118 +6,143 @@
#include "common.h"
#include "bgfx_utils.h"
-int _main_(int _argc, char** _argv)
+class ExampleMesh : public entry::AppI
{
- Args args(_argc, _argv);
-
- uint32_t width = 1280;
- uint32_t height = 720;
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
+ void init(int _argc, char** _argv) BX_OVERRIDE
+ {
+ Args args(_argc, _argv);
+
+ m_width = 1280;
+ m_height = 720;
+ m_debug = BGFX_DEBUG_TEXT;
+ m_reset = BGFX_RESET_VSYNC;
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(width, height, reset);
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
- // Enable debug text.
- bgfx::setDebug(debug);
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
- // Set view 0 clear state.
- bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 0x303030ff
- , 1.0f
- , 0
- );
+ // Set view 0 clear state.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
- bgfx::UniformHandle u_time = bgfx::createUniform("u_time", bgfx::UniformType::Vec4);
+ u_time = bgfx::createUniform("u_time", bgfx::UniformType::Vec4);
- // Create program from shaders.
- bgfx::ProgramHandle program = loadProgram("vs_mesh", "fs_mesh");
+ // Create program from shaders.
+ m_program = loadProgram("vs_mesh", "fs_mesh");
- Mesh* mesh = meshLoad("meshes/bunny.bin");
+ m_mesh = meshLoad("meshes/bunny.bin");
- int64_t timeOffset = bx::getHPCounter();
+ m_timeOffset = bx::getHPCounter();
+ }
- while (!entry::processEvents(width, height, debug, reset) )
+ int shutdown() BX_OVERRIDE
{
- // Set view 0 default viewport.
- bgfx::setViewRect(0, 0, 0, width, height);
-
- // This dummy draw call is here to make sure that view 0 is cleared
- // if no other draw calls are submitted to view 0.
- bgfx::touch(0);
-
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
- float time = (float)( (bx::getHPCounter()-timeOffset)/double(bx::getHPFrequency() ) );
- bgfx::setUniform(u_time, &time);
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/04-mesh");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Loading meshes.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
- float at[3] = { 0.0f, 1.0f, 0.0f };
- float eye[3] = { 0.0f, 1.0f, -2.5f };
-
- // Set view and projection matrix for view 0.
- const bgfx::HMD* hmd = bgfx::getHMD();
- if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
- {
- float view[16];
- bx::mtxQuatTranslationHMD(view, hmd->eye[0].rotation, eye);
+ meshUnload(m_mesh);
- float proj[16];
- bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f);
+ // Cleanup.
+ bgfx::destroyProgram(m_program);
- bgfx::setViewTransform(0, view, proj);
+ bgfx::destroyUniform(u_time);
- // Set view 0 default viewport.
- //
- // Use HMD's width/height since HMD's internal frame buffer size
- // might be much larger than window size.
- bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
- }
- else
- {
- float view[16];
- bx::mtxLookAt(view, eye, at);
+ // Shutdown bgfx.
+ bgfx::shutdown();
- float proj[16];
- bx::mtxProj(proj, 60.0f, float(width)/float(height), 0.1f, 100.0f);
- bgfx::setViewTransform(0, view, proj);
+ return 0;
+ }
+ bool update() BX_OVERRIDE
+ {
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset) )
+ {
// Set view 0 default viewport.
- bgfx::setViewRect(0, 0, 0, width, height);
+ bgfx::setViewRect(0, 0, 0, m_width, m_height);
+
+ // This dummy draw call is here to make sure that view 0 is cleared
+ // if no other draw calls are submitted to view 0.
+ bgfx::touch(0);
+
+ int64_t now = bx::getHPCounter();
+ static int64_t last = now;
+ const int64_t frameTime = now - last;
+ last = now;
+ const double freq = double(bx::getHPFrequency() );
+ const double toMs = 1000.0/freq;
+ float time = (float)( (bx::getHPCounter()-m_timeOffset)/double(bx::getHPFrequency() ) );
+ bgfx::setUniform(u_time, &time);
+
+ // Use debug font to print information about this example.
+ bgfx::dbgTextClear();
+ bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/04-mesh");
+ bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Loading meshes.");
+ bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
+
+ float at[3] = { 0.0f, 1.0f, 0.0f };
+ float eye[3] = { 0.0f, 1.0f, -2.5f };
+
+ // Set view and projection matrix for view 0.
+ const bgfx::HMD* hmd = bgfx::getHMD();
+ if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
+ {
+ float view[16];
+ bx::mtxQuatTranslationHMD(view, hmd->eye[0].rotation, eye);
+
+ float proj[16];
+ bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f);
+
+ bgfx::setViewTransform(0, view, proj);
+
+ // Set view 0 default viewport.
+ //
+ // Use HMD's width/height since HMD's internal frame buffer size
+ // might be much larger than window size.
+ bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
+ }
+ else
+ {
+ float view[16];
+ bx::mtxLookAt(view, eye, at);
+
+ float proj[16];
+ bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f);
+ bgfx::setViewTransform(0, view, proj);
+
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, m_width, m_height);
+ }
+
+ float mtx[16];
+ bx::mtxRotateXY(mtx
+ , 0.0f
+ , time*0.37f
+ );
+
+ meshSubmit(m_mesh, 0, m_program, mtx);
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
}
- float mtx[16];
- bx::mtxRotateXY(mtx
- , 0.0f
- , time*0.37f
- );
-
- meshSubmit(mesh, 0, program, mtx);
-
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
+ return false;
}
- meshUnload(mesh);
-
- // Cleanup.
- bgfx::destroyProgram(program);
-
- bgfx::destroyUniform(u_time);
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
- // Shutdown bgfx.
- bgfx::shutdown();
+ int64_t m_timeOffset;
+ Mesh* m_mesh;
+ bgfx::ProgramHandle m_program;
+ bgfx::UniformHandle u_time;
+};
- return 0;
-}
+ENTRY_IMPLEMENT_MAIN(ExampleMesh);
diff --git a/3rdparty/bgfx/examples/05-instancing/instancing.cpp b/3rdparty/bgfx/examples/05-instancing/instancing.cpp
index f0a62ea1039..6e854b20785 100644
--- a/3rdparty/bgfx/examples/05-instancing/instancing.cpp
+++ b/3rdparty/bgfx/examples/05-instancing/instancing.cpp
@@ -55,171 +55,196 @@ static const uint16_t s_cubeIndices[36] =
6, 3, 7,
};
-int _main_(int _argc, char** _argv)
+class ExampleInstancing : public entry::AppI
{
- Args args(_argc, _argv);
+ void init(int _argc, char** _argv) BX_OVERRIDE
+ {
+ Args args(_argc, _argv);
- uint32_t width = 1280;
- uint32_t height = 720;
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
+ m_width = 1280;
+ m_height = 720;
+ m_debug = BGFX_DEBUG_TEXT;
+ m_reset = BGFX_RESET_VSYNC;
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(width, height, reset);
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
- // Enable debug text.
- bgfx::setDebug(debug);
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
- // Set view 0 clear state.
- bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 0x303030ff
- , 1.0f
- , 0
- );
+ // Set view 0 clear state.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
- // Get renderer capabilities info.
- const bgfx::Caps* caps = bgfx::getCaps();
+ // Create vertex stream declaration.
+ PosColorVertex::init();
- // Create vertex stream declaration.
- PosColorVertex::init();
+ // Create static vertex buffer.
+ m_vbh = bgfx::createVertexBuffer(
+ bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) )
+ , PosColorVertex::ms_decl
+ );
- const bgfx::Memory* mem;
+ // Create static index buffer.
+ m_ibh = bgfx::createIndexBuffer(
+ bgfx::makeRef(s_cubeIndices, sizeof(s_cubeIndices) )
+ );
- // Create static vertex buffer.
- mem = bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) );
- bgfx::VertexBufferHandle vbh = bgfx::createVertexBuffer(mem, PosColorVertex::ms_decl);
+ // Create program from shaders.
+ m_program = loadProgram("vs_instancing", "fs_instancing");
- // Create static index buffer.
- mem = bgfx::makeRef(s_cubeIndices, sizeof(s_cubeIndices) );
- bgfx::IndexBufferHandle ibh = bgfx::createIndexBuffer(mem);
+ m_timeOffset = bx::getHPCounter();
+ }
- // Create program from shaders.
- bgfx::ProgramHandle program = loadProgram("vs_instancing", "fs_instancing");
+ int shutdown() BX_OVERRIDE
+ {
+ // Cleanup.
+ bgfx::destroyIndexBuffer(m_ibh);
+ bgfx::destroyVertexBuffer(m_vbh);
+ bgfx::destroyProgram(m_program);
- int64_t timeOffset = bx::getHPCounter();
+ // Shutdown bgfx.
+ bgfx::shutdown();
- while (!entry::processEvents(width, height, debug, reset) )
+ return 0;
+ }
+
+ bool update() BX_OVERRIDE
{
- // Set view 0 default viewport.
- bgfx::setViewRect(0, 0, 0, width, height);
-
- // This dummy draw call is here to make sure that view 0 is cleared
- // if no other draw calls are submitted to view 0.
- bgfx::touch(0);
-
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
- float time = (float)( (now - timeOffset)/double(bx::getHPFrequency() ) );
-
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/05-instancing");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Geometry instancing.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
-
- // Check if instancing is supported.
- if (0 == (BGFX_CAPS_INSTANCING & caps->supported) )
- {
- // When instancing is not supported by GPU, implement alternative
- // code path that doesn't use instancing.
- bool blink = uint32_t(time*3.0f)&1;
- bgfx::dbgTextPrintf(0, 5, blink ? 0x1f : 0x01, " Instancing is not supported by GPU. ");
- }
- else
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset) )
{
- float at[3] = { 0.0f, 0.0f, 0.0f };
- float eye[3] = { 0.0f, 0.0f, -35.0f };
-
- // Set view and projection matrix for view 0.
- const bgfx::HMD* hmd = bgfx::getHMD();
- if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, m_width, m_height);
+
+ // This dummy draw call is here to make sure that view 0 is cleared
+ // if no other draw calls are submitted to view 0.
+ bgfx::touch(0);
+
+ int64_t now = bx::getHPCounter();
+ static int64_t last = now;
+ const int64_t frameTime = now - last;
+ last = now;
+ const double freq = double(bx::getHPFrequency() );
+ const double toMs = 1000.0/freq;
+ float time = (float)( (now - m_timeOffset)/double(bx::getHPFrequency() ) );
+
+ // Use debug font to print information about this example.
+ bgfx::dbgTextClear();
+ bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/05-instancing");
+ bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Geometry instancing.");
+ bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
+
+ // Get renderer capabilities info.
+ const bgfx::Caps* caps = bgfx::getCaps();
+
+ // Check if instancing is supported.
+ if (0 == (BGFX_CAPS_INSTANCING & caps->supported) )
{
- float view[16];
- bx::mtxQuatTranslationHMD(view, hmd->eye[0].rotation, eye);
-
- float proj[16];
- bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f);
-
- bgfx::setViewTransform(0, view, proj);
-
- // Set view 0 default viewport.
- //
- // Use HMD's width/height since HMD's internal frame buffer size
- // might be much larger than window size.
- bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
+ // When instancing is not supported by GPU, implement alternative
+ // code path that doesn't use instancing.
+ bool blink = uint32_t(time*3.0f)&1;
+ bgfx::dbgTextPrintf(0, 5, blink ? 0x1f : 0x01, " Instancing is not supported by GPU. ");
}
else
{
- float view[16];
- bx::mtxLookAt(view, eye, at);
+ float at[3] = { 0.0f, 0.0f, 0.0f };
+ float eye[3] = { 0.0f, 0.0f, -35.0f };
- float proj[16];
- bx::mtxProj(proj, 60.0f, float(width)/float(height), 0.1f, 100.0f);
- bgfx::setViewTransform(0, view, proj);
+ // Set view and projection matrix for view 0.
+ const bgfx::HMD* hmd = bgfx::getHMD();
+ if (NULL != hmd && 0 != (hmd->flags & BGFX_HMD_RENDERING) )
+ {
+ float view[16];
+ bx::mtxQuatTranslationHMD(view, hmd->eye[0].rotation, eye);
- // Set view 0 default viewport.
- bgfx::setViewRect(0, 0, 0, width, height);
- }
+ float proj[16];
+ bx::mtxProj(proj, hmd->eye[0].fov, 0.1f, 100.0f);
- const uint16_t instanceStride = 80;
- const bgfx::InstanceDataBuffer* idb = bgfx::allocInstanceDataBuffer(121, instanceStride);
- if (NULL != idb)
- {
- uint8_t* data = idb->data;
+ bgfx::setViewTransform(0, view, proj);
+
+ // Set view 0 default viewport.
+ //
+ // Use HMD's width/height since HMD's internal frame buffer size
+ // might be much larger than window size.
+ bgfx::setViewRect(0, 0, 0, hmd->width, hmd->height);
+ }
+ else
+ {
+ float view[16];
+ bx::mtxLookAt(view, eye, at);
+
+ float proj[16];
+ bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f);
+ bgfx::setViewTransform(0, view, proj);
+
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, m_width, m_height);
+ }
- // Write instance data for 11x11 cubes.
- for (uint32_t yy = 0, numInstances = 0; yy < 11 && numInstances < idb->num; ++yy)
+ const uint16_t instanceStride = 80;
+ const bgfx::InstanceDataBuffer* idb = bgfx::allocInstanceDataBuffer(121, instanceStride);
+ if (NULL != idb)
{
- for (uint32_t xx = 0; xx < 11 && numInstances < idb->num; ++xx, ++numInstances)
+ uint8_t* data = idb->data;
+
+ // Write instance data for 11x11 cubes.
+ for (uint32_t yy = 0, numInstances = 0; yy < 11 && numInstances < idb->num; ++yy)
{
- float* mtx = (float*)data;
- bx::mtxRotateXY(mtx, time + xx*0.21f, time + yy*0.37f);
- mtx[12] = -15.0f + float(xx)*3.0f;
- mtx[13] = -15.0f + float(yy)*3.0f;
- mtx[14] = 0.0f;
-
- float* color = (float*)&data[64];
- color[0] = sinf(time+float(xx)/11.0f)*0.5f+0.5f;
- color[1] = cosf(time+float(yy)/11.0f)*0.5f+0.5f;
- color[2] = sinf(time*3.0f)*0.5f+0.5f;
- color[3] = 1.0f;
-
- data += instanceStride;
+ for (uint32_t xx = 0; xx < 11 && numInstances < idb->num; ++xx, ++numInstances)
+ {
+ float* mtx = (float*)data;
+ bx::mtxRotateXY(mtx, time + xx*0.21f, time + yy*0.37f);
+ mtx[12] = -15.0f + float(xx)*3.0f;
+ mtx[13] = -15.0f + float(yy)*3.0f;
+ mtx[14] = 0.0f;
+
+ float* color = (float*)&data[64];
+ color[0] = sinf(time+float(xx)/11.0f)*0.5f+0.5f;
+ color[1] = cosf(time+float(yy)/11.0f)*0.5f+0.5f;
+ color[2] = sinf(time*3.0f)*0.5f+0.5f;
+ color[3] = 1.0f;
+
+ data += instanceStride;
+ }
}
- }
- // Set vertex and index buffer.
- bgfx::setVertexBuffer(vbh);
- bgfx::setIndexBuffer(ibh);
+ // Set vertex and index buffer.
+ bgfx::setVertexBuffer(m_vbh);
+ bgfx::setIndexBuffer(m_ibh);
- // Set instance data buffer.
- bgfx::setInstanceDataBuffer(idb);
+ // Set instance data buffer.
+ bgfx::setInstanceDataBuffer(idb);
- // Set render states.
- bgfx::setState(BGFX_STATE_DEFAULT);
+ // Set render states.
+ bgfx::setState(BGFX_STATE_DEFAULT);
- // Submit primitive for rendering to view 0.
- bgfx::submit(0, program);
+ // Submit primitive for rendering to view 0.
+ bgfx::submit(0, m_program);
+ }
}
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+ return true;
}
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
+ return false;
}
- // Cleanup.
- bgfx::destroyIndexBuffer(ibh);
- bgfx::destroyVertexBuffer(vbh);
- bgfx::destroyProgram(program);
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
+ bgfx::VertexBufferHandle m_vbh;
+ bgfx::IndexBufferHandle m_ibh;
+ bgfx::ProgramHandle m_program;
- // Shutdown bgfx.
- bgfx::shutdown();
+ int64_t m_timeOffset;
+};
- return 0;
-}
+ENTRY_IMPLEMENT_MAIN(ExampleInstancing);
diff --git a/3rdparty/bgfx/examples/05-instancing/makefile b/3rdparty/bgfx/examples/05-instancing/makefile
index 011773e023f..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/05-instancing/makefile
+++ b/3rdparty/bgfx/examples/05-instancing/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/06-bump/bump.cpp b/3rdparty/bgfx/examples/06-bump/bump.cpp
index 2956caddf64..bc5f9e74b7e 100644
--- a/3rdparty/bgfx/examples/06-bump/bump.cpp
+++ b/3rdparty/bgfx/examples/06-bump/bump.cpp
@@ -103,7 +103,7 @@ static const uint16_t s_cubeIndices[36] =
21, 23, 22,
};
-class Bump : public entry::AppI
+class ExampleBump : public entry::AppI
{
void init(int _argc, char** _argv) BX_OVERRIDE
{
@@ -387,4 +387,4 @@ class Bump : public entry::AppI
int64_t m_timeOffset;
};
-ENTRY_IMPLEMENT_MAIN(Bump);
+ENTRY_IMPLEMENT_MAIN(ExampleBump);
diff --git a/3rdparty/bgfx/examples/06-bump/makefile b/3rdparty/bgfx/examples/06-bump/makefile
index 011773e023f..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/06-bump/makefile
+++ b/3rdparty/bgfx/examples/06-bump/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/07-callback/makefile b/3rdparty/bgfx/examples/07-callback/makefile
index 011773e023f..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/07-callback/makefile
+++ b/3rdparty/bgfx/examples/07-callback/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/08-update/makefile b/3rdparty/bgfx/examples/08-update/makefile
index 011773e023f..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/08-update/makefile
+++ b/3rdparty/bgfx/examples/08-update/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/08-update/update.cpp b/3rdparty/bgfx/examples/08-update/update.cpp
index 8a5d851ba7c..baa54c17e20 100644
--- a/3rdparty/bgfx/examples/08-update/update.cpp
+++ b/3rdparty/bgfx/examples/08-update/update.cpp
@@ -115,10 +115,10 @@ static void updateTextureCubeRectBgra8(bgfx::TextureHandle _handle, uint8_t _sid
static const uint32_t m_textureside = 512;
static const uint32_t m_texture2dSize = 256;
-class Update : public entry::AppI
+class ExampleUpdate : public entry::AppI
{
public:
- Update()
+ ExampleUpdate()
: m_cube(m_textureside)
{
}
@@ -575,4 +575,4 @@ public:
};
-ENTRY_IMPLEMENT_MAIN(Update);
+ENTRY_IMPLEMENT_MAIN(ExampleUpdate);
diff --git a/3rdparty/bgfx/examples/09-hdr/hdr.cpp b/3rdparty/bgfx/examples/09-hdr/hdr.cpp
index 047fb0aa565..bee42aed2bf 100644
--- a/3rdparty/bgfx/examples/09-hdr/hdr.cpp
+++ b/3rdparty/bgfx/examples/09-hdr/hdr.cpp
@@ -139,7 +139,7 @@ inline float square(float _x)
return _x*_x;
}
-class HDR : public entry::AppI
+class ExampleHDR : public entry::AppI
{
void init(int _argc, char** _argv) BX_OVERRIDE
{
@@ -561,4 +561,4 @@ class HDR : public entry::AppI
float m_time;
};
-ENTRY_IMPLEMENT_MAIN(HDR);
+ENTRY_IMPLEMENT_MAIN(ExampleHDR);
diff --git a/3rdparty/bgfx/examples/09-hdr/makefile b/3rdparty/bgfx/examples/09-hdr/makefile
index 011773e023f..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/09-hdr/makefile
+++ b/3rdparty/bgfx/examples/09-hdr/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/12-lod/lod.cpp b/3rdparty/bgfx/examples/12-lod/lod.cpp
index e133872494f..ef37d254c11 100644
--- a/3rdparty/bgfx/examples/12-lod/lod.cpp
+++ b/3rdparty/bgfx/examples/12-lod/lod.cpp
@@ -23,7 +23,7 @@ static const KnightPos knightTour[8*4] =
{7,1}, {6,3}, {5,1}, {7,0}, {6,2}, {4,3}, {3,1}, {2,3},
};
-class Lod : public entry::AppI
+class ExampleLod : public entry::AppI
{
void init(int _argc, char** _argv) BX_OVERRIDE
{
@@ -316,4 +316,4 @@ class Lod : public entry::AppI
bool m_transitions;
};
-ENTRY_IMPLEMENT_MAIN(Lod);
+ENTRY_IMPLEMENT_MAIN(ExampleLod);
diff --git a/3rdparty/bgfx/examples/12-lod/makefile b/3rdparty/bgfx/examples/12-lod/makefile
index 536534d372e..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/12-lod/makefile
+++ b/3rdparty/bgfx/examples/12-lod/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2013 Milos Tosic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/13-stencil/makefile b/3rdparty/bgfx/examples/13-stencil/makefile
index 420d008a7f2..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/13-stencil/makefile
+++ b/3rdparty/bgfx/examples/13-stencil/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2013-2014 Dario Manesku. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/13-stencil/stencil.cpp b/3rdparty/bgfx/examples/13-stencil/stencil.cpp
index 773bdda0b08..53d484e2137 100644
--- a/3rdparty/bgfx/examples/13-stencil/stencil.cpp
+++ b/3rdparty/bgfx/examples/13-stencil/stencil.cpp
@@ -9,7 +9,7 @@
#include "common.h"
#include "bgfx_utils.h"
-#include <bx/readerwriter.h>
+#include <bx/crtimpl.h>
#include "camera.h"
#include "imgui/imgui.h"
@@ -646,13 +646,12 @@ struct Group
namespace bgfx
{
- int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl);
+ int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl, bx::Error* _err = NULL);
}
struct Mesh
{
- void load(const void* _vertices, uint32_t _numVertices, const bgfx::VertexDecl _decl
- , const uint16_t* _indices, uint32_t _numIndices)
+ void load(const void* _vertices, uint32_t _numVertices, const bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices)
{
Group group;
const bgfx::Memory* mem;
@@ -666,12 +665,6 @@ struct Mesh
mem = bgfx::makeRef(_indices, size);
group.m_ibh = bgfx::createIndexBuffer(mem);
- //TODO:
- // group.m_sphere = ...
- // group.m_aabb = ...
- // group.m_obb = ...
- // group.m_prims = ...
-
m_groups.push_back(group);
}
diff --git a/3rdparty/bgfx/examples/14-shadowvolumes/makefile b/3rdparty/bgfx/examples/14-shadowvolumes/makefile
index f101bb91427..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/14-shadowvolumes/makefile
+++ b/3rdparty/bgfx/examples/14-shadowvolumes/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2013-2014 Dario Manesku. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -9,22 +9,10 @@ BUILD_DIR=../../.build
include $(BGFX_DIR)/scripts/shader.mk
-GEOMETRY_SRC= \
- bunny_patched \
- bunny_decimated \
- platform \
- cube
-
-GEOMETRY_BIN=$(addprefix $(RUNTIME_DIR)/meshes/, $(addsuffix .bin, $(basename $(GEOMETRY_SRC))))
-
-geometry: $(GEOMETRY_BIN)
-
-$(RUNTIME_DIR)/meshes/%.bin : %.obj
- $(SILENT) $(GEOMETRYC) -f $(<) -o $(@) --packnormal 1
-
rebuild:
@make -s --no-print-directory TARGET=0 clean all
@make -s --no-print-directory TARGET=1 clean all
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp b/3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp
index 4084359ba35..fbdc8804b02 100644
--- a/3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp
+++ b/3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp
@@ -21,11 +21,11 @@ using namespace std::tr1;
#include <bgfx/bgfx.h>
#include <bx/timer.h>
-#include <bx/readerwriter.h>
#include <bx/allocator.h>
#include <bx/hash.h>
#include <bx/float4_t.h>
#include <bx/fpumath.h>
+#include <bx/crtimpl.h>
#include "entry/entry.h"
#include "camera.h"
#include "imgui/imgui.h"
@@ -989,7 +989,7 @@ typedef std::vector<Group> GroupArray;
namespace bgfx
{
- int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl);
+ int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl, bx::Error* _err = NULL);
}
struct Mesh
diff --git a/3rdparty/bgfx/examples/15-shadowmaps-simple/makefile b/3rdparty/bgfx/examples/15-shadowmaps-simple/makefile
index 420d008a7f2..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/15-shadowmaps-simple/makefile
+++ b/3rdparty/bgfx/examples/15-shadowmaps-simple/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2013-2014 Dario Manesku. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/16-shadowmaps/fs_shadowmaps_color_lighting_main.sh b/3rdparty/bgfx/examples/16-shadowmaps/fs_shadowmaps_color_lighting_main.sh
index acadba377b0..1b2b6be31a8 100644
--- a/3rdparty/bgfx/examples/16-shadowmaps/fs_shadowmaps_color_lighting_main.sh
+++ b/3rdparty/bgfx/examples/16-shadowmaps/fs_shadowmaps_color_lighting_main.sh
@@ -182,9 +182,9 @@
Shader shader = evalShader(lc.x, lc.y);
//Fog.
- const vec3 fogColor = vec3_splat(0.0);
- const float fogDensity = 0.0035;
- const float LOG2 = 1.442695;
+ vec3 fogColor = vec3_splat(0.0);
+ float fogDensity = 0.0035;
+ float LOG2 = 1.442695;
float z = length(v);
float fogFactor = clamp(1.0/exp2(fogDensity*fogDensity*z*z*LOG2), 0.0, 1.0);
diff --git a/3rdparty/bgfx/examples/16-shadowmaps/makefile b/3rdparty/bgfx/examples/16-shadowmaps/makefile
index 547cea69a89..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/16-shadowmaps/makefile
+++ b/3rdparty/bgfx/examples/16-shadowmaps/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2013-2014 Dario Manesku. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -9,20 +9,10 @@ BUILD_DIR=../../.build
include $(BGFX_DIR)/scripts/shader.mk
-GEOMETRY_SRC= \
- tree \
- hollowcube
-
-GEOMETRY_BIN=$(addprefix $(RUNTIME_DIR)/meshes/, $(addsuffix .bin, $(basename $(GEOMETRY_SRC))))
-
-geometry: $(GEOMETRY_BIN)
-
-$(RUNTIME_DIR)/meshes/%.bin : %.obj
- $(SILENT) $(GEOMETRYC) -f $(<) -o $(@) --packnormal 1
-
rebuild:
@make -s --no-print-directory TARGET=0 clean all
@make -s --no-print-directory TARGET=1 clean all
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp b/3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp
index 1e8ddaee339..3296496b018 100644
--- a/3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp
+++ b/3rdparty/bgfx/examples/16-shadowmaps/shadowmaps.cpp
@@ -12,8 +12,8 @@
#include <bgfx/bgfx.h>
#include <bx/timer.h>
-#include <bx/readerwriter.h>
#include <bx/fpumath.h>
+#include <bx/crtimpl.h>
#include "entry/entry.h"
#include "camera.h"
#include "imgui/imgui.h"
@@ -856,7 +856,7 @@ struct Group
namespace bgfx
{
- int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl);
+ int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl, bx::Error* _err = NULL);
}
struct Mesh
diff --git a/3rdparty/bgfx/examples/17-drawstress/drawstress.cpp b/3rdparty/bgfx/examples/17-drawstress/drawstress.cpp
index 258c00b5197..2e933c1cb9d 100644
--- a/3rdparty/bgfx/examples/17-drawstress/drawstress.cpp
+++ b/3rdparty/bgfx/examples/17-drawstress/drawstress.cpp
@@ -70,7 +70,7 @@ static const int64_t highwm = 1000000/65;
static const int64_t lowwm = 1000000/57;
#endif // BX_PLATFORM_EMSCRIPTEN || BX_PLATFORM_NACL
-class DrawStress : public entry::AppI
+class ExampleDrawStress : public entry::AppI
{
void init(int _argc, char** _argv) BX_OVERRIDE
{
@@ -350,4 +350,4 @@ class DrawStress : public entry::AppI
bgfx::IndexBufferHandle m_ibh;
};
-ENTRY_IMPLEMENT_MAIN(DrawStress);
+ENTRY_IMPLEMENT_MAIN(ExampleDrawStress);
diff --git a/3rdparty/bgfx/examples/17-drawstress/makefile b/3rdparty/bgfx/examples/17-drawstress/makefile
index 2d351e1d215..818fe30cbd7 100644
--- a/3rdparty/bgfx/examples/17-drawstress/makefile
+++ b/3rdparty/bgfx/examples/17-drawstress/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
diff --git a/3rdparty/bgfx/examples/18-ibl/fs_ibl_mesh.sc b/3rdparty/bgfx/examples/18-ibl/fs_ibl_mesh.sc
index 3ac5278f44f..28aa831331f 100644
--- a/3rdparty/bgfx/examples/18-ibl/fs_ibl_mesh.sc
+++ b/3rdparty/bgfx/examples/18-ibl/fs_ibl_mesh.sc
@@ -1,77 +1,110 @@
$input v_view, v_normal
/*
- * Copyright 2014 Dario Manesku. All rights reserved.
+ * Copyright 2014-2016 Dario Manesku. All rights reserved.
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
#include "../common/common.sh"
-
-uniform vec4 u_params;
-uniform mat4 u_mtx;
-uniform vec4 u_flags;
-uniform vec4 u_rgbDiff;
-uniform vec4 u_rgbSpec;
+#include "uniforms.sh"
SAMPLERCUBE(s_texCube, 0);
SAMPLERCUBE(s_texCubeIrr, 1);
-#define u_glossiness u_params.x
-#define u_exposure u_params.y
-#define u_diffspec u_params.z
-
-#define u_doDiffuse u_flags.x
-#define u_doSpecular u_flags.y
-#define u_doDiffuseIbl u_flags.z
-#define u_doSpecularIbl u_flags.w
-
-vec3 fresnel(vec3 _cspec, float _dot)
+vec3 calcFresnel(vec3 _cspec, float _dot)
{
- return _cspec + (1.0 - _cspec) * pow(1.0 - _dot, 5);
+ return _cspec + (1.0 - _cspec)*pow(1.0 - _dot, 5.0);
}
-void main()
+vec3 calcLambert(vec3 _cdiff, float _ndotl)
{
- vec3 light = vec3(0.0, 0.0, -1.0);
- vec3 clight = vec3(1.0, 1.0, 1.0);
-
- vec3 v = v_view;
- vec3 n = normalize(v_normal);
- vec3 l = normalize(light);
- vec3 h = normalize(v + l);
-
- float ndotl = clamp(dot(n, l), 0.0, 1.0); //diff
- float ndoth = clamp(dot(n, h), 0.0, 1.0); //spec
- float vdoth = clamp(dot(v, h), 0.0, 1.0); //spec fresnel
- float ndotv = clamp(dot(n, v), 0.0, 1.0); //env spec fresnel
-
- vec3 r = 2.0*ndotv*n - v; // reflect(v, n);
-
- vec3 cubeR = normalize(mul(u_mtx, vec4(r, 0.0)).xyz);
- vec3 cubeN = normalize(mul(u_mtx, vec4(n, 0.0)).xyz);
-
- float mipLevel = min((1.0 - u_glossiness)*11.0 + 1.0, 8.0);
- vec3 cenv = textureCubeLod(s_texCube, cubeR, mipLevel).xyz;
-
- vec3 kd = u_rgbDiff.xyz;
- vec3 ks = u_rgbSpec.xyz;
-
- vec3 cs = ks * u_diffspec;
- vec3 cd = kd * (1.0 - cs);
-
- vec3 diff = cd;
- float pwr = exp2(u_glossiness * 11.0 + 1.0);
- vec3 spec = cs * pow(ndoth, pwr) * ( (pwr + 8.0)/8.0) * fresnel(cs, vdoth);
+ return _cdiff*_ndotl;
+}
- vec3 ambspec = fresnel(cs, ndotv) * cenv;
- vec3 ambdiff = cd * textureCube(s_texCubeIrr, cubeN).xyz;
+vec3 calcBlinn(vec3 _cspec, float _ndoth, float _ndotl, float _specPwr)
+{
+ float norm = (_specPwr+8.0)*0.125;
+ float brdf = pow(_ndoth, _specPwr)*_ndotl*norm;
+ return _cspec*brdf;
+}
- vec3 lc = ( diff * u_doDiffuse + spec * u_doSpecular ) * ndotl * clight;
- vec3 ec = (ambdiff * u_doDiffuseIbl + ambspec * u_doSpecularIbl);
+float specPwr(float _gloss)
+{
+ return exp2(10.0*_gloss+2.0);
+}
- vec3 color = lc + ec;
+void main()
+{
+ // Light.
+ vec3 ld = normalize(u_lightDir);
+ vec3 clight = u_lightCol;
+
+ // Input.
+ vec3 nn = normalize(v_normal);
+ vec3 vv = normalize(v_view);
+ vec3 hh = normalize(vv + ld);
+
+ float ndotv = clamp(dot(nn, vv), 0.0, 1.0);
+ float ndotl = clamp(dot(nn, ld), 0.0, 1.0);
+ float ndoth = clamp(dot(nn, hh), 0.0, 1.0);
+ float hdotv = clamp(dot(hh, vv), 0.0, 1.0);
+
+ // Material params.
+ vec3 albedo = u_rgbDiff.xyz;
+ float reflectivity = u_reflectivity;
+ float gloss = u_glossiness;
+
+ // Reflection.
+ vec3 refl;
+ if (0.0 == u_metalOrSpec) // Metalness workflow.
+ {
+ refl = mix(vec3_splat(0.04), albedo, reflectivity);
+ }
+ else // Specular workflow.
+ {
+ refl = u_rgbSpec.xyz * vec3_splat(reflectivity);
+ }
+ vec3 dirF0 = calcFresnel(refl, hdotv);
+ vec3 envF0 = calcFresnel(refl, ndotv);
+
+ // Direct lighting.
+ vec3 dirSpec = dirF0;
+ vec3 dirDiff = albedo * 1.0-dirF0;
+
+ vec3 lambert = u_doDiffuse * calcLambert(dirDiff, ndotl);
+ vec3 blinn = u_doSpecular * calcBlinn(dirSpec, ndoth, ndotl, specPwr(gloss));
+ vec3 direct = (lambert + blinn)*clight;
+
+ // Indirect lighting.
+ vec3 envSpec = envF0;
+ vec3 envDiff = albedo * 1.0-envF0;
+
+ // Note: Environment textures are filtered with cmft: https://github.com/dariomanesku/cmft
+ // Params used:
+ // --excludeBase true //!< First level mip is not filtered.
+ // --mipCount 7 //!< 7 mip levels are used in total, [256x256 .. 4x4]. Lower res mip maps should be avoided.
+ // --glossScale 10 //!< Spec power scale. See: specPwr().
+ // --glossBias 2 //!< Spec power bias. See: specPwr().
+ // --edgeFixup warp //!< This must be used on DirectX9. When fileted with 'warp', fixCubeLookup() should be used.
+ float mip = 1.0 + 5.0*(1.0 - gloss); // Use mip levels [1..6] for radiance.
+
+ mat4 mtx;
+ mtx[0] = u_mtx0;
+ mtx[1] = u_mtx1;
+ mtx[2] = u_mtx2;
+ mtx[3] = u_mtx3;
+ vec3 vr = 2.0*ndotv*nn - vv; // Same as: -reflect(vv, nn);
+ vec3 cubeR = normalize(instMul(mtx, vec4(vr, 0.0)).xyz);
+ vec3 cubeN = normalize(instMul(mtx, vec4(nn, 0.0)).xyz);
+ cubeR = fixCubeLookup(cubeR, mip, 256.0);
+
+ vec3 radiance = u_doDiffuseIbl * envSpec * toLinear(textureCubeLod(s_texCube, cubeR, mip).xyz);
+ vec3 irradiance = u_doSpecularIbl * envDiff * toLinear(textureCube(s_texCubeIrr, cubeN).xyz);
+ vec3 indirect = radiance + irradiance;
+
+ // Color.
+ vec3 color = direct + indirect;
color = color * exp2(u_exposure);
-
gl_FragColor.xyz = toFilmic(color);
gl_FragColor.w = 1.0;
}
diff --git a/3rdparty/bgfx/examples/18-ibl/fs_ibl_skybox.sc b/3rdparty/bgfx/examples/18-ibl/fs_ibl_skybox.sc
index 790fc0144fc..d895037b26a 100644
--- a/3rdparty/bgfx/examples/18-ibl/fs_ibl_skybox.sc
+++ b/3rdparty/bgfx/examples/18-ibl/fs_ibl_skybox.sc
@@ -1,22 +1,31 @@
$input v_dir
/*
- * Copyright 2014 Dario Manesku. All rights reserved.
+ * Copyright 2014-2016 Dario Manesku. All rights reserved.
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
#include "../common/common.sh"
+#include "uniforms.sh"
SAMPLERCUBE(s_texCube, 0);
-
-uniform vec4 u_params;
-#define u_exposure u_params.y
+SAMPLERCUBE(s_texCubeIrr, 1);
void main()
{
vec3 dir = normalize(v_dir);
- vec4 color = textureCubeLod(s_texCube, dir, 0.0);
+ vec4 color;
+ if (u_bgType == 7.0)
+ {
+ color = toLinear(textureCube(s_texCubeIrr, dir));
+ }
+ else
+ {
+ float lod = u_bgType;
+ dir = fixCubeLookup(dir, lod, 256.0);
+ color = toLinear(textureCubeLod(s_texCube, dir, lod));
+ }
color *= exp2(u_exposure);
gl_FragColor = toFilmic(color);
diff --git a/3rdparty/bgfx/examples/18-ibl/ibl.cpp b/3rdparty/bgfx/examples/18-ibl/ibl.cpp
index 51a194730e4..a0cf6268d9c 100644
--- a/3rdparty/bgfx/examples/18-ibl/ibl.cpp
+++ b/3rdparty/bgfx/examples/18-ibl/ibl.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2014 Dario Manesku. All rights reserved.
+ * Copyright 2014-2016 Dario Manesku. All rights reserved.
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
@@ -18,86 +18,51 @@ static float s_texelHalf = 0.0f;
struct Uniforms
{
- void init()
- {
- m_time = 0.0f;
- bx::mtxIdentity(m_mtx);
-
- u_mtx = bgfx::createUniform("u_mtx", bgfx::UniformType::Mat4);
- u_params = bgfx::createUniform("u_params", bgfx::UniformType::Vec4);
- u_flags = bgfx::createUniform("u_flags", bgfx::UniformType::Vec4);
- u_camPos = bgfx::createUniform("u_camPos", bgfx::UniformType::Vec4);
- u_rgbDiff = bgfx::createUniform("u_rgbDiff", bgfx::UniformType::Vec4);
- u_rgbSpec = bgfx::createUniform("u_rgbSpec", bgfx::UniformType::Vec4);
- }
+ enum { NumVec4 = 12 };
- // Call this once per frame.
- void submitPerFrameUniforms()
+ void init()
{
- bgfx::setUniform(u_mtx, m_mtx);
- bgfx::setUniform(u_flags, m_flags);
- bgfx::setUniform(u_camPos, m_camPosTime);
- bgfx::setUniform(u_rgbDiff, m_rgbDiff);
- bgfx::setUniform(u_rgbSpec, m_rgbSpec);
+ u_params = bgfx::createUniform("u_params", bgfx::UniformType::Vec4, NumVec4);
}
- // Call this before each draw call.
- void submitPerDrawUniforms()
+ void submit()
{
- bgfx::setUniform(u_params, m_params);
+ bgfx::setUniform(u_params, m_params, NumVec4);
}
void destroy()
{
- bgfx::destroyUniform(u_rgbSpec);
- bgfx::destroyUniform(u_rgbDiff);
- bgfx::destroyUniform(u_camPos);
- bgfx::destroyUniform(u_flags);
bgfx::destroyUniform(u_params);
- bgfx::destroyUniform(u_mtx);
}
union
{
struct
{
- float m_glossiness;
- float m_exposure;
- float m_diffspec;
- float m_time;
- };
-
- float m_params[4];
- };
-
- union
- {
- struct
- {
- float m_diffuse;
- float m_specular;
- float m_diffuseIbl;
- float m_specularIbl;
+ union
+ {
+ float m_mtx[16];
+ /* 0*/ struct { float m_mtx0[4]; };
+ /* 1*/ struct { float m_mtx1[4]; };
+ /* 2*/ struct { float m_mtx2[4]; };
+ /* 3*/ struct { float m_mtx3[4]; };
+ };
+ /* 4*/ struct { float m_glossiness, m_reflectivity, m_exposure, m_bgType; };
+ /* 5*/ struct { float m_metalOrSpec, m_unused5[3]; };
+ /* 6*/ struct { float m_doDiffuse, m_doSpecular, m_doDiffuseIbl, m_doSpecularIbl; };
+ /* 7*/ struct { float m_cameraPos[3], m_unused7[1]; };
+ /* 8*/ struct { float m_rgbDiff[4]; };
+ /* 9*/ struct { float m_rgbSpec[4]; };
+ /*10*/ struct { float m_lightDir[3], m_unused10[1]; };
+ /*11*/ struct { float m_lightCol[3], m_unused11[1]; };
};
- float m_flags[4];
+ float m_params[NumVec4*4];
};
- float m_mtx[16];
- float m_camPosTime[4];
- float m_rgbDiff[4];
- float m_rgbSpec[4];
-
- bgfx::UniformHandle u_mtx;
bgfx::UniformHandle u_params;
- bgfx::UniformHandle u_flags;
- bgfx::UniformHandle u_camPos;
- bgfx::UniformHandle u_rgbDiff;
- bgfx::UniformHandle u_rgbSpec;
};
-static Uniforms s_uniforms;
-
struct PosColorTexCoord0Vertex
{
float m_x;
@@ -181,11 +146,8 @@ struct LightProbe
{
enum Enum
{
- Wells,
- Uffizi,
- Pisa,
- Ennis,
- Grace,
+ Bolonga,
+ Kyoto,
Count
};
@@ -213,6 +175,253 @@ struct LightProbe
bgfx::TextureHandle m_texIrr;
};
+struct Camera
+{
+ Camera()
+ {
+ reset();
+ }
+
+ void reset()
+ {
+ m_target.curr[0] = 0.0f;
+ m_target.curr[1] = 0.0f;
+ m_target.curr[2] = 0.0f;
+ m_target.dest[0] = 0.0f;
+ m_target.dest[1] = 0.0f;
+ m_target.dest[2] = 0.0f;
+
+ m_pos.curr[0] = 0.0f;
+ m_pos.curr[1] = 0.0f;
+ m_pos.curr[2] = -3.0f;
+ m_pos.dest[0] = 0.0f;
+ m_pos.dest[1] = 0.0f;
+ m_pos.dest[2] = -3.0f;
+
+ m_orbit[0] = 0.0f;
+ m_orbit[1] = 0.0f;
+ }
+
+ void mtxLookAt(float* _outViewMtx)
+ {
+ bx::mtxLookAt(_outViewMtx, m_pos.curr, m_target.curr);
+ }
+
+ void orbit(float _dx, float _dy)
+ {
+ m_orbit[0] += _dx;
+ m_orbit[1] += _dy;
+ }
+
+ void dolly(float _dz)
+ {
+ const float cnear = 1.0f;
+ const float cfar = 10.0f;
+
+ const float toTarget[3] =
+ {
+ m_target.dest[0] - m_pos.dest[0],
+ m_target.dest[1] - m_pos.dest[1],
+ m_target.dest[2] - m_pos.dest[2],
+ };
+ const float toTargetLen = bx::vec3Length(toTarget);
+ const float invToTargetLen = 1.0f/(toTargetLen+FLT_MIN);
+ const float toTargetNorm[3] =
+ {
+ toTarget[0]*invToTargetLen,
+ toTarget[1]*invToTargetLen,
+ toTarget[2]*invToTargetLen,
+ };
+
+ float delta = toTargetLen*_dz;
+ float newLen = toTargetLen + delta;
+ if ( (cnear < newLen || _dz < 0.0f)
+ && (newLen < cfar || _dz > 0.0f) )
+ {
+ m_pos.dest[0] += toTargetNorm[0]*delta;
+ m_pos.dest[1] += toTargetNorm[1]*delta;
+ m_pos.dest[2] += toTargetNorm[2]*delta;
+ }
+ }
+
+ void consumeOrbit(float _amount)
+ {
+ float consume[2];
+ consume[0] = m_orbit[0]*_amount;
+ consume[1] = m_orbit[1]*_amount;
+ m_orbit[0] -= consume[0];
+ m_orbit[1] -= consume[1];
+
+ const float toPos[3] =
+ {
+ m_pos.curr[0] - m_target.curr[0],
+ m_pos.curr[1] - m_target.curr[1],
+ m_pos.curr[2] - m_target.curr[2],
+ };
+ const float toPosLen = bx::vec3Length(toPos);
+ const float invToPosLen = 1.0f/(toPosLen+FLT_MIN);
+ const float toPosNorm[3] =
+ {
+ toPos[0]*invToPosLen,
+ toPos[1]*invToPosLen,
+ toPos[2]*invToPosLen,
+ };
+
+ float ll[2];
+ latLongFromVec(ll[0], ll[1], toPosNorm);
+ ll[0] += consume[0];
+ ll[1] -= consume[1];
+ ll[1] = bx::fclamp(ll[1], 0.02f, 0.98f);
+
+ float tmp[3];
+ vecFromLatLong(tmp, ll[0], ll[1]);
+
+ float diff[3];
+ diff[0] = (tmp[0]-toPosNorm[0])*toPosLen;
+ diff[1] = (tmp[1]-toPosNorm[1])*toPosLen;
+ diff[2] = (tmp[2]-toPosNorm[2])*toPosLen;
+
+ m_pos.curr[0] += diff[0];
+ m_pos.curr[1] += diff[1];
+ m_pos.curr[2] += diff[2];
+ m_pos.dest[0] += diff[0];
+ m_pos.dest[1] += diff[1];
+ m_pos.dest[2] += diff[2];
+ }
+
+ void update(float _dt)
+ {
+ const float amount = bx::fmin(_dt/0.12f, 1.0f);
+
+ consumeOrbit(amount);
+
+ m_target.curr[0] = bx::flerp(m_target.curr[0], m_target.dest[0], amount);
+ m_target.curr[1] = bx::flerp(m_target.curr[1], m_target.dest[1], amount);
+ m_target.curr[2] = bx::flerp(m_target.curr[2], m_target.dest[2], amount);
+ m_pos.curr[0] = bx::flerp(m_pos.curr[0], m_pos.dest[0], amount);
+ m_pos.curr[1] = bx::flerp(m_pos.curr[1], m_pos.dest[1], amount);
+ m_pos.curr[2] = bx::flerp(m_pos.curr[2], m_pos.dest[2], amount);
+ }
+
+ void envViewMtx(float* _mtx)
+ {
+ const float toTarget[3] =
+ {
+ m_target.curr[0] - m_pos.curr[0],
+ m_target.curr[1] - m_pos.curr[1],
+ m_target.curr[2] - m_pos.curr[2],
+ };
+
+ const float toTargetLen = bx::vec3Length(toTarget);
+ const float invToTargetLen = 1.0f/(toTargetLen+FLT_MIN);
+ const float toTargetNorm[3] =
+ {
+ toTarget[0]*invToTargetLen,
+ toTarget[1]*invToTargetLen,
+ toTarget[2]*invToTargetLen,
+ };
+
+ float tmp[3];
+ const float fakeUp[3] = { 0.0f, 1.0f, 0.0f };
+
+ float right[3];
+ bx::vec3Cross(tmp, fakeUp, toTargetNorm);
+ bx::vec3Norm(right, tmp);
+
+ float up[3];
+ bx::vec3Cross(tmp, toTargetNorm, right);
+ bx::vec3Norm(up, tmp);
+
+ _mtx[ 0] = right[0];
+ _mtx[ 1] = right[1];
+ _mtx[ 2] = right[2];
+ _mtx[ 3] = 0.0f;
+ _mtx[ 4] = up[0];
+ _mtx[ 5] = up[1];
+ _mtx[ 6] = up[2];
+ _mtx[ 7] = 0.0f;
+ _mtx[ 8] = toTargetNorm[0];
+ _mtx[ 9] = toTargetNorm[1];
+ _mtx[10] = toTargetNorm[2];
+ _mtx[11] = 0.0f;
+ _mtx[12] = 0.0f;
+ _mtx[13] = 0.0f;
+ _mtx[14] = 0.0f;
+ _mtx[15] = 1.0f;
+ }
+
+ static inline void vecFromLatLong(float _vec[3], float _u, float _v)
+ {
+ const float phi = _u * 2.0f*bx::pi;
+ const float theta = _v * bx::pi;
+
+ const float st = bx::fsin(theta);
+ const float sp = bx::fsin(phi);
+ const float ct = bx::fcos(theta);
+ const float cp = bx::fcos(phi);
+
+ _vec[0] = -st*sp;
+ _vec[1] = ct;
+ _vec[2] = -st*cp;
+ }
+
+ static inline void latLongFromVec(float& _u, float& _v, const float _vec[3])
+ {
+ const float phi = atan2f(_vec[0], _vec[2]);
+ const float theta = acosf(_vec[1]);
+
+ _u = (bx::pi + phi)*bx::invPi*0.5f;
+ _v = theta*bx::invPi;
+ }
+
+ struct Interp3f
+ {
+ float curr[3];
+ float dest[3];
+ };
+
+ Interp3f m_target;
+ Interp3f m_pos;
+ float m_orbit[2];
+};
+
+struct Mouse
+{
+ Mouse()
+ : m_dx(0.0f)
+ , m_dy(0.0f)
+ , m_prevMx(0.0f)
+ , m_prevMy(0.0f)
+ , m_scroll(0)
+ , m_scrollPrev(0)
+ {
+ }
+
+ void update(float _mx, float _my, int32_t _mz, uint32_t _width, uint32_t _height)
+ {
+ const float widthf = float(int32_t(_width));
+ const float heightf = float(int32_t(_height));
+
+ // Delta movement.
+ m_dx = float(_mx - m_prevMx)/widthf;
+ m_dy = float(_my - m_prevMy)/heightf;
+
+ m_prevMx = _mx;
+ m_prevMy = _my;
+
+ // Scroll.
+ m_scroll = _mz - m_scrollPrev;
+ m_scrollPrev = _mz;
+ }
+
+ float m_dx; // Screen space.
+ float m_dy;
+ float m_prevMx;
+ float m_prevMy;
+ int32_t m_scroll;
+ int32_t m_scrollPrev;
+};
+
int _main_(int _argc, char** _argv)
{
Args args(_argc, _argv);
@@ -220,7 +429,10 @@ int _main_(int _argc, char** _argv)
uint32_t width = 1280;
uint32_t height = 720;
uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
+ uint32_t reset = 0
+ | BGFX_RESET_VSYNC
+ | BGFX_RESET_MSAA_X16
+ ;
bgfx::init(args.m_type, args.m_pciId);
bgfx::reset(width, height, reset);
@@ -240,18 +452,16 @@ int _main_(int _argc, char** _argv)
imguiCreate();
// Uniforms.
- s_uniforms.init();
+ Uniforms uniforms;
+ uniforms.init();
// Vertex declarations.
PosColorTexCoord0Vertex::init();
LightProbe lightProbes[LightProbe::Count];
- lightProbes[LightProbe::Wells ].load("wells");
- lightProbes[LightProbe::Uffizi].load("uffizi");
- lightProbes[LightProbe::Pisa ].load("pisa");
- lightProbes[LightProbe::Ennis ].load("ennis");
- lightProbes[LightProbe::Grace ].load("grace");
- LightProbe::Enum currentLightProbe = LightProbe::Wells;
+ lightProbes[LightProbe::Bolonga].load("bolonga");
+ lightProbes[LightProbe::Kyoto ].load("kyoto");
+ LightProbe::Enum currentLightProbe = LightProbe::Bolonga;
bgfx::UniformHandle u_mtx = bgfx::createUniform("u_mtx", bgfx::UniformType::Mat4);
bgfx::UniformHandle u_params = bgfx::createUniform("u_params", bgfx::UniformType::Vec4);
@@ -266,43 +476,73 @@ int _main_(int _argc, char** _argv)
Mesh* meshBunny;
meshBunny = meshLoad("meshes/bunny.bin");
+ Mesh* meshOrb;
+ meshOrb = meshLoad("meshes/orb.bin");
+
+ Camera camera;
+ Mouse mouse;
+
struct Settings
{
- float m_speed;
+ Settings()
+ {
+ m_envRotCurr = 0.0f;
+ m_envRotDest = 0.0f;
+ m_lightDir[0] = -0.8f;
+ m_lightDir[1] = 0.2f;
+ m_lightDir[2] = -0.5f;
+ m_lightCol[0] = 1.0f;
+ m_lightCol[1] = 1.0f;
+ m_lightCol[2] = 1.0f;
+ m_glossiness = 0.7f;
+ m_exposure = 0.0f;
+ m_bgType = 3.0f;
+ m_radianceSlider = 2.0f;
+ m_reflectivity = 0.85f;
+ m_rgbDiff[0] = 1.0f;
+ m_rgbDiff[1] = 1.0f;
+ m_rgbDiff[2] = 1.0f;
+ m_rgbSpec[0] = 1.0f;
+ m_rgbSpec[1] = 1.0f;
+ m_rgbSpec[2] = 1.0f;
+ m_lod = 0.0f;
+ m_doDiffuse = false;
+ m_doSpecular = false;
+ m_doDiffuseIbl = true;
+ m_doSpecularIbl = true;
+ m_showLightColorWheel = true;
+ m_showDiffColorWheel = true;
+ m_showSpecColorWheel = true;
+ m_metalOrSpec = 0;
+ m_meshSelection = 0;
+ m_crossCubemapPreview = ImguiCubemap::Latlong;
+ }
+
+ float m_envRotCurr;
+ float m_envRotDest;
+ float m_lightDir[3];
+ float m_lightCol[3];
float m_glossiness;
float m_exposure;
- float m_diffspec;
+ float m_radianceSlider;
+ float m_bgType;
+ float m_reflectivity;
float m_rgbDiff[3];
float m_rgbSpec[3];
- bool m_diffuse;
- bool m_specular;
- bool m_diffuseIbl;
- bool m_specularIbl;
+ float m_lod;
+ bool m_doDiffuse;
+ bool m_doSpecular;
+ bool m_doDiffuseIbl;
+ bool m_doSpecularIbl;
+ bool m_showLightColorWheel;
bool m_showDiffColorWheel;
bool m_showSpecColorWheel;
+ uint8_t m_metalOrSpec;
+ uint8_t m_meshSelection;
ImguiCubemap::Enum m_crossCubemapPreview;
};
Settings settings;
- settings.m_speed = 0.37f;
- settings.m_glossiness = 1.0f;
- settings.m_exposure = 0.0f;
- settings.m_diffspec = 0.65f;
- settings.m_rgbDiff[0] = 0.2f;
- settings.m_rgbDiff[1] = 0.2f;
- settings.m_rgbDiff[2] = 0.2f;
- settings.m_rgbSpec[0] = 1.0f;
- settings.m_rgbSpec[1] = 1.0f;
- settings.m_rgbSpec[2] = 1.0f;
- settings.m_diffuse = true;
- settings.m_specular = true;
- settings.m_diffuseIbl = true;
- settings.m_specularIbl = true;
- settings.m_showDiffColorWheel = true;
- settings.m_showSpecColorWheel = false;
- settings.m_crossCubemapPreview = ImguiCubemap::Cross;
-
- float time = 0.0f;
int32_t leftScrollArea = 0;
@@ -320,127 +560,114 @@ int _main_(int _argc, char** _argv)
);
static int32_t rightScrollArea = 0;
- imguiBeginScrollArea("Settings", width - 256 - 10, 10, 256, 540, &rightScrollArea);
-
- imguiLabel("Shade:");
- imguiSeparator();
- imguiBool("Diffuse", settings.m_diffuse);
- imguiBool("Specular", settings.m_specular);
- imguiBool("IBL Diffuse", settings.m_diffuseIbl);
- imguiBool("IBL Specular", settings.m_specularIbl);
-
- imguiSeparatorLine();
- imguiSlider("Speed", settings.m_speed, 0.0f, 1.0f, 0.01f);
- imguiSeparatorLine();
-
- imguiSeparator();
- imguiSlider("Exposure", settings.m_exposure, -8.0f, 8.0f, 0.01f);
- imguiSeparator();
-
- imguiLabel("Environment:");
- currentLightProbe = LightProbe::Enum(imguiChoose(currentLightProbe
- , "Wells"
- , "Uffizi"
- , "Pisa"
- , "Ennis"
- , "Grace"
+ imguiBeginScrollArea("", width - 256 - 10, 10, 256, 700, &rightScrollArea);
+
+ imguiLabel("Environment light:");
+ imguiIndent();
+ imguiBool("IBL Diffuse", settings.m_doDiffuseIbl);
+ imguiBool("IBL Specular", settings.m_doSpecularIbl);
+ currentLightProbe = LightProbe::Enum(imguiTabs(currentLightProbe, true, ImguiAlign::LeftIndented, 16, 2, 2
+ , "Bolonga"
+ , "Kyoto"
) );
- static float lod = 0.0f;
- if (imguiCube(lightProbes[currentLightProbe].m_tex, lod, settings.m_crossCubemapPreview, true) )
+ if (imguiCube(lightProbes[currentLightProbe].m_tex, settings.m_lod, settings.m_crossCubemapPreview, true) )
{
settings.m_crossCubemapPreview = ImguiCubemap::Enum( (settings.m_crossCubemapPreview+1) % ImguiCubemap::Count);
}
- imguiSlider("Texture LOD", lod, 0.0f, 10.1f, 0.1f);
-
- imguiEndScrollArea();
-
- imguiBeginScrollArea("Settings", 10, 70, 256, 576, &leftScrollArea);
-
- imguiLabel("Material properties:");
- imguiSeparator();
- imguiSlider("Diffuse - Specular", settings.m_diffspec, 0.0f, 1.0f, 0.01f);
- imguiSlider("Glossiness" , settings.m_glossiness, 0.0f, 1.0f, 0.01f);
- imguiSeparator();
-
- imguiColorWheel("Diffuse color:", &settings.m_rgbDiff[0], settings.m_showDiffColorWheel);
- imguiSeparator();
- imguiColorWheel("Specular color:", &settings.m_rgbSpec[0], settings.m_showSpecColorWheel);
-
- imguiSeparator();
- imguiLabel("Predefined materials:");
- imguiSeparator();
-
- if (imguiButton("Gold") )
+ imguiSlider("Texture LOD", settings.m_lod, 0.0f, 10.1f, 0.1f);
+ imguiUnindent();
+
+ imguiSeparator(8);
+ imguiLabel("Directional light:");
+ imguiIndent();
+ imguiBool("Diffuse", settings.m_doDiffuse);
+ imguiBool("Specular", settings.m_doSpecular);
+ const bool doDirectLighting = settings.m_doDiffuse || settings.m_doSpecular;
+ imguiSlider("Light direction X", settings.m_lightDir[0], -1.0f, 1.0f, 0.1f, doDirectLighting);
+ imguiSlider("Light direction Y", settings.m_lightDir[1], -1.0f, 1.0f, 0.1f, doDirectLighting);
+ imguiSlider("Light direction Z", settings.m_lightDir[2], -1.0f, 1.0f, 0.1f, doDirectLighting);
+ imguiColorWheel("Color:", settings.m_lightCol, settings.m_showLightColorWheel, 0.6f, doDirectLighting);
+ imguiUnindent();
+
+ imguiSeparator(8);
+ imguiLabel("Background:");
+ imguiIndent();
{
- settings.m_glossiness = 0.8f;
- settings.m_diffspec = 1.0f;
-
- settings.m_rgbDiff[0] = 0.0f;
- settings.m_rgbDiff[1] = 0.0f;
- settings.m_rgbDiff[2] = 0.0f;
-
- settings.m_rgbSpec[0] = 1.0f;
- settings.m_rgbSpec[1] = 0.86f;
- settings.m_rgbSpec[2] = 0.58f;
+ int32_t selection;
+ if (0.0f == settings.m_bgType) { selection = 0; }
+ else if (7.0f == settings.m_bgType) { selection = 2; }
+ else { selection = 1; }
+ selection = imguiTabs(selection, true, ImguiAlign::LeftIndented, 16, 2, 3
+ , "Skybox"
+ , "Radiance"
+ , "Irradiance"
+ );
+ if (0 == selection) { settings.m_bgType = 0.0f; }
+ else if (2 == selection) { settings.m_bgType = 7.0f; }
+ else { settings.m_bgType = settings.m_radianceSlider; }
+ const bool isRadiance = (selection == 1);
+ imguiSlider("Mip level", settings.m_radianceSlider, 1.0f, 6.0f, 0.1f, isRadiance);
}
+ imguiUnindent();
- if (imguiButton("Copper") )
- {
- settings.m_glossiness = 0.67f;
- settings.m_diffspec = 1.0f;
+ imguiSeparator(8);
+ imguiLabel("Post processing:");
+ imguiIndent();
+ imguiSlider("Exposure", settings.m_exposure, -4.0f, 4.0f, 0.1f);
+ imguiUnindent();
- settings.m_rgbDiff[0] = 0.0f;
- settings.m_rgbDiff[1] = 0.0f;
- settings.m_rgbDiff[2] = 0.0f;
-
- settings.m_rgbSpec[0] = 0.98f;
- settings.m_rgbSpec[1] = 0.82f;
- settings.m_rgbSpec[2] = 0.76f;
- }
+ imguiSeparator();
- if (imguiButton("Titanium") )
- {
- settings.m_glossiness = 0.57f;
- settings.m_diffspec = 1.0f;
+ imguiEndScrollArea();
- settings.m_rgbDiff[0] = 0.0f;
- settings.m_rgbDiff[1] = 0.0f;
- settings.m_rgbDiff[2] = 0.0f;
+ imguiBeginScrollArea("", 10, 70, 256, 636, &leftScrollArea);
- settings.m_rgbSpec[0] = 0.76f;
- settings.m_rgbSpec[1] = 0.73f;
- settings.m_rgbSpec[2] = 0.71f;
- }
+ imguiLabel("Mesh:");
+ imguiIndent();
+ settings.m_meshSelection = imguiChoose(settings.m_meshSelection, "Bunny", "Orbs");
+ imguiUnindent();
- if (imguiButton("Steel") )
+ const bool isBunny = (0 == settings.m_meshSelection);
+ if (!isBunny)
{
- settings.m_glossiness = 0.82f;
- settings.m_diffspec = 1.0f;
-
- settings.m_rgbDiff[0] = 0.0f;
- settings.m_rgbDiff[1] = 0.0f;
- settings.m_rgbDiff[2] = 0.0f;
-
- settings.m_rgbSpec[0] = 0.77f;
- settings.m_rgbSpec[1] = 0.78f;
- settings.m_rgbSpec[2] = 0.77f;
+ settings.m_metalOrSpec = 0;
}
+ imguiSeparator(4);
+ imguiLabel("Workflow:");
+ imguiIndent();
+ if (imguiCheck("Metalness", 0 == settings.m_metalOrSpec, isBunny) ) { settings.m_metalOrSpec = 0; }
+ if (imguiCheck("Specular", 1 == settings.m_metalOrSpec, isBunny) ) { settings.m_metalOrSpec = 1; }
+ imguiUnindent();
+
+ imguiSeparator(4);
+ imguiLabel("Material:");
+ imguiIndent();
+ imguiSlider("Glossiness", settings.m_glossiness, 0.0f, 1.0f, 0.01f, isBunny);
+ imguiSlider(0 == settings.m_metalOrSpec ? "Metalness" : "Diffuse - Specular", settings.m_reflectivity, 0.0f, 1.0f, 0.01f, isBunny);
+ imguiUnindent();
+
+ imguiColorWheel("Diffuse:", &settings.m_rgbDiff[0], settings.m_showDiffColorWheel, 0.7f);
+ imguiSeparator();
+ imguiColorWheel("Specular:", &settings.m_rgbSpec[0], settings.m_showSpecColorWheel, 0.7f, (1 == settings.m_metalOrSpec) && isBunny);
+
imguiEndScrollArea();
imguiEndFrame();
- s_uniforms.m_glossiness = settings.m_glossiness;
- s_uniforms.m_exposure = settings.m_exposure;
- s_uniforms.m_diffspec = settings.m_diffspec;
- s_uniforms.m_flags[0] = float(settings.m_diffuse);
- s_uniforms.m_flags[1] = float(settings.m_specular);
- s_uniforms.m_flags[2] = float(settings.m_diffuseIbl);
- s_uniforms.m_flags[3] = float(settings.m_specularIbl);
- memcpy(s_uniforms.m_rgbDiff, settings.m_rgbDiff, 3*sizeof(float) );
- memcpy(s_uniforms.m_rgbSpec, settings.m_rgbSpec, 3*sizeof(float) );
-
- s_uniforms.submitPerFrameUniforms();
+ uniforms.m_glossiness = settings.m_glossiness;
+ uniforms.m_reflectivity = settings.m_reflectivity;
+ uniforms.m_exposure = settings.m_exposure;
+ uniforms.m_bgType = settings.m_bgType;
+ uniforms.m_metalOrSpec = float(settings.m_metalOrSpec);
+ uniforms.m_doDiffuse = float(settings.m_doDiffuse);
+ uniforms.m_doSpecular = float(settings.m_doSpecular);
+ uniforms.m_doDiffuseIbl = float(settings.m_doDiffuseIbl);
+ uniforms.m_doSpecularIbl = float(settings.m_doSpecularIbl);
+ memcpy(uniforms.m_rgbDiff, settings.m_rgbDiff, 3*sizeof(float) );
+ memcpy(uniforms.m_rgbSpec, settings.m_rgbSpec, 3*sizeof(float) );
+ memcpy(uniforms.m_lightDir, settings.m_lightDir, 3*sizeof(float) );
+ memcpy(uniforms.m_lightCol, settings.m_lightCol, 3*sizeof(float) );
int64_t now = bx::getHPCounter();
static int64_t last = now;
@@ -448,9 +675,7 @@ int _main_(int _argc, char** _argv)
last = now;
const double freq = double(bx::getHPFrequency() );
const double toMs = 1000.0/freq;
-
- time += (float)(frameTime*settings.m_speed/freq);
- s_uniforms.m_camPosTime[3] = time;
+ const float deltaTimeSec = float(double(frameTime)/freq);
// Use debug font to print information about this example.
bgfx::dbgTextClear();
@@ -458,53 +683,111 @@ int _main_(int _argc, char** _argv)
bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Image-based lighting.");
bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
- float at[3] = { 0.0f, 0.0f, 0.0f };
- float eye[3] = { 0.0f, 0.0f, -3.0f };
-
- bx::mtxRotateXY(s_uniforms.m_mtx
- , 0.0f
- , time
- );
+ // Camera.
+ const bool mouseOverGui = imguiMouseOverArea();
+ mouse.update(float(mouseState.m_mx), float(mouseState.m_my), mouseState.m_mz, width, height);
+ if (!mouseOverGui)
+ {
+ if (mouseState.m_buttons[entry::MouseButton::Left])
+ {
+ camera.orbit(mouse.m_dx, mouse.m_dy);
+ }
+ else if (mouseState.m_buttons[entry::MouseButton::Right])
+ {
+ camera.dolly(mouse.m_dx + mouse.m_dy);
+ }
+ else if (mouseState.m_buttons[entry::MouseButton::Middle])
+ {
+ settings.m_envRotDest += mouse.m_dx*2.0f;
+ }
+ else if (0 != mouse.m_scroll)
+ {
+ camera.dolly(float(mouse.m_scroll)*0.05f);
+ }
+ }
+ camera.update(deltaTimeSec);
+ memcpy(uniforms.m_cameraPos, camera.m_pos.curr, 3*sizeof(float) );
+ // View Transform 0.
float view[16];
float proj[16];
-
bx::mtxIdentity(view);
bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f);
bgfx::setViewTransform(0, view, proj);
- bx::mtxLookAt(view, eye, at);
- memcpy(s_uniforms.m_camPosTime, eye, 3*sizeof(float) );
- bx::mtxProj(proj, 60.0f, float(width)/float(height), 0.1f, 100.0f);
+ // View Transform 1.
+ camera.mtxLookAt(view);
+ bx::mtxProj(proj, 45.0f, float(width)/float(height), 0.1f, 100.0f);
bgfx::setViewTransform(1, view, proj);
+ // View rect.
bgfx::setViewRect(0, 0, 0, width, height);
bgfx::setViewRect(1, 0, 0, width, height);
- // View 0.
+ // Env rotation.
+ const float amount = bx::fmin(deltaTimeSec/0.12f, 1.0f);
+ settings.m_envRotCurr = bx::flerp(settings.m_envRotCurr, settings.m_envRotDest, amount);
+
+ // Env mtx.
+ float mtxEnvView[16];
+ camera.envViewMtx(mtxEnvView);
+ float mtxEnvRot[16];
+ bx::mtxRotateY(mtxEnvRot, settings.m_envRotCurr);
+ bx::mtxMul(uniforms.m_mtx, mtxEnvView, mtxEnvRot);
+
+ // Submit view 0.
bgfx::setTexture(0, s_texCube, lightProbes[currentLightProbe].m_tex);
+ bgfx::setTexture(1, s_texCubeIrr, lightProbes[currentLightProbe].m_texIrr);
bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE);
screenSpaceQuad( (float)width, (float)height, true);
- s_uniforms.submitPerDrawUniforms();
+ uniforms.submit();
bgfx::submit(0, programSky);
- // View 1.
- float mtx[16];
- bx::mtxSRT(mtx
- , 1.0f
- , 1.0f
- , 1.0f
- , 0.0f
- , bx::pi+time
- , 0.0f
- , 0.0f
- , -1.0f
- , 0.0f
- );
-
- bgfx::setTexture(0, s_texCube, lightProbes[currentLightProbe].m_tex);
- bgfx::setTexture(1, s_texCubeIrr, lightProbes[currentLightProbe].m_texIrr);
- meshSubmit(meshBunny, 1, programMesh, mtx);
+ // Submit view 1.
+ if (0 == settings.m_meshSelection)
+ {
+ // Submit bunny.
+ float mtx[16];
+ bx::mtxSRT(mtx, 1.0f, 1.0f, 1.0f, 0.0f, bx::pi, 0.0f, 0.0f, -0.80f, 0.0f);
+ bgfx::setTexture(0, s_texCube, lightProbes[currentLightProbe].m_tex);
+ bgfx::setTexture(1, s_texCubeIrr, lightProbes[currentLightProbe].m_texIrr);
+ meshSubmit(meshBunny, 1, programMesh, mtx);
+ }
+ else
+ {
+ // Submit orbs.
+ for (float yy = 0, yend = 5.0f; yy < yend; yy+=1.0f)
+ {
+ for (float xx = 0, xend = 5.0f; xx < xend; xx+=1.0f)
+ {
+ const float scale = 1.2f;
+ const float spacing = 2.2f;
+ const float yAdj = -0.8f;
+
+ float mtx[16];
+ bx::mtxSRT(mtx
+ , scale/xend
+ , scale/xend
+ , scale/xend
+ , 0.0f
+ , 0.0f
+ , 0.0f
+ , 0.0f + (xx/xend)*spacing - (1.0f + (scale-1.0f)*0.5f - 1.0f/xend)
+ , yAdj/yend + (yy/yend)*spacing - (1.0f + (scale-1.0f)*0.5f - 1.0f/yend)
+ , 0.0f
+ );
+
+ uniforms.m_glossiness = xx*(1.0f/xend);
+ uniforms.m_reflectivity = (yend-yy)*(1.0f/yend);
+ uniforms.m_metalOrSpec = 0.0f;
+ uniforms.submit();
+
+ bgfx::setTexture(0, s_texCube, lightProbes[currentLightProbe].m_tex);
+ bgfx::setTexture(1, s_texCubeIrr, lightProbes[currentLightProbe].m_texIrr);
+ meshSubmit(meshOrb, 1, programMesh, mtx);
+ }
+ }
+ }
// Advance to next frame. Rendering thread will be kicked to
// process submitted rendering primitives.
@@ -512,6 +795,7 @@ int _main_(int _argc, char** _argv)
}
meshUnload(meshBunny);
+ meshUnload(meshOrb);
// Cleanup.
bgfx::destroyProgram(programMesh);
@@ -530,7 +814,7 @@ int _main_(int _argc, char** _argv)
lightProbes[ii].destroy();
}
- s_uniforms.destroy();
+ uniforms.destroy();
imguiDestroy();
diff --git a/3rdparty/bgfx/examples/18-ibl/makefile b/3rdparty/bgfx/examples/18-ibl/makefile
index 65275428bce..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/18-ibl/makefile
+++ b/3rdparty/bgfx/examples/18-ibl/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2014 Dario Manesku. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/18-ibl/screenshot.png b/3rdparty/bgfx/examples/18-ibl/screenshot.png
index fca0996c376..9cb3c375df2 100644
--- a/3rdparty/bgfx/examples/18-ibl/screenshot.png
+++ b/3rdparty/bgfx/examples/18-ibl/screenshot.png
Binary files differ
diff --git a/3rdparty/bgfx/examples/18-ibl/uniforms.sh b/3rdparty/bgfx/examples/18-ibl/uniforms.sh
new file mode 100644
index 00000000000..61354fc87cb
--- /dev/null
+++ b/3rdparty/bgfx/examples/18-ibl/uniforms.sh
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2016 Dario Manesku. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+uniform vec4 u_params[12];
+#define u_mtx0 u_params[0]
+#define u_mtx1 u_params[1]
+#define u_mtx2 u_params[2]
+#define u_mtx3 u_params[3]
+#define u_glossiness u_params[4].x
+#define u_reflectivity u_params[4].y
+#define u_exposure u_params[4].z
+#define u_bgType u_params[4].w
+#define u_metalOrSpec u_params[5].x
+#define u_unused u_params[5].yzw
+#define u_doDiffuse u_params[6].x
+#define u_doSpecular u_params[6].y
+#define u_doDiffuseIbl u_params[6].z
+#define u_doSpecularIbl u_params[6].w
+#define u_camPos u_params[7].xyz
+#define u_unused7 u_params[7].w
+#define u_rgbDiff u_params[8]
+#define u_rgbSpec u_params[9]
+#define u_lightDir u_params[10].xyz
+#define u_unused10 u_params[10].w
+#define u_lightCol u_params[11].xyz
+#define u_unused11 u_params[11].w
diff --git a/3rdparty/bgfx/examples/18-ibl/vs_ibl_mesh.sc b/3rdparty/bgfx/examples/18-ibl/vs_ibl_mesh.sc
index 7671fb74dfa..ad88136285c 100644
--- a/3rdparty/bgfx/examples/18-ibl/vs_ibl_mesh.sc
+++ b/3rdparty/bgfx/examples/18-ibl/vs_ibl_mesh.sc
@@ -2,19 +2,19 @@ $input a_position, a_normal
$output v_view, v_normal
/*
- * Copyright 2014 Dario Manesku. All rights reserved.
+ * Copyright 2014-2016 Dario Manesku. All rights reserved.
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
#include "../common/common.sh"
-
-uniform vec4 u_camPos;
+#include "uniforms.sh"
void main()
{
gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) );
+ v_view = u_camPos - mul(u_model[0], vec4(a_position, 1.0)).xyz;
+
vec3 normal = a_normal * 2.0 - 1.0;
v_normal = mul(u_model[0], vec4(normal, 0.0) ).xyz;
- v_view = normalize(u_camPos.xyz - mul(u_model[0], vec4(a_position, 1.0)).xyz);
}
diff --git a/3rdparty/bgfx/examples/18-ibl/vs_ibl_skybox.sc b/3rdparty/bgfx/examples/18-ibl/vs_ibl_skybox.sc
index 1c15b18e25e..b83fdd19e25 100644
--- a/3rdparty/bgfx/examples/18-ibl/vs_ibl_skybox.sc
+++ b/3rdparty/bgfx/examples/18-ibl/vs_ibl_skybox.sc
@@ -2,11 +2,12 @@ $input a_position, a_texcoord0
$output v_dir
/*
- * Copyright 2014 Dario Manesku. All rights reserved.
+ * Copyright 2014-2016 Dario Manesku. All rights reserved.
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
#include "../common/common.sh"
+#include "uniforms.sh"
uniform mat4 u_mtx;
@@ -14,6 +15,15 @@ void main()
{
gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) );
- vec2 tex = 2.0 * a_texcoord0 - 1.0;
- v_dir = mul(u_mtx, vec4(tex, 1.0, 0.0) ).xyz;
+ float fov = 45.0;
+ float height = tan(fov*0.5);
+ float aspect = height*(4.0/3.0);
+ vec2 tex = (2.0*a_texcoord0-1.0) * vec2(aspect, height);
+
+ mat4 mtx;
+ mtx[0] = u_mtx0;
+ mtx[1] = u_mtx1;
+ mtx[2] = u_mtx2;
+ mtx[3] = u_mtx3;
+ v_dir = instMul(mtx, vec4(tex, 1.0, 0.0) ).xyz;
}
diff --git a/3rdparty/bgfx/examples/19-oit/makefile b/3rdparty/bgfx/examples/19-oit/makefile
index 011773e023f..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/19-oit/makefile
+++ b/3rdparty/bgfx/examples/19-oit/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/19-oit/oit.cpp b/3rdparty/bgfx/examples/19-oit/oit.cpp
index 66baed03cd1..b9bbd041934 100644
--- a/3rdparty/bgfx/examples/19-oit/oit.cpp
+++ b/3rdparty/bgfx/examples/19-oit/oit.cpp
@@ -146,322 +146,370 @@ void screenSpaceQuad(float _textureWidth, float _textureHeight, bool _originBott
}
}
-int _main_(int _argc, char** _argv)
+class ExampleOIT : public entry::AppI
{
- Args args(_argc, _argv);
+ void init(int _argc, char** _argv) BX_OVERRIDE
+ {
+ Args args(_argc, _argv);
- uint32_t width = 1280;
- uint32_t height = 720;
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
+ m_width = 1280;
+ m_height = 720;
+ m_debug = BGFX_DEBUG_TEXT;
+ m_reset = BGFX_RESET_VSYNC;
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(width, height, reset);
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
- // Create vertex stream declaration.
- PosColorVertex::init();
- PosColorTexCoord0Vertex::init();
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
- // Enable debug text.
- bgfx::setDebug(debug);
+ // Create vertex stream declaration.
+ PosColorVertex::init();
+ PosColorTexCoord0Vertex::init();
- // Get renderer capabilities info.
- const bgfx::Caps* caps = bgfx::getCaps();
+ // Get renderer capabilities info.
+ const bgfx::Caps* caps = bgfx::getCaps();
- // Setup root path for binary shaders. Shader binaries are different
- // for each renderer.
- switch (caps->rendererType)
- {
- default:
- break;
+ // Setup root path for binary shaders. Shader binaries are different
+ // for each renderer.
+ switch (caps->rendererType)
+ {
+ default:
+ break;
- case bgfx::RendererType::OpenGL:
- case bgfx::RendererType::OpenGLES:
- s_flipV = true;
- break;
- }
+ case bgfx::RendererType::OpenGL:
+ case bgfx::RendererType::OpenGLES:
+ s_flipV = true;
+ break;
+ }
- // Imgui.
- imguiCreate();
+ // Imgui.
+ imguiCreate();
- const bgfx::Memory* mem;
+ // Create static vertex buffer.
+ m_vbh = bgfx::createVertexBuffer(
+ bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) )
+ , PosColorVertex::ms_decl
+ );
- // Create static vertex buffer.
- mem = bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) );
- bgfx::VertexBufferHandle vbh = bgfx::createVertexBuffer(mem, PosColorVertex::ms_decl);
+ // Create static index buffer.
+ m_ibh = bgfx::createIndexBuffer(bgfx::makeRef(s_cubeIndices, sizeof(s_cubeIndices) ) );
- // Create static index buffer.
- mem = bgfx::makeRef(s_cubeIndices, sizeof(s_cubeIndices) );
- bgfx::IndexBufferHandle ibh = bgfx::createIndexBuffer(mem);
+ // Create texture sampler uniforms.
+ s_texColor0 = bgfx::createUniform("s_texColor0", bgfx::UniformType::Int1);
+ s_texColor1 = bgfx::createUniform("s_texColor1", bgfx::UniformType::Int1);
+ u_color = bgfx::createUniform("u_color", bgfx::UniformType::Vec4);
- // Create texture sampler uniforms.
- bgfx::UniformHandle s_texColor0 = bgfx::createUniform("s_texColor0", bgfx::UniformType::Int1);
- bgfx::UniformHandle s_texColor1 = bgfx::createUniform("s_texColor1", bgfx::UniformType::Int1);
- bgfx::UniformHandle u_color = bgfx::createUniform("u_color", bgfx::UniformType::Vec4);
+ m_blend = loadProgram("vs_oit", "fs_oit" );
+ m_wbSeparatePass = loadProgram("vs_oit", "fs_oit_wb_separate" );
+ m_wbSeparateBlit = loadProgram("vs_oit_blit", "fs_oit_wb_separate_blit" );
+ m_wbPass = loadProgram("vs_oit", "fs_oit_wb" );
+ m_wbBlit = loadProgram("vs_oit_blit", "fs_oit_wb_blit" );
- bgfx::ProgramHandle blend = loadProgram("vs_oit", "fs_oit" );
- bgfx::ProgramHandle wbSeparatePass = loadProgram("vs_oit", "fs_oit_wb_separate" );
- bgfx::ProgramHandle wbSeparateBlit = loadProgram("vs_oit_blit", "fs_oit_wb_separate_blit" );
- bgfx::ProgramHandle wbPass = loadProgram("vs_oit", "fs_oit_wb" );
- bgfx::ProgramHandle wbBlit = loadProgram("vs_oit_blit", "fs_oit_wb_blit" );
+ m_fbtextures[0].idx = bgfx::invalidHandle;
+ m_fbtextures[1].idx = bgfx::invalidHandle;
+ m_fbh.idx = bgfx::invalidHandle;
- bgfx::TextureHandle fbtextures[2] = { BGFX_INVALID_HANDLE, BGFX_INVALID_HANDLE };
- bgfx::FrameBufferHandle fbh = BGFX_INVALID_HANDLE;
+ m_mode = 1;
+ m_scrollArea = 0;
+ m_frontToBack = true;
+ m_fadeInOut = false;
- int64_t timeOffset = bx::getHPCounter();
+ m_oldWidth = 0;
+ m_oldHeight = 0;
+ m_oldReset = m_reset;
- uint32_t mode = 1;
- int32_t scrollArea = 0;
- bool frontToBack = true;
- bool fadeInOut = false;
+ m_timeOffset = bx::getHPCounter();
+ }
- uint32_t oldWidth = 0;
- uint32_t oldHeight = 0;
- uint32_t oldReset = reset;
+ int shutdown() BX_OVERRIDE
+ {
+ // Cleanup.
+ imguiDestroy();
+
+ bgfx::destroyFrameBuffer(m_fbh);
+ bgfx::destroyIndexBuffer(m_ibh);
+ bgfx::destroyVertexBuffer(m_vbh);
+ bgfx::destroyProgram(m_blend);
+ bgfx::destroyProgram(m_wbSeparatePass);
+ bgfx::destroyProgram(m_wbSeparateBlit);
+ bgfx::destroyProgram(m_wbPass);
+ bgfx::destroyProgram(m_wbBlit);
+ bgfx::destroyUniform(s_texColor0);
+ bgfx::destroyUniform(s_texColor1);
+ bgfx::destroyUniform(u_color);
+
+ // Shutdown bgfx.
+ bgfx::shutdown();
+
+ return 0;
+ }
- entry::MouseState mouseState;
- while (!entry::processEvents(width, height, debug, reset, &mouseState) )
+ bool update() BX_OVERRIDE
{
- if (oldWidth != width
- || oldHeight != height
- || oldReset != reset
- || !bgfx::isValid(fbh) )
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
- // Recreate variable size render targets when resolution changes.
- oldWidth = width;
- oldHeight = height;
- oldReset = reset;
-
- if (bgfx::isValid(fbh) )
+ if (m_oldWidth != m_width
+ || m_oldHeight != m_height
+ || m_oldReset != m_reset
+ || !bgfx::isValid(m_fbh) )
{
- bgfx::destroyFrameBuffer(fbh);
- }
+ // Recreate variable size render targets when resolution changes.
+ m_oldWidth = m_width;
+ m_oldHeight = m_height;
+ m_oldReset = m_reset;
- fbtextures[0] = bgfx::createTexture2D(width, height, 1, bgfx::TextureFormat::RGBA16F, BGFX_TEXTURE_RT);
- fbtextures[1] = bgfx::createTexture2D(width, height, 1, bgfx::TextureFormat::R16F, BGFX_TEXTURE_RT);
- fbh = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true);
- }
+ if (bgfx::isValid(m_fbh) )
+ {
+ bgfx::destroyFrameBuffer(m_fbh);
+ }
- imguiBeginFrame(mouseState.m_mx
- , mouseState.m_my
- , (mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
- | (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
- | (mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
- , mouseState.m_mz
- , width
- , height
- );
+ m_fbtextures[0] = bgfx::createTexture2D(m_width, m_height, 1, bgfx::TextureFormat::RGBA16F, BGFX_TEXTURE_RT);
+ m_fbtextures[1] = bgfx::createTexture2D(m_width, m_height, 1, bgfx::TextureFormat::R16F, BGFX_TEXTURE_RT);
+ m_fbh = bgfx::createFrameBuffer(BX_COUNTOF(m_fbtextures), m_fbtextures, true);
+ }
- imguiBeginScrollArea("Settings", width - width / 4 - 10, 10, width / 4, height / 3, &scrollArea);
- imguiSeparatorLine();
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , m_width
+ , m_height
+ );
- imguiLabel("Blend mode:");
+ imguiBeginScrollArea("Settings", m_width - m_width / 4 - 10, 10, m_width / 4, m_height / 3, &m_scrollArea);
+ imguiSeparatorLine();
- mode = imguiChoose(mode
- , "None"
- , "Separate"
- , "MRT Independent"
- );
+ imguiLabel("Blend mode:");
- imguiSeparatorLine();
+ m_mode = imguiChoose(m_mode
+ , "None"
+ , "Separate"
+ , "MRT Independent"
+ );
- if (imguiCheck("Front to back", frontToBack) )
- {
- frontToBack ^= true;
- }
+ imguiSeparatorLine();
- if (imguiCheck("Fade in/out", fadeInOut) )
- {
- fadeInOut ^= true;
- }
+ if (imguiCheck("Front to back", m_frontToBack) )
+ {
+ m_frontToBack ^= true;
+ }
- imguiEndScrollArea();
- imguiEndFrame();
+ if (imguiCheck("Fade in/out", m_fadeInOut) )
+ {
+ m_fadeInOut ^= true;
+ }
- // Set view 0 default viewport.
- bgfx::setViewRect(0, 0, 0, width, height);
- bgfx::setViewRect(1, 0, 0, width, height);
+ imguiEndScrollArea();
+ imguiEndFrame();
- int64_t now = bx::getHPCounter();
- static int64_t last = now;
- const int64_t frameTime = now - last;
- last = now;
- const double freq = double(bx::getHPFrequency() );
- const double toMs = 1000.0/freq;
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, m_width, m_height);
+ bgfx::setViewRect(1, 0, 0, m_width, m_height);
- float time = (float)( (now-timeOffset)/freq);
+ int64_t now = bx::getHPCounter();
+ static int64_t last = now;
+ const int64_t frameTime = now - last;
+ last = now;
+ const double freq = double(bx::getHPFrequency() );
+ const double toMs = 1000.0/freq;
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- // Reference:
- // Weighted, Blended Order-Independent Transparency
- // http://jcgt.org/published/0002/02/09/
- // http://casual-effects.blogspot.com/2014/03/weighted-blended-order-independent.html
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/19-oit");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Weighted, Blended Order Independent Transparency.");
- bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
+ float time = (float)( (now-m_timeOffset)/freq);
- float at[3] = { 0.0f, 0.0f, 0.0f };
- float eye[3] = { 0.0f, 0.0f, -7.0f };
+ // Use debug font to print information about this example.
+ bgfx::dbgTextClear();
+ // Reference:
+ // Weighted, Blended Order-Independent Transparency
+ // http://jcgt.org/published/0002/02/09/
+ // http://casual-effects.blogspot.com/2014/03/weighted-blended-order-independent.html
+ bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/19-oit");
+ bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Weighted, Blended Order Independent Transparency.");
+ bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
- float view[16];
- float proj[16];
+ float at[3] = { 0.0f, 0.0f, 0.0f };
+ float eye[3] = { 0.0f, 0.0f, -7.0f };
- // Set view and projection matrix for view 0.
- bx::mtxLookAt(view, eye, at);
- mtxProj(proj, 60.0f, float(width)/float(height), 0.1f, 100.0f);
+ float view[16];
+ float proj[16];
- bgfx::setViewTransform(0, view, proj);
+ // Set view and projection matrix for view 0.
+ bx::mtxLookAt(view, eye, at);
+ mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f);
- // Set palette color for index 0
- bgfx::setPaletteColor(0, 0.0f, 0.0f, 0.0f, 0.0f);
+ bgfx::setViewTransform(0, view, proj);
- // Set palette color for index 1
- bgfx::setPaletteColor(1, 1.0f, 1.0f, 1.0f, 1.0f);
+ // Set palette color for index 0
+ bgfx::setPaletteColor(0, 0.0f, 0.0f, 0.0f, 0.0f);
- bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 1.0f // Depth
- , 0 // Stencil
- , 0 // FB texture 0, color palette 0
- , 1 == mode ? 1 : 0 // FB texture 1, color palette 1
- );
+ // Set palette color for index 1
+ bgfx::setPaletteColor(1, 1.0f, 1.0f, 1.0f, 1.0f);
- bgfx::setViewClear(1
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 1.0f // Depth
- , 0 // Stencil
- , 0 // Color palette 0
- );
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 1.0f // Depth
+ , 0 // Stencil
+ , 0 // FB texture 0, color palette 0
+ , 1 == m_mode ? 1 : 0 // FB texture 1, color palette 1
+ );
- bgfx::FrameBufferHandle invalid = BGFX_INVALID_HANDLE;
- bgfx::setViewFrameBuffer(0, 0 == mode ? invalid : fbh);
+ bgfx::setViewClear(1
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 1.0f // Depth
+ , 0 // Stencil
+ , 0 // Color palette 0
+ );
- // Set view and projection matrix for view 1.
- bx::mtxIdentity(view);
- bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f);
- bgfx::setViewTransform(1, view, proj);
+ bgfx::FrameBufferHandle invalid = BGFX_INVALID_HANDLE;
+ bgfx::setViewFrameBuffer(0, 0 == m_mode ? invalid : m_fbh);
- for (uint32_t depth = 0; depth < 3; ++depth)
- {
- uint32_t zz = frontToBack ? 2-depth : depth;
+ // Set view and projection matrix for view 1.
+ bx::mtxIdentity(view);
+ bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f);
+ bgfx::setViewTransform(1, view, proj);
- for (uint32_t yy = 0; yy < 3; ++yy)
+ for (uint32_t depth = 0; depth < 3; ++depth)
{
- for (uint32_t xx = 0; xx < 3; ++xx)
- {
- float color[4] = { xx*1.0f/3.0f, zz*1.0f/3.0f, yy*1.0f/3.0f, 0.5f };
-
- if (fadeInOut
- && zz == 1)
- {
- color[3] = sinf(time*3.0f)*0.49f+0.5f;
- }
+ uint32_t zz = m_frontToBack ? 2-depth : depth;
- bgfx::setUniform(u_color, color);
-
- BX_UNUSED(time);
- float mtx[16];
- bx::mtxRotateXY(mtx, time*0.023f + xx*0.21f, time*0.03f + yy*0.37f);
- //mtxIdentity(mtx);
- mtx[12] = -2.5f + float(xx)*2.5f;
- mtx[13] = -2.5f + float(yy)*2.5f;
- mtx[14] = -2.5f + float(zz)*2.5f;
-
- // Set transform for draw call.
- bgfx::setTransform(mtx);
-
- // Set vertex and index buffer.
- bgfx::setVertexBuffer(vbh);
- bgfx::setIndexBuffer(ibh);
-
- const uint64_t state = 0
- | BGFX_STATE_CULL_CW
- | BGFX_STATE_RGB_WRITE
- | BGFX_STATE_ALPHA_WRITE
- | BGFX_STATE_DEPTH_TEST_LESS
- | BGFX_STATE_MSAA
- ;
-
- bgfx::ProgramHandle program = BGFX_INVALID_HANDLE;
- switch (mode)
+ for (uint32_t yy = 0; yy < 3; ++yy)
+ {
+ for (uint32_t xx = 0; xx < 3; ++xx)
{
- case 0:
- // Set vertex and fragment shaders.
- program = blend;
-
- // Set render states.
- bgfx::setState(state
- | BGFX_STATE_BLEND_ALPHA
- );
- break;
-
- case 1:
- // Set vertex and fragment shaders.
- program = wbSeparatePass;
-
- // Set render states.
- bgfx::setState(state
- | BGFX_STATE_BLEND_FUNC_SEPARATE(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ZERO, BGFX_STATE_BLEND_INV_SRC_ALPHA)
- );
- break;
-
- default:
- // Set vertex and fragment shaders.
- program = wbPass;
-
- // Set render states.
- bgfx::setState(state
- | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE)
- | BGFX_STATE_BLEND_INDEPENDENT
- , 0
- | BGFX_STATE_BLEND_FUNC_RT_1(BGFX_STATE_BLEND_ZERO, BGFX_STATE_BLEND_SRC_COLOR)
- );
- break;
+ float color[4] = { xx*1.0f/3.0f, zz*1.0f/3.0f, yy*1.0f/3.0f, 0.5f };
+
+ if (m_fadeInOut
+ && zz == 1)
+ {
+ color[3] = sinf(time*3.0f)*0.49f+0.5f;
+ }
+
+ bgfx::setUniform(u_color, color);
+
+ BX_UNUSED(time);
+ float mtx[16];
+ bx::mtxRotateXY(mtx, time*0.023f + xx*0.21f, time*0.03f + yy*0.37f);
+ //mtxIdentity(mtx);
+ mtx[12] = -2.5f + float(xx)*2.5f;
+ mtx[13] = -2.5f + float(yy)*2.5f;
+ mtx[14] = -2.5f + float(zz)*2.5f;
+
+ // Set transform for draw call.
+ bgfx::setTransform(mtx);
+
+ // Set vertex and index buffer.
+ bgfx::setVertexBuffer(m_vbh);
+ bgfx::setIndexBuffer(m_ibh);
+
+ const uint64_t state = 0
+ | BGFX_STATE_CULL_CW
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_ALPHA_WRITE
+ | BGFX_STATE_DEPTH_TEST_LESS
+ | BGFX_STATE_MSAA
+ ;
+
+ bgfx::ProgramHandle program = BGFX_INVALID_HANDLE;
+ switch (m_mode)
+ {
+ case 0:
+ // Set vertex and fragment shaders.
+ program = m_blend;
+
+ // Set render states.
+ bgfx::setState(state
+ | BGFX_STATE_BLEND_ALPHA
+ );
+ break;
+
+ case 1:
+ // Set vertex and fragment shaders.
+ program = m_wbSeparatePass;
+
+ // Set render states.
+ bgfx::setState(state
+ | BGFX_STATE_BLEND_FUNC_SEPARATE(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ZERO, BGFX_STATE_BLEND_INV_SRC_ALPHA)
+ );
+ break;
+
+ default:
+ // Set vertex and fragment shaders.
+ program = m_wbPass;
+
+ // Set render states.
+ bgfx::setState(state
+ | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE)
+ | BGFX_STATE_BLEND_INDEPENDENT
+ , 0
+ | BGFX_STATE_BLEND_FUNC_RT_1(BGFX_STATE_BLEND_ZERO, BGFX_STATE_BLEND_SRC_COLOR)
+ );
+ break;
+ }
+
+ // Submit primitive for rendering to view 0.
+ bgfx::submit(0, program);
}
-
- // Submit primitive for rendering to view 0.
- bgfx::submit(0, program);
}
}
- }
- if (0 != mode)
- {
- bgfx::setTexture(0, s_texColor0, fbtextures[0]);
- bgfx::setTexture(1, s_texColor1, fbtextures[1]);
- bgfx::setState(0
- | BGFX_STATE_RGB_WRITE
- | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_INV_SRC_ALPHA, BGFX_STATE_BLEND_SRC_ALPHA)
- );
- screenSpaceQuad( (float)width, (float)height, s_flipV);
- bgfx::submit(1
- , 1 == mode ? wbSeparateBlit : wbBlit
- );
+ if (0 != m_mode)
+ {
+ bgfx::setTexture(0, s_texColor0, m_fbtextures[0]);
+ bgfx::setTexture(1, s_texColor1, m_fbtextures[1]);
+ bgfx::setState(0
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_INV_SRC_ALPHA, BGFX_STATE_BLEND_SRC_ALPHA)
+ );
+ screenSpaceQuad( (float)m_width, (float)m_height, s_flipV);
+ bgfx::submit(1
+ , 1 == m_mode ? m_wbSeparateBlit : m_wbBlit
+ );
+ }
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
}
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
+ return false;
}
- // Cleanup.
- imguiDestroy();
-
- bgfx::destroyFrameBuffer(fbh);
- bgfx::destroyIndexBuffer(ibh);
- bgfx::destroyVertexBuffer(vbh);
- bgfx::destroyProgram(blend);
- bgfx::destroyProgram(wbSeparatePass);
- bgfx::destroyProgram(wbSeparateBlit);
- bgfx::destroyProgram(wbPass);
- bgfx::destroyProgram(wbBlit);
- bgfx::destroyUniform(s_texColor0);
- bgfx::destroyUniform(s_texColor1);
- bgfx::destroyUniform(u_color);
-
- // Shutdown bgfx.
- bgfx::shutdown();
-
- return 0;
-}
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
+
+ uint32_t m_mode;
+ int32_t m_scrollArea;
+ bool m_frontToBack;
+ bool m_fadeInOut;
+
+ uint32_t m_oldWidth;
+ uint32_t m_oldHeight;
+ uint32_t m_oldReset;
+
+ entry::MouseState m_mouseState;
+
+ int64_t m_timeOffset;
+
+ bgfx::VertexBufferHandle m_vbh;
+ bgfx::IndexBufferHandle m_ibh;
+
+ bgfx::UniformHandle s_texColor0;
+ bgfx::UniformHandle s_texColor1;
+ bgfx::UniformHandle u_color;
+
+ bgfx::ProgramHandle m_blend;
+ bgfx::ProgramHandle m_wbSeparatePass;
+ bgfx::ProgramHandle m_wbSeparateBlit;
+ bgfx::ProgramHandle m_wbPass;
+ bgfx::ProgramHandle m_wbBlit;
+
+ bgfx::TextureHandle m_fbtextures[2];
+ bgfx::FrameBufferHandle m_fbh;
+};
+
+ENTRY_IMPLEMENT_MAIN(ExampleOIT);
diff --git a/3rdparty/bgfx/examples/20-nanovg/nanovg.cpp b/3rdparty/bgfx/examples/20-nanovg/nanovg.cpp
index f667ba180c2..206bca10237 100644
--- a/3rdparty/bgfx/examples/20-nanovg/nanovg.cpp
+++ b/3rdparty/bgfx/examples/20-nanovg/nanovg.cpp
@@ -1201,80 +1201,105 @@ void renderDemo(struct NVGcontext* vg, float mx, float my, float width, float he
nvgRestore(vg);
}
-int _main_(int _argc, char** _argv)
+class ExampleNanoVG : public entry::AppI
{
- Args args(_argc, _argv);
+ void init(int _argc, char** _argv) BX_OVERRIDE
+ {
+ Args args(_argc, _argv);
- uint32_t width = 1280;
- uint32_t height = 720;
- uint32_t debug = BGFX_DEBUG_TEXT;
- uint32_t reset = BGFX_RESET_VSYNC;
+ m_width = 1280;
+ m_height = 720;
+ m_debug = BGFX_DEBUG_TEXT;
+ m_reset = BGFX_RESET_VSYNC;
- bgfx::init(args.m_type, args.m_pciId);
- bgfx::reset(width, height, reset);
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
- // Enable debug text.
- bgfx::setDebug(debug);
+ // Enable debug text.
+ bgfx::setDebug(m_debug);
- // Set view 0 clear state.
- bgfx::setViewClear(0
- , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
- , 0x303030ff
- , 1.0f
- , 0
- );
+ // Set view 0 clear state.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
+
+ imguiCreate();
+
+ m_nvg = nvgCreate(1, 0);
+ bgfx::setViewSeq(0, true);
+
+ loadDemoData(m_nvg, &m_data);
+
+ bndSetFont(nvgCreateFont(m_nvg, "droidsans", "font/droidsans.ttf") );
+ bndSetIconImage(nvgCreateImage(m_nvg, "images/blender_icons16.png", 0) );
+
+ m_timeOffset = bx::getHPCounter();
+ }
- imguiCreate();
+ int shutdown() BX_OVERRIDE
+ {
+ freeDemoData(m_nvg, &m_data);
- NVGcontext* nvg = nvgCreate(1, 0);
- bgfx::setViewSeq(0, true);
+ nvgDelete(m_nvg);
- DemoData data;
- loadDemoData(nvg, &data);
+ imguiDestroy();
- bndSetFont(nvgCreateFont(nvg, "droidsans", "font/droidsans.ttf") );
- bndSetIconImage(nvgCreateImage(nvg, "images/blender_icons16.png", 0) );
+ // Shutdown bgfx.
+ bgfx::shutdown();
- int64_t timeOffset = bx::getHPCounter();
+ return 0;
+ }
- entry::MouseState mouseState;
- while (!entry::processEvents(width, height, debug, reset, &mouseState) )
+ bool update() BX_OVERRIDE
{
- int64_t now = bx::getHPCounter();
- const double freq = double(bx::getHPFrequency() );
- float time = (float)( (now-timeOffset)/freq);
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
+ {
+ int64_t now = bx::getHPCounter();
+ const double freq = double(bx::getHPFrequency() );
+ float time = (float)( (now-m_timeOffset)/freq);
- // Set view 0 default viewport.
- bgfx::setViewRect(0, 0, 0, width, height);
+ // Set view 0 default viewport.
+ bgfx::setViewRect(0, 0, 0, m_width, m_height);
- // This dummy draw call is here to make sure that view 0 is cleared
- // if no other draw calls are submitted to view 0.
- bgfx::touch(0);
+ // This dummy draw call is here to make sure that view 0 is cleared
+ // if no other draw calls are submitted to view 0.
+ bgfx::touch(0);
- // Use debug font to print information about this example.
- bgfx::dbgTextClear();
- bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/20-nanovg");
- bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: NanoVG is small antialiased vector graphics rendering library.");
+ // Use debug font to print information about this example.
+ bgfx::dbgTextClear();
+ bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/20-nanovg");
+ bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: NanoVG is small antialiased vector graphics rendering library.");
- nvgBeginFrame(nvg, width, height, 1.0f);
+ nvgBeginFrame(m_nvg, m_width, m_height, 1.0f);
- renderDemo(nvg, float(mouseState.m_mx), float(mouseState.m_my), float(width), float(height), time, 0, &data);
+ renderDemo(m_nvg, float(m_mouseState.m_mx), float(m_mouseState.m_my), float(m_width), float(m_height), time, 0, &m_data);
- nvgEndFrame(nvg);
+ nvgEndFrame(m_nvg);
- // Advance to next frame. Rendering thread will be kicked to
- // process submitted rendering primitives.
- bgfx::frame();
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
+ }
+
+ return false;
}
- freeDemoData(nvg, &data);
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
- nvgDelete(nvg);
+ entry::MouseState m_mouseState;
- imguiDestroy();
+ int64_t m_timeOffset;
- // Shutdown bgfx.
- bgfx::shutdown();
+ NVGcontext* m_nvg;
+ DemoData m_data;
+};
- return 0;
-}
+ENTRY_IMPLEMENT_MAIN(ExampleNanoVG);
diff --git a/3rdparty/bgfx/examples/21-deferred/deferred.cpp b/3rdparty/bgfx/examples/21-deferred/deferred.cpp
index 5a97b7f21b2..2f8fb5d3816 100644
--- a/3rdparty/bgfx/examples/21-deferred/deferred.cpp
+++ b/3rdparty/bgfx/examples/21-deferred/deferred.cpp
@@ -213,7 +213,7 @@ void screenSpaceQuad(float _textureWidth, float _textureHeight, float _texelHalf
}
}
-class Deferred : public entry::AppI
+class ExampleDeferred : public entry::AppI
{
void init(int _argc, char** _argv) BX_OVERRIDE
{
@@ -792,4 +792,4 @@ class Deferred : public entry::AppI
int64_t m_timeOffset;
};
-ENTRY_IMPLEMENT_MAIN(Deferred);
+ENTRY_IMPLEMENT_MAIN(ExampleDeferred);
diff --git a/3rdparty/bgfx/examples/21-deferred/makefile b/3rdparty/bgfx/examples/21-deferred/makefile
index 011773e023f..4f81fb5bfb9 100644
--- a/3rdparty/bgfx/examples/21-deferred/makefile
+++ b/3rdparty/bgfx/examples/21-deferred/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
diff --git a/3rdparty/bgfx/examples/23-vectordisplay/makefile b/3rdparty/bgfx/examples/23-vectordisplay/makefile
index 011773e023f..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/23-vectordisplay/makefile
+++ b/3rdparty/bgfx/examples/23-vectordisplay/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.cpp b/3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.cpp
index a49eace14aa..74bcbc9eb12 100644
--- a/3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.cpp
+++ b/3rdparty/bgfx/examples/23-vectordisplay/vectordisplay.cpp
@@ -186,7 +186,7 @@ void VectorDisplay::endFrame()
bgfx::setTexture(0, s_texColor, m_lineTexId);
- bgfx::setVertexBuffer(m_vertexBuffers[i], m_vertexBuffersSize[i]); // explicitly feed vertex number!
+ bgfx::setVertexBuffer(m_vertexBuffers[i], 0, m_vertexBuffersSize[i]); // explicitly feed vertex number!
bgfx::setState(0
| BGFX_STATE_RGB_WRITE
diff --git a/3rdparty/bgfx/examples/24-nbody/makefile b/3rdparty/bgfx/examples/24-nbody/makefile
index 011773e023f..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/24-nbody/makefile
+++ b/3rdparty/bgfx/examples/24-nbody/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/25-c99/helloworld.c b/3rdparty/bgfx/examples/25-c99/helloworld.c
index a362736b435..3dd01e8c633 100644
--- a/3rdparty/bgfx/examples/25-c99/helloworld.c
+++ b/3rdparty/bgfx/examples/25-c99/helloworld.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+ * Copyright 2011-2016 Branimir Karadzic. All rights reserved.
* License: http://www.opensource.org/licenses/BSD-2-Clause
*/
diff --git a/3rdparty/bgfx/examples/26-occlusion/occlusion.cpp b/3rdparty/bgfx/examples/26-occlusion/occlusion.cpp
index a6971cdd5cd..81e00f0c5fe 100644
--- a/3rdparty/bgfx/examples/26-occlusion/occlusion.cpp
+++ b/3rdparty/bgfx/examples/26-occlusion/occlusion.cpp
@@ -58,7 +58,7 @@ static const uint16_t s_cubeIndices[36] =
6, 3, 7,
};
-class Occlusion : public entry::AppI
+class ExampleOcclusion : public entry::AppI
{
void init(int _argc, char** _argv) BX_OVERRIDE
{
@@ -282,4 +282,4 @@ class Occlusion : public entry::AppI
entry::WindowState m_state;
};
-ENTRY_IMPLEMENT_MAIN(Occlusion);
+ENTRY_IMPLEMENT_MAIN(ExampleOcclusion);
diff --git a/3rdparty/bgfx/examples/27-terrain/makefile b/3rdparty/bgfx/examples/27-terrain/makefile
index 011773e023f..e6278cb66dc 100644
--- a/3rdparty/bgfx/examples/27-terrain/makefile
+++ b/3rdparty/bgfx/examples/27-terrain/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -15,3 +15,4 @@ rebuild:
@make -s --no-print-directory TARGET=2 clean all
@make -s --no-print-directory TARGET=3 clean all
@make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/27-terrain/terrain.cpp b/3rdparty/bgfx/examples/27-terrain/terrain.cpp
index 71ab88aa128..74d88ac350d 100644
--- a/3rdparty/bgfx/examples/27-terrain/terrain.cpp
+++ b/3rdparty/bgfx/examples/27-terrain/terrain.cpp
@@ -58,7 +58,7 @@ struct BrushData
float m_power;
};
-class Terrain : public entry::AppI
+class ExampleTerrain : public entry::AppI
{
void init(int _argc, char** _argv) BX_OVERRIDE
{
@@ -169,9 +169,14 @@ class Terrain : public entry::AppI
bgfx::destroyProgram(m_terrainProgram);
bgfx::destroyProgram(m_terrainHeightTextureProgram);
- BX_FREE(entry::getAllocator(), m_terrain.m_vertices);
- BX_FREE(entry::getAllocator(), m_terrain.m_indices);
- BX_FREE(entry::getAllocator(), m_terrain.m_heightMap);
+ /// When data is passed to bgfx via makeRef we need to make
+ /// sure library is done with it before freeing memory blocks.
+ bgfx::frame();
+
+ bx::AllocatorI* allocator = entry::getAllocator();
+ BX_FREE(allocator, m_terrain.m_vertices);
+ BX_FREE(allocator, m_terrain.m_indices);
+ BX_FREE(allocator, m_terrain.m_heightMap);
// Shutdown bgfx.
bgfx::shutdown();
@@ -526,4 +531,4 @@ class Terrain : public entry::AppI
int64_t m_timeOffset;
};
-ENTRY_IMPLEMENT_MAIN(Terrain);
+ENTRY_IMPLEMENT_MAIN(ExampleTerrain);
diff --git a/3rdparty/bgfx/examples/28-wireframe/fs_wf_mesh.sc b/3rdparty/bgfx/examples/28-wireframe/fs_wf_mesh.sc
new file mode 100644
index 00000000000..4a68b1472e1
--- /dev/null
+++ b/3rdparty/bgfx/examples/28-wireframe/fs_wf_mesh.sc
@@ -0,0 +1,78 @@
+$input v_view, v_bc, v_normal
+
+/*
+ * Copyright 2016 Dario Manesku. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "../common/common.sh"
+#include "uniforms.sh"
+
+vec3 evalSh(vec3 _dir)
+{
+# define k01 0.2820947918 // sqrt( 1/PI)/2
+# define k02 0.4886025119 // sqrt( 3/PI)/2
+# define k03 1.0925484306 // sqrt(15/PI)/2
+# define k04 0.3153915652 // sqrt( 5/PI)/4
+# define k05 0.5462742153 // sqrt(15/PI)/4
+
+ vec3 shEnv[9];
+ shEnv[0] = vec3( 0.967757057878229854, 0.976516067990363390, 0.891218272348969998); /* Band 0 */
+ shEnv[1] = vec3(-0.384163503608655643, -0.423492289131209787, -0.425532726148547868); /* Band 1 */
+ shEnv[2] = vec3( 0.055906294587354334, 0.056627436881069373, 0.069969936396987467);
+ shEnv[3] = vec3( 0.120985157386215209, 0.119297994074027414, 0.117111965829213599);
+ shEnv[4] = vec3(-0.176711633774331106, -0.170331404095516392, -0.151345020570876621); /* Band 2 */
+ shEnv[5] = vec3(-0.124682114349692147, -0.119340785411183953, -0.096300354204368860);
+ shEnv[6] = vec3( 0.001852378550138503, -0.032592784164597745, -0.088204495001329680);
+ shEnv[7] = vec3( 0.296365482782109446, 0.281268696656263029, 0.243328223888495510);
+ shEnv[8] = vec3(-0.079826665303240341, -0.109340956251195970, -0.157208859664677764);
+
+ vec3 nn = _dir.zxy;
+
+ float sh[9];
+ sh[0] = k01;
+ sh[1] = -k02*nn.y;
+ sh[2] = k02*nn.z;
+ sh[3] = -k02*nn.x;
+ sh[4] = k03*nn.y*nn.x;
+ sh[5] = -k03*nn.y*nn.z;
+ sh[6] = k04*(3.0*nn.z*nn.z-1.0);
+ sh[7] = -k03*nn.x*nn.z;
+ sh[8] = k05*(nn.x*nn.x-nn.y*nn.y);
+
+ vec3 rgb = vec3_splat(0.0);
+ rgb += shEnv[0] * sh[0] * 1.0;
+ rgb += shEnv[1] * sh[1] * 2.0/2.5;
+ rgb += shEnv[2] * sh[2] * 2.0/2.5;
+ rgb += shEnv[3] * sh[3] * 2.0/2.5;
+ rgb += shEnv[4] * sh[4] * 1.0/2.5;
+ rgb += shEnv[5] * sh[5] * 0.5;
+ rgb += shEnv[6] * sh[6] * 0.5;
+ rgb += shEnv[7] * sh[7] * 0.5;
+ rgb += shEnv[8] * sh[8] * 0.5;
+
+ return rgb;
+}
+
+void main()
+{
+ vec3 nn = normalize(v_normal);
+ vec3 col = evalSh(nn);
+
+ if (0.0 != u_drawEdges)
+ {
+ vec3 wfColor = u_wfColor;
+ float wfOpacity = u_wfOpacity;
+ float thickness = u_wfThickness;
+
+ vec3 fw = abs(dFdx(v_bc)) + abs(dFdy(v_bc));
+ vec3 val = smoothstep(vec3_splat(0.0), fw*thickness, v_bc);
+ float edge = min(min(val.x, val.y), val.z); // Gets to 0.0 when close to edges.
+
+ vec3 edgeCol = mix(col, wfColor, wfOpacity);
+ col = mix(edgeCol, col, edge);
+ }
+
+ gl_FragColor.xyz = col;
+ gl_FragColor.w = 1.0;
+}
diff --git a/3rdparty/bgfx/examples/28-wireframe/fs_wf_wireframe.sc b/3rdparty/bgfx/examples/28-wireframe/fs_wf_wireframe.sc
new file mode 100644
index 00000000000..e2ff1420011
--- /dev/null
+++ b/3rdparty/bgfx/examples/28-wireframe/fs_wf_wireframe.sc
@@ -0,0 +1,26 @@
+$input v_view, v_bc
+
+/*
+ * Copyright 2016 Dario Manesku. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "../common/common.sh"
+#include "uniforms.sh"
+
+void main()
+{
+ vec3 color = u_wfColor;
+ float opacity = u_wfOpacity;
+ float thickness = u_wfThickness;
+
+ if (gl_FrontFacing) { opacity *= 0.5; }
+
+ vec3 fw = abs(dFdx(v_bc)) + abs(dFdy(v_bc));
+ vec3 val = smoothstep(vec3_splat(0.0), fw*thickness, v_bc);
+ float edge = min(min(val.x, val.y), val.z); // Gets to 0.0 around the edges.
+
+ vec4 rgba = vec4(color, (1.0-edge)*opacity);
+ gl_FragColor = rgba;
+}
+
diff --git a/3rdparty/bgfx/examples/28-wireframe/makefile b/3rdparty/bgfx/examples/28-wireframe/makefile
new file mode 100644
index 00000000000..e6278cb66dc
--- /dev/null
+++ b/3rdparty/bgfx/examples/28-wireframe/makefile
@@ -0,0 +1,18 @@
+#
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
+# License: http://www.opensource.org/licenses/BSD-2-Clause
+#
+
+BGFX_DIR=../..
+RUNTIME_DIR=$(BGFX_DIR)/examples/runtime
+BUILD_DIR=../../.build
+
+include $(BGFX_DIR)/scripts/shader.mk
+
+rebuild:
+ @make -s --no-print-directory TARGET=0 clean all
+ @make -s --no-print-directory TARGET=1 clean all
+ @make -s --no-print-directory TARGET=2 clean all
+ @make -s --no-print-directory TARGET=3 clean all
+ @make -s --no-print-directory TARGET=4 clean all
+ @make -s --no-print-directory TARGET=5 clean all
diff --git a/3rdparty/bgfx/examples/28-wireframe/screenshot.png b/3rdparty/bgfx/examples/28-wireframe/screenshot.png
new file mode 100644
index 00000000000..65957306a9d
--- /dev/null
+++ b/3rdparty/bgfx/examples/28-wireframe/screenshot.png
Binary files differ
diff --git a/3rdparty/bgfx/examples/28-wireframe/uniforms.sh b/3rdparty/bgfx/examples/28-wireframe/uniforms.sh
new file mode 100644
index 00000000000..330555ee50d
--- /dev/null
+++ b/3rdparty/bgfx/examples/28-wireframe/uniforms.sh
@@ -0,0 +1,12 @@
+/*
+ * Copyright 2016 Dario Manesku. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+uniform vec4 u_params[3];
+#define u_camPos u_params[0].xyz
+#define u_unused0 u_params[0].w
+#define u_wfColor u_params[1].xyz
+#define u_wfOpacity u_params[1].w
+#define u_drawEdges u_params[2].x
+#define u_wfThickness u_params[2].y
diff --git a/3rdparty/bgfx/examples/28-wireframe/varying.def.sc b/3rdparty/bgfx/examples/28-wireframe/varying.def.sc
new file mode 100644
index 00000000000..c0c52962ad3
--- /dev/null
+++ b/3rdparty/bgfx/examples/28-wireframe/varying.def.sc
@@ -0,0 +1,7 @@
+vec3 v_view : TEXCOORD0 = vec3(0.0, 0.0, 0.0);
+vec3 v_bc : TEXCOORD1 = vec3(0.0, 0.0, 0.0);
+vec3 v_normal : NORMAL = vec3(0.0, 0.0, 1.0);
+
+vec3 a_position : POSITION;
+vec3 a_color1 : COLOR1;
+vec3 a_normal : NORMAL;
diff --git a/3rdparty/bgfx/examples/28-wireframe/vs_wf_mesh.sc b/3rdparty/bgfx/examples/28-wireframe/vs_wf_mesh.sc
new file mode 100644
index 00000000000..3f51abc59ad
--- /dev/null
+++ b/3rdparty/bgfx/examples/28-wireframe/vs_wf_mesh.sc
@@ -0,0 +1,21 @@
+$input a_position, a_color1, a_normal
+$output v_view, v_bc, v_normal
+
+/*
+ * Copyright 2016 Dario Manesku. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "../common/common.sh"
+#include "uniforms.sh"
+
+void main()
+{
+ gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) );
+
+ v_view = u_camPos - mul(u_model[0], vec4(a_position, 1.0) ).xyz;
+ v_bc = a_color1;
+
+ vec3 normal = a_normal.xyz*2.0 - 1.0;
+ v_normal = mul(u_model[0], vec4(normal, 0.0) ).xyz;
+}
diff --git a/3rdparty/bgfx/examples/28-wireframe/vs_wf_wireframe.sc b/3rdparty/bgfx/examples/28-wireframe/vs_wf_wireframe.sc
new file mode 100644
index 00000000000..1956b0d64ef
--- /dev/null
+++ b/3rdparty/bgfx/examples/28-wireframe/vs_wf_wireframe.sc
@@ -0,0 +1,19 @@
+$input a_position, a_color1
+$output v_view, v_bc
+
+/*
+ * Copyright 2016 Dario Manesku. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "../common/common.sh"
+#include "uniforms.sh"
+
+void main()
+{
+ gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) );
+
+ v_view = u_camPos - mul(u_model[0], vec4(a_position, 1.0) ).xyz;
+ v_bc = a_color1;
+}
+
diff --git a/3rdparty/bgfx/examples/28-wireframe/wireframe.cpp b/3rdparty/bgfx/examples/28-wireframe/wireframe.cpp
new file mode 100644
index 00000000000..df464f51ff9
--- /dev/null
+++ b/3rdparty/bgfx/examples/28-wireframe/wireframe.cpp
@@ -0,0 +1,566 @@
+/*
+ * Copyright 2016 Dario Manesku. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include "common.h"
+#include "bgfx_utils.h"
+#include "imgui/imgui.h"
+
+struct DrawMode
+{
+ enum
+ {
+ WireframeShaded,
+ Wireframe,
+ Shaded,
+ };
+};
+
+struct Camera
+{
+ Camera()
+ {
+ reset();
+ }
+
+ void reset()
+ {
+ m_target.curr[0] = 0.0f;
+ m_target.curr[1] = 0.0f;
+ m_target.curr[2] = 0.0f;
+ m_target.dest[0] = 0.0f;
+ m_target.dest[1] = 0.0f;
+ m_target.dest[2] = 0.0f;
+
+ m_pos.curr[0] = 0.0f;
+ m_pos.curr[1] = 0.0f;
+ m_pos.curr[2] = -2.0f;
+ m_pos.dest[0] = 0.0f;
+ m_pos.dest[1] = 0.0f;
+ m_pos.dest[2] = -2.0f;
+
+ m_orbit[0] = 0.0f;
+ m_orbit[1] = 0.0f;
+ }
+
+ void mtxLookAt(float* _outViewMtx)
+ {
+ bx::mtxLookAt(_outViewMtx, m_pos.curr, m_target.curr);
+ }
+
+ void orbit(float _dx, float _dy)
+ {
+ m_orbit[0] += _dx;
+ m_orbit[1] += _dy;
+ }
+
+ void dolly(float _dz)
+ {
+ const float cnear = 0.01f;
+ const float cfar = 10.0f;
+
+ const float toTarget[3] =
+ {
+ m_target.dest[0] - m_pos.dest[0],
+ m_target.dest[1] - m_pos.dest[1],
+ m_target.dest[2] - m_pos.dest[2],
+ };
+ const float toTargetLen = bx::vec3Length(toTarget);
+ const float invToTargetLen = 1.0f/(toTargetLen+FLT_MIN);
+ const float toTargetNorm[3] =
+ {
+ toTarget[0]*invToTargetLen,
+ toTarget[1]*invToTargetLen,
+ toTarget[2]*invToTargetLen,
+ };
+
+ float delta = toTargetLen*_dz;
+ float newLen = toTargetLen + delta;
+ if ( (cnear < newLen || _dz < 0.0f)
+ && (newLen < cfar || _dz > 0.0f) )
+ {
+ m_pos.dest[0] += toTargetNorm[0]*delta;
+ m_pos.dest[1] += toTargetNorm[1]*delta;
+ m_pos.dest[2] += toTargetNorm[2]*delta;
+ }
+ }
+
+ void consumeOrbit(float _amount)
+ {
+ float consume[2];
+ consume[0] = m_orbit[0]*_amount;
+ consume[1] = m_orbit[1]*_amount;
+ m_orbit[0] -= consume[0];
+ m_orbit[1] -= consume[1];
+
+ const float toPos[3] =
+ {
+ m_pos.curr[0] - m_target.curr[0],
+ m_pos.curr[1] - m_target.curr[1],
+ m_pos.curr[2] - m_target.curr[2],
+ };
+ const float toPosLen = bx::vec3Length(toPos);
+ const float invToPosLen = 1.0f/(toPosLen+FLT_MIN);
+ const float toPosNorm[3] =
+ {
+ toPos[0]*invToPosLen,
+ toPos[1]*invToPosLen,
+ toPos[2]*invToPosLen,
+ };
+
+ float ll[2];
+ latLongFromVec(ll[0], ll[1], toPosNorm);
+ ll[0] += consume[0];
+ ll[1] -= consume[1];
+ ll[1] = bx::fclamp(ll[1], 0.02f, 0.98f);
+
+ float tmp[3];
+ vecFromLatLong(tmp, ll[0], ll[1]);
+
+ float diff[3];
+ diff[0] = (tmp[0]-toPosNorm[0])*toPosLen;
+ diff[1] = (tmp[1]-toPosNorm[1])*toPosLen;
+ diff[2] = (tmp[2]-toPosNorm[2])*toPosLen;
+
+ m_pos.curr[0] += diff[0];
+ m_pos.curr[1] += diff[1];
+ m_pos.curr[2] += diff[2];
+ m_pos.dest[0] += diff[0];
+ m_pos.dest[1] += diff[1];
+ m_pos.dest[2] += diff[2];
+ }
+
+ void update(float _dt)
+ {
+ const float amount = bx::fmin(_dt/0.12f, 1.0f);
+
+ consumeOrbit(amount);
+
+ m_target.curr[0] = bx::flerp(m_target.curr[0], m_target.dest[0], amount);
+ m_target.curr[1] = bx::flerp(m_target.curr[1], m_target.dest[1], amount);
+ m_target.curr[2] = bx::flerp(m_target.curr[2], m_target.dest[2], amount);
+ m_pos.curr[0] = bx::flerp(m_pos.curr[0], m_pos.dest[0], amount);
+ m_pos.curr[1] = bx::flerp(m_pos.curr[1], m_pos.dest[1], amount);
+ m_pos.curr[2] = bx::flerp(m_pos.curr[2], m_pos.dest[2], amount);
+ }
+
+ static inline void vecFromLatLong(float _vec[3], float _u, float _v)
+ {
+ const float phi = _u * 2.0f*bx::pi;
+ const float theta = _v * bx::pi;
+
+ const float st = bx::fsin(theta);
+ const float sp = bx::fsin(phi);
+ const float ct = bx::fcos(theta);
+ const float cp = bx::fcos(phi);
+
+ _vec[0] = -st*sp;
+ _vec[1] = ct;
+ _vec[2] = -st*cp;
+ }
+
+ static inline void latLongFromVec(float& _u, float& _v, const float _vec[3])
+ {
+ const float phi = atan2f(_vec[0], _vec[2]);
+ const float theta = acosf(_vec[1]);
+
+ _u = (bx::pi + phi)*bx::invPi*0.5f;
+ _v = theta*bx::invPi;
+ }
+
+ struct Interp3f
+ {
+ float curr[3];
+ float dest[3];
+ };
+
+ Interp3f m_target;
+ Interp3f m_pos;
+ float m_orbit[2];
+};
+
+struct Mouse
+{
+ Mouse()
+ {
+ m_dx = 0.0f;
+ m_dy = 0.0f;
+ m_prevMx = 0.0f;
+ m_prevMx = 0.0f;
+ m_scroll = 0;
+ m_scrollPrev = 0;
+ }
+
+ void update(float _mx, float _my, int32_t _mz, uint32_t _width, uint32_t _height)
+ {
+ const float widthf = float(int32_t(_width));
+ const float heightf = float(int32_t(_height));
+
+ // Delta movement.
+ m_dx = float(_mx - m_prevMx)/widthf;
+ m_dy = float(_my - m_prevMy)/heightf;
+
+ m_prevMx = _mx;
+ m_prevMy = _my;
+
+ // Scroll.
+ m_scroll = _mz - m_scrollPrev;
+ m_scrollPrev = _mz;
+ }
+
+ float m_dx; // Screen space.
+ float m_dy;
+ float m_prevMx;
+ float m_prevMy;
+ int32_t m_scroll;
+ int32_t m_scrollPrev;
+};
+
+struct MeshMtx
+{
+ MeshMtx()
+ {
+ m_mesh = NULL;
+ }
+
+ void init(const char* _path
+ , float _scale = 1.0f
+ , float _rotX = 0.0f
+ , float _rotY = 0.0f
+ , float _rotZ = 0.0f
+ , float _transX = 0.0f
+ , float _transY = 0.0f
+ , float _transZ = 0.0f
+ )
+ {
+ m_mesh = meshLoad(_path);
+ bx::mtxSRT(m_mtx
+ , _scale
+ , _scale
+ , _scale
+ , _rotX
+ , _rotY
+ , _rotZ
+ , _transX
+ , _transY
+ , _transZ
+ );
+ }
+
+ void destroy()
+ {
+ if (NULL != m_mesh)
+ {
+ meshUnload(m_mesh);
+ }
+ }
+
+ Mesh* m_mesh;
+ float m_mtx[16];
+};
+
+struct Uniforms
+{
+ enum { NumVec4 = 3 };
+
+ void init()
+ {
+ m_camPos[0] = 0.0f;
+ m_camPos[1] = 1.0f;
+ m_camPos[2] = -2.5f;
+ m_wfColor[0] = 1.0f;
+ m_wfColor[1] = 0.0f;
+ m_wfColor[2] = 0.0f;
+ m_wfOpacity = 0.7f;
+ m_drawEdges = 0.0f;
+ m_wfThickness = 1.5f;
+
+ u_params = bgfx::createUniform("u_params", bgfx::UniformType::Vec4, NumVec4);
+ }
+
+ void submit()
+ {
+ bgfx::setUniform(u_params, m_params, NumVec4);
+ }
+
+ void destroy()
+ {
+ bgfx::destroyUniform(u_params);
+ }
+
+ union
+ {
+ struct
+ {
+ /*0*/struct { float m_camPos[3], m_unused0; };
+ /*1*/struct { float m_wfColor[3], m_wfOpacity; };
+ /*2*/struct { float m_drawEdges, m_wfThickness, m_unused2[2]; };
+ };
+
+ float m_params[NumVec4*4];
+ };
+
+ bgfx::UniformHandle u_params;
+};
+
+class ExampleWireframe : public entry::AppI
+{
+ void init(int _argc, char** _argv) BX_OVERRIDE
+ {
+ Args args(_argc, _argv);
+
+ m_width = 1280;
+ m_height = 720;
+ m_debug = BGFX_DEBUG_TEXT;
+ m_reset = 0
+ | BGFX_RESET_VSYNC
+ | BGFX_RESET_MSAA_X16
+ ;
+
+ bgfx::init(args.m_type, args.m_pciId);
+ bgfx::reset(m_width, m_height, m_reset);
+
+ // Enable m_debug text.
+ bgfx::setDebug(m_debug);
+
+ // Set view 0 clear state.
+ bgfx::setViewClear(0
+ , BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
+ , 0x303030ff
+ , 1.0f
+ , 0
+ );
+
+ m_wfProgram = loadProgram("vs_wf_wireframe", "fs_wf_wireframe");
+ m_meshProgram = loadProgram("vs_wf_mesh", "fs_wf_mesh");
+
+ m_uniforms.init();
+
+ m_meshes[0].init("meshes/bunny.bin", 1.0f, 0.0f, bx::pi, 0.0f, 0.0f, -0.8f, 0.0f);
+ m_meshes[1].init("meshes/hollowcube.bin", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+ m_meshes[2].init("meshes/orb.bin", 1.2f, 0.0f, 0.0f, 0.0f, 0.0f, -0.65f, 0.0f);
+
+ // Imgui.
+ imguiCreate();
+
+ m_oldWidth = 0;
+ m_oldHeight = 0;
+ m_oldReset = m_reset;
+
+ m_meshSelection = 1;
+ m_drawMode = DrawMode::WireframeShaded;
+ m_scrollArea = 0;
+ m_showWfColor = true;
+ }
+
+ virtual int shutdown() BX_OVERRIDE
+ {
+ // Cleanup.
+ imguiDestroy();
+
+ m_meshes[0].destroy();
+ m_meshes[1].destroy();
+ m_meshes[2].destroy();
+
+ bgfx::destroyProgram(m_wfProgram);
+ bgfx::destroyProgram(m_meshProgram);
+
+ m_uniforms.destroy();
+
+ // Shutdown bgfx.
+ bgfx::shutdown();
+
+ return 0;
+ }
+
+ bool update() BX_OVERRIDE
+ {
+ if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
+ {
+ if (m_oldWidth != m_width
+ || m_oldHeight != m_height
+ || m_oldReset != m_reset)
+ {
+ // Recreate variable size render targets when resolution changes.
+ m_oldWidth = m_width;
+ m_oldHeight = m_height;
+ m_oldReset = m_reset;
+ }
+
+ imguiBeginFrame(m_mouseState.m_mx
+ , m_mouseState.m_my
+ , (m_mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0)
+ | (m_mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0)
+ , m_mouseState.m_mz
+ , m_width
+ , m_height
+ );
+
+ imguiBeginScrollArea("Settings"
+ , m_width - m_width / 5 - 10
+ , 10
+ , m_width / 5
+ , 492
+ , &m_scrollArea
+ );
+
+ imguiSeparatorLine(1); imguiIndent(8); imguiLabel("Draw mode:"); imguiUnindent(8); imguiSeparatorLine(1);
+ imguiSeparator(4);
+ {
+ imguiIndent();
+ m_drawMode = imguiChoose(m_drawMode
+ , "Wireframe + Shaded"
+ , "Wireframe"
+ , "Shaded"
+ );
+ imguiUnindent();
+ }
+ imguiSeparator(8);
+
+ const bool wfEnabled = (DrawMode::Shaded != m_drawMode);
+ imguiSeparatorLine(1); imguiIndent(8); imguiLabel("Wireframe:", wfEnabled); imguiUnindent(8); imguiSeparatorLine(1);
+ imguiSeparator(4);
+ {
+ imguiColorWheel("Color", m_uniforms.m_wfColor, m_showWfColor, 0.6f, wfEnabled);
+ imguiIndent();
+ imguiSlider("Opacity", m_uniforms.m_wfOpacity, 0.1f, 1.0f, 0.1f, wfEnabled);
+ imguiSlider("Thickness", m_uniforms.m_wfThickness, 0.6f, 2.2f, 0.1f, wfEnabled);
+ imguiUnindent();
+ }
+ imguiSeparator(8);
+
+ imguiSeparatorLine(1); imguiIndent(8); imguiLabel("Mesh:"); imguiUnindent(8); imguiSeparatorLine(1);
+ imguiSeparator(4);
+ {
+ imguiIndent();
+ const uint32_t prevMeshSel = m_meshSelection;
+ m_meshSelection = imguiChoose(m_meshSelection
+ , "Bunny"
+ , "Hollowcubes"
+ , "Orb"
+ );
+ if (prevMeshSel != m_meshSelection)
+ {
+ m_camera.reset();
+ }
+ imguiUnindent();
+ }
+ imguiSeparator(8);
+
+ imguiEndScrollArea();
+ imguiEndFrame();
+
+ // This dummy draw call is here to make sure that view 0 is cleared
+ // if no other draw calls are submitted to view 0.
+ bgfx::touch(0);
+
+ int64_t now = bx::getHPCounter();
+ static int64_t last = now;
+ const int64_t frameTime = now - last;
+ last = now;
+ const double freq = double(bx::getHPFrequency() );
+ const double toMs = 1000.0/freq;
+ const float deltaTimeSec = float(double(frameTime)/freq);
+
+ // Use m_debug font to print information about this example.
+ bgfx::dbgTextClear();
+ bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/28-wirefame");
+ bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Drawing wireframe mesh.");
+ bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
+
+ // Setup view.
+ bgfx::setViewRect(0, 0, 0, bgfx::BackbufferRatio::Equal);
+ bgfx::setViewClear(0, BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH, 0x303030ff, 1.0f, 0);
+
+ const bool mouseOverGui = imguiMouseOverArea();
+ m_mouse.update(float(m_mouseState.m_mx), float(m_mouseState.m_my), m_mouseState.m_mz, m_width, m_height);
+ if (!mouseOverGui)
+ {
+ if (m_mouseState.m_buttons[entry::MouseButton::Left])
+ {
+ m_camera.orbit(m_mouse.m_dx, m_mouse.m_dy);
+ }
+ else if (m_mouseState.m_buttons[entry::MouseButton::Right])
+ {
+ m_camera.dolly(m_mouse.m_dx + m_mouse.m_dy);
+ }
+ else if (0 != m_mouse.m_scroll)
+ {
+ m_camera.dolly(float(m_mouse.m_scroll)*0.1f);
+ }
+ }
+
+ float view[16];
+ float proj[16];
+ m_camera.update(deltaTimeSec);
+ memcpy(m_uniforms.m_camPos, m_camera.m_pos.curr, 3*sizeof(float));
+ m_camera.mtxLookAt(view);
+ bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f);
+ bgfx::setViewTransform(0, view, proj);
+
+ m_uniforms.m_drawEdges = (DrawMode::WireframeShaded == m_drawMode) ? 1.0f : 0.0f;
+ m_uniforms.submit();
+
+ if (DrawMode::Wireframe == m_drawMode)
+ {
+ uint64_t state = 0
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_ALPHA_WRITE
+ | BGFX_STATE_DEPTH_WRITE
+ | BGFX_STATE_CULL_CCW
+ | BGFX_STATE_MSAA
+ | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA)
+ ;
+ meshSubmit(m_meshes[m_meshSelection].m_mesh, 0, m_wfProgram, m_meshes[m_meshSelection].m_mtx, state);
+ }
+ else
+ {
+ uint64_t state = 0
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_ALPHA_WRITE
+ | BGFX_STATE_DEPTH_TEST_LESS
+ | BGFX_STATE_DEPTH_WRITE
+ | BGFX_STATE_CULL_CCW
+ | BGFX_STATE_MSAA
+ ;
+ meshSubmit(m_meshes[m_meshSelection].m_mesh, 0, m_meshProgram, m_meshes[m_meshSelection].m_mtx, state);
+ }
+
+ // Advance to next frame. Rendering thread will be kicked to
+ // process submitted rendering primitives.
+ bgfx::frame();
+
+ return true;
+ }
+
+ return false;
+ }
+
+ entry::MouseState m_mouseState;
+
+ bgfx::ProgramHandle m_wfProgram;
+ bgfx::ProgramHandle m_meshProgram;
+
+ uint32_t m_width;
+ uint32_t m_height;
+ uint32_t m_debug;
+ uint32_t m_reset;
+
+ uint32_t m_oldWidth;
+ uint32_t m_oldHeight;
+ uint32_t m_oldReset;
+
+ Camera m_camera;
+ Mouse m_mouse;
+ Uniforms m_uniforms;
+ MeshMtx m_meshes[3];
+ uint32_t m_meshSelection;
+ uint32_t m_drawMode; // Holds data for 'DrawMode'.
+
+ bool m_showWfColor;
+ int32_t m_scrollArea;
+};
+
+ENTRY_IMPLEMENT_MAIN(ExampleWireframe);
diff --git a/3rdparty/bgfx/examples/assets/meshes/makefile b/3rdparty/bgfx/examples/assets/meshes/makefile
index f8b0ee890af..c171432ebd0 100644
--- a/3rdparty/bgfx/examples/assets/meshes/makefile
+++ b/3rdparty/bgfx/examples/assets/meshes/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -37,4 +37,4 @@ clean:
rebuild: clean all
$(RUNTIME_DIR)/meshes/%.bin : %.obj
- $(SILENT) $(GEOMETRYC) -f $(<) -o $(@) --packnormal 1 \ No newline at end of file
+ $(SILENT) $(GEOMETRYC) -f $(<) -o $(@) --packnormal 1
diff --git a/3rdparty/bgfx/examples/common/bgfx_utils.cpp b/3rdparty/bgfx/examples/common/bgfx_utils.cpp
index 9b03d3d70b9..8de8bf30964 100644
--- a/3rdparty/bgfx/examples/common/bgfx_utils.cpp
+++ b/3rdparty/bgfx/examples/common/bgfx_utils.cpp
@@ -389,7 +389,7 @@ struct Group
namespace bgfx
{
- int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl);
+ int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl, bx::Error* _err = NULL);
}
struct Mesh
@@ -540,17 +540,16 @@ struct Mesh
;
}
- uint32_t cached = bgfx::setTransform(_mtx);
+ bgfx::setTransform(_mtx);
+ bgfx::setState(_state);
for (GroupArray::const_iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it)
{
const Group& group = *it;
- bgfx::setTransform(cached);
bgfx::setIndexBuffer(group.m_ibh);
bgfx::setVertexBuffer(group.m_vbh);
- bgfx::setState(_state);
- bgfx::submit(_id, _program);
+ bgfx::submit(_id, _program, 0, it != itEnd-1);
}
}
@@ -560,26 +559,28 @@ struct Mesh
for (uint32_t pass = 0; pass < _numPasses; ++pass)
{
+ bgfx::setTransform(cached, _numMatrices);
+
const MeshState& state = *_state[pass];
+ bgfx::setState(state.m_state);
+
+ for (uint8_t tex = 0; tex < state.m_numTextures; ++tex)
+ {
+ const MeshState::Texture& texture = state.m_textures[tex];
+ bgfx::setTexture(texture.m_stage
+ , texture.m_sampler
+ , texture.m_texture
+ , texture.m_flags
+ );
+ }
for (GroupArray::const_iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it)
{
const Group& group = *it;
- bgfx::setTransform(cached, _numMatrices);
- for (uint8_t tex = 0; tex < state.m_numTextures; ++tex)
- {
- const MeshState::Texture& texture = state.m_textures[tex];
- bgfx::setTexture(texture.m_stage
- , texture.m_sampler
- , texture.m_texture
- , texture.m_flags
- );
- }
bgfx::setIndexBuffer(group.m_ibh);
bgfx::setVertexBuffer(group.m_vbh);
- bgfx::setState(state.m_state);
- bgfx::submit(state.m_viewId, state.m_program);
+ bgfx::submit(state.m_viewId, state.m_program, 0, it != itEnd-1);
}
}
}
@@ -646,10 +647,13 @@ Args::Args(int _argc, char** _argv)
{
m_type = bgfx::RendererType::OpenGL;
}
- else if (cmdLine.hasArg("noop")
- || cmdLine.hasArg("vk") )
+ else if (cmdLine.hasArg("vk") )
{
- m_type = bgfx::RendererType::OpenGL;
+ m_type = bgfx::RendererType::Vulkan;
+ }
+ else if (cmdLine.hasArg("noop") )
+ {
+ m_type = bgfx::RendererType::Null;
}
else if (BX_ENABLED(BX_PLATFORM_WINDOWS) )
{
diff --git a/3rdparty/bgfx/examples/common/bounds.cpp b/3rdparty/bgfx/examples/common/bounds.cpp
index 3937b550567..0b2ae4460c9 100644
--- a/3rdparty/bgfx/examples/common/bounds.cpp
+++ b/3rdparty/bgfx/examples/common/bounds.cpp
@@ -277,6 +277,36 @@ void calcMinBoundingSphere(Sphere& _sphere, const void* _vertices, uint32_t _num
_sphere.m_radius = bx::fsqrt(maxDistSq);
}
+void calcPlaneUv(const Plane& _plane, float* _udir, float* _vdir)
+{
+ const uint8_t axis =
+ bx::fabsolute(_plane.m_normal[0]) > 0.6f ? 0
+ : (bx::fabsolute(_plane.m_normal[1]) > 0.6f ? 1
+ : 2
+ );
+ const uint8_t* index = (uint8_t*)&"\x1\x2\x0\x2\x0\x1"[axis*2];
+ const uint8_t idx0 = *(index );
+ const uint8_t idx1 = *(index+1);
+
+ _udir[0] = 0.0f;
+ _udir[1] = 0.0f;
+ _udir[2] = 0.0f;
+ _udir[idx0] = 1.0f;
+
+ _vdir[0] = 0.0f;
+ _vdir[1] = 0.0f;
+ _vdir[2] = 0.0f;
+ _vdir[idx1] = 1.0f;
+
+ const float invPlaneAxis = 1.0f / _plane.m_normal[axis];
+
+ _udir[axis] -= bx::vec3Dot(_udir, _plane.m_normal) * invPlaneAxis;
+ bx::vec3Norm(_udir, _udir);
+
+ _vdir[axis] -= bx::vec3Dot(_vdir, _plane.m_normal) * invPlaneAxis;
+ bx::vec3Norm(_vdir, _vdir);
+}
+
void buildFrustumPlanes(Plane* _result, const float* _viewProj)
{
const float xw = _viewProj[ 3];
diff --git a/3rdparty/bgfx/examples/common/bounds.h b/3rdparty/bgfx/examples/common/bounds.h
index 24f23414f10..03cac67ca9a 100644
--- a/3rdparty/bgfx/examples/common/bounds.h
+++ b/3rdparty/bgfx/examples/common/bounds.h
@@ -94,6 +94,9 @@ void calcMaxBoundingSphere(Sphere& _sphere, const void* _vertices, uint32_t _num
/// Calculate minimum bounding sphere.
void calcMinBoundingSphere(Sphere& _sphere, const void* _vertices, uint32_t _numVertices, uint32_t _stride, float _step = 0.01f);
+/// Calculate coplanar U/V vectors.
+void calcPlaneUv(const Plane& _plane, float* _udir, float* _vdir);
+
/// Returns 6 (near, far, left, right, top, bottom) planes representing frustum planes.
void buildFrustumPlanes(Plane* _planes, const float* _viewProj);
diff --git a/3rdparty/bgfx/examples/common/debugdraw/debugdraw.cpp b/3rdparty/bgfx/examples/common/debugdraw/debugdraw.cpp
new file mode 100644
index 00000000000..469e814eb87
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/debugdraw.cpp
@@ -0,0 +1,1490 @@
+/*
+ * Copyright 2011-2016 Branimir Karadzic. All rights reserved.
+ * License: http://www.opensource.org/licenses/BSD-2-Clause
+ */
+
+#include <bgfx/bgfx.h>
+#include "debugdraw.h"
+
+#include <bx/fpumath.h>
+#include <bx/radixsort.h>
+#include <bx/uint32_t.h>
+#include <bx/crtimpl.h>
+
+struct DebugVertex
+{
+ float m_x;
+ float m_y;
+ float m_z;
+ float m_len;
+ uint32_t m_abgr;
+
+ static void init()
+ {
+ ms_decl
+ .begin()
+ .add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float)
+ .add(bgfx::Attrib::TexCoord0, 1, bgfx::AttribType::Float)
+ .add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true)
+ .end();
+ }
+
+ static bgfx::VertexDecl ms_decl;
+};
+
+bgfx::VertexDecl DebugVertex::ms_decl;
+
+struct DebugShapeVertex
+{
+ float m_x;
+ float m_y;
+ float m_z;
+ float m_mask;
+
+ static void init()
+ {
+ ms_decl
+ .begin()
+ .add(bgfx::Attrib::Position, 4, bgfx::AttribType::Float)
+ .end();
+ }
+
+ static bgfx::VertexDecl ms_decl;
+};
+
+bgfx::VertexDecl DebugShapeVertex::ms_decl;
+
+static DebugShapeVertex s_cubeVertices[8] =
+{
+ {-1.0f, 1.0f, 1.0f, 0.0f },
+ { 1.0f, 1.0f, 1.0f, 0.0f },
+ {-1.0f, -1.0f, 1.0f, 0.0f },
+ { 1.0f, -1.0f, 1.0f, 0.0f },
+ {-1.0f, 1.0f, -1.0f, 0.0f },
+ { 1.0f, 1.0f, -1.0f, 0.0f },
+ {-1.0f, -1.0f, -1.0f, 0.0f },
+ { 1.0f, -1.0f, -1.0f, 0.0f },
+};
+
+static const uint16_t s_cubeIndices[36] =
+{
+ 0, 1, 2, // 0
+ 1, 3, 2,
+ 4, 6, 5, // 2
+ 5, 6, 7,
+ 0, 2, 4, // 4
+ 4, 2, 6,
+ 1, 5, 3, // 6
+ 5, 7, 3,
+ 0, 4, 1, // 8
+ 4, 5, 1,
+ 2, 3, 6, // 10
+ 6, 3, 7,
+};
+
+static const uint8_t s_circleLod[] =
+{
+ 37,
+ 29,
+ 23,
+ 17,
+ 11,
+};
+
+static uint8_t getCircleLod(uint8_t _lod)
+{
+ _lod = _lod > BX_COUNTOF(s_circleLod)-1 ? BX_COUNTOF(s_circleLod)-1 : _lod;
+ return s_circleLod[_lod];
+}
+
+static void circle(float* _out, float _angle)
+{
+ float sa = bx::fsin(_angle);
+ float ca = bx::fcos(_angle);
+ _out[0] = sa;
+ _out[1] = ca;
+}
+
+static void squircle(float* _out, float _angle)
+{
+ float sa = bx::fsin(_angle);
+ float ca = bx::fcos(_angle);
+ _out[0] = bx::fsqrt(bx::fabsolute(sa) ) * bx::fsign(sa);
+ _out[1] = bx::fsqrt(bx::fabsolute(ca) ) * bx::fsign(ca);
+}
+
+uint32_t genSphere(uint8_t _subdiv0, void* _pos0 = NULL, uint16_t _posStride0 = 0, void* _normals0 = NULL, uint16_t _normalStride0 = 0)
+{
+ if (NULL != _pos0)
+ {
+ struct Gen
+ {
+ Gen(void* _pos, uint16_t _posStride, void* _normals, uint16_t _normalStride, uint8_t _subdiv)
+ : m_pos( (uint8_t*)_pos)
+ , m_normals( (uint8_t*)_normals)
+ , m_posStride(_posStride)
+ , m_normalStride(_normalStride)
+ {
+ static const float scale = 1.0f;
+ static const float golden = 1.6180339887f;
+ static const float len = bx::fsqrt(golden*golden + 1.0f);
+ static const float ss = 1.0f/len * scale;
+ static const float ll = ss*golden;
+
+ static const float vv[12][4] =
+ {
+ { -ll, 0.0f, -ss, 0.0f },
+ { ll, 0.0f, -ss, 0.0f },
+ { ll, 0.0f, ss, 0.0f },
+ { -ll, 0.0f, ss, 0.0f },
+
+ { -ss, ll, 0.0f, 0.0f },
+ { ss, ll, 0.0f, 0.0f },
+ { ss, -ll, 0.0f, 0.0f },
+ { -ss, -ll, 0.0f, 0.0f },
+
+ { 0.0f, -ss, ll, 0.0f },
+ { 0.0f, ss, ll, 0.0f },
+ { 0.0f, ss, -ll, 0.0f },
+ { 0.0f, -ss, -ll, 0.0f },
+ };
+
+ m_numVertices = 0;
+
+ triangle(vv[ 0], vv[ 4], vv[ 3], scale, _subdiv);
+ triangle(vv[ 0], vv[10], vv[ 4], scale, _subdiv);
+ triangle(vv[ 4], vv[10], vv[ 5], scale, _subdiv);
+ triangle(vv[ 5], vv[10], vv[ 1], scale, _subdiv);
+ triangle(vv[ 5], vv[ 1], vv[ 2], scale, _subdiv);
+ triangle(vv[ 5], vv[ 2], vv[ 9], scale, _subdiv);
+ triangle(vv[ 5], vv[ 9], vv[ 4], scale, _subdiv);
+ triangle(vv[ 3], vv[ 4], vv[ 9], scale, _subdiv);
+
+ triangle(vv[ 0], vv[ 3], vv[ 7], scale, _subdiv);
+ triangle(vv[ 0], vv[ 7], vv[11], scale, _subdiv);
+ triangle(vv[11], vv[ 7], vv[ 6], scale, _subdiv);
+ triangle(vv[11], vv[ 6], vv[ 1], scale, _subdiv);
+ triangle(vv[ 1], vv[ 6], vv[ 2], scale, _subdiv);
+ triangle(vv[ 2], vv[ 6], vv[ 8], scale, _subdiv);
+ triangle(vv[ 8], vv[ 6], vv[ 7], scale, _subdiv);
+ triangle(vv[ 8], vv[ 7], vv[ 3], scale, _subdiv);
+
+ triangle(vv[ 0], vv[11], vv[10], scale, _subdiv);
+ triangle(vv[ 1], vv[10], vv[11], scale, _subdiv);
+ triangle(vv[ 2], vv[ 8], vv[ 9], scale, _subdiv);
+ triangle(vv[ 3], vv[ 9], vv[ 8], scale, _subdiv);
+ }
+
+ void addVert(const float* _v)
+ {
+ float* verts = (float*)m_pos;
+ verts[0] = _v[0];
+ verts[1] = _v[1];
+ verts[2] = _v[2];
+ m_pos += m_posStride;
+
+ if (NULL != m_normals)
+ {
+ float* normals = (float*)m_normals;
+ bx::vec3Norm(normals, _v);
+ m_normals += m_normalStride;
+ }
+
+ m_numVertices++;
+ }
+
+ void triangle(const float* _v0, const float* _v1, const float* _v2, float _scale, uint8_t _subdiv)
+ {
+ if (0 == _subdiv)
+ {
+ addVert(_v0);
+ addVert(_v1);
+ addVert(_v2);
+ }
+ else
+ {
+ float tmp0[4];
+ float tmp1[4];
+
+ float v01[4];
+ bx::vec3Add(tmp0, _v0, _v1);
+ bx::vec3Norm(tmp1, tmp0);
+ bx::vec3Mul(v01, tmp1, _scale);
+
+ float v12[4];
+ bx::vec3Add(tmp0, _v1, _v2);
+ bx::vec3Norm(tmp1, tmp0);
+ bx::vec3Mul(v12, tmp1, _scale);
+
+ float v20[4];
+ bx::vec3Add(tmp0, _v2, _v0);
+ bx::vec3Norm(tmp1, tmp0);
+ bx::vec3Mul(v20, tmp1, _scale);
+
+ --_subdiv;
+ triangle(_v0, v01, v20, _scale, _subdiv);
+ triangle(_v1, v12, v01, _scale, _subdiv);
+ triangle(_v2, v20, v12, _scale, _subdiv);
+ triangle(v01, v12, v20, _scale, _subdiv);
+ }
+ }
+
+ uint8_t* m_pos;
+ uint8_t* m_normals;
+ uint16_t m_posStride;
+ uint16_t m_normalStride;
+ uint32_t m_numVertices;
+
+ } gen(_pos0, _posStride0, _normals0, _normalStride0, _subdiv0);
+ }
+
+ uint32_t numVertices = 20*3*bx::uint32_max(1, (uint32_t)bx::fpow(4.0f, _subdiv0) );
+ return numVertices;
+}
+
+void getPoint(float* _result, Axis::Enum _axis, float _x, float _y)
+{
+ switch (_axis)
+ {
+ case Axis::X:
+ _result[0] = 0.0f;
+ _result[1] = _x;
+ _result[2] = _y;
+ break;
+
+ case Axis::Y:
+ _result[0] = _y;
+ _result[1] = 0.0f;
+ _result[2] = _x;
+ break;
+
+ default:
+ _result[0] = _x;
+ _result[1] = _y;
+ _result[2] = 0.0f;
+ break;
+ }
+}
+
+
+#include "vs_debugdraw_lines.bin.h"
+#include "fs_debugdraw_lines.bin.h"
+#include "vs_debugdraw_lines_stipple.bin.h"
+#include "fs_debugdraw_lines_stipple.bin.h"
+#include "vs_debugdraw_fill.bin.h"
+#include "fs_debugdraw_fill.bin.h"
+#include "vs_debugdraw_fill_lit.bin.h"
+#include "fs_debugdraw_fill_lit.bin.h"
+
+struct EmbeddedShader
+{
+ bgfx::RendererType::Enum type;
+ const uint8_t* data;
+ uint32_t size;
+};
+
+#define BGFX_DECLARE_SHADER_EMBEDDED(_name) \
+ { \
+ { bgfx::RendererType::Direct3D9, BX_CONCATENATE(_name, _dx9 ), sizeof(BX_CONCATENATE(_name, _dx9 ) ) }, \
+ { bgfx::RendererType::Direct3D11, BX_CONCATENATE(_name, _dx11), sizeof(BX_CONCATENATE(_name, _dx11) ) }, \
+ { bgfx::RendererType::Direct3D12, BX_CONCATENATE(_name, _dx11), sizeof(BX_CONCATENATE(_name, _dx11) ) }, \
+ { bgfx::RendererType::OpenGL, BX_CONCATENATE(_name, _glsl), sizeof(BX_CONCATENATE(_name, _glsl) ) }, \
+ { bgfx::RendererType::OpenGLES, BX_CONCATENATE(_name, _glsl), sizeof(BX_CONCATENATE(_name, _glsl) ) }, \
+ { bgfx::RendererType::Vulkan, BX_CONCATENATE(_name, _glsl), sizeof(BX_CONCATENATE(_name, _glsl) ) }, \
+ { bgfx::RendererType::Metal, BX_CONCATENATE(_name, _mtl ), sizeof(BX_CONCATENATE(_name, _mtl ) ) }, \
+ { bgfx::RendererType::Count, NULL, 0 }, \
+ }
+
+static const EmbeddedShader s_embeddedShaders[][8] =
+{
+ BGFX_DECLARE_SHADER_EMBEDDED(vs_debugdraw_lines),
+ BGFX_DECLARE_SHADER_EMBEDDED(fs_debugdraw_lines),
+ BGFX_DECLARE_SHADER_EMBEDDED(vs_debugdraw_lines_stipple),
+ BGFX_DECLARE_SHADER_EMBEDDED(fs_debugdraw_lines_stipple),
+ BGFX_DECLARE_SHADER_EMBEDDED(vs_debugdraw_fill),
+ BGFX_DECLARE_SHADER_EMBEDDED(fs_debugdraw_fill),
+ BGFX_DECLARE_SHADER_EMBEDDED(vs_debugdraw_fill_lit),
+ BGFX_DECLARE_SHADER_EMBEDDED(fs_debugdraw_fill_lit),
+};
+
+static bgfx::ShaderHandle createEmbeddedShader(bgfx::RendererType::Enum _type, uint32_t _index)
+{
+ for (const EmbeddedShader* es = s_embeddedShaders[_index]; bgfx::RendererType::Count != es->type; ++es)
+ {
+ if (_type == es->type)
+ {
+ return bgfx::createShader(bgfx::makeRef(es->data, es->size) );
+ }
+ }
+
+ bgfx::ShaderHandle handle = BGFX_INVALID_HANDLE;
+ return handle;
+}
+
+struct DebugDraw
+{
+ DebugDraw()
+ : m_state(State::Count)
+ {
+ }
+
+ void init(bx::AllocatorI* _allocator)
+ {
+ m_allocator = _allocator;
+
+#if BX_CONFIG_ALLOCATOR_CRT
+ if (NULL == _allocator)
+ {
+ static bx::CrtAllocator allocator;
+ m_allocator = &allocator;
+ }
+#endif // BX_CONFIG_ALLOCATOR_CRT
+
+ DebugVertex::init();
+ DebugShapeVertex::init();
+
+ bgfx::RendererType::Enum type = bgfx::getRendererType();
+
+ m_program[Program::Lines] =
+ bgfx::createProgram(createEmbeddedShader(type, 0)
+ , createEmbeddedShader(type, 1)
+ , true
+ );
+
+ m_program[Program::LinesStipple] =
+ bgfx::createProgram(createEmbeddedShader(type, 2)
+ , createEmbeddedShader(type, 3)
+ , true
+ );
+
+ m_program[Program::Fill] =
+ bgfx::createProgram(createEmbeddedShader(type, 4)
+ , createEmbeddedShader(type, 5)
+ , true
+ );
+
+ m_program[Program::FillLit] =
+ bgfx::createProgram(createEmbeddedShader(type, 6)
+ , createEmbeddedShader(type, 7)
+ , true
+ );
+
+ u_params = bgfx::createUniform("u_params", bgfx::UniformType::Vec4, 4);
+
+ void* vertices[Mesh::Count] = {};
+ uint16_t* indices[Mesh::Count] = {};
+ uint16_t stride = DebugShapeVertex::ms_decl.getStride();
+
+ uint32_t startVertex = 0;
+ uint32_t startIndex = 0;
+
+ for (uint32_t mesh = 0; mesh < 4; ++mesh)
+ {
+ Mesh::Enum id = Mesh::Enum(Mesh::Sphere0+mesh);
+
+ const uint8_t tess = uint8_t(3-mesh);
+ const uint32_t numVertices = genSphere(tess);
+ const uint32_t numIndices = numVertices;
+
+ vertices[id] = BX_ALLOC(m_allocator, numVertices*stride);
+ genSphere(tess, vertices[id], stride);
+
+ uint16_t* trilist = (uint16_t*)BX_ALLOC(m_allocator, numIndices*sizeof(uint16_t) );
+ for (uint32_t ii = 0; ii < numIndices; ++ii)
+ {
+ trilist[ii] = uint16_t(ii);
+ }
+
+
+
+
+ uint32_t numLineListIndices = bgfx::topologyConvert(bgfx::TopologyConvert::TriListToLineList
+ , NULL
+ , 0
+ , trilist
+ , numIndices
+ , false
+ );
+ indices[id] = (uint16_t*)BX_ALLOC(m_allocator, (numIndices + numLineListIndices)*sizeof(uint16_t) );
+ uint16_t* indicesOut = indices[id];
+ memcpy(indicesOut, trilist, numIndices*sizeof(uint16_t) );
+
+ bgfx::topologyConvert(bgfx::TopologyConvert::TriListToLineList
+ , &indicesOut[numIndices]
+ , numLineListIndices*sizeof(uint16_t)
+ , trilist
+ , numIndices
+ , false
+ );
+
+ m_mesh[id].m_startVertex = startVertex;
+ m_mesh[id].m_numVertices = numVertices;
+ m_mesh[id].m_startIndex[0] = startIndex;
+ m_mesh[id].m_numIndices[0] = numIndices;
+ m_mesh[id].m_startIndex[1] = startIndex+numIndices;
+ m_mesh[id].m_numIndices[1] = numLineListIndices;
+
+ startVertex += numVertices;
+ startIndex += numIndices + numLineListIndices;
+
+ BX_FREE(m_allocator, trilist);
+ }
+
+ m_mesh[Mesh::Cube].m_startVertex = startVertex;
+ m_mesh[Mesh::Cube].m_numVertices = BX_COUNTOF(s_cubeVertices);
+ m_mesh[Mesh::Cube].m_startIndex[0] = startIndex;
+ m_mesh[Mesh::Cube].m_numIndices[0] = BX_COUNTOF(s_cubeIndices);
+ m_mesh[Mesh::Cube].m_startIndex[1] = 0;
+ m_mesh[Mesh::Cube].m_numIndices[1] = 0;
+ startVertex += m_mesh[Mesh::Cube].m_numVertices;
+ startIndex += m_mesh[Mesh::Cube].m_numIndices[0];
+
+ const bgfx::Memory* vb = bgfx::alloc(startVertex*stride);
+ const bgfx::Memory* ib = bgfx::alloc(startIndex*sizeof(uint16_t) );
+
+ for (uint32_t mesh = 0; mesh < 4; ++mesh)
+ {
+ Mesh::Enum id = Mesh::Enum(Mesh::Sphere0+mesh);
+ memcpy(&vb->data[m_mesh[id].m_startVertex * stride]
+ , vertices[id]
+ , m_mesh[id].m_numVertices*stride
+ );
+
+ memcpy(&ib->data[m_mesh[id].m_startIndex[0] * sizeof(uint16_t)]
+ , indices[id]
+ , (m_mesh[id].m_numIndices[0]+m_mesh[id].m_numIndices[1])*sizeof(uint16_t)
+ );
+
+ BX_FREE(m_allocator, vertices[id]);
+ BX_FREE(m_allocator, indices[id]);
+ }
+
+ memcpy(&vb->data[m_mesh[Mesh::Cube].m_startVertex * stride]
+ , s_cubeVertices
+ , sizeof(s_cubeVertices)
+ );
+
+ memcpy(&ib->data[m_mesh[Mesh::Cube].m_startIndex[0] * sizeof(uint16_t)]
+ , s_cubeIndices
+ , sizeof(s_cubeIndices)
+ );
+
+ m_vbh = bgfx::createVertexBuffer(vb, DebugShapeVertex::ms_decl);
+ m_ibh = bgfx::createIndexBuffer(ib);
+
+ m_mtx = 0;
+ m_viewId = 0;
+ m_pos = 0;
+ m_indexPos = 0;
+ m_vertexPos = 0;
+ }
+
+ void shutdown()
+ {
+ bgfx::destroyIndexBuffer(m_ibh);
+ bgfx::destroyVertexBuffer(m_vbh);
+ for (uint32_t ii = 0; ii < Program::Count; ++ii)
+ {
+ bgfx::destroyProgram(m_program[ii]);
+ }
+ bgfx::destroyUniform(u_params);
+ }
+
+ void begin(uint8_t _viewId)
+ {
+ BX_CHECK(State::Count == m_state);
+
+ m_viewId = _viewId;
+ m_mtx = 0;
+ m_state = State::None;
+ m_stack = 0;
+
+ Attrib& attrib = m_attrib[0];
+ attrib.m_state = 0
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_DEPTH_TEST_LESS
+ | BGFX_STATE_DEPTH_WRITE
+ | BGFX_STATE_CULL_CW
+ ;
+ attrib.m_scale = 1.0f;
+ attrib.m_offset = 0.0f;
+ attrib.m_abgr = UINT32_MAX;
+ attrib.m_stipple = false;
+ attrib.m_wireframe = false;
+ attrib.m_lod = 0;
+ }
+
+ void end()
+ {
+ BX_CHECK(0 == m_stack, "Invalid stack %d.", m_stack);
+
+ flush();
+
+ m_state = State::Count;
+ }
+
+ void push()
+ {
+ BX_CHECK(State::Count != m_state);
+ ++m_stack;
+ m_attrib[m_stack] = m_attrib[m_stack-1];
+ }
+
+ void pop()
+ {
+ BX_CHECK(State::Count != m_state);
+ if (m_attrib[m_stack].m_stipple != m_attrib[m_stack-1].m_stipple)
+ {
+ flush();
+ }
+ --m_stack;
+ }
+
+ void setTransform(const void* _mtx)
+ {
+ BX_CHECK(State::Count != m_state);
+ flush();
+
+ if (NULL == _mtx)
+ {
+ m_mtx = 0;
+ return;
+ }
+
+ bgfx::Transform transform;
+ m_mtx = bgfx::allocTransform(&transform, 1);
+ memcpy(transform.data, _mtx, 64);
+ }
+
+ void setTranslate(float _x, float _y, float _z)
+ {
+ float mtx[16];
+ bx::mtxTranslate(mtx, _x, _y, _z);
+ setTransform(mtx);
+ }
+
+ void setTranslate(const float* _pos)
+ {
+ setTranslate(_pos[0], _pos[1], _pos[2]);
+ }
+
+ void setState(bool _depthTest, bool _depthWrite, bool _clockwise)
+ {
+ m_attrib[m_stack].m_state &= ~(0
+ | BGFX_STATE_DEPTH_TEST_LESS
+ | BGFX_STATE_DEPTH_WRITE
+ | BGFX_STATE_CULL_CW
+ | BGFX_STATE_CULL_CCW
+ );
+
+ m_attrib[m_stack].m_state |= _depthTest
+ ? BGFX_STATE_DEPTH_TEST_LESS
+ : 0
+ ;
+
+ m_attrib[m_stack].m_state |= _depthWrite
+ ? BGFX_STATE_DEPTH_WRITE
+ : 0
+ ;
+
+ m_attrib[m_stack].m_state |= _clockwise
+ ? BGFX_STATE_CULL_CW
+ : BGFX_STATE_CULL_CCW
+ ;
+ }
+
+ void setColor(uint32_t _abgr)
+ {
+ BX_CHECK(State::Count != m_state);
+ m_attrib[m_stack].m_abgr = _abgr;
+ }
+
+ void setLod(uint8_t _lod)
+ {
+ BX_CHECK(State::Count != m_state);
+ m_attrib[m_stack].m_lod = _lod;
+ }
+
+ void setWireframe(bool _wireframe)
+ {
+ BX_CHECK(State::Count != m_state);
+ m_attrib[m_stack].m_wireframe = _wireframe;
+ }
+
+ void setStipple(bool _stipple, float _scale = 1.0f, float _offset = 0.0f)
+ {
+ BX_CHECK(State::Count != m_state);
+
+ Attrib& attrib = m_attrib[m_stack];
+
+ if (attrib.m_stipple != _stipple)
+ {
+ flush();
+ }
+
+ attrib.m_stipple = _stipple;
+ attrib.m_offset = _offset;
+ attrib.m_scale = _scale;
+ }
+
+ void moveTo(float _x, float _y, float _z = 0.0f)
+ {
+ BX_CHECK(State::Count != m_state);
+
+ softFlush();
+
+ m_state = State::MoveTo;
+
+ DebugVertex& vertex = m_cache[m_pos];
+ vertex.m_x = _x;
+ vertex.m_y = _y;
+ vertex.m_z = _z;
+
+ Attrib& attrib = m_attrib[m_stack];
+ vertex.m_abgr = attrib.m_abgr;
+ vertex.m_len = attrib.m_offset;
+
+ m_vertexPos = m_pos;
+ }
+
+ void moveTo(const void* _pos)
+ {
+ BX_CHECK(State::Count != m_state);
+
+ const float* pos = (const float*)_pos;
+ moveTo(pos[0], pos[1], pos[2]);
+ }
+
+ void moveTo(Axis::Enum _axis, float _x, float _y)
+ {
+ float pos[3];
+ getPoint(pos, _axis, _x, _y);
+ moveTo(pos);
+ }
+
+ void lineTo(float _x, float _y, float _z = 0.0f)
+ {
+ BX_CHECK(State::Count != m_state);
+ if (State::None == m_state)
+ {
+ moveTo(_x, _y, _z);
+ return;
+ }
+
+ if (m_pos+2 > uint16_t(BX_COUNTOF(m_cache) ) )
+ {
+ uint32_t pos = m_pos;
+ uint32_t vertexPos = m_vertexPos;
+
+ flush();
+
+ memcpy(&m_cache[0], &m_cache[vertexPos], sizeof(DebugVertex) );
+ if (vertexPos == pos)
+ {
+ m_pos = 1;
+ }
+ else
+ {
+ memcpy(&m_cache[1], &m_cache[pos - 1], sizeof(DebugVertex) );
+ m_pos = 2;
+ }
+
+ m_state = State::LineTo;
+ }
+ else if (State::MoveTo == m_state)
+ {
+ ++m_pos;
+ m_state = State::LineTo;
+ }
+
+ uint16_t prev = m_pos-1;
+ uint16_t curr = m_pos++;
+ DebugVertex& vertex = m_cache[curr];
+ vertex.m_x = _x;
+ vertex.m_y = _y;
+ vertex.m_z = _z;
+
+ Attrib& attrib = m_attrib[m_stack];
+ vertex.m_abgr = attrib.m_abgr;
+ vertex.m_len = attrib.m_offset;
+
+ float tmp[3];
+ bx::vec3Sub(tmp, &vertex.m_x, &m_cache[prev].m_x);
+ float len = bx::vec3Length(tmp) * attrib.m_scale;
+ vertex.m_len = m_cache[prev].m_len + len;
+
+ m_indices[m_indexPos++] = prev;
+ m_indices[m_indexPos++] = curr;
+ }
+
+ void lineTo(const void* _pos)
+ {
+ BX_CHECK(State::Count != m_state);
+
+ const float* pos = (const float*)_pos;
+ lineTo(pos[0], pos[1], pos[2]);
+ }
+
+ void lineTo(Axis::Enum _axis, float _x, float _y)
+ {
+ float pos[3];
+ getPoint(pos, _axis, _x, _y);
+ lineTo(pos);
+ }
+
+ void close()
+ {
+ BX_CHECK(State::Count != m_state);
+ DebugVertex& vertex = m_cache[m_vertexPos];
+ lineTo(vertex.m_x, vertex.m_y, vertex.m_z);
+
+ m_state = State::None;
+ }
+
+ void draw(const Aabb& _aabb)
+ {
+ moveTo(_aabb.m_min[0], _aabb.m_min[1], _aabb.m_min[2]);
+ lineTo(_aabb.m_max[0], _aabb.m_min[1], _aabb.m_min[2]);
+ lineTo(_aabb.m_max[0], _aabb.m_max[1], _aabb.m_min[2]);
+ lineTo(_aabb.m_min[0], _aabb.m_max[1], _aabb.m_min[2]);
+ close();
+
+ moveTo(_aabb.m_min[0], _aabb.m_min[1], _aabb.m_max[2]);
+ lineTo(_aabb.m_max[0], _aabb.m_min[1], _aabb.m_max[2]);
+ lineTo(_aabb.m_max[0], _aabb.m_max[1], _aabb.m_max[2]);
+ lineTo(_aabb.m_min[0], _aabb.m_max[1], _aabb.m_max[2]);
+ close();
+
+ moveTo(_aabb.m_min[0], _aabb.m_min[1], _aabb.m_min[2]);
+ lineTo(_aabb.m_min[0], _aabb.m_min[1], _aabb.m_max[2]);
+
+ moveTo(_aabb.m_max[0], _aabb.m_min[1], _aabb.m_min[2]);
+ lineTo(_aabb.m_max[0], _aabb.m_min[1], _aabb.m_max[2]);
+
+ moveTo(_aabb.m_min[0], _aabb.m_max[1], _aabb.m_min[2]);
+ lineTo(_aabb.m_min[0], _aabb.m_max[1], _aabb.m_max[2]);
+
+ moveTo(_aabb.m_max[0], _aabb.m_max[1], _aabb.m_min[2]);
+ lineTo(_aabb.m_max[0], _aabb.m_max[1], _aabb.m_max[2]);
+ }
+
+ void draw(const Cylinder& _cylinder, bool _capsule)
+ {
+ BX_UNUSED(_cylinder, _capsule);
+ }
+
+ void draw(const Disk& _disk)
+ {
+ BX_UNUSED(_disk);
+ }
+
+ void draw(const Obb& _obb)
+ {
+ const Attrib& attrib = m_attrib[m_stack];
+ if (attrib.m_wireframe)
+ {
+ setTransform(_obb.m_mtx);
+
+ moveTo(-1.0f, -1.0f, -1.0f);
+ lineTo( 1.0f, -1.0f, -1.0f);
+ lineTo( 1.0f, 1.0f, -1.0f);
+ lineTo(-1.0f, 1.0f, -1.0f);
+ close();
+
+ moveTo(-1.0f, 1.0f, 1.0f);
+ lineTo( 1.0f, 1.0f, 1.0f);
+ lineTo( 1.0f, -1.0f, 1.0f);
+ lineTo(-1.0f, -1.0f, 1.0f);
+ close();
+
+ moveTo( 1.0f, -1.0f, -1.0f);
+ lineTo( 1.0f, -1.0f, 1.0f);
+
+ moveTo( 1.0f, 1.0f, -1.0f);
+ lineTo( 1.0f, 1.0f, 1.0f);
+
+ moveTo(-1.0f, 1.0f, -1.0f);
+ lineTo(-1.0f, 1.0f, 1.0f);
+
+ moveTo(-1.0f, -1.0f, -1.0f);
+ lineTo(-1.0f, -1.0f, 1.0f);
+
+ setTransform(NULL);
+ }
+ else
+ {
+ draw(Mesh::Cube, _obb.m_mtx, false);
+ }
+ }
+
+ void draw(const Sphere& _sphere)
+ {
+ const Attrib& attrib = m_attrib[m_stack];
+ float mtx[16];
+ bx::mtxSRT(mtx
+ , _sphere.m_radius
+ , _sphere.m_radius
+ , _sphere.m_radius
+ , 0.0f
+ , 0.0f
+ , 0.0f
+ , _sphere.m_center[0]
+ , _sphere.m_center[1]
+ , _sphere.m_center[2]
+ );
+ uint8_t lod = attrib.m_lod > Mesh::SphereMaxLod
+ ? uint8_t(Mesh::SphereMaxLod)
+ : attrib.m_lod
+ ;
+ draw(Mesh::Enum(Mesh::Sphere0 + lod), mtx, attrib.m_wireframe);
+ }
+
+ void drawFrustum(const float* _viewProj)
+ {
+ Plane planes[6];
+ buildFrustumPlanes(planes, _viewProj);
+
+ float points[24];
+ intersectPlanes(&points[ 0], planes[0], planes[2], planes[4]);
+ intersectPlanes(&points[ 3], planes[0], planes[3], planes[4]);
+ intersectPlanes(&points[ 6], planes[0], planes[3], planes[5]);
+ intersectPlanes(&points[ 9], planes[0], planes[2], planes[5]);
+ intersectPlanes(&points[12], planes[1], planes[2], planes[4]);
+ intersectPlanes(&points[15], planes[1], planes[3], planes[4]);
+ intersectPlanes(&points[18], planes[1], planes[3], planes[5]);
+ intersectPlanes(&points[21], planes[1], planes[2], planes[5]);
+
+ moveTo(&points[ 0]);
+ lineTo(&points[ 3]);
+ lineTo(&points[ 6]);
+ lineTo(&points[ 9]);
+ close();
+
+ moveTo(&points[12]);
+ lineTo(&points[15]);
+ lineTo(&points[18]);
+ lineTo(&points[21]);
+ close();
+
+ moveTo(&points[ 0]);
+ lineTo(&points[12]);
+
+ moveTo(&points[ 3]);
+ lineTo(&points[15]);
+
+ moveTo(&points[ 6]);
+ lineTo(&points[18]);
+
+ moveTo(&points[ 9]);
+ lineTo(&points[21]);
+ }
+
+ void drawFrustum(const void* _viewProj)
+ {
+ drawFrustum( (const float*)_viewProj);
+ }
+
+ void drawArc(Axis::Enum _axis, float _x, float _y, float _z, float _radius, float _degrees)
+ {
+ const Attrib& attrib = m_attrib[m_stack];
+ const uint32_t num = getCircleLod(attrib.m_lod);
+ const float step = bx::pi * 2.0f / num;
+
+ _degrees = bx::fwrap(_degrees, 360.0f);
+
+ float pos[3];
+ getPoint(pos, _axis
+ , bx::fsin(step * 0)*_radius
+ , bx::fcos(step * 0)*_radius
+ );
+
+ moveTo(pos[0] + _x, pos[1] + _y, pos[2] + _z);
+
+ uint32_t n = uint32_t(num*_degrees/360.0f);
+
+ for (uint32_t ii = 1; ii < n+1; ++ii)
+ {
+ getPoint(pos, _axis
+ , bx::fsin(step * ii)*_radius
+ , bx::fcos(step * ii)*_radius
+ );
+ lineTo(pos[0] + _x, pos[1] + _y, pos[2] + _z);
+ }
+
+ moveTo(_x, _y, _z);
+ getPoint(pos, _axis
+ , bx::fsin(step * 0)*_radius
+ , bx::fcos(step * 0)*_radius
+ );
+ lineTo(pos[0] + _x, pos[1] + _y, pos[2] + _z);
+
+ getPoint(pos, _axis
+ , bx::fsin(step * n)*_radius
+ , bx::fcos(step * n)*_radius
+ );
+ moveTo(pos[0] + _x, pos[1] + _y, pos[2] + _z);
+ lineTo(_x, _y, _z);
+ }
+
+ void drawCircle(const float* _normal, const float* _center, float _radius, float _weight = 0.0f)
+ {
+ const Attrib& attrib = m_attrib[m_stack];
+ const uint32_t num = getCircleLod(attrib.m_lod);
+ const float step = bx::pi * 2.0f / num;
+ _weight = bx::fclamp(_weight, 0.0f, 2.0f);
+
+ Plane plane = { { _normal[0], _normal[1], _normal[2] }, 0.0f };
+ float udir[3];
+ float vdir[3];
+ calcPlaneUv(plane, udir, vdir);
+
+ float pos[3];
+ float tmp0[3];
+ float tmp1[3];
+
+ float xy0[2];
+ float xy1[2];
+ circle(xy0, 0.0f);
+ squircle(xy1, 0.0f);
+
+ bx::vec3Mul(pos, udir, bx::flerp(xy0[0], xy1[0], _weight)*_radius);
+ bx::vec3Mul(tmp0, vdir, bx::flerp(xy0[1], xy1[1], _weight)*_radius);
+ bx::vec3Add(tmp1, pos, tmp0);
+ bx::vec3Add(pos, tmp1, _center);
+ moveTo(pos);
+
+ for (uint32_t ii = 1; ii < num; ++ii)
+ {
+ float angle = step * ii;
+ circle(xy0, angle);
+ squircle(xy1, angle);
+
+ bx::vec3Mul(pos, udir, bx::flerp(xy0[0], xy1[0], _weight)*_radius);
+ bx::vec3Mul(tmp0, vdir, bx::flerp(xy0[1], xy1[1], _weight)*_radius);
+ bx::vec3Add(tmp1, pos, tmp0);
+ bx::vec3Add(pos, tmp1, _center);
+ lineTo(pos);
+ }
+
+ close();
+ }
+
+ void drawCircle(const void* _normal, const void* _center, float _radius, float _weight = 0.0f)
+ {
+ drawCircle( (const float*)_normal, (const float*)_center, _radius, _weight);
+ }
+
+ void drawCircle(Axis::Enum _axis, float _x, float _y, float _z, float _radius, float _weight = 0.0f)
+ {
+ const Attrib& attrib = m_attrib[m_stack];
+ const uint32_t num = getCircleLod(attrib.m_lod);
+ const float step = bx::pi * 2.0f / num;
+ _weight = bx::fclamp(_weight, 0.0f, 2.0f);
+
+ float xy0[2];
+ float xy1[2];
+ circle(xy0, 0.0f);
+ squircle(xy1, 0.0f);
+
+ float pos[3];
+ getPoint(pos, _axis
+ , bx::flerp(xy0[0], xy1[0], _weight)*_radius
+ , bx::flerp(xy0[1], xy1[1], _weight)*_radius
+ );
+
+ moveTo(pos[0] + _x, pos[1] + _y, pos[2] + _z);
+ for (uint32_t ii = 1; ii < num; ++ii)
+ {
+ float angle = step * ii;
+ circle(xy0, angle);
+ squircle(xy1, angle);
+
+ getPoint(pos, _axis
+ , bx::flerp(xy0[0], xy1[0], _weight)*_radius
+ , bx::flerp(xy0[1], xy1[1], _weight)*_radius
+ );
+ lineTo(pos[0] + _x, pos[1] + _y, pos[2] + _z);
+ }
+ close();
+ }
+
+ void drawAxis(float _x, float _y, float _z, float _len, Axis::Enum _highlight)
+ {
+ push();
+
+ setColor(Axis::X == _highlight ? 0xff00ffff : 0xff0000ff);
+ moveTo(_x, _y, _z);
+ lineTo(_x + _len, _y, _z);
+
+ setColor(Axis::Y == _highlight ? 0xff00ffff : 0xff00ff00);
+ moveTo(_x, _y, _z);
+ lineTo(_x, _y + _len, _z);
+
+ setColor(Axis::Z == _highlight ? 0xff00ffff : 0xffff0000);
+ moveTo(_x, _y, _z);
+ lineTo(_x, _y, _z + _len);
+
+ pop();
+ }
+
+ void drawGrid(const float* _normal, const float* _center, uint32_t _size, float _step)
+ {
+ float udir[3];
+ float vdir[3];
+ Plane plane = { { _normal[0], _normal[1], _normal[2] }, 0.0f };
+ calcPlaneUv(plane, udir, vdir);
+
+ bx::vec3Mul(udir, udir, _step);
+ bx::vec3Mul(vdir, vdir, _step);
+
+ const uint32_t num = (_size/2)*2+1;
+ const float halfExtent = float(_size/2);
+
+ float umin[3];
+ bx::vec3Mul(umin, udir, -halfExtent);
+
+ float umax[3];
+ bx::vec3Mul(umax, udir, halfExtent);
+
+ float vmin[3];
+ bx::vec3Mul(vmin, vdir, -halfExtent);
+
+ float vmax[3];
+ bx::vec3Mul(vmax, vdir, halfExtent);
+
+ float tmp[3];
+
+ float xs[3];
+ float xe[3];
+
+ bx::vec3Add(tmp, umin, vmin);
+ bx::vec3Add(xs, _center, tmp);
+
+ bx::vec3Add(tmp, umax, vmin);
+ bx::vec3Add(xe, _center, tmp);
+
+ float ys[3];
+ float ye[3];
+
+ bx::vec3Add(tmp, umin, vmin);
+ bx::vec3Add(ys, _center, tmp);
+
+ bx::vec3Add(tmp, umin, vmax);
+ bx::vec3Add(ye, _center, tmp);
+
+ for (uint32_t ii = 0; ii < num; ++ii)
+ {
+ moveTo(xs);
+ lineTo(xe);
+ bx::vec3Add(xs, xs, vdir);
+ bx::vec3Add(xe, xe, vdir);
+
+ moveTo(ys);
+ lineTo(ye);
+ bx::vec3Add(ys, ys, udir);
+ bx::vec3Add(ye, ye, udir);
+ }
+ }
+
+ void drawGrid(const void* _normal, const void* _center, uint32_t _size, float _step)
+ {
+ drawGrid( (const float*)_normal, (const float*)_center, _size, _step);
+ }
+
+ void drawGrid(Axis::Enum _axis, const float* _center, uint32_t _size, float _step)
+ {
+ push();
+ setTranslate(_center);
+
+ const uint32_t num = (_size/2)*2-1;
+ const float halfExtent = float(_size/2) * _step;
+
+ setColor(0xff606060);
+ float yy = -halfExtent + _step;
+ for (uint32_t ii = 0; ii < num; ++ii)
+ {
+ moveTo(_axis, -halfExtent, yy);
+ lineTo(_axis, halfExtent, yy);
+
+ moveTo(_axis, yy, -halfExtent);
+ lineTo(_axis, yy, halfExtent);
+
+ yy += _step;
+ }
+
+ setColor(0xff101010);
+ moveTo(_axis, -halfExtent, -halfExtent);
+ lineTo(_axis, -halfExtent, halfExtent);
+ lineTo(_axis, halfExtent, halfExtent);
+ lineTo(_axis, halfExtent, -halfExtent);
+ close();
+
+ moveTo(_axis, -halfExtent, 0.0f);
+ lineTo(_axis, halfExtent, 0.0f);
+
+ moveTo(_axis, 0.0f, -halfExtent);
+ lineTo(_axis, 0.0f, halfExtent);
+
+ pop();
+ }
+
+ void drawGrid(Axis::Enum _axis, const void* _center, uint32_t _size, float _step)
+ {
+ drawGrid(_axis, (const float*)_center, _size, _step);
+ }
+
+ void drawOrb(float _x, float _y, float _z, float _radius, Axis::Enum _hightlight)
+ {
+ push();
+
+ setColor(Axis::X == _hightlight ? 0xff00ffff : 0xff0000ff);
+ drawCircle(Axis::X, _x, _y, _z, _radius);
+
+ setColor(Axis::Y == _hightlight ? 0xff00ffff : 0xff00ff00);
+ drawCircle(Axis::Y, _x, _y, _z, _radius);
+
+ setColor(Axis::Z == _hightlight ? 0xff00ffff : 0xffff0000);
+ drawCircle(Axis::Z, _x, _y, _z, _radius);
+
+ pop();
+ }
+
+private:
+ struct Mesh
+ {
+ enum Enum
+ {
+ Sphere0,
+ Sphere1,
+ Sphere2,
+ Sphere3,
+ Cube,
+
+ Count,
+
+ SphereMaxLod = Sphere3 - Sphere0,
+ };
+
+ uint32_t m_startVertex;
+ uint32_t m_numVertices;
+ uint32_t m_startIndex[2];
+ uint32_t m_numIndices[2];
+ };
+
+ struct Program
+ {
+ enum Enum
+ {
+ Lines,
+ LinesStipple,
+ Fill,
+ FillLit,
+
+ Count
+ };
+ };
+
+ void draw(Mesh::Enum _mesh, const float* _mtx, bool _wireframe) const
+ {
+ const Mesh& mesh = m_mesh[_mesh];
+
+ const Attrib& attrib = m_attrib[m_stack];
+
+ if (0 != mesh.m_numIndices[_wireframe])
+ {
+ bgfx::setIndexBuffer(m_ibh
+ , mesh.m_startIndex[_wireframe]
+ , mesh.m_numIndices[_wireframe]
+ );
+ }
+
+ float params[4][4] =
+ {
+ {
+ 0.0f,
+ -1.0f,
+ 0.0f,
+ 3.0f,
+ },
+ {
+ 1.0f,
+ 0.9f,
+ 0.8f,
+ 0.0f,
+ },
+ {
+ 0.2f,
+ 0.22f,
+ 0.5f,
+ 0.0f,
+ },
+ {
+ ( (attrib.m_abgr>>24) )/255.0f,
+ ( (attrib.m_abgr>>16)&0xff)/255.0f,
+ ( (attrib.m_abgr>> 8)&0xff)/255.0f,
+ ( (attrib.m_abgr )&0xff)/255.0f,
+ },
+ };
+
+ bx::vec3Norm(params[0], params[0]);
+
+ bgfx::setUniform(u_params, params, 4);
+
+ bgfx::setTransform(_mtx);
+ bgfx::setVertexBuffer(m_vbh, mesh.m_startVertex, mesh.m_numVertices);
+ bgfx::setState(0
+ | attrib.m_state
+ | (_wireframe ? BGFX_STATE_PT_LINES : 0)
+ );
+ bgfx::submit(m_viewId, m_program[_wireframe ? Program::Fill : Program::FillLit]);
+ }
+
+ void softFlush()
+ {
+ if (m_pos == uint16_t(BX_COUNTOF(m_cache) ) )
+ {
+ flush();
+ }
+ }
+
+ void flush()
+ {
+ if (0 != m_pos)
+ {
+ if (bgfx::checkAvailTransientBuffers(m_pos, DebugVertex::ms_decl, m_indexPos) )
+ {
+ bgfx::TransientVertexBuffer tvb;
+ bgfx::allocTransientVertexBuffer(&tvb, m_pos, DebugVertex::ms_decl);
+ memcpy(tvb.data, m_cache, m_pos * DebugVertex::ms_decl.m_stride);
+
+ bgfx::TransientIndexBuffer tib;
+ bgfx::allocTransientIndexBuffer(&tib, m_indexPos);
+ memcpy(tib.data, m_indices, m_indexPos * sizeof(uint16_t) );
+
+ bgfx::setVertexBuffer(&tvb);
+ bgfx::setIndexBuffer(&tib);
+ bgfx::setState(0
+ | BGFX_STATE_RGB_WRITE
+ | BGFX_STATE_PT_LINES
+ | BGFX_STATE_DEPTH_TEST_LEQUAL
+ | BGFX_STATE_DEPTH_WRITE
+// | BGFX_STATE_BLEND_ALPHA
+ );
+ bgfx::setTransform(m_mtx);
+ bgfx::ProgramHandle program = m_program[m_attrib[m_stack].m_stipple ? 1 : 0];
+ bgfx::submit(m_viewId, program);
+ }
+
+ m_state = State::None;
+ m_pos = 0;
+ m_indexPos = 0;
+ m_vertexPos = 0;
+ }
+ }
+
+ struct State
+ {
+ enum Enum
+ {
+ None,
+ MoveTo,
+ LineTo,
+
+ Count
+ };
+ };
+
+ static const uint32_t cacheSize = 1024;
+ static const uint32_t stackSize = 16;
+ BX_STATIC_ASSERT(cacheSize >= 3, "Cache must be at least 3 elements.");
+ DebugVertex m_cache[cacheSize+1];
+ uint32_t m_mtx;
+ uint16_t m_indices[cacheSize*2];
+ uint16_t m_pos;
+ uint16_t m_indexPos;
+ uint16_t m_vertexPos;
+ uint8_t m_viewId;
+ uint8_t m_stack;
+
+ struct Attrib
+ {
+ uint64_t m_state;
+ float m_offset;
+ float m_scale;
+ uint32_t m_abgr;
+ bool m_stipple;
+ bool m_wireframe;
+ uint8_t m_lod;
+ };
+
+ Attrib m_attrib[stackSize];
+
+ State::Enum m_state;
+
+ Mesh m_mesh[Mesh::Count];
+
+ bgfx::ProgramHandle m_program[Program::Count];
+ bgfx::UniformHandle u_params;
+
+ bgfx::VertexBufferHandle m_vbh;
+ bgfx::IndexBufferHandle m_ibh;
+
+ bx::AllocatorI* m_allocator;
+};
+
+static DebugDraw s_dd;
+
+void ddInit(bx::AllocatorI* _allocator)
+{
+ s_dd.init(_allocator);
+}
+
+void ddShutdown()
+{
+ s_dd.shutdown();
+}
+
+void ddBegin(uint8_t _viewId)
+{
+ s_dd.begin(_viewId);
+}
+
+void ddEnd()
+{
+ s_dd.end();
+}
+
+void ddPush()
+{
+ s_dd.push();
+}
+
+void ddPop()
+{
+ s_dd.pop();
+}
+
+void ddSetState(bool _depthTest, bool _depthWrite, bool _clockwise)
+{
+ s_dd.setState(_depthTest, _depthWrite, _clockwise);
+}
+
+void ddSetColor(uint32_t _abgr)
+{
+ s_dd.setColor(_abgr);
+}
+
+void ddSetLod(uint8_t _lod)
+{
+ s_dd.setLod(_lod);
+}
+
+void ddSetWireframe(bool _wireframe)
+{
+ s_dd.setWireframe(_wireframe);
+}
+
+void ddSetStipple(bool _stipple, float _scale, float _offset)
+{
+ s_dd.setStipple(_stipple, _scale, _offset);
+}
+
+void ddSetTransform(const void* _mtx)
+{
+ s_dd.setTransform(_mtx);
+}
+
+void ddSetTranslate(float _x, float _y, float _z)
+{
+ s_dd.setTranslate(_x, _y, _z);
+}
+
+void ddMoveTo(float _x, float _y, float _z)
+{
+ s_dd.moveTo(_x, _y, _z);
+}
+
+void ddMoveTo(const void* _pos)
+{
+ s_dd.moveTo(_pos);
+}
+
+void ddLineTo(float _x, float _y, float _z)
+{
+ s_dd.lineTo(_x, _y, _z);
+}
+
+void ddLineTo(const void* _pos)
+{
+ s_dd.lineTo(_pos);
+}
+
+void ddClose()
+{
+ s_dd.close();
+}
+
+void ddDraw(const Aabb& _aabb)
+{
+ s_dd.draw(_aabb);
+}
+
+void ddDraw(const Cylinder& _cylinder, bool _capsule)
+{
+ s_dd.draw(_cylinder, _capsule);
+}
+
+void ddDraw(const Disk& _disk)
+{
+ s_dd.draw(_disk);
+}
+
+void ddDraw(const Obb& _obb)
+{
+ s_dd.draw(_obb);
+}
+
+void ddDraw(const Sphere& _sphere)
+{
+ s_dd.draw(_sphere);
+}
+
+void ddDrawFrustum(const void* _viewProj)
+{
+ s_dd.drawFrustum(_viewProj);
+}
+
+void ddDrawArc(Axis::Enum _axis, float _x, float _y, float _z, float _radius, float _degrees)
+{
+ s_dd.drawArc(_axis, _x, _y, _z, _radius, _degrees);
+}
+
+void ddDrawCircle(const void* _normal, const void* _center, float _radius, float _weight)
+{
+ s_dd.drawCircle(_normal, _center, _radius, _weight);
+}
+
+void ddDrawCircle(Axis::Enum _axis, float _x, float _y, float _z, float _radius, float _weight)
+{
+ s_dd.drawCircle(_axis, _x, _y, _z, _radius, _weight);
+}
+
+void ddDrawAxis(float _x, float _y, float _z, float _len, Axis::Enum _hightlight)
+{
+ s_dd.drawAxis(_x, _y, _z, _len, _hightlight);
+}
+
+void ddDrawGrid(const void* _normal, const void* _center, uint32_t _size, float _step)
+{
+ s_dd.drawGrid(_normal, _center, _size, _step);
+}
+
+void ddDrawGrid(Axis::Enum _axis, const void* _center, uint32_t _size, float _step)
+{
+ s_dd.drawGrid(_axis, _center, _size, _step);
+}
+
+void ddDrawOrb(float _x, float _y, float _z, float _radius, Axis::Enum _hightlight)
+{
+ s_dd.drawOrb(_x, _y, _z, _radius, _hightlight);
+}
diff --git a/3rdparty/bgfx/examples/common/debugdraw/debugdraw.h b/3rdparty/bgfx/examples/common/debugdraw/debugdraw.h
new file mode 100644
index 00000000000..e6c22094537
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/debugdraw.h
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2011-2016 Branimir Karadzic. All rights reserved.
+ * License: http://www.opensource.org/licenses/BSD-2-Clause
+ */
+
+#ifndef DEBUGDRAW_H_HEADER_GUARD
+#define DEBUGDRAW_H_HEADER_GUARD
+
+#include <bx/allocator.h>
+#include "../bounds.h"
+
+struct Axis
+{
+ enum Enum
+ {
+ X,
+ Y,
+ Z,
+
+ Count
+ };
+};
+
+///
+void ddInit(bx::AllocatorI* _allocator = NULL);
+
+///
+void ddShutdown();
+
+///
+void ddBegin(uint8_t _viewId);
+
+///
+void ddEnd();
+
+///
+void ddPush();
+
+///
+void ddPop();
+
+///
+void ddSetState(bool _depthTest, bool _depthWrite, bool _clockwise);
+
+///
+void ddSetColor(uint32_t _abgr);
+
+///
+void ddSetLod(uint8_t _lod);
+
+///
+void ddSetWireframe(bool _wireframe);
+
+///
+void ddSetStipple(bool _stipple, float _scale = 1.0f, float _offset = 0.0f);
+
+///
+void ddSetTransform(const void* _mtx);
+
+///
+void ddSetTranslate(float _x, float _y, float _z);
+
+///
+void ddMoveTo(float _x, float _y, float _z = 0.0f);
+
+///
+void ddMoveTo(const void* _pos);
+
+///
+void ddLineTo(float _x, float _y, float _z = 0.0f);
+
+///
+void ddLineTo(const void* _pos);
+
+///
+void ddClose();
+
+///
+void ddDraw(const Aabb& _aabb);
+
+///
+void ddDraw(const Cylinder& _cylinder, bool _capsule = false);
+
+///
+void ddDraw(const Disk& _disk);
+
+///
+void ddDraw(const Obb& _obb);
+
+///
+void ddDraw(const Sphere& _sphere);
+
+///
+void ddDrawFrustum(const void* _viewProj);
+
+///
+void ddDrawArc(Axis::Enum _axis, float _x, float _y, float _z, float _radius, float _degrees);
+
+///
+void ddDrawCircle(const void* _normal, const void* _center, float _radius, float _weight = 0.0f);
+
+///
+void ddDrawCircle(Axis::Enum _axis, float _x, float _y, float _z, float _radius, float _weight = 0.0f);
+
+///
+void ddDrawAxis(float _x, float _y, float _z, float _len = 1.0f, Axis::Enum _highlight = Axis::Count);
+
+///
+void ddDrawGrid(const void* _normal, const void* _center, uint32_t _size = 20, float _step = 1.0f);
+
+///
+void ddDrawGrid(Axis::Enum _axis, const void* _center, uint32_t _size = 20, float _step = 1.0f);
+
+///
+void ddDrawOrb(float _x, float _y, float _z, float _radius, Axis::Enum _highlight = Axis::Count);
+
+#endif // DEBUGDRAW_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.bin.h b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.bin.h
new file mode 100644
index 00000000000..5bdca884235
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.bin.h
@@ -0,0 +1,73 @@
+static const uint8_t fs_debugdraw_fill_glsl[104] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x04, 0x00, 0x00, 0x04, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x75, 0x6e, 0x69, // ams......J...uni
+ 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // form vec4 u_para
+ 0x6d, 0x73, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, // ms[4];.void main
+ 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, // ().{. gl_FragC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, // olor = u_params[
+ 0x33, 0x5d, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // 3];.}...
+};
+static const uint8_t fs_debugdraw_fill_dx9[192] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0xa4, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfe, // ams.............
+ 0xff, 0x23, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, // .#.CTAB....S....
+ 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4c, // ...............L
+ 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c, // ...0...........<
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, // .......u_params.
+ 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, // ...ps_3_0.Micros
+ 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, // oft (R) HLSL Sha
+ 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, // der Compiler 10.
+ 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x01, // 0.10011.16384...
+ 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ................
+};
+static const uint8_t fs_debugdraw_fill_dx11[251] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH........u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0xdc, 0x00, 0x44, 0x58, 0x42, 0x43, 0xda, // ams........DXBC.
+ 0xfb, 0x8d, 0xd4, 0xad, 0x58, 0xef, 0x92, 0x13, 0x90, 0x07, 0xb7, 0x79, 0x4c, 0x38, 0x95, 0x01, // ....X......yL8..
+ 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x60, // ...........,...`
+ 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, // .......ISGN,....
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // ....... ........
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, // ...............S
+ 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x4f, 0x53, 0x47, 0x4e, 0x2c, // V_POSITION.OSGN,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, // ........... ....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, // ................
+ 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, // ...SV_TARGET...S
+ 0x48, 0x44, 0x52, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x59, // HDR@...@.......Y
+ 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x65, // ...F. .........e
+ 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0xf2, // .... ......6....
+ 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ......F. ......
+ 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, // ...>.....@.
+};
+static const uint8_t fs_debugdraw_fill_mtl[410] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x01, 0x00, 0x00, 0x75, 0x73, // FSH...........us
+ 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
+ 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
+ 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // .};.struct xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, // tlShaderOutput {
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . float4 gl_Fra
+ 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, // gColor;.};.struc
+ 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, // t xlatMtlShaderU
+ 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // niform {. float
+ 0x34, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x7d, // 4 u_params[4];.}
+ 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // ;.fragment xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, // tlShaderOutput x
+ 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, // latMtlMain (xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, // MtlShaderInput _
+ 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, // mtl_i [[stage_in
+ 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, // ]], constant xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, // tMtlShaderUnifor
+ 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, // m& _mtl_u [[buff
+ 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, // er(0)]]).{. xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // tMtlShaderOutput
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // _mtl_o;. _mtl_
+ 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, // o.gl_FragColor =
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, // _mtl_u.u_params
+ 0x5b, 0x33, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, // [3];. return _m
+ 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // tl_o;.}...
+};
diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.sc b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.sc
new file mode 100644
index 00000000000..3ae18cd6a5c
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill.sc
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2011-2016 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include <bgfx_shader.sh>
+
+uniform vec4 u_params[4];
+
+#define u_lightDir u_params[0].xyz
+#define u_shininess u_params[0].w
+#define u_skyColor u_params[1].xyz
+#define u_groundColor u_params[2].xyz
+#define u_matColor u_params[3]
+
+void main()
+{
+ gl_FragColor = u_matColor;
+}
diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.bin.h b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.bin.h
new file mode 100644
index 00000000000..7bc4cae198b
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.bin.h
@@ -0,0 +1,168 @@
+static const uint8_t fs_debugdraw_fill_lit_glsl[510] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH...V_...u_par
+ 0x61, 0x6d, 0x73, 0x02, 0x04, 0x00, 0x00, 0x04, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x76, 0x61, 0x72, // ams..........var
+ 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, // ying highp vec3
+ 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, // v_world;.uniform
+ 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x34, // vec4 u_params[4
+ 0x5d, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, // ];.void main ().
+ 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x74, // {. highp vec3 t
+ 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // mpvar_1;. tmpva
+ 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x64, 0x46, 0x64, 0x78, 0x28, 0x76, 0x5f, 0x77, 0x6f, 0x72, // r_1 = dFdx(v_wor
+ 0x6c, 0x64, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, // ld);. highp vec
+ 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // 3 tmpvar_2;. tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x64, 0x46, 0x64, 0x79, 0x28, 0x76, 0x5f, // pvar_2 = dFdy(v_
+ 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, // world);. medium
+ 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, // p vec4 tmpvar_3;
+ 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x20, // . tmpvar_3.xyz
+ 0x3d, 0x20, 0x28, 0x6d, 0x69, 0x78, 0x20, 0x28, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, // = (mix (u_params
+ 0x5b, 0x32, 0x5d, 0x2e, 0x78, 0x79, 0x7a, 0x2c, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, // [2].xyz, u_param
+ 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x78, 0x79, 0x7a, 0x2c, 0x20, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, // s[1].xyz, (.
+ 0x28, 0x64, 0x6f, 0x74, 0x20, 0x28, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, // (dot (normalize(
+ 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // (. (tmpvar_
+ 0x31, 0x2e, 0x79, 0x7a, 0x78, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // 1.yzx * tmpvar_2
+ 0x2e, 0x7a, 0x78, 0x79, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x0a, 0x20, 0x20, // .zxy). - .
+ 0x20, 0x20, 0x20, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x7a, 0x78, // (tmpvar_1.zx
+ 0x79, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x79, 0x7a, 0x78, // y * tmpvar_2.yzx
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x2c, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, // ). )), u_para
+ 0x6d, 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x20, 0x2a, 0x20, 0x30, 0x2e, 0x35, // ms[0].xyz) * 0.5
+ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x35, 0x29, 0x29, 0x20, 0x2a, 0x20, 0x75, // ). + 0.5)) * u
+ 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x33, 0x5d, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x3b, // _params[3].xyz);
+ 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x77, 0x20, 0x3d, 0x20, // . tmpvar_3.w =
+ 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x33, 0x5d, 0x2e, 0x77, 0x3b, 0x0a, 0x20, // u_params[3].w;.
+ 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, // gl_FragColor =
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // tmpvar_3;.}...
+};
+static const uint8_t fs_debugdraw_fill_lit_dx9[412] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH...V_...u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0x80, 0x01, 0x00, 0x03, 0xff, 0xff, 0xfe, // ams.............
+ 0xff, 0x23, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, // .#.CTAB....S....
+ 0x03, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x4c, // ...............L
+ 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c, // ...0...........<
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, // .......u_params.
+ 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, // ...ps_3_0.Micros
+ 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, // oft (R) HLSL Sha
+ 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, // der Compiler 10.
+ 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x51, // 0.10011.16384..Q
+ 0x00, 0x00, 0x05, 0x04, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........?.....
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x01, 0x80, 0x00, // ................
+ 0x00, 0x07, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xc9, 0x91, 0x5c, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x5b, 0x00, 0x00, 0x02, 0x01, // ...........[....
+ 0x00, 0x07, 0x80, 0x00, 0x00, 0xd2, 0x90, 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x07, 0x80, 0x00, // ................
+ 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x01, // ................
+ 0x00, 0xd2, 0x80, 0x00, 0x00, 0xc9, 0x80, 0x02, 0x00, 0xe4, 0x81, 0x24, 0x00, 0x00, 0x02, 0x01, // ...........$....
+ 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, // ................
+ 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, // ................
+ 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0xa0, 0x04, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, // ................
+ 0x00, 0x07, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0e, 0x80, 0x01, // ................
+ 0x00, 0x90, 0x81, 0x01, 0x00, 0x90, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x00, // ................
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0xf9, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x08, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x08, 0x08, 0x80, 0x03, 0x00, 0xff, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ............
+};
+static const uint8_t fs_debugdraw_fill_lit_dx11[719] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x01, 0x00, 0x08, 0x75, 0x5f, 0x70, 0x61, 0x72, // FSH...V_...u_par
+ 0x61, 0x6d, 0x73, 0x12, 0x04, 0x00, 0x00, 0x04, 0x00, 0xb0, 0x02, 0x44, 0x58, 0x42, 0x43, 0x59, // ams........DXBCY
+ 0x1c, 0xf9, 0xc6, 0x41, 0xb7, 0xae, 0xfd, 0xa5, 0xa5, 0x0c, 0x28, 0x25, 0x0d, 0x24, 0x29, 0x01, // ...A......(%.$).
+ 0x00, 0x00, 0x00, 0xb0, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, // ...........,....
+ 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, // .......ISGNh....
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // .......P........
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, // ................
+ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x53, // ...............S
+ 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, // V_POSITION.TEXCO
+ 0x4f, 0x52, 0x44, 0x00, 0xab, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, // ORD....OSGN,....
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....... ........
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, // ...............S
+ 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xd8, // V_TARGET...SHDR.
+ 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, // ...@...v...Y...F
+ 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x72, // . .........b...r
+ 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, // .......e.... ...
+ 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x06, 0x72, // ...h.......6...r
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x14, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x02, // ...........A....
+ 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // .......r.......F
+ 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, 0x01, // ...........r....
+ 0x00, 0x00, 0x00, 0x26, 0x19, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, // ...&.......8...r
+ 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // .......F.......F
+ 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x00, // .......2...r....
+ 0x00, 0x00, 0x00, 0x26, 0x09, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x96, 0x04, 0x10, 0x00, 0x00, // ...&............
+ 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, // ...F...A........
+ 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, // ...........F....
+ 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x05, 0x82, // ...F.......D....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, // .......:.......8
+ 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x00, 0x00, // ...r............
+ 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x12, // ...F............
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, // .......F.......F
+ 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, 0x12, // . .........2....
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // ................
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, // @.....?.@.....?.
+ 0x00, 0x00, 0x0a, 0xe2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x89, 0x20, 0x00, 0x00, // ............. ..
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x89, 0x20, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, // ......... .A....
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x00, // .......2...r....
+ 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x38, // ...F. .........8
+ 0x00, 0x00, 0x08, 0x72, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, // ...r ......F....
+ 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, // ...F. .........6
+ 0x00, 0x00, 0x06, 0x82, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x80, 0x20, 0x00, 0x00, // .... ......:. ..
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, // .......>.....@.
+};
+static const uint8_t fs_debugdraw_fill_lit_mtl[835] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x00, 0x00, 0x34, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH...V_..4...us
+ 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
+ 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, // . float3 v_worl
+ 0x64, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, // d;.};.struct xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // tMtlShaderOutput
+ 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x46, // {. float4 gl_F
+ 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, // ragColor;.};.str
+ 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // uct xlatMtlShade
+ 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // rUniform {. flo
+ 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x34, 0x5d, 0x3b, // at4 u_params[4];
+ 0x0a, 0x7d, 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, // .};.fragment xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // tMtlShaderOutput
+ 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, // xlatMtlMain (xl
+ 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, // atMtlShaderInput
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, // _mtl_i [[stage_
+ 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, // in]], constant x
+ 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, // latMtlShaderUnif
+ 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, // orm& _mtl_u [[bu
+ 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, // ffer(0)]]).{. x
+ 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, // latMtlShaderOutp
+ 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // ut _mtl_o;. flo
+ 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, // at3 tmpvar_1;.
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x64, 0x66, 0x64, 0x78, 0x28, // tmpvar_1 = dfdx(
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x29, 0x3b, // _mtl_i.v_world);
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // . float3 tmpvar
+ 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, // _2;. tmpvar_2 =
+ 0x20, 0x64, 0x66, 0x64, 0x79, 0x28, 0x2d, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, // dfdy(-_mtl_i.v_
+ 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, // world);. float4
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // tmpvar_3;. tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x6d, 0x69, 0x78, // var_3.xyz = (mix
+ 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, // (_mtl_u.u_param
+ 0x73, 0x5b, 0x32, 0x5d, 0x2e, 0x78, 0x79, 0x7a, 0x2c, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // s[2].xyz, _mtl_u
+ 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x31, 0x5d, 0x2e, 0x78, 0x79, 0x7a, // .u_params[1].xyz
+ 0x2c, 0x20, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x64, 0x6f, 0x74, 0x20, 0x28, 0x6e, 0x6f, // , (. (dot (no
+ 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, // rmalize((.
+ 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x79, 0x7a, 0x78, 0x20, 0x2a, 0x20, // (tmpvar_1.yzx *
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x7a, 0x78, 0x79, 0x29, 0x0a, 0x20, 0x20, // tmpvar_2.zxy).
+ 0x20, 0x20, 0x20, 0x2d, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x74, 0x6d, 0x70, // - . (tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x7a, 0x78, 0x79, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, // var_1.zxy * tmpv
+ 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x79, 0x7a, 0x78, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, // ar_2.yzx). ))
+ 0x2c, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, // , _mtl_u.u_param
+ 0x73, 0x5b, 0x30, 0x5d, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x20, 0x2a, 0x20, 0x30, 0x2e, 0x35, 0x29, // s[0].xyz) * 0.5)
+ 0x0a, 0x20, 0x20, 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x35, 0x29, 0x29, 0x20, 0x2a, 0x20, 0x5f, 0x6d, // . + 0.5)) * _m
+ 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x33, 0x5d, // tl_u.u_params[3]
+ 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // .xyz);. tmpvar_
+ 0x33, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x70, // 3.w = _mtl_u.u_p
+ 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5b, 0x33, 0x5d, 0x2e, 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, // arams[3].w;. _m
+ 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, // tl_o.gl_FragColo
+ 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, // r = tmpvar_3;.
+ 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, // return _mtl_o;.}
+ 0x0a, 0x0a, 0x00, // ...
+};
diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.sc b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.sc
new file mode 100644
index 00000000000..3e0638701e7
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_fill_lit.sc
@@ -0,0 +1,35 @@
+$input v_view, v_world
+
+/*
+ * Copyright 2011-2016 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include <bgfx_shader.sh>
+
+uniform vec4 u_params[4];
+
+#define u_lightDir u_params[0].xyz
+#define u_shininess u_params[0].w
+#define u_skyColor u_params[1].xyz
+#define u_groundColor u_params[2].xyz
+#define u_matColor u_params[3]
+
+void main()
+{
+ vec3 normal = normalize(cross(dFdx(v_world), dFdy(v_world) ) );
+ vec3 viewDir = -normalize(v_view);
+
+ float ndotl = dot(normal, u_lightDir);
+ vec3 diffuse = mix(u_groundColor, u_skyColor, ndotl*0.5 + 0.5) * u_matColor.xyz;
+
+#if 0
+ vec3 reflected = 2.0*ndotl*normal - u_lightDir;
+ float rdotv = dot(reflected, viewDir);
+ float spec = step(0.0, ndotl) * pow(max(0.0, rdotv), u_shininess);
+#else
+ float spec = 0.0;
+#endif
+
+ gl_FragColor = vec4(diffuse + vec3_splat(spec), u_matColor.w);
+}
diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.bin.h b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.bin.h
new file mode 100644
index 00000000000..747bb107908
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.bin.h
@@ -0,0 +1,70 @@
+static const uint8_t fs_debugdraw_lines_glsl[89] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x76, 0x61, // FSH....I..J...va
+ 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // rying highp vec4
+ 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, // v_color0;.void
+ 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, // main ().{. gl_F
+ 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, // ragColor = v_col
+ 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // or0;.}...
+};
+static const uint8_t fs_debugdraw_lines_dx9[141] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0xff, 0xff, // FSH....I........
+ 0xfe, 0xff, 0x17, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // ....CTAB....#...
+ 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, // ................
+ 0x1c, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, // ....ps_3_0.Micro
+ 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, // soft (R) HLSL Sh
+ 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, // ader Compiler 10
+ 0x2e, 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, // .0.10011.16384..
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x01, 0x00, 0x00, 0x02, // ................
+ 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .............
+};
+static const uint8_t fs_debugdraw_lines_dx11[260] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0xf4, 0x00, 0x44, 0x58, 0x42, 0x43, // FSH....I....DXBC
+ 0xa6, 0x7f, 0x08, 0xe2, 0x95, 0xbd, 0x5f, 0xa3, 0x3f, 0x5b, 0x58, 0x8e, 0x54, 0x0f, 0x89, 0x67, // ......_.?[X.T..g
+ 0x01, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, // ............,...
+ 0x80, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, // ........ISGNL...
+ 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........8.......
+ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // D...............
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, // ........SV_POSIT
+ 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, // ION.COLOR...OSGN
+ 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ,........... ...
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, // ....SV_TARGET...
+ 0x53, 0x48, 0x44, 0x52, 0x38, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, // SHDR8...@.......
+ 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, // b...........e...
+ 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, // . ......6.... ..
+ 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, // ....F.......>...
+ 0x00, 0x00, 0x00, 0x00, // ....
+};
+static const uint8_t fs_debugdraw_lines_mtl[404] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x85, 0x01, 0x00, 0x00, 0x75, 0x73, // FSH....I......us
+ 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
+ 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // . float4 v_colo
+ 0x72, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, // r0;.};.struct xl
+ 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, // atMtlShaderOutpu
+ 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, // t {. float4 gl_
+ 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, // FragColor;.};.st
+ 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, // ruct xlatMtlShad
+ 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x7d, 0x3b, 0x0a, 0x66, // erUniform {.};.f
+ 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, // ragment xlatMtlS
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // haderOutput xlat
+ 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // MtlMain (xlatMtl
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // ShaderInput _mtl
+ 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, // _i [[stage_in]],
+ 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // constant xlatMt
+ 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, // lShaderUniform&
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, // _mtl_u [[buffer(
+ 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // 0)]]).{. xlatMt
+ 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, // lShaderOutput _m
+ 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, // tl_o;. _mtl_o.g
+ 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x5f, 0x6d, // l_FragColor = _m
+ 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, // tl_i.v_color0;.
+ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, // return _mtl_o;.
+ 0x7d, 0x0a, 0x0a, 0x00, // }...
+};
diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.sc b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.sc
new file mode 100644
index 00000000000..9ba669f81a2
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines.sc
@@ -0,0 +1,13 @@
+$input v_color0
+
+/*
+ * Copyright 2011-2016 Branimir Karadzic. All rights reserved.
+ * License: http://www.opensource.org/licenses/BSD-2-Clause
+ */
+
+#include <bgfx_shader.sh>
+
+void main()
+{
+ gl_FragColor = v_color0;
+}
diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.bin.h b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.bin.h
new file mode 100644
index 00000000000..76ea1657b15
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.bin.h
@@ -0,0 +1,110 @@
+static const uint8_t fs_debugdraw_lines_stipple_glsl[235] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x76, 0x61, // FSH...Z.......va
+ 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // rying highp vec4
+ 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, // v_color0;.varyi
+ 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, // ng highp float v
+ 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, // _stipple;.void m
+ 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, // ain ().{. highp
+ 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, // float tmpvar_1;
+ 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x28, 0x66, // . tmpvar_1 = (f
+ 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x6d, 0x6f, 0x64, 0x20, 0x28, 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, // loat(mod (v_stip
+ 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x30, 0x2e, 0x32, 0x35, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, // ple, 0.25)));.
+ 0x69, 0x66, 0x20, 0x28, 0x28, 0x30, 0x2e, 0x31, 0x32, 0x35, 0x20, 0x3c, 0x20, 0x74, 0x6d, 0x70, // if ((0.125 < tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, // var_1)) {. di
+ 0x73, 0x63, 0x61, 0x72, 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, // scard;. };. gl
+ 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x5f, 0x63, // _FragColor = v_c
+ 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // olor0;.}...
+};
+static const uint8_t fs_debugdraw_lines_stipple_dx9[309] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0x28, 0x01, 0x00, 0x03, 0xff, 0xff, // FSH...Z...(.....
+ 0xfe, 0xff, 0x17, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, // ....CTAB....#...
+ 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, // ................
+ 0x1c, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, // ....ps_3_0.Micro
+ 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, // soft (R) HLSL Sh
+ 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, // ader Compiler 10
+ 0x2e, 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, // .0.10011.16384..
+ 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x80, 0x3e, // Q..........@...>
+ 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x05, 0x01, 0x00, 0x0f, 0xa0, // ...>....Q.......
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, // ................
+ 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x01, 0x90, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, // ................
+ 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, // ................
+ 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x55, 0x81, // ..............U.
+ 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, // ................
+ 0x00, 0x00, 0x55, 0xa1, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, // ..U.............
+ 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0xaa, 0xa0, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, // ........X.......
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x55, 0xa0, 0x41, 0x00, 0x00, 0x01, // ..........U.A...
+ 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x90, // ................
+ 0xff, 0xff, 0x00, 0x00, 0x00, // .....
+};
+static const uint8_t fs_debugdraw_lines_stipple_dx11[440] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0xa8, 0x01, 0x44, 0x58, 0x42, 0x43, // FSH...Z.....DXBC
+ 0x6f, 0x8f, 0x64, 0x39, 0xd9, 0xef, 0xc7, 0x09, 0x59, 0xdc, 0x77, 0x5a, 0xe8, 0x91, 0x4c, 0x16, // o.d9....Y.wZ..L.
+ 0x01, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, // ............,...
+ 0xa0, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, // ........ISGNl...
+ 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........P.......
+ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, // ................
+ 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................
+ 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........b.......
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, // ................
+ 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, // SV_POSITION.COLO
+ 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, // R.TEXCOORD..OSGN
+ 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, // ,........... ...
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x00, 0xab, 0xab, // ....SV_TARGET...
+ 0x53, 0x48, 0x44, 0x52, 0xcc, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, // SHDR....@...3...
+ 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, // b...........b...
+ 0x12, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, // ........e.... ..
+ 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, // ....h.......8...
+ 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, // ................
+ 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x41, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, // .@.....@A.......
+ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, // ............2...
+ 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, // ............A...
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3e, 0x0a, 0x10, 0x10, 0x00, // .....@.....>....
+ 0x02, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ....1...........
+ 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // .@.....>........
+ 0x0d, 0x00, 0x04, 0x03, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, // ............6...
+ 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, // . ......F.......
+ 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // >.......
+};
+static const uint8_t fs_debugdraw_lines_stipple_mtl[551] =
+{
+ 0x46, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH...Z.......us
+ 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
+ 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // . float4 v_colo
+ 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x5f, 0x73, 0x74, // r0;. float v_st
+ 0x69, 0x70, 0x70, 0x6c, 0x65, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, // ipple;.};.struct
+ 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, // xlatMtlShaderOu
+ 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // tput {. float4
+ 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x3b, // gl_FragColor;.};
+ 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, // .struct xlatMtlS
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x7d, // haderUniform {.}
+ 0x3b, 0x0a, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // ;.fragment xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, // tlShaderOutput x
+ 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, // latMtlMain (xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, // MtlShaderInput _
+ 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, // mtl_i [[stage_in
+ 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, // ]], constant xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, // tMtlShaderUnifor
+ 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, // m& _mtl_u [[buff
+ 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, // er(0)]]).{. xla
+ 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // tMtlShaderOutput
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // _mtl_o;. float
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // tmpvar_1;. tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x66, // var_1 = (float(f
+ 0x6d, 0x6f, 0x64, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x73, 0x74, // mod (_mtl_i.v_st
+ 0x69, 0x70, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x30, 0x2e, 0x32, 0x35, 0x29, 0x29, 0x29, 0x3b, 0x0a, // ipple, 0.25)));.
+ 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x30, 0x2e, 0x31, 0x32, 0x35, 0x20, 0x3c, 0x20, 0x74, // if ((0.125 < t
+ 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, // mpvar_1)) {.
+ 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, // discard_fragment
+ 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // ();. };. _mtl_
+ 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, // o.gl_FragColor =
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // _mtl_i.v_color0
+ 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // ;. return _mtl_
+ 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // o;.}...
+};
diff --git a/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.sc b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.sc
new file mode 100644
index 00000000000..bfc5b642508
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/fs_debugdraw_lines_stipple.sc
@@ -0,0 +1,18 @@
+$input v_color0, v_stipple
+
+/*
+ * Copyright 2011-2016 Branimir Karadzic. All rights reserved.
+ * License: http://www.opensource.org/licenses/BSD-2-Clause
+ */
+
+#include <bgfx_shader.sh>
+
+void main()
+{
+ if (0.125 < mod(v_stipple, 0.25) )
+ {
+ discard;
+ }
+
+ gl_FragColor = v_color0;
+}
diff --git a/3rdparty/bgfx/examples/common/debugdraw/makefile b/3rdparty/bgfx/examples/common/debugdraw/makefile
new file mode 100644
index 00000000000..ab2bae2d539
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/makefile
@@ -0,0 +1,9 @@
+#
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
+# License: http://www.opensource.org/licenses/BSD-2-Clause
+#
+
+include ../../../../bgfx/scripts/shader-embeded.mk
+
+rebuild:
+ @make -s --no-print-directory clean all
diff --git a/3rdparty/bgfx/examples/common/debugdraw/varying.def.sc b/3rdparty/bgfx/examples/common/debugdraw/varying.def.sc
new file mode 100644
index 00000000000..79ed7aebf68
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/varying.def.sc
@@ -0,0 +1,8 @@
+vec3 a_position : POSITION;
+vec4 a_color0 : COLOR0;
+float a_texcoord0 : TEXCOORD0;
+
+vec4 v_color0 : COLOR = vec4(1.0, 0.0, 0.0, 1.0);
+float v_stipple : TEXCOORD0 = 0.0;
+vec3 v_view : TEXCOORD0 = vec3(0.0, 0.0, 0.0);
+vec3 v_world : TEXCOORD1 = vec3(0.0, 0.0, 0.0);
diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.bin.h b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.bin.h
new file mode 100644
index 00000000000..16fd98a58ef
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.bin.h
@@ -0,0 +1,107 @@
+static const uint8_t vs_debugdraw_fill_glsl[242] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
+ 0xcd, 0x00, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ....attribute hi
+ 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, // ghp vec3 a_posit
+ 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, // ion;.uniform hig
+ 0x68, 0x70, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, // hp mat4 u_modelV
+ 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, // iewProj;.void ma
+ 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, // in ().{. highp
+ 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, // vec4 tmpvar_1;.
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, // tmpvar_1.w = 1.
+ 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, // 0;. tmpvar_1.xy
+ 0x7a, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, // z = a_position;.
+ 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, // gl_Position =
+ 0x28, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, // (u_modelViewProj
+ 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, // * tmpvar_1);.}.
+ 0x0a, 0x00, // ..
+};
+static const uint8_t vs_debugdraw_fill_dx9[287] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
+ 0xfc, 0x00, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x24, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // ........$.CTAB..
+ 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
+ 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
+ 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
+ 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
+ 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
+ 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x30, 0x30, // ompiler 10.0.100
+ 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, // 11.16384........
+ 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // ................
+ 0x0f, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x00, 0x00, // ................
+ 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x00, 0x00, // U...............
+ 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, // ................
+ 0xe4, 0xa0, 0x00, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, 0xff, 0x00, 0x00, 0x00, // ...............
+};
+static const uint8_t vs_debugdraw_fill_dx11[404] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH........u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
+ 0x6c, 0x01, 0x44, 0x58, 0x42, 0x43, 0x87, 0x3c, 0x16, 0xa4, 0x8d, 0x3d, 0x5b, 0xea, 0x61, 0x5c, // l.DXBC.<...=[.a.
+ 0x10, 0x3b, 0xa1, 0xf8, 0xf8, 0xa1, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x01, 0x00, 0x00, 0x03, 0x00, // .;........l.....
+ 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x49, 0x53, // ..,...`.......IS
+ 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, // GN,........... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, // ......POSITION..
+ 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, // ..OSGN,.........
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, // .. .............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, // ..........SV_POS
+ 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x53, 0x48, 0x44, 0x52, 0xd0, 0x00, 0x00, 0x00, 0x40, 0x00, // ITION.SHDR....@.
+ 0x01, 0x00, 0x34, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..4...Y...F. ...
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x00, 0x00, // ......_...r.....
+ 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // ..g.... ........
+ 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, // ..h.......8.....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, // ......V.......F.
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, // .........2.....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F. .......
+ 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, // ..........F.....
+ 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, // ..2...........F.
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x00, 0x00, // ...............
+ 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, // ..F............
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, // ......F.......F.
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x01, // .........>.....
+ 0x01, 0x00, 0x40, 0x00, // ..@.
+};
+static const uint8_t vs_debugdraw_fill_mtl[555] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x02, 0x00, 0x00, 0x75, 0x73, // VSH...........us
+ 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
+ 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // . float3 a_posi
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, // tion [[attribute
+ 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, // (0)]];.};.struct
+ 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, // xlatMtlShaderOu
+ 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // tput {. float4
+ 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x70, 0x6f, // gl_Position [[po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, // sition]];.};.str
+ 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // uct xlatMtlShade
+ 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // rUniform {. flo
+ 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // at4x4 u_modelVie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, // wProj;.};.vertex
+ 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, // xlatMtlShaderOu
+ 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, // tput xlatMtlMain
+ 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, // (xlatMtlShaderI
+ 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, // nput _mtl_i [[st
+ 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, // age_in]], consta
+ 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // nt xlatMtlShader
+ 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, // Uniform& _mtl_u
+ 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, // [[buffer(0)]]).{
+ 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // . xlatMtlShader
+ 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, // Output _mtl_o;.
+ 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // float4 tmpvar_1
+ 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, // ;. tmpvar_1.w =
+ 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // 1.0;. tmpvar_1
+ 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, // .xyz = _mtl_i.a_
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // position;. _mtl
+ 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, // _o.gl_Position =
+ 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // (_mtl_u.u_model
+ 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ViewProj * tmpva
+ 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, // r_1);. return _
+ 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // mtl_o;.}...
+};
diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.sc b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.sc
new file mode 100644
index 00000000000..d007e9367cd
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill.sc
@@ -0,0 +1,13 @@
+$input a_position
+
+/*
+ * Copyright 2011-2016 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include <bgfx_shader.sh>
+
+void main()
+{
+ gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) );
+}
diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.bin.h b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.bin.h
new file mode 100644
index 00000000000..2df5e3fbe89
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.bin.h
@@ -0,0 +1,195 @@
+static const uint8_t vs_debugdraw_fill_lit_glsl[613] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x03, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...V_...u_mod
+ 0x65, 0x6c, 0x04, 0x20, 0x00, 0x00, 0x20, 0x00, 0x0b, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // el. .. ..u_model
+ 0x56, 0x69, 0x65, 0x77, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // View.......u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
+ 0x20, 0x02, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ...attribute hi
+ 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, // ghp vec3 a_posit
+ 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, // ion;.varying hig
+ 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x3b, 0x0a, // hp vec3 v_view;.
+ 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, // varying highp ve
+ 0x63, 0x33, 0x20, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, // c3 v_world;.unif
+ 0x6f, 0x72, 0x6d, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // orm mat4 u_model
+ 0x5b, 0x33, 0x32, 0x5d, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, // [32];.uniform hi
+ 0x67, 0x68, 0x70, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // ghp mat4 u_model
+ 0x56, 0x69, 0x65, 0x77, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, // View;.uniform hi
+ 0x67, 0x68, 0x70, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // ghp mat4 u_model
+ 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, // ViewProj;.void m
+ 0x61, 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, // ain ().{. highp
+ 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, // vec4 tmpvar_1;.
+ 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, // tmpvar_1.w = 1
+ 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, // .0;. tmpvar_1.x
+ 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, // yz = a_position;
+ 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, // . gl_Position =
+ 0x20, 0x28, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, // (u_modelViewPro
+ 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, // j * tmpvar_1);.
+ 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, // highp vec4 tmpv
+ 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // ar_2;. tmpvar_2
+ 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, // .w = 1.0;. tmpv
+ 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, // ar_2.xyz = a_pos
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x20, // ition;. v_view
+ 0x3d, 0x20, 0x28, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x20, 0x2a, // = (u_modelView *
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, // tmpvar_2).xyz;.
+ 0x20, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, // highp vec4 tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // var_3;. tmpvar_
+ 0x33, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // 3.w = 1.0;. tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x70, 0x6f, // var_3.xyz = a_po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, // sition;. v_worl
+ 0x64, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5b, 0x30, 0x5d, 0x20, // d = (u_model[0]
+ 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, // * tmpvar_3).xyz;
+ 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // .}...
+};
+static const uint8_t vs_debugdraw_fill_lit_dx9[563] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x03, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...V_...u_mod
+ 0x65, 0x6c, 0x04, 0x20, 0x00, 0x00, 0x04, 0x00, 0x0b, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // el. .....u_model
+ 0x56, 0x69, 0x65, 0x77, 0x04, 0x01, 0x04, 0x00, 0x04, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // View.......u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x08, 0x00, 0x04, 0x00, // elViewProj......
+ 0xf0, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x37, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // ........7.CTAB..
+ 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x02, 0x00, // ..........X.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, // ......`.......p.
+ 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, // ..........|.....
+ 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7c, 0x00, // ..............|.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x00, 0x03, 0x00, // ......u_model...
+ 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ...... .......u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, // modelView.......
+ 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, // ..........u_mode
+ 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x76, 0x73, 0x5f, 0x33, 0x5f, 0x30, // lViewProj.vs_3_0
+ 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, // .Microsoft (R) H
+ 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, // LSL Shader Compi
+ 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x30, 0x30, 0x31, 0x31, 0x2e, 0x31, // ler 10.0.10011.1
+ 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, // 6384............
+ 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, // ................
+ 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x07, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, // ................
+ 0x01, 0x80, 0x02, 0x00, 0x07, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x09, 0x00, // ................
+ 0xe4, 0xa0, 0x00, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x08, 0x00, // ....U...........
+ 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ................
+ 0x0f, 0x80, 0x0a, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x0b, 0x00, 0xe4, 0xa0, 0x05, 0x00, // ................
+ 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x05, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x55, 0x90, 0x04, 0x00, // ............U...
+ 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x04, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, // ................
+ 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x06, 0x00, 0xe4, 0xa0, 0x00, 0x00, // ................
+ 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x07, 0xe0, 0x00, 0x00, // ................
+ 0xe4, 0x80, 0x07, 0x00, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, // ................
+ 0xe4, 0xa0, 0x00, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ....U...........
+ 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ................
+ 0x07, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, // ................
+ 0x00, 0x03, 0x02, 0x00, 0x07, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0xff, 0xff, // ................
+ 0x00, 0x00, 0x00, // ...
+};
+static const uint8_t vs_debugdraw_fill_lit_dx11[808] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x03, 0x00, 0x07, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...V_...u_mod
+ 0x65, 0x6c, 0x04, 0x20, 0x00, 0x00, 0x80, 0x00, 0x0b, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // el. .....u_model
+ 0x56, 0x69, 0x65, 0x77, 0x04, 0x00, 0x00, 0x08, 0x04, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // View.......u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x40, 0x08, 0x04, 0x00, // elViewProj..@...
+ 0xe0, 0x02, 0x44, 0x58, 0x42, 0x43, 0xda, 0xb8, 0xef, 0x0e, 0x34, 0xc8, 0x8c, 0x2c, 0x06, 0xbc, // ..DXBC....4..,..
+ 0x07, 0x0b, 0x43, 0x58, 0xee, 0x33, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x02, 0x00, 0x00, 0x03, 0x00, // ..CX.3..........
+ 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x49, 0x53, // ..,...`.......IS
+ 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, // GN,........... .
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, // ......POSITION..
+ 0xab, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, // ..OSGNh.........
+ 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, // ..P.............
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x08, // ................
+ 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, // ................
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, // ..........SV_POS
+ 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0xab, // ITION.TEXCOORD..
+ 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0x08, 0x02, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x82, 0x00, // ..SHDR....@.....
+ 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, // ..Y...F. .......
+ 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, // .._...r.......g.
+ 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, // ... ..........e.
+ 0x00, 0x03, 0x72, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x72, 0x20, // ..r ......e...r
+ 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, // ......h.......8.
+ 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x00, 0x00, // ..........V.....
+ 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x32, 0x00, // ..F. .........2.
+ 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..........F. ...
+ 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..............F.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
+ 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0xa6, 0x1a, // ..F. ...........
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F.........
+ 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
+ 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x38, 0x00, // ..F. .........8.
+ 0x00, 0x08, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x00, 0x00, // ..r.......V.....
+ 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x32, 0x00, // ..F. .........2.
+ 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, // ..r.......F. ...
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, // ..............F.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2...r.....
+ 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0xa6, 0x1a, // ..F. ...........
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F.........
+ 0x00, 0x08, 0x72, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, // ..r ......F.....
+ 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x38, 0x00, // ..F. .........8.
+ 0x00, 0x08, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x00, 0x00, // ..r.......V.....
+ 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, // ..F. .........2.
+ 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, // ..r.......F. ...
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, // ..............F.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2...r.....
+ 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, // ..F. ...........
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F.........
+ 0x00, 0x08, 0x72, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x00, 0x00, // ..r ......F.....
+ 0x00, 0x00, 0x46, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, // ..F. .........>.
+ 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x80, 0x08, // ........
+};
+static const uint8_t vs_debugdraw_fill_lit_mtl[898] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0x0f, 0xc8, 0x56, 0x5f, 0x00, 0x00, 0x73, 0x03, 0x00, 0x00, 0x75, 0x73, // VSH...V_..s...us
+ 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
+ 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // . float3 a_posi
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, // tion [[attribute
+ 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, // (0)]];.};.struct
+ 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, // xlatMtlShaderOu
+ 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, // tput {. float4
+ 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x70, 0x6f, // gl_Position [[po
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, // sition]];. floa
+ 0x74, 0x33, 0x20, 0x76, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // t3 v_view;. flo
+ 0x61, 0x74, 0x33, 0x20, 0x76, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, // at3 v_world;.};.
+ 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, // struct xlatMtlSh
+ 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, // aderUniform {.
+ 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // float4x4 u_model
+ 0x5b, 0x33, 0x32, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, // [32];. float4x4
+ 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x3b, 0x0a, 0x20, 0x20, // u_modelView;.
+ 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // float4x4 u_model
+ 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x76, 0x65, 0x72, // ViewProj;.};.ver
+ 0x74, 0x65, 0x78, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // tex xlatMtlShade
+ 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, // rOutput xlatMtlM
+ 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, // ain (xlatMtlShad
+ 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, // erInput _mtl_i [
+ 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, // [stage_in]], con
+ 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, // stant xlatMtlSha
+ 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // derUniform& _mtl
+ 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, // _u [[buffer(0)]]
+ 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, // ).{. xlatMtlSha
+ 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // derOutput _mtl_o
+ 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ;. float4 tmpva
+ 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, // r_1;. tmpvar_1.
+ 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // w = 1.0;. tmpva
+ 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, // r_1.xyz = _mtl_i
+ 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // .a_position;. _
+ 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, // mtl_o.gl_Positio
+ 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, // n = (_mtl_u.u_mo
+ 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, // delViewProj * tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // pvar_1);. float
+ 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // 4 tmpvar_2;. tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, // pvar_2.w = 1.0;.
+ 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, // tmpvar_2.xyz =
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // _mtl_i.a_positi
+ 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x76, // on;. _mtl_o.v_v
+ 0x69, 0x65, 0x77, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, // iew = (_mtl_u.u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, // modelView * tmpv
+ 0x61, 0x72, 0x5f, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // ar_2).xyz;. flo
+ 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, // at4 tmpvar_3;.
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, // tmpvar_3.w = 1.0
+ 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x78, 0x79, 0x7a, // ;. tmpvar_3.xyz
+ 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, // = _mtl_i.a_posi
+ 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, // tion;. _mtl_o.v
+ 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // _world = (_mtl_u
+ 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5b, 0x30, 0x5d, 0x20, 0x2a, 0x20, 0x74, 0x6d, // .u_model[0] * tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x72, // pvar_3).xyz;. r
+ 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, // eturn _mtl_o;.}.
+ 0x0a, 0x00, // ..
+};
diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.sc b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.sc
new file mode 100644
index 00000000000..02054e3ef28
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_fill_lit.sc
@@ -0,0 +1,16 @@
+$input a_position
+$output v_view, v_world
+
+/*
+ * Copyright 2011-2016 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include <bgfx_shader.sh>
+
+void main()
+{
+ gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) );
+ v_view = mul(u_modelView, vec4(a_position, 1.0) ).xyz;
+ v_world = mul(u_model[0], vec4(a_position, 1.0) ).xyz;
+}
diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.bin.h b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.bin.h
new file mode 100644
index 00000000000..b5c9c73d715
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.bin.h
@@ -0,0 +1,127 @@
+static const uint8_t vs_debugdraw_lines_glsl[325] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
+ 0x20, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // ...attribute hi
+ 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 a_color
+ 0x30, 0x3b, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, // 0;.attribute hig
+ 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // hp vec3 a_positi
+ 0x6f, 0x6e, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, // on;.varying high
+ 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, // p vec4 v_color0;
+ 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x6d, // .uniform highp m
+ 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // at4 u_modelViewP
+ 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, // roj;.void main (
+ 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, // ).{. highp vec4
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // tmpvar_1;. tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, // var_1.w = 1.0;.
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, // tmpvar_1.xyz =
+ 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, // a_position;. gl
+ 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x75, 0x5f, 0x6d, // _Position = (u_m
+ 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, // odelViewProj * t
+ 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, 0x63, 0x6f, // mpvar_1);. v_co
+ 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, // lor0 = a_color0;
+ 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // .}...
+};
+static const uint8_t vs_debugdraw_lines_dx9[323] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
+ 0x20, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x24, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // .......$.CTAB..
+ 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
+ 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
+ 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
+ 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
+ 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
+ 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x30, 0x30, // ompiler 10.0.100
+ 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, // 11.16384........
+ 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, // ................
+ 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, // ................
+ 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, // ........U.......
+ 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, // ................
+ 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, // ................
+ 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, // ................
+ 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0xff, 0xff, // ................
+ 0x00, 0x00, 0x00, // ...
+};
+static const uint8_t vs_debugdraw_lines_dx11[510] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH....I...u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
+ 0xd4, 0x01, 0x44, 0x58, 0x42, 0x43, 0x32, 0x9b, 0xdd, 0xb5, 0xa9, 0xb7, 0x22, 0xf0, 0xcf, 0x5e, // ..DXBC2....."..^
+ 0x34, 0x2c, 0x72, 0xf0, 0x87, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x01, 0x00, 0x00, 0x03, 0x00, // 4,r.............
+ 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x49, 0x53, // ..,...|.......IS
+ 0x47, 0x4e, 0x48, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, // GNH...........8.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......>.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x43, 0x4f, // ..............CO
+ 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0xab, 0x4f, 0x53, // LOR.POSITION..OS
+ 0x47, 0x4e, 0x4c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, // GNL...........8.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......D.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, // ..............SV
+ 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, // _POSITION.COLOR.
+ 0xab, 0xab, 0x53, 0x48, 0x44, 0x52, 0xfc, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x3f, 0x00, // ..SHDR....@...?.
+ 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, // ..Y...F. .......
+ 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, // .._..........._.
+ 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, // ..r.......g....
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, // ..........e....
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, // ......h.......8.
+ 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, // ..........V.....
+ 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, // ..F. .........2.
+ 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..........F. ...
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..............F.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
+ 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, // ..F. ...........
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......F.........
+ 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
+ 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, // ..F. .........6.
+ 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
+ 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x05, 0x00, 0x01, 0x00, 0x40, 0x00, // ..>.........@.
+};
+static const uint8_t vs_debugdraw_lines_mtl[647] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x75, 0x73, // VSH....I..x...us
+ 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
+ 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // . float4 a_colo
+ 0x72, 0x30, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x30, // r0 [[attribute(0
+ 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, 0x5f, // )]];. float3 a_
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, // position [[attri
+ 0x62, 0x75, 0x74, 0x65, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, // bute(1)]];.};.st
+ 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, // ruct xlatMtlShad
+ 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // erOutput {. flo
+ 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, // at4 gl_Position
+ 0x5b, 0x5b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, // [[position]];.
+ 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, // float4 v_color0;
+ 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // .};.struct xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, // tlShaderUniform
+ 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, // {. float4x4 u_m
+ 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x7d, 0x3b, // odelViewProj;.};
+ 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, // .vertex xlatMtlS
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // haderOutput xlat
+ 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // MtlMain (xlatMtl
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // ShaderInput _mtl
+ 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, // _i [[stage_in]],
+ 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // constant xlatMt
+ 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, // lShaderUniform&
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, // _mtl_u [[buffer(
+ 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // 0)]]).{. xlatMt
+ 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, // lShaderOutput _m
+ 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, // tl_o;. float4 t
+ 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // mpvar_1;. tmpva
+ 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // r_1.w = 1.0;. t
+ 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, // mpvar_1.xyz = _m
+ 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, // tl_i.a_position;
+ 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, // . _mtl_o.gl_Pos
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, // ition = (_mtl_u.
+ 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, // u_modelViewProj
+ 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // * tmpvar_1);. _
+ 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, // mtl_o.v_color0 =
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // _mtl_i.a_color0
+ 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // ;. return _mtl_
+ 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // o;.}...
+};
diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.sc b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.sc
new file mode 100644
index 00000000000..b4090d2c29a
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines.sc
@@ -0,0 +1,15 @@
+$input a_position, a_color0
+$output v_color0
+
+/*
+ * Copyright 2011-2016 Branimir Karadzic. All rights reserved.
+ * License: http://www.opensource.org/licenses/BSD-2-Clause
+ */
+
+#include <bgfx_shader.sh>
+
+void main()
+{
+ gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) );
+ v_color0 = a_color0;
+}
diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.bin.h b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.bin.h
new file mode 100644
index 00000000000..875c4ac10c6
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.bin.h
@@ -0,0 +1,148 @@
+static const uint8_t vs_debugdraw_lines_stipple_glsl[418] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...Z....u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, // elViewProj......
+ 0x7d, 0x01, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // }...attribute hi
+ 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // ghp vec4 a_color
+ 0x30, 0x3b, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, 0x67, // 0;.attribute hig
+ 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // hp vec3 a_positi
+ 0x6f, 0x6e, 0x3b, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x68, 0x69, // on;.attribute hi
+ 0x67, 0x68, 0x70, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, // ghp float a_texc
+ 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, // oord0;.varying h
+ 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // ighp vec4 v_colo
+ 0x72, 0x30, 0x3b, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x69, 0x67, 0x68, // r0;.varying high
+ 0x70, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, // p float v_stippl
+ 0x65, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, // e;.uniform highp
+ 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // mat4 u_modelVie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, // wProj;.void main
+ 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, // ().{. highp ve
+ 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, // c4 tmpvar_1;. t
+ 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, // mpvar_1.w = 1.0;
+ 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, // . tmpvar_1.xyz
+ 0x3d, 0x20, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, // = a_position;.
+ 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x75, // gl_Position = (u
+ 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, // _modelViewProj *
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, // tmpvar_1);. v_
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, // color0 = a_color
+ 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x3d, // 0;. v_stipple =
+ 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, // a_texcoord0;.}.
+ 0x0a, 0x00, // ..
+};
+static const uint8_t vs_debugdraw_lines_stipple_dx9[359] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...Z....u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x01, 0x00, 0x00, 0x04, 0x00, // elViewProj......
+ 0x44, 0x01, 0x00, 0x03, 0xfe, 0xff, 0xfe, 0xff, 0x24, 0x00, 0x43, 0x54, 0x41, 0x42, 0x1c, 0x00, // D.......$.CTAB..
+ 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, // ..W.............
+ 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, // ......P...0.....
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5f, // ......@.......u_
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x00, 0x03, 0x00, // modelViewProj...
+ 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x73, // ..............vs
+ 0x5f, 0x33, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, // _3_0.Microsoft (
+ 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, // R) HLSL Shader C
+ 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x30, 0x30, // ompiler 10.0.100
+ 0x31, 0x31, 0x2e, 0x31, 0x36, 0x33, 0x38, 0x34, 0x00, 0xab, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, // 11.16384........
+ 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, // ................
+ 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, // ................
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, // ................
+ 0x00, 0x80, 0x01, 0x00, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, // ................
+ 0x01, 0xe0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0xa0, 0x01, 0x00, // ................
+ 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, // U...............
+ 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, // ................
+ 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, // ................
+ 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, // ................
+ 0x0f, 0xe0, 0x00, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x01, 0xe0, 0x02, 0x00, // ................
+ 0x00, 0x90, 0xff, 0xff, 0x00, 0x00, 0x00, // .......
+};
+static const uint8_t vs_debugdraw_lines_stipple_dx11[620] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x01, 0x00, 0x0f, 0x75, 0x5f, 0x6d, 0x6f, 0x64, // VSH...Z....u_mod
+ 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, // elViewProj......
+ 0x40, 0x02, 0x44, 0x58, 0x42, 0x43, 0xe3, 0xb5, 0xa4, 0x88, 0xa6, 0x8c, 0xfa, 0x02, 0x7e, 0x55, // @.DXBC........~U
+ 0x75, 0xcd, 0x57, 0x76, 0xf4, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x03, 0x00, // u.Wv......@.....
+ 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x49, 0x53, // ..,...........IS
+ 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNh...........P.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ......V.........
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x5f, 0x00, // .............._.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x50, 0x4f, 0x53, 0x49, // ......COLOR.POSI
+ 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x4f, 0x53, // TION.TEXCOORD.OS
+ 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00, // GNl...........P.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x62, 0x00, // ..............b.
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, // ................
+ 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, // ......SV_POSITIO
+ 0x4e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, // N.COLOR.TEXCOORD
+ 0x00, 0xab, 0x53, 0x48, 0x44, 0x52, 0x28, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x4a, 0x00, // ..SHDR(...@...J.
+ 0x00, 0x00, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, // ..Y...F. .......
+ 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, // .._..........._.
+ 0x00, 0x03, 0x72, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x12, 0x10, // ..r......._.....
+ 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ......g.... ....
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......e.... ....
+ 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x12, 0x20, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x68, 0x00, // ..e.... ......h.
+ 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......8.........
+ 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..V.......F. ...
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, // ......2.........
+ 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, // ..F. ...........
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, // ......F.......2.
+ 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..........F. ...
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xa6, 0x1a, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, // ..............F.
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, // ........... ....
+ 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, // ..F.......F. ...
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, // ......6.... ....
+ 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x12, 0x20, // ..F.......6....
+ 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, // ..............>.
+ 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, 0x01, 0x00, 0x10, 0x00, 0x40, 0x00, // ..........@.
+};
+static const uint8_t vs_debugdraw_lines_stipple_mtl[745] =
+{
+ 0x56, 0x53, 0x48, 0x04, 0xe7, 0x1a, 0x5a, 0xef, 0x00, 0x00, 0xda, 0x02, 0x00, 0x00, 0x75, 0x73, // VSH...Z.......us
+ 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
+ 0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
+ 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // . float4 a_colo
+ 0x72, 0x30, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x30, // r0 [[attribute(0
+ 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, 0x5f, // )]];. float3 a_
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, // position [[attri
+ 0x62, 0x75, 0x74, 0x65, 0x28, 0x31, 0x29, 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // bute(1)]];. flo
+ 0x61, 0x74, 0x20, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x20, 0x5b, // at a_texcoord0 [
+ 0x5b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x32, 0x29, 0x5d, 0x5d, 0x3b, // [attribute(2)]];
+ 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, // .};.struct xlatM
+ 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x7b, // tlShaderOutput {
+ 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, // . float4 gl_Pos
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x5b, 0x5b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, // ition [[position
+ 0x5d, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x5f, 0x63, // ]];. float4 v_c
+ 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, // olor0;. float v
+ 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x73, 0x74, 0x72, // _stipple;.};.str
+ 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, // uct xlatMtlShade
+ 0x72, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, // rUniform {. flo
+ 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, // at4x4 u_modelVie
+ 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, // wProj;.};.vertex
+ 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, // xlatMtlShaderOu
+ 0x74, 0x70, 0x75, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x4d, 0x61, 0x69, 0x6e, // tput xlatMtlMain
+ 0x20, 0x28, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, // (xlatMtlShaderI
+ 0x6e, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x20, 0x5b, 0x5b, 0x73, 0x74, // nput _mtl_i [[st
+ 0x61, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x5d, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, // age_in]], consta
+ 0x6e, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // nt xlatMtlShader
+ 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x26, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x20, // Uniform& _mtl_u
+ 0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, // [[buffer(0)]]).{
+ 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, // . xlatMtlShader
+ 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, // Output _mtl_o;.
+ 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // float4 tmpvar_1
+ 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, // ;. tmpvar_1.w =
+ 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // 1.0;. tmpvar_1
+ 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, // .xyz = _mtl_i.a_
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // position;. _mtl
+ 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, // _o.gl_Position =
+ 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // (_mtl_u.u_model
+ 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ViewProj * tmpva
+ 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, // r_1);. _mtl_o.v
+ 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, // _color0 = _mtl_i
+ 0x2e, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, // .a_color0;. _mt
+ 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x73, 0x74, 0x69, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x3d, 0x20, // l_o.v_stipple =
+ 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, // _mtl_i.a_texcoor
+ 0x64, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, // d0;. return _mt
+ 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // l_o;.}...
+};
diff --git a/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.sc b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.sc
new file mode 100644
index 00000000000..9607a45509e
--- /dev/null
+++ b/3rdparty/bgfx/examples/common/debugdraw/vs_debugdraw_lines_stipple.sc
@@ -0,0 +1,16 @@
+$input a_position, a_color0, a_texcoord0
+$output v_color0, v_stipple
+
+/*
+ * Copyright 2011-2016 Branimir Karadzic. All rights reserved.
+ * License: http://www.opensource.org/licenses/BSD-2-Clause
+ */
+
+#include <bgfx_shader.sh>
+
+void main()
+{
+ gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) );
+ v_color0 = a_color0;
+ v_stipple = a_texcoord0;
+}
diff --git a/3rdparty/bgfx/examples/common/entry/entry.cpp b/3rdparty/bgfx/examples/common/entry/entry.cpp
index 1fb0497be85..03cf82b5373 100644
--- a/3rdparty/bgfx/examples/common/entry/entry.cpp
+++ b/3rdparty/bgfx/examples/common/entry/entry.cpp
@@ -6,7 +6,7 @@
#include <bx/bx.h>
#include <bgfx/bgfx.h>
#include <bx/string.h>
-#include <bx/readerwriter.h>
+#include <bx/crtimpl.h>
#include <time.h>
diff --git a/3rdparty/bgfx/examples/common/entry/entry_qnx.cpp b/3rdparty/bgfx/examples/common/entry/entry_noop.cpp
index af91ca7db40..c6544595229 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_qnx.cpp
+++ b/3rdparty/bgfx/examples/common/entry/entry_noop.cpp
@@ -5,7 +5,7 @@
#include "entry_p.h"
-#if ENTRY_CONFIG_USE_NATIVE && BX_PLATFORM_QNX
+#if ENTRY_CONFIG_USE_NOOP
#include <stdio.h>
@@ -76,4 +76,4 @@ int main(int _argc, char** _argv)
entry::main(_argc, _argv);
}
-#endif // ENTRY_CONFIG_USE_NATIVE && BX_PLATFORM_QNX
+#endif // ENTRY_CONFIG_USE_NOOP
diff --git a/3rdparty/bgfx/examples/common/entry/entry_p.h b/3rdparty/bgfx/examples/common/entry/entry_p.h
index 502eed673ad..f44a421946a 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_p.h
+++ b/3rdparty/bgfx/examples/common/entry/entry_p.h
@@ -13,6 +13,10 @@
#include "entry.h"
#include <string.h> // memcpy
+#ifndef ENTRY_CONFIG_USE_NOOP
+# define ENTRY_CONFIG_USE_NOOP (BX_PLATFORM_QNX || BX_PLATFORM_XBOXONE)
+#endif // ENTRY_CONFIG_USE_NOOP
+
#ifndef ENTRY_CONFIG_USE_SDL
# define ENTRY_CONFIG_USE_SDL BX_PLATFORM_STEAMLINK
#endif // ENTRY_CONFIG_USE_SDL
@@ -22,6 +26,7 @@
#endif // ENTRY_CONFIG_USE_GLFW
#if !defined(ENTRY_CONFIG_USE_NATIVE) \
+ && !ENTRY_CONFIG_USE_NOOP \
&& !ENTRY_CONFIG_USE_SDL \
&& !ENTRY_CONFIG_USE_GLFW
# define ENTRY_CONFIG_USE_NATIVE 1
diff --git a/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp b/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp
index 989d0ae0667..07193b83ca7 100644
--- a/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp
+++ b/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp
@@ -29,6 +29,7 @@ BX_PRAGMA_DIAGNOSTIC_POP_CLANG()
#include <bx/thread.h>
#include <bx/handlealloc.h>
#include <bx/readerwriter.h>
+#include <bx/crtimpl.h>
#include <tinystl/allocator.h>
#include <tinystl/string.h>
@@ -219,7 +220,7 @@ namespace entry
# elif BX_PLATFORM_WINDOWS
return wmi.info.win.window;
# elif BX_PLATFORM_STEAMLINK
- return wmi.info.vivante.window;
+ return wmi.info.vivante.window;
# endif // BX_PLATFORM_
}
@@ -307,6 +308,7 @@ namespace entry
initTranslateKey(SDL_SCANCODE_PRINTSCREEN, Key::Print);
initTranslateKey(SDL_SCANCODE_KP_PLUS, Key::Plus);
initTranslateKey(SDL_SCANCODE_KP_MINUS, Key::Minus);
+ initTranslateKey(SDL_SCANCODE_GRAVE, Key::Tilde);
initTranslateKey(SDL_SCANCODE_F1, Key::F1);
initTranslateKey(SDL_SCANCODE_F2, Key::F2);
initTranslateKey(SDL_SCANCODE_F3, Key::F3);
diff --git a/3rdparty/bgfx/examples/common/entry/input.cpp b/3rdparty/bgfx/examples/common/entry/input.cpp
index c0d2686d293..bb9925990b0 100644
--- a/3rdparty/bgfx/examples/common/entry/input.cpp
+++ b/3rdparty/bgfx/examples/common/entry/input.cpp
@@ -11,6 +11,7 @@
#include <bx/allocator.h>
#include <bx/ringbuffer.h>
+#include <tinystl/string.h>
#include <tinystl/allocator.h>
#include <tinystl/unordered_map.h>
namespace stl = tinystl;
@@ -197,12 +198,12 @@ struct Input
void addBindings(const char* _name, const InputBinding* _bindings)
{
- m_inputBindingsMap.insert(stl::make_pair(_name, _bindings) );
+ m_inputBindingsMap.insert(stl::make_pair(stl::string(_name), _bindings) );
}
void removeBindings(const char* _name)
{
- InputBindingMap::iterator it = m_inputBindingsMap.find(_name);
+ InputBindingMap::iterator it = m_inputBindingsMap.find(stl::string(_name));
if (it != m_inputBindingsMap.end() )
{
m_inputBindingsMap.erase(it);
@@ -275,7 +276,7 @@ struct Input
}
}
- typedef stl::unordered_map<const char*, const InputBinding*> InputBindingMap;
+ typedef stl::unordered_map<stl::string, const InputBinding*> InputBindingMap;
InputBindingMap m_inputBindingsMap;
Mouse m_mouse;
Keyboard m_keyboard;
diff --git a/3rdparty/bgfx/examples/common/font/makefile b/3rdparty/bgfx/examples/common/font/makefile
index 13b0215ee97..38f4d0d7d86 100644
--- a/3rdparty/bgfx/examples/common/font/makefile
+++ b/3rdparty/bgfx/examples/common/font/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
diff --git a/3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp b/3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp
index 230eb97e164..9acb796212f 100644
--- a/3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp
+++ b/3rdparty/bgfx/examples/common/font/text_buffer_manager.cpp
@@ -822,8 +822,8 @@ void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, uint8_t _id,
);
}
- bgfx::setVertexBuffer(vbh, bc.textBuffer->getVertexCount() );
- bgfx::setIndexBuffer(ibh, bc.textBuffer->getIndexCount() );
+ bgfx::setVertexBuffer(vbh, 0, bc.textBuffer->getVertexCount() );
+ bgfx::setIndexBuffer(ibh, 0, bc.textBuffer->getIndexCount() );
}
break;
diff --git a/3rdparty/bgfx/examples/common/imgui/fs_imgui_image_swizz.bin.h b/3rdparty/bgfx/examples/common/imgui/fs_imgui_image_swizz.bin.h
index 593de84d168..11044efd9ae 100644
--- a/3rdparty/bgfx/examples/common/imgui/fs_imgui_image_swizz.bin.h
+++ b/3rdparty/bgfx/examples/common/imgui/fs_imgui_image_swizz.bin.h
@@ -1,10 +1,10 @@
-static const uint8_t fs_imgui_image_swizz_glsl[425] =
+static const uint8_t fs_imgui_image_swizz_glsl[565] =
{
0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x03, 0x00, 0x11, 0x75, 0x5f, 0x69, 0x6d, 0x61, // FSH.o.><...u_ima
0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x02, 0x01, 0x00, 0x00, // geLodEnabled....
0x01, 0x00, 0x09, 0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x02, 0x01, 0x00, 0x00, // ...u_swizzle....
0x01, 0x00, 0x0a, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x01, 0x00, // ...s_texColor...
- 0x00, 0x01, 0x00, 0x61, 0x01, 0x00, 0x00, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, // ...a...varying h
+ 0x00, 0x01, 0x00, 0xed, 0x01, 0x00, 0x00, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x68, // .......varying h
0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, // ighp vec2 v_texc
0x6f, 0x6f, 0x72, 0x64, 0x30, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, // oord0;.uniform h
0x69, 0x67, 0x68, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, // ighp vec4 u_imag
@@ -13,20 +13,29 @@ static const uint8_t fs_imgui_image_swizz_glsl[425] =
0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, // u_swizzle;.unifo
0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x73, 0x5f, 0x74, // rm sampler2D s_t
0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, // exColor;.void ma
- 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x76, // in ().{. lowp v
- 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, // ec4 tmpvar_1;.
- 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x76, // tmpvar_1.xyz = v
- 0x65, 0x63, 0x33, 0x28, 0x64, 0x6f, 0x74, 0x20, 0x28, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, // ec3(dot (texture
- 0x32, 0x44, 0x4c, 0x6f, 0x64, 0x20, 0x20, 0x20, 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, // 2DLod (s_texC
- 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x76, 0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, // olor, v_texcoord
- 0x30, 0x2c, 0x20, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, // 0, u_imageLodEna
- 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x78, 0x29, 0x2c, 0x20, 0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, // bled.x), u_swizz
- 0x6c, 0x65, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, // le));. tmpvar_1
- 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x2e, 0x32, 0x20, 0x2b, 0x20, 0x28, 0x30, 0x2e, 0x38, // .w = (0.2 + (0.8
- 0x20, 0x2a, 0x20, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, // * u_imageLodEna
- 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, // bled.y));. gl_F
- 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ragColor = tmpva
- 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // r_1;.}...
+ 0x69, 0x6e, 0x20, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x70, 0x20, 0x66, // in ().{. lowp f
+ 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, // loat tmpvar_1;.
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x20, // tmpvar_1 = dot
+ 0x28, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x4c, 0x6f, 0x64, 0x20, 0x20, 0x20, // (texture2DLod
+ 0x20, 0x28, 0x73, 0x5f, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x76, 0x5f, // (s_texColor, v_
+ 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x2c, 0x20, 0x75, 0x5f, 0x69, 0x6d, 0x61, // texcoord0, u_ima
+ 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x78, 0x29, 0x2c, // geLodEnabled.x),
+ 0x20, 0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x6c, // u_swizzle);. l
+ 0x6f, 0x77, 0x70, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // owp vec3 tmpvar_
+ 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x20, // 2;. tmpvar_2.x
+ 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // = tmpvar_1;. tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // pvar_2.y = tmpva
+ 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, // r_1;. tmpvar_2.
+ 0x7a, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, // z = tmpvar_1;.
+ 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x70, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74, 0x6d, 0x70, // mediump vec4 tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // var_3;. tmpvar_
+ 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, // 3.xyz = tmpvar_2
+ 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x77, 0x20, 0x3d, // ;. tmpvar_3.w =
+ 0x20, 0x28, 0x30, 0x2e, 0x32, 0x20, 0x2b, 0x20, 0x28, 0x30, 0x2e, 0x38, 0x20, 0x2a, 0x20, 0x75, // (0.2 + (0.8 * u
+ 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, // _imageLodEnabled
+ 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, // .y));. gl_FragC
+ 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, // olor = tmpvar_3;
+ 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // .}...
};
static const uint8_t fs_imgui_image_swizz_dx9[462] =
{
@@ -94,9 +103,9 @@ static const uint8_t fs_imgui_image_swizz_dx11[493] =
0x3e, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, // >6.... .........
0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, // .....>..... .
};
-static const uint8_t fs_imgui_image_swizz_mtl[879] =
+static const uint8_t fs_imgui_image_swizz_mtl[1005] =
{
- 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH.o.><..`...us
+ 0x46, 0x53, 0x48, 0x04, 0x6f, 0x1e, 0x3e, 0x3c, 0x00, 0x00, 0xde, 0x03, 0x00, 0x00, 0x75, 0x73, // FSH.o.><......us
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
@@ -135,20 +144,28 @@ static const uint8_t fs_imgui_image_swizz_mtl[879] =
0x5f, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x30, 0x29, 0x2c, 0x20, 0x6c, 0x65, 0x76, // _texcoord0), lev
0x65, 0x6c, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, // el(_mtl_u.u_imag
0x65, 0x4c, 0x6f, 0x64, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x78, 0x29, 0x29, 0x29, // eLodEnabled.x)))
+ 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // ;. half tmpvar_
+ 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, // 2;. tmpvar_2 =
+ 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x64, 0x6f, 0x74, 0x20, 0x28, 0x28, 0x66, 0x6c, 0x6f, // ((half)dot ((flo
+ 0x61, 0x74, 0x34, 0x29, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2c, 0x20, 0x5f, 0x6d, // at4)tmpvar_1, _m
+ 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x73, 0x77, 0x69, 0x7a, 0x7a, 0x6c, 0x65, 0x29, 0x29, // tl_u.u_swizzle))
0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // ;. float tmpvar
- 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, // _2;. tmpvar_2 =
+ 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x20, 0x3d, // _3;. tmpvar_3 =
0x20, 0x28, 0x30, 0x2e, 0x32, 0x20, 0x2b, 0x20, 0x28, 0x30, 0x2e, 0x38, 0x20, 0x2a, 0x20, 0x5f, // (0.2 + (0.8 * _
0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x64, // mtl_u.u_imageLod
0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x68, // Enabled.y));. h
- 0x61, 0x6c, 0x66, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, // alf4 tmpvar_3;.
- 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, // tmpvar_3.xyz =
- 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x28, 0x28, 0x68, 0x61, 0x6c, 0x66, 0x29, 0x64, 0x6f, 0x74, // half3(((half)dot
- 0x20, 0x28, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x29, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // ((float4)tmpvar
- 0x5f, 0x31, 0x2c, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x73, 0x77, 0x69, // _1, _mtl_u.u_swi
- 0x7a, 0x7a, 0x6c, 0x65, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // zzle)));. tmpva
- 0x72, 0x5f, 0x33, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x28, 0x74, 0x6d, 0x70, // r_3.w = half(tmp
- 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, // var_2);. _mtl_o
- 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, // .gl_FragColor =
- 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, // tmpvar_3;. retu
- 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // rn _mtl_o;.}...
+ 0x61, 0x6c, 0x66, 0x33, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x3b, 0x0a, 0x20, // alf3 tmpvar_4;.
+ 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x74, 0x6d, // tmpvar_4.x = tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // pvar_2;. tmpvar
+ 0x5f, 0x34, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, // _4.y = tmpvar_2;
+ 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x34, 0x2e, 0x7a, 0x20, 0x3d, 0x20, // . tmpvar_4.z =
+ 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, // tmpvar_2;. half
+ 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // 4 tmpvar_5;. tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, // pvar_5.xyz = tmp
+ 0x76, 0x61, 0x72, 0x5f, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // var_4;. tmpvar_
+ 0x35, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, // 5.w = half(tmpva
+ 0x72, 0x5f, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, // r_3);. _mtl_o.g
+ 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, // l_FragColor = tm
+ 0x70, 0x76, 0x61, 0x72, 0x5f, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, // pvar_5;. return
+ 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _mtl_o;.}...
};
diff --git a/3rdparty/bgfx/examples/common/imgui/imgui.cpp b/3rdparty/bgfx/examples/common/imgui/imgui.cpp
index 4cdc5f30fe5..60afe3df290 100644
--- a/3rdparty/bgfx/examples/common/imgui/imgui.cpp
+++ b/3rdparty/bgfx/examples/common/imgui/imgui.cpp
@@ -28,6 +28,7 @@
#include <bx/uint32_t.h>
#include <bx/fpumath.h>
#include <bx/handlealloc.h>
+#include <bx/crtimpl.h>
#include "imgui.h"
#include "ocornut_imgui.h"
@@ -454,11 +455,13 @@ struct Imgui
{
m_allocator = _allocator;
- if (NULL == m_allocator)
+#if BX_CONFIG_ALLOCATOR_CRT
+ if (NULL == _allocator)
{
static bx::CrtAllocator allocator;
m_allocator = &allocator;
}
+#endif // BX_CONFIG_ALLOCATOR_CRT
if (NULL == _data)
{
diff --git a/3rdparty/bgfx/examples/common/imgui/makefile b/3rdparty/bgfx/examples/common/imgui/makefile
index 70d3ff0e69d..965ac34d302 100644
--- a/3rdparty/bgfx/examples/common/imgui/makefile
+++ b/3rdparty/bgfx/examples/common/imgui/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
diff --git a/3rdparty/bgfx/examples/common/nanovg/makefile b/3rdparty/bgfx/examples/common/nanovg/makefile
index 13b0215ee97..38f4d0d7d86 100644
--- a/3rdparty/bgfx/examples/common/nanovg/makefile
+++ b/3rdparty/bgfx/examples/common/nanovg/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
diff --git a/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp b/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp
index 1da34bd790f..e5795ad2131 100644
--- a/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp
+++ b/3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp
@@ -30,6 +30,7 @@
#include <bx/bx.h>
#include <bx/allocator.h>
+#include <bx/crtimpl.h>
BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4244); // warning C4244: '=' : conversion from '' to '', possible loss of data
diff --git a/3rdparty/bgfx/examples/common/shaderlib.sh b/3rdparty/bgfx/examples/common/shaderlib.sh
index a6a51199a1f..51f9b6a445f 100644
--- a/3rdparty/bgfx/examples/common/shaderlib.sh
+++ b/3rdparty/bgfx/examples/common/shaderlib.sh
@@ -367,4 +367,20 @@ float random(vec2 _uv)
return fract(sin(dot(_uv.xy, vec2(12.9898, 78.233) ) ) * 43758.5453);
}
+vec3 fixCubeLookup(vec3 _v, float _lod, float _topLevelCubeSize)
+{
+ // Reference:
+ // Seamless cube-map filtering
+ // http://the-witness.net/news/2012/02/seamless-cube-map-filtering/
+ float ax = abs(_v.x);
+ float ay = abs(_v.y);
+ float az = abs(_v.z);
+ float vmax = max(max(ax, ay), az);
+ float scale = 1.0 - exp2(_lod) / _topLevelCubeSize;
+ if (ax != vmax) { _v.x *= scale; }
+ if (ay != vmax) { _v.y *= scale; }
+ if (az != vmax) { _v.z *= scale; }
+ return _v;
+}
+
#endif // __SHADERLIB_SH__
diff --git a/3rdparty/bgfx/examples/makefile b/3rdparty/bgfx/examples/makefile
index 9e53c42cd5e..13ce9f336b8 100644
--- a/3rdparty/bgfx/examples/makefile
+++ b/3rdparty/bgfx/examples/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -30,27 +30,7 @@ rebuild:
# @make -s --no-print-directory rebuild -C 25-c99
# @make -s --no-print-directory rebuild -C 26-occlusion
@make -s --no-print-directory rebuild -C 27-terrain
+ @make -s --no-print-directory rebuild -C 28-wireframe
@make -s --no-print-directory rebuild -C common/font
@make -s --no-print-directory rebuild -C common/imgui
@make -s --no-print-directory rebuild -C common/nanovg
-
-metal:
- @make -s --no-print-directory TARGET=5 -C 01-cubes
- @make -s --no-print-directory TARGET=5 -C 03-raymarch
- @make -s --no-print-directory TARGET=5 -C 04-mesh
- @make -s --no-print-directory TARGET=5 -C 05-instancing
- @make -s --no-print-directory TARGET=5 -C 06-bump
- @make -s --no-print-directory TARGET=5 -C 07-callback
- @make -s --no-print-directory TARGET=5 -C 08-update
- @make -s --no-print-directory TARGET=5 -C 09-hdr
- @make -s --no-print-directory TARGET=5 -C 12-lod
- @make -s --no-print-directory TARGET=5 -C 13-stencil
- @make -s --no-print-directory TARGET=5 -C 14-shadowvolumes
- @make -s --no-print-directory TARGET=5 -C 15-shadowmaps-simple
- @make -s --no-print-directory TARGET=5 -C 16-shadowmaps
- @make -s --no-print-directory TARGET=5 -C 18-ibl
- @make -s --no-print-directory TARGET=5 -C 19-oit
- @make -s --no-print-directory TARGET=5 -C 21-deferred
- @make -s --no-print-directory TARGET=5 -C 23-vectordisplay
- @make -s --no-print-directory TARGET=5 -C 24-nbody
- @make -s --no-print-directory TARGET=5 -C 27-terrain
diff --git a/3rdparty/bgfx/examples/runtime/meshes/bunny.bin b/3rdparty/bgfx/examples/runtime/meshes/bunny.bin
index b34244a745d..794ec22c7fe 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/bunny.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/bunny.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/hollowcube.bin b/3rdparty/bgfx/examples/runtime/meshes/hollowcube.bin
index 69a4a38c125..0ea300901e5 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/hollowcube.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/hollowcube.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/meshes/orb.bin b/3rdparty/bgfx/examples/runtime/meshes/orb.bin
index 336f3680565..ac9455a25a5 100644
--- a/3rdparty/bgfx/examples/runtime/meshes/orb.bin
+++ b/3rdparty/bgfx/examples/runtime/meshes/orb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_mesh.bin
index d3ea732918d..155058f3846 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_skybox.bin
index 13b5e270386..07ca7e697d5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm.bin
index e599c4ec016..b27f3fd3fc7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_csm.bin
index c2ac4161f46..03a3f89b28f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear.bin
index acb5c01247e..f85d0ec52b1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_csm.bin
index 3430e96d811..39d115c48e3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_omni.bin
index 6c4859be087..13ad93358d9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_omni.bin
index 95467349adc..d688775bd11 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_esm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard.bin
index d1612f8ca11..00300aa3a4e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_csm.bin
index f6b2ac6587d..3fa09702654 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear.bin
index 52ac4285db6..12eaab3eb5e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_csm.bin
index 221a4278dd8..98f5ff1429a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_omni.bin
index 03b37762125..07e12b43e1b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_omni.bin
index 11f1c23b014..cde6f19fc26 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_hard_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf.bin
index 19d9bba4d4a..2faada8a015 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_csm.bin
index 9581dddcd64..76b37271222 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear.bin
index 8746b286f44..cf8a001ccb4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
index 9957e3b8588..67c95d9110b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
index 3c72697a9d3..748714f916d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_omni.bin
index 834b235eebe..26fac391383 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_pcf_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm.bin
index 0ae83c419f1..27d528221a8 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_csm.bin
index 87536cda4d4..e2184d5b475 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear.bin
index 5129fdb6b0b..c06948c1609 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
index 08a5970da44..91716e56c98 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
index 39d3bff0226..338bd6fc819 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_omni.bin
index 0991b66851f..4ecfdbb92da 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_shadowmaps_color_lighting_vsm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_mesh.bin
new file mode 100644
index 00000000000..76647c0b804
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_wireframe.bin
new file mode 100644
index 00000000000..3706b830375
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/fs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_mesh.bin
index b9febc31cb4..90127469c67 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_skybox.bin
index 5aa032ea932..8c29510aa1b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_mesh.bin
new file mode 100644
index 00000000000..f65702b92e7
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_wireframe.bin
new file mode 100644
index 00000000000..076f9d1dabe
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx11/vs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_mesh.bin
index 3a3ecaba313..74ad610bbf1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_skybox.bin
index 2e49131b0a3..031de157008 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm.bin
index 99f5564ce4d..bd5c93be505 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_csm.bin
index 420080db2fd..046ad528e4e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear.bin
index 2b80ccad6c3..ae7c92272c0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_csm.bin
index 3bbfea99ae7..a47bbbbb521 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_omni.bin
index c9d81f6fa64..4c1eb4fff5b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_omni.bin
index 308f93ef2e3..e1964e28fd8 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_esm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard.bin
index 3de4dcbce87..ac0c477d7e5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_csm.bin
index c53e8814a34..42ffa588595 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear.bin
index d29c6e8c1ed..c57f980bdbf 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_csm.bin
index ca069354ca4..3035d4d8848 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_omni.bin
index c316724a908..8169fc8a1a3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_omni.bin
index bef6549d95b..c9b5cd1b755 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_hard_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf.bin
index 55bce42f02a..cccab4c488c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_csm.bin
index 7427157c5fa..7b2afedb883 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear.bin
index a8c173e3c39..100b6afa14c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
index 984458101ee..ff07f745bcf 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
index e96824aae10..de0f7436c62 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_omni.bin
index bf00e8523f3..a58ecb13461 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_pcf_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm.bin
index ac96c99da43..e5654bea62a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_csm.bin
index 0e69a3950ac..fabcb490544 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear.bin
index a1ce662b545..d01917f3f12 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
index 80befb85a01..d283cc99403 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
index f0bdfd66f7b..14941129ad7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_omni.bin
index 856c659ffe6..9d5f242964f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_shadowmaps_color_lighting_vsm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_mesh.bin
new file mode 100644
index 00000000000..06e389eb117
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_wireframe.bin
new file mode 100644
index 00000000000..6d992770f5e
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/fs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_mesh.bin
index 4218e8ab377..f0c040a4ce1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_skybox.bin
index c0e84000a3a..0c8d2ffaf25 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_mesh.bin
new file mode 100644
index 00000000000..6f13919f414
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_wireframe.bin
new file mode 100644
index 00000000000..54e1d124e03
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/dx9/vs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/cs_indirect.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/cs_indirect.bin
index 72c5eaf6bb2..1faf1aeb562 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/cs_indirect.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/cs_indirect.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/cs_init_instances.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/cs_init_instances.bin
index 048a96abc67..d74d461cfac 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/cs_init_instances.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/cs_init_instances.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/cs_update_instances.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/cs_update_instances.bin
index 1059fa84416..ddd207ccf9a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/cs_update_instances.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/cs_update_instances.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_ibl_mesh.bin
index 5e96353619c..75c93b113e3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_ibl_skybox.bin
index bb2e9aeafe3..76079d0ec8d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_oit_wb.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_oit_wb.bin
index df53debb5b1..e594526cf19 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_oit_wb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_oit_wb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_oit_wb_separate.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_oit_wb_separate.bin
index 2ae88a47fff..3b51e727e87 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_oit_wb_separate.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_oit_wb_separate.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm.bin
index 700694d399e..72ed5111aee 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_csm.bin
index 525a27cdd51..7c77f0cbbfe 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear.bin
index 04c38666671..789141dcccc 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear_csm.bin
index 27d8231f863..3c1d07e15f6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear_omni.bin
index 4ca43066c34..1503d413ab3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_omni.bin
index 4b3fea74139..f79e214b2da 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_esm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard.bin
index 7c5095f0e29..c6f6593ea1e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_csm.bin
index b77c2c824c4..74c0c1cf2a9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear.bin
index 3988caee216..c0e05951bdd 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear_csm.bin
index 9a8ae99224e..19062f01b8c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear_omni.bin
index 1965c493afa..6187725d9f2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_omni.bin
index 31b8e22ba35..133e398538c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_hard_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf.bin
index c867113fd8c..422bf35ec8e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_csm.bin
index c78a27741db..9f78cbeee15 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear.bin
index 85cebb56f07..5ee79f73a28 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
index 93c5b80ef33..4bb6fa06e51 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
index 4769169ac7f..456040c60a3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_omni.bin
index 18a43e1ea27..fc57ca84ebc 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_pcf_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm.bin
index f42d12496d6..ccababe2e1b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_csm.bin
index 50e5c4f14cb..74ff8b8dd26 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear.bin
index 3e96ec50a4c..754e424ea12 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
index df85bd9510c..53f2ea31f22 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
index 2d63ad15e45..0b0a1bbbf16 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_omni.bin
index 772ec28f6ed..ad331bd4ffd 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_color_lighting_vsm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_hblur.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_hblur.bin
index d8509532b15..c50ce9cc452 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_hblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_hblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_packdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_packdepth.bin
index 3997cd62a98..d6bdeb0b6c9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_packdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_packdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_packdepth_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_packdepth_linear.bin
index a366ac46963..c1c6b516290 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_packdepth_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_packdepth_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_unpackdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_unpackdepth.bin
index 0fd472eda28..db9d665275d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_unpackdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_unpackdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_vblur.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_vblur.bin
index d8509532b15..c50ce9cc452 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_vblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowmaps_vblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowvolume_svbackblank.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowvolume_svbackblank.bin
index 2222aa66d6d..c2fb7eac9cc 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowvolume_svbackblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowvolume_svbackblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowvolume_svfrontblank.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowvolume_svfrontblank.bin
index cbe487457f7..4b7b683d8cc 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowvolume_svfrontblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_shadowvolume_svfrontblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_mesh_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_mesh_pd.bin
index 5844d74493e..227b76c4fa2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_mesh_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_mesh_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_shadow.bin
index 98147ab064a..3262874eaf3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_shadow_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_shadow_pd.bin
index 384de3f5387..3c4b91fdcca 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_shadow_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_sms_shadow_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_stencil_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_stencil_color_lighting.bin
index 776c24867fd..f3e5bd234a5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_stencil_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_stencil_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_stencil_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_stencil_texture_lighting.bin
index 3ceba55ea2f..f35896a59d8 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_stencil_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_stencil_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_update_3d.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_update_3d.bin
index b7b8fb4cd0e..1566fb77bef 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_update_3d.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_update_3d.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_wf_mesh.bin
new file mode 100644
index 00000000000..a090c615b90
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/fs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_wf_wireframe.bin
new file mode 100644
index 00000000000..f39c7916d82
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/fs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/vs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/vs_ibl_mesh.bin
index fa99121843b..bbd50acd51f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/vs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/vs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/vs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/vs_ibl_skybox.bin
index 6a3f2f2e619..d0c60ada93c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/gles/vs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/vs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/vs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/vs_wf_mesh.bin
new file mode 100644
index 00000000000..39b2f0bbc48
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/vs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/gles/vs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/gles/vs_wf_wireframe.bin
new file mode 100644
index 00000000000..f456e30f22c
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/gles/vs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_indirect.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_indirect.bin
index 146f0f80889..9a0b306fb00 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_indirect.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_indirect.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_init_instances.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_init_instances.bin
index 8c0aa81a7c4..bd4bd9b6086 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_init_instances.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_init_instances.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update_instances.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update_instances.bin
index 04eb1a408b5..3b695029314 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update_instances.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/cs_update_instances.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_mesh.bin
index 2e35f1e240e..3260e151099 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_skybox.bin
index 16c6969b746..3ac60719279 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb.bin
index 1bfc2361d5c..32f69e5aed2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate.bin
index f8ae5bc9b81..56a47cab952 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_oit_wb_separate.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm.bin
index f5a580f1289..4f66a07bb0f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_csm.bin
index 1e7a4d25acd..7249ac3fc01 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear.bin
index 3c41f4ed3f7..57a0637840f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_csm.bin
index b930d047c81..daa9d7bc412 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_omni.bin
index 5b5e123eaec..5213127e2b3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_omni.bin
index 9e5441e5839..0728fd38ac9 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_esm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard.bin
index 62a4fab7411..40a6fe35f34 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_csm.bin
index 7ae79a1339c..27694944113 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear.bin
index 52a0b821316..68de56248ff 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_csm.bin
index 08808de87a7..e9d07c376e4 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_omni.bin
index 3218ab5f3cc..eceb44fdf0f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_omni.bin
index 0f8e094c7e9..d7893ba4369 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_hard_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf.bin
index 797ec0bcdbe..3638832c180 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_csm.bin
index c649bf07a24..957f309bc5e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear.bin
index 5f0c1c7c365..03143cba754 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
index 5b07162b001..202b3b76236 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
index 34d5c091ce2..7d6487b1514 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_omni.bin
index 53f13abd5c8..d8f9e902fac 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_pcf_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm.bin
index 3ba96599cd4..46a9e14444f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_csm.bin
index d1d4d641bdb..5af575e1be6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear.bin
index 5b675445db3..17290531064 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
index cbcecf1feb4..79058cad0d7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
index a2aeda4ead7..5915c930f4e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_omni.bin
index fd9d3902609..93b5a2a0bb2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_color_lighting_vsm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur.bin
index f1180dceb51..f8fa7a5d8b6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_hblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.bin
index 960eba1e085..6148b430945 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.bin
index a592392cdd6..d59593b94a3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.bin
index acda8d5f64f..6602f5e43e0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur.bin
index f1180dceb51..f8fa7a5d8b6 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowmaps_vblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackblank.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackblank.bin
index 2222aa66d6d..5bbd5e24023 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svbackblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontblank.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontblank.bin
index cbe487457f7..04a7b089fef 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_shadowvolume_svfrontblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh_pd.bin
index a036a3a6254..8e0fb26cd2b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_mesh_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow.bin
index 98147ab064a..946d0e83e3b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow_pd.bin
index 7286ee6bf99..c590fd26595 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_sms_shadow_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_lighting.bin
index 4135af924d1..7977435653d 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture_lighting.bin
index aa333ccb02c..b53189391ea 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_stencil_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_3d.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_3d.bin
index 8b9af3fc299..f5f2c0271dd 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_3d.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_update_3d.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_mesh.bin
new file mode 100644
index 00000000000..d297e624e2a
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_wireframe.bin
new file mode 100644
index 00000000000..c6118cce70f
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/fs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_mesh.bin
index 172605cd36f..924d39fbdcf 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_skybox.bin
index dcf57829e4a..be3bea2edbd 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_mesh.bin
new file mode 100644
index 00000000000..558881a8f49
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_wireframe.bin
new file mode 100644
index 00000000000..70a464fa95a
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/glsl/vs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_mesh.bin
index 3ee33011539..917de5500a2 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_skybox.bin
index f36f1f5ebba..1fd0392deaa 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb.bin
index 2dae0e8f200..e7e9e98bb8e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_blit.bin
index ef295e63d22..76eb570a740 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate.bin
index 2ef7b1b065c..0cf73b0621a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate_blit.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate_blit.bin
index 3772fd2de80..5b4ccf94d83 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate_blit.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_oit_wb_separate_blit.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.bin
index 5b9813e8595..9b2b3ac0881 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.bin
index c5a8b4b215c..04b4c14e4c1 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.bin
index c4d87c03987..5c8a98f584a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.bin
index 2eeed8cde91..6c95e24e176 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.bin
index 4ce8af71a63..aa490324ea3 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.bin
index ca3449ca4d2..eebf557cdfa 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_esm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.bin
index d8fe2fc1ae9..efd340c5844 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.bin
index 5089c8f1d23..f168696c34b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.bin
index 1884107d6bc..8b57ab983a7 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.bin
index 2fa958d85bd..78c3faa2538 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.bin
index 6e7bffc7959..0e2962e2781 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.bin
index af048da8a6f..7a75fac01a0 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_hard_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.bin
index 467c47d243e..5e0d6d5c618 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.bin
index 6faad277fd6..f4ea4faa7ac 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.bin
index 3e0fbb37abc..a8fa89d7f0e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
index 31dd9f7c420..a14ca23e82e 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
index 3a5f285cf37..89e922cc5c5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.bin
index e7c3ad1fa1a..d9c75ba069a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_pcf_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.bin
index a76c572dc2a..b20618eeb15 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.bin
index 8915dd6c718..3822c869067 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.bin
index 79ddb6551c8..1f0b147ec5a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
index 392fceccbd3..1dc620e1147 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_csm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
index b377bf7db6a..94be509057a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_linear_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.bin
index 953b60d9b18..4490f1ef874 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_lighting_vsm_omni.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.bin
index ae7007c7af8..52de7234847 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_color_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur.bin
index b5fe202adc9..76c36a25cde 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.bin
index f42eef2fcc8..45aba573279 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_hblur_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth.bin
index ccec78ba002..2fe89fbc1e5 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_linear.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_linear.bin
index 67b12c79dcc..4d2a474262a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_linear.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_packdepth_linear.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_texture.bin
index 436d6d4471f..e48079000cc 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_texture.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.bin
index cd9a6e88530..60c98b10a77 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.bin
index 94abea67646..54fe70de383 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_unpackdepth_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur.bin
index b5fe202adc9..76c36a25cde 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.bin
index f42eef2fcc8..45aba573279 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowmaps_vblur_vsm.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackblank.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackblank.bin
index 187800af846..7fddc0e0d93 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svbackblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontblank.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontblank.bin
index 747c3963734..682bfa5fa57 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontblank.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_shadowvolume_svfrontblank.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh.bin
index 5c173c76aac..862531d061c 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh_pd.bin
index 26a2cc3de69..fb1631dffaf 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_mesh_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow.bin
index 5281abc6100..b5140b48e9a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow_pd.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow_pd.bin
index 4d4b4469ace..d4ee3580678 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow_pd.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_sms_shadow_pd.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_lighting.bin
index ec312f8a3d8..f6898291c93 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_color_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture_lighting.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture_lighting.bin
index b0f45e5b5b6..229840b069a 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture_lighting.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_stencil_texture_lighting.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_terrain.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_terrain.bin
new file mode 100644
index 00000000000..bb0f5dd11e5
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_terrain.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_tree.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_tree.bin
index c36a93d60b5..f272476055b 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_tree.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_tree.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_3d.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_3d.bin
index aa8f3cb2e9a..dfdd88e41ce 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_3d.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_update_3d.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_mesh.bin
new file mode 100644
index 00000000000..3628dd93e5d
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_wireframe.bin
new file mode 100644
index 00000000000..e00b6fa3f91
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/fs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_mesh.bin
index c29d5680e10..b842f18e72f 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_mesh.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_skybox.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_skybox.bin
index ada939a9055..0052efc7049 100644
--- a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_skybox.bin
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_ibl_skybox.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain.bin
new file mode 100644
index 00000000000..003bac66ae8
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain_height_texture.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain_height_texture.bin
new file mode 100644
index 00000000000..135157b549a
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_terrain_height_texture.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_mesh.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_mesh.bin
new file mode 100644
index 00000000000..caec269a5d4
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_mesh.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_wireframe.bin b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_wireframe.bin
new file mode 100644
index 00000000000..b72c2f84c67
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/shaders/metal/vs_wf_wireframe.bin
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/bolonga_irr.dds b/3rdparty/bgfx/examples/runtime/textures/bolonga_irr.dds
new file mode 100644
index 00000000000..618b3342961
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/textures/bolonga_irr.dds
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/bolonga_lod.dds b/3rdparty/bgfx/examples/runtime/textures/bolonga_lod.dds
new file mode 100644
index 00000000000..139328bed2d
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/textures/bolonga_lod.dds
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/ennis_irr.dds b/3rdparty/bgfx/examples/runtime/textures/ennis_irr.dds
deleted file mode 100644
index 1a55992e19c..00000000000
--- a/3rdparty/bgfx/examples/runtime/textures/ennis_irr.dds
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/ennis_lod.dds b/3rdparty/bgfx/examples/runtime/textures/ennis_lod.dds
deleted file mode 100644
index 1bda2347a91..00000000000
--- a/3rdparty/bgfx/examples/runtime/textures/ennis_lod.dds
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/grace_irr.dds b/3rdparty/bgfx/examples/runtime/textures/grace_irr.dds
deleted file mode 100644
index 85fa2fd495d..00000000000
--- a/3rdparty/bgfx/examples/runtime/textures/grace_irr.dds
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/grace_lod.dds b/3rdparty/bgfx/examples/runtime/textures/grace_lod.dds
deleted file mode 100644
index a76097b0646..00000000000
--- a/3rdparty/bgfx/examples/runtime/textures/grace_lod.dds
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/kyoto_irr.dds b/3rdparty/bgfx/examples/runtime/textures/kyoto_irr.dds
new file mode 100644
index 00000000000..c3f5ccfa72c
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/textures/kyoto_irr.dds
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/kyoto_lod.dds b/3rdparty/bgfx/examples/runtime/textures/kyoto_lod.dds
new file mode 100644
index 00000000000..dc2e0552072
--- /dev/null
+++ b/3rdparty/bgfx/examples/runtime/textures/kyoto_lod.dds
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/pisa_irr.dds b/3rdparty/bgfx/examples/runtime/textures/pisa_irr.dds
deleted file mode 100644
index 34f355cae2d..00000000000
--- a/3rdparty/bgfx/examples/runtime/textures/pisa_irr.dds
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/pisa_lod.dds b/3rdparty/bgfx/examples/runtime/textures/pisa_lod.dds
deleted file mode 100644
index b8afe83cf21..00000000000
--- a/3rdparty/bgfx/examples/runtime/textures/pisa_lod.dds
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/uffizi_irr.dds b/3rdparty/bgfx/examples/runtime/textures/uffizi_irr.dds
deleted file mode 100644
index 5a1013108dd..00000000000
--- a/3rdparty/bgfx/examples/runtime/textures/uffizi_irr.dds
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/uffizi_lod.dds b/3rdparty/bgfx/examples/runtime/textures/uffizi_lod.dds
deleted file mode 100644
index fe20eabba29..00000000000
--- a/3rdparty/bgfx/examples/runtime/textures/uffizi_lod.dds
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/wells_irr.dds b/3rdparty/bgfx/examples/runtime/textures/wells_irr.dds
deleted file mode 100644
index b972bcfc9a5..00000000000
--- a/3rdparty/bgfx/examples/runtime/textures/wells_irr.dds
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/examples/runtime/textures/wells_lod.dds b/3rdparty/bgfx/examples/runtime/textures/wells_lod.dds
deleted file mode 100644
index d66a0c443db..00000000000
--- a/3rdparty/bgfx/examples/runtime/textures/wells_lod.dds
+++ /dev/null
Binary files differ
diff --git a/3rdparty/bgfx/include/bgfx/bgfx.h b/3rdparty/bgfx/include/bgfx/bgfx.h
index e30d7417158..0ba9ddd0783 100644
--- a/3rdparty/bgfx/include/bgfx/bgfx.h
+++ b/3rdparty/bgfx/include/bgfx/bgfx.h
@@ -200,6 +200,10 @@ namespace bgfx
RG32I,
RG32U,
RG32F,
+ RGB8,
+ RGB8I,
+ RGB8U,
+ RGB8S,
RGB9E5F,
BGRA8,
RGBA8,
@@ -264,24 +268,45 @@ namespace bgfx
/// Backbuffer ratios:
enum Enum
{
- Equal,
- Half,
- Quarter,
- Eighth,
- Sixteenth,
- Double,
+ Equal, //!< Equal to backbuffer.
+ Half, //!< One half size of backbuffer.
+ Quarter, //!< One quarter size of backbuffer.
+ Eighth, //!< One eighth size of backbuffer.
+ Sixteenth, //!< One sixteenth size of backbuffer.
+ Double, //!< Double size of backbuffer.
Count
};
};
+ /// Occlusion query result.
+ ///
+ /// @attention C99 equivalent is `bgfx_occlusion_query_result_t`.
+ ///
struct OcclusionQueryResult
{
enum Enum
{
- Invisible,
- Visible,
- NoResult,
+ Invisible, //!< Query failed test.
+ Visible, //!< Query passed test.
+ NoResult, //!< Query result is not available yet.
+
+ Count
+ };
+ };
+
+ /// Topology conversion function.
+ ///
+ /// @attention C99 equivalent is `bgfx_topology_convert_t`.
+ ///
+ struct TopologyConvert
+ {
+ enum Enum
+ {
+ TriListFlipWinding, //!< Flip winding order of triangle list.
+ TriListToLineList, //!< Convert triangle list to line list.
+ TriStripToTriList, //!< Convert triangle strip to triangle list.
+ LineStripToLineList, //!< Convert line strip to line list.
Count
};
@@ -532,6 +557,9 @@ namespace bgfx
bool cubeMap; //!< Texture is cubemap.
};
+ /// Frame buffer texture attachemnt info.
+ ///
+ /// @attention C99 equivalent is `bgfx_attachment_t`.
///
struct Attachment
{
@@ -700,6 +728,24 @@ namespace bgfx
///
uint16_t weldVertices(uint16_t* _output, const VertexDecl& _decl, const void* _data, uint16_t _num, float _epsilon = 0.001f);
+ /// Convert index buffer for use with different primitive topologies.
+ ///
+ /// @param[in] _conversion Conversion type, see `TopologyConvert::Enum`.
+ /// @param[in] _dst Destination index buffer. If this argument it NULL
+ /// function will return number of indices after conversion.
+ /// @param[in] _dstSize Destination index buffer in bytes. It must be
+ /// large enough to contain output indices. If destination size is
+ /// insufficient index buffer will be truncated.
+ /// @param[in] _indices Source indices.
+ /// @param[in] _numIndices Number of input indices.
+ /// @param[in] _index32 Set to `true` if input indices are 32-bit.
+ ///
+ /// @returns Number of output indices after conversion.
+ ///
+ /// @attention C99 equivalent is `bgfx_topology_convert`.
+ ///
+ uint32_t topologyConvert(TopologyConvert::Enum _conversion, void* _dst, uint32_t _dstSize, const void* _indices, uint32_t _numIndices, bool _index32);
+
/// Swizzle RGBA8 image to BGRA8.
///
/// @param[in] _width Width of input image (pixels).
@@ -1481,7 +1527,7 @@ namespace bgfx
/// Create frame buffer.
///
/// @param[in] _num Number of texture attachments.
- /// @param[in] _attachment Attachment info. See: `Attachment`.
+ /// @param[in] _attachment Attachment texture info. See: `Attachment`.
/// @param[in] _destroyTextures If true, textures will be destroyed when
/// frame buffer is destroyed.
///
@@ -1861,12 +1907,28 @@ namespace bgfx
/// Set index buffer for draw primitive.
///
/// @param[in] _handle Index buffer.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_index_buffer`.
+ ///
+ void setIndexBuffer(IndexBufferHandle _handle);
+
+ /// Set index buffer for draw primitive.
+ ///
+ /// @param[in] _handle Index buffer.
/// @param[in] _firstIndex First index to render.
/// @param[in] _numIndices Number of indices to render.
///
/// @attention C99 equivalent is `bgfx_set_index_buffer`.
///
- void setIndexBuffer(IndexBufferHandle _handle, uint32_t _firstIndex = 0, uint32_t _numIndices = UINT32_MAX);
+ void setIndexBuffer(IndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices);
+
+ /// Set index buffer for draw primitive.
+ ///
+ /// @param[in] _handle Dynamic index buffer.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_dynamic_index_buffer`.
+ ///
+ void setIndexBuffer(DynamicIndexBufferHandle _handle);
/// Set index buffer for draw primitive.
///
@@ -1876,7 +1938,7 @@ namespace bgfx
///
/// @attention C99 equivalent is `bgfx_set_dynamic_index_buffer`.
///
- void setIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _firstIndex = 0, uint32_t _numIndices = UINT32_MAX);
+ void setIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices);
/// Set index buffer for draw primitive.
///
@@ -1917,11 +1979,20 @@ namespace bgfx
/// Set vertex buffer for draw primitive.
///
/// @param[in] _handle Dynamic vertex buffer.
+ ///
+ /// @attention C99 equivalent is `bgfx_set_dynamic_vertex_buffer`.
+ ///
+ void setVertexBuffer(DynamicVertexBufferHandle _handle);
+
+ /// Set vertex buffer for draw primitive.
+ ///
+ /// @param[in] _handle Dynamic vertex buffer.
+ /// @param[in] _startVertex First vertex to render.
/// @param[in] _numVertices Number of vertices to render.
///
/// @attention C99 equivalent is `bgfx_set_dynamic_vertex_buffer`.
///
- void setVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _numVertices = UINT32_MAX);
+ void setVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices);
/// Set vertex buffer for draw primitive.
///
@@ -2003,11 +2074,13 @@ namespace bgfx
/// @param[in] _id View id.
/// @param[in] _program Program.
/// @param[in] _depth Depth for sorting.
+ /// @param[in] _preserveState Preserve internal draw state for next draw
+ /// call submit.
/// @returns Number of draw calls.
///
/// @attention C99 equivalent is `bgfx_submit`.
///
- uint32_t submit(uint8_t _id, ProgramHandle _program, int32_t _depth = 0);
+ uint32_t submit(uint8_t _id, ProgramHandle _program, int32_t _depth = 0, bool _preserveState = false);
/// Submit primitive with occlusion query for rendering.
///
@@ -2015,11 +2088,13 @@ namespace bgfx
/// @param[in] _program Program.
/// @param[in] _occlusionQuery Occlusion query.
/// @param[in] _depth Depth for sorting.
+ /// @param[in] _preserveState Preserve internal draw state for next draw
+ /// call submit.
/// @returns Number of draw calls.
///
/// @attention C99 equivalent is `bgfx_submit_occlusion_query.
///
- uint32_t submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth = 0);
+ uint32_t submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth = 0, bool _preserveState = false);
/// Submit primitive for rendering with index and instance data info from
/// indirect buffer.
@@ -2030,10 +2105,13 @@ namespace bgfx
/// @param[in] _start First element in indirect buffer.
/// @param[in] _num Number of dispatches.
/// @param[in] _depth Depth for sorting.
+ /// @param[in] _preserveState Preserve internal draw state for next draw
+ /// call submit.
+ /// @returns Number of draw calls.
///
/// @attention C99 equivalent is `bgfx_submit_indirect`.
///
- uint32_t submit(uint8_t _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start = 0, uint16_t _num = 1, int32_t _depth = 0);
+ uint32_t submit(uint8_t _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start = 0, uint16_t _num = 1, int32_t _depth = 0, bool _preserveState = false);
/// Set compute index buffer.
///
diff --git a/3rdparty/bgfx/include/bgfx/bgfxdefines.h b/3rdparty/bgfx/include/bgfx/bgfxdefines.h
index b80622743a6..0fa429c8784 100644
--- a/3rdparty/bgfx/include/bgfx/bgfxdefines.h
+++ b/3rdparty/bgfx/include/bgfx/bgfxdefines.h
@@ -6,7 +6,7 @@
#ifndef BGFX_DEFINES_H_HEADER_GUARD
#define BGFX_DEFINES_H_HEADER_GUARD
-#define BGFX_API_VERSION UINT32_C(9)
+#define BGFX_API_VERSION UINT32_C(11)
///
#define BGFX_STATE_RGB_WRITE UINT64_C(0x0000000000000001) //!< Enable RGB write.
@@ -21,7 +21,7 @@
#define BGFX_STATE_DEPTH_TEST_NOTEQUAL UINT64_C(0x0000000000000060) //!< Enable depth test, not equal.
#define BGFX_STATE_DEPTH_TEST_NEVER UINT64_C(0x0000000000000070) //!< Enable depth test, never.
#define BGFX_STATE_DEPTH_TEST_ALWAYS UINT64_C(0x0000000000000080) //!< Enable depth test, always.
-#define BGFX_STATE_DEPTH_TEST_SHIFT 4
+#define BGFX_STATE_DEPTH_TEST_SHIFT 4 //!< Depth test state bit shift.
#define BGFX_STATE_DEPTH_TEST_MASK UINT64_C(0x00000000000000f0) //!< Depth test state bit mask.
#define BGFX_STATE_BLEND_ZERO UINT64_C(0x0000000000001000) //!<
@@ -149,19 +149,19 @@
#define BGFX_STENCIL_TEST_NOTEQUAL UINT32_C(0x00060000) //!<
#define BGFX_STENCIL_TEST_NEVER UINT32_C(0x00070000) //!<
#define BGFX_STENCIL_TEST_ALWAYS UINT32_C(0x00080000) //!<
-#define BGFX_STENCIL_TEST_SHIFT 16 //!<
-#define BGFX_STENCIL_TEST_MASK UINT32_C(0x000f0000) //!<
-
-#define BGFX_STENCIL_OP_FAIL_S_ZERO UINT32_C(0x00000000) //!<
-#define BGFX_STENCIL_OP_FAIL_S_KEEP UINT32_C(0x00100000) //!<
-#define BGFX_STENCIL_OP_FAIL_S_REPLACE UINT32_C(0x00200000) //!<
-#define BGFX_STENCIL_OP_FAIL_S_INCR UINT32_C(0x00300000) //!<
-#define BGFX_STENCIL_OP_FAIL_S_INCRSAT UINT32_C(0x00400000) //!<
-#define BGFX_STENCIL_OP_FAIL_S_DECR UINT32_C(0x00500000) //!<
-#define BGFX_STENCIL_OP_FAIL_S_DECRSAT UINT32_C(0x00600000) //!<
-#define BGFX_STENCIL_OP_FAIL_S_INVERT UINT32_C(0x00700000) //!<
-#define BGFX_STENCIL_OP_FAIL_S_SHIFT 20 //!<
-#define BGFX_STENCIL_OP_FAIL_S_MASK UINT32_C(0x00f00000) //!<
+#define BGFX_STENCIL_TEST_SHIFT 16 //!< Stencil test bit shift.
+#define BGFX_STENCIL_TEST_MASK UINT32_C(0x000f0000) //!< Stencil test bit mask.
+
+#define BGFX_STENCIL_OP_FAIL_S_ZERO UINT32_C(0x00000000) //!< Zero.
+#define BGFX_STENCIL_OP_FAIL_S_KEEP UINT32_C(0x00100000) //!< Keep.
+#define BGFX_STENCIL_OP_FAIL_S_REPLACE UINT32_C(0x00200000) //!< Replace.
+#define BGFX_STENCIL_OP_FAIL_S_INCR UINT32_C(0x00300000) //!< Increment and wrap.
+#define BGFX_STENCIL_OP_FAIL_S_INCRSAT UINT32_C(0x00400000) //!< Increment and clamp.
+#define BGFX_STENCIL_OP_FAIL_S_DECR UINT32_C(0x00500000) //!< Decrement and wrap.
+#define BGFX_STENCIL_OP_FAIL_S_DECRSAT UINT32_C(0x00600000) //!< Decrement and clamp.
+#define BGFX_STENCIL_OP_FAIL_S_INVERT UINT32_C(0x00700000) //!< Invert.
+#define BGFX_STENCIL_OP_FAIL_S_SHIFT 20 //!< Stencil operation fail bit shift.
+#define BGFX_STENCIL_OP_FAIL_S_MASK UINT32_C(0x00f00000) //!< Stencil operation fail bit mask.
#define BGFX_STENCIL_OP_FAIL_Z_ZERO UINT32_C(0x00000000) //!<
#define BGFX_STENCIL_OP_FAIL_Z_KEEP UINT32_C(0x01000000) //!<
@@ -171,8 +171,8 @@
#define BGFX_STENCIL_OP_FAIL_Z_DECR UINT32_C(0x05000000) //!<
#define BGFX_STENCIL_OP_FAIL_Z_DECRSAT UINT32_C(0x06000000) //!<
#define BGFX_STENCIL_OP_FAIL_Z_INVERT UINT32_C(0x07000000) //!<
-#define BGFX_STENCIL_OP_FAIL_Z_SHIFT 24 //!<
-#define BGFX_STENCIL_OP_FAIL_Z_MASK UINT32_C(0x0f000000) //!<
+#define BGFX_STENCIL_OP_FAIL_Z_SHIFT 24 //!< Stencil operation fail depth bit shift.
+#define BGFX_STENCIL_OP_FAIL_Z_MASK UINT32_C(0x0f000000) //!< Stencil operation fail depth bit mask.
#define BGFX_STENCIL_OP_PASS_Z_ZERO UINT32_C(0x00000000) //!<
#define BGFX_STENCIL_OP_PASS_Z_KEEP UINT32_C(0x10000000) //!<
@@ -182,8 +182,8 @@
#define BGFX_STENCIL_OP_PASS_Z_DECR UINT32_C(0x50000000) //!<
#define BGFX_STENCIL_OP_PASS_Z_DECRSAT UINT32_C(0x60000000) //!<
#define BGFX_STENCIL_OP_PASS_Z_INVERT UINT32_C(0x70000000) //!<
-#define BGFX_STENCIL_OP_PASS_Z_SHIFT 28 //!<
-#define BGFX_STENCIL_OP_PASS_Z_MASK UINT32_C(0xf0000000) //!<
+#define BGFX_STENCIL_OP_PASS_Z_SHIFT 28 //!< Stencil operation pass depth bit shift.
+#define BGFX_STENCIL_OP_PASS_Z_MASK UINT32_C(0xf0000000) //!< Stencil operation pass depth bit mask.
#define BGFX_STENCIL_NONE UINT32_C(0x00000000) //!<
#define BGFX_STENCIL_MASK UINT32_C(0xffffffff) //!<
diff --git a/3rdparty/bgfx/include/bgfx/bgfxplatform.h b/3rdparty/bgfx/include/bgfx/bgfxplatform.h
index 52b330112d5..1912c05b9d8 100644
--- a/3rdparty/bgfx/include/bgfx/bgfxplatform.h
+++ b/3rdparty/bgfx/include/bgfx/bgfxplatform.h
@@ -232,7 +232,7 @@ namespace bgfx
} // namespace bgfx
-#elif BX_PLATFORM_WINRT
+#elif BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
# include <Unknwn.h>
namespace bgfx
diff --git a/3rdparty/bgfx/include/bgfx/c99/bgfx.h b/3rdparty/bgfx/include/bgfx/c99/bgfx.h
index cba442ef0be..736ac51f132 100644
--- a/3rdparty/bgfx/include/bgfx/c99/bgfx.h
+++ b/3rdparty/bgfx/include/bgfx/c99/bgfx.h
@@ -149,6 +149,10 @@ typedef enum bgfx_texture_format
BGFX_TEXTURE_FORMAT_RG32I,
BGFX_TEXTURE_FORMAT_RG32U,
BGFX_TEXTURE_FORMAT_RG32F,
+ BGFX_TEXTURE_FORMAT_RGB8,
+ BGFX_TEXTURE_FORMAT_RGB8I,
+ BGFX_TEXTURE_FORMAT_RGB8U,
+ BGFX_TEXTURE_FORMAT_RGB8S,
BGFX_TEXTURE_FORMAT_RGB9E5F,
BGFX_TEXTURE_FORMAT_BGRA8,
BGFX_TEXTURE_FORMAT_RGBA8,
@@ -220,6 +224,17 @@ typedef enum bgfx_occlusion_query_result
} bgfx_occlusion_query_result_t;
+typedef enum bgfx_topology_convert
+{
+ BGFX_TOPOLOGY_CONVERT_TRI_LIST_FLIP_WINDING,
+ BGFX_TOPOLOGY_CONVERT_TRI_LIST_TO_LINE_LIST,
+ BGFX_TOPOLOGY_CONVERT_TRI_STRIP_TO_TRI_LIST,
+ BGFX_TOPOLOGY_CONVERT_LINE_STRIP_TO_LINE_LIST,
+
+ BGFX_TOPOLOGY_CONVERT_COUNT
+
+} bgfx_topology_convert_t;
+
#define BGFX_HANDLE_T(_name) \
typedef struct _name { uint16_t idx; } _name##_t
@@ -753,7 +768,7 @@ BGFX_C_API void bgfx_set_transient_index_buffer(const bgfx_transient_index_buffe
BGFX_C_API void bgfx_set_vertex_buffer(bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices);
/**/
-BGFX_C_API void bgfx_set_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _numVertices);
+BGFX_C_API void bgfx_set_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices);
/**/
BGFX_C_API void bgfx_set_transient_vertex_buffer(const bgfx_transient_vertex_buffer_t* _tvb, uint32_t _startVertex, uint32_t _numVertices);
@@ -777,13 +792,13 @@ BGFX_C_API void bgfx_set_texture_from_frame_buffer(uint8_t _stage, bgfx_uniform_
BGFX_C_API uint32_t bgfx_touch(uint8_t _id);
/**/
-BGFX_C_API uint32_t bgfx_submit(uint8_t _id, bgfx_program_handle_t _handle, int32_t _depth);
+BGFX_C_API uint32_t bgfx_submit(uint8_t _id, bgfx_program_handle_t _handle, int32_t _depth, bool _preserveState);
/**/
-BGFX_C_API uint32_t bgfx_submit_occlusion_query(uint8_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, int32_t _depth);
+BGFX_C_API uint32_t bgfx_submit_occlusion_query(uint8_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, int32_t _depth, bool _preserveState);
/**/
-BGFX_C_API uint32_t bgfx_submit_indirect(uint8_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth);
+BGFX_C_API uint32_t bgfx_submit_indirect(uint8_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState);
/**/
BGFX_C_API void bgfx_set_image(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_access_t _access, bgfx_texture_format_t _format);
diff --git a/3rdparty/bgfx/include/bgfx/c99/bgfxplatform.h b/3rdparty/bgfx/include/bgfx/c99/bgfxplatform.h
index 61ff57d2b29..0253a482e24 100644
--- a/3rdparty/bgfx/include/bgfx/c99/bgfxplatform.h
+++ b/3rdparty/bgfx/include/bgfx/c99/bgfxplatform.h
@@ -77,6 +77,7 @@ typedef struct bgfx_interface_vtbl
void (*vertex_unpack)(float _output[4], bgfx_attrib_t _attr, const bgfx_vertex_decl_t* _decl, const void* _data, uint32_t _index);
void (*vertex_convert)(const bgfx_vertex_decl_t* _destDecl, void* _destData, const bgfx_vertex_decl_t* _srcDecl, const void* _srcData, uint32_t _num);
uint16_t (*weld_vertices)(uint16_t* _output, const bgfx_vertex_decl_t* _decl, const void* _data, uint16_t _num, float _epsilon);
+ uint32_t (*topology_convert)(bgfx_topology_convert_t _conversion, void* _dst, uint32_t _dstSize, const void* _indices, uint32_t _numIndices, bool _index32);
void (*image_swizzle_bgra8)(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst);
void (*image_rgba8_downsample_2x2)(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst);
uint8_t (*get_supported_renderers)(bgfx_renderer_type_t _enum[BGFX_RENDERER_TYPE_COUNT]);
@@ -170,7 +171,7 @@ typedef struct bgfx_interface_vtbl
void (*set_dynamic_index_buffer)(bgfx_dynamic_index_buffer_handle_t _handle, uint32_t _firstIndex, uint32_t _numIndices);
void (*set_transient_index_buffer)(const bgfx_transient_index_buffer_t* _tib, uint32_t _firstIndex, uint32_t _numIndices);
void (*set_vertex_buffer)(bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices);
- void (*set_dynamic_vertex_buffer)(bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _numVertices);
+ void (*set_dynamic_vertex_buffer)(bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices);
void (*set_transient_vertex_buffer)(const bgfx_transient_vertex_buffer_t* _tvb, uint32_t _startVertex, uint32_t _numVertices);
void (*set_instance_data_buffer)(const bgfx_instance_data_buffer_t* _idb, uint32_t _num);
void (*set_instance_data_from_vertex_buffer)(bgfx_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _num);
@@ -178,9 +179,9 @@ typedef struct bgfx_interface_vtbl
void (*set_texture)(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint32_t _flags);
void (*set_texture_from_frame_buffer)(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, uint32_t _flags);
uint32_t (*touch)(uint8_t _id);
- uint32_t (*submit)(uint8_t _id, bgfx_program_handle_t _handle, int32_t _depth);
- uint32_t (*submit_occlusion_query)(uint8_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, int32_t _depth);
- uint32_t (*submit_indirect)(uint8_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth);
+ uint32_t (*submit)(uint8_t _id, bgfx_program_handle_t _handle, int32_t _depth, bool _preserveState);
+ uint32_t (*submit_occlusion_query)(uint8_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, int32_t _depth, bool _preserveState);
+ uint32_t (*submit_indirect)(uint8_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState);
void (*set_image)(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_access_t _access, bgfx_texture_format_t _format);
void (*set_image_from_frame_buffer)(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, bgfx_access_t _access, bgfx_texture_format_t _format);
void (*set_compute_index_buffer)(uint8_t _stage, bgfx_index_buffer_handle_t _handle, bgfx_access_t _access);
diff --git a/3rdparty/bgfx/makefile b/3rdparty/bgfx/makefile
index afa61759a85..30f3e3eb9c4 100644
--- a/3rdparty/bgfx/makefile
+++ b/3rdparty/bgfx/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -16,6 +16,9 @@ endif
endif
else
OS=windows
+
+help: projgen
+
endif
# $(info $(OS))
@@ -23,7 +26,18 @@ endif
BX_DIR?=../bx
GENIE?=$(BX_DIR)/tools/bin/$(OS)/genie
-all:
+.PHONY: help
+
+help:
+ @echo Available targets:
+ @grep -E "^[a-zA-Z0-9_-]+:.*?## .*$$" $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
+
+clean: ## Clean all intermediate files.
+ @echo Cleaning...
+ -@rm -rf .build
+ @mkdir .build
+
+projgen: ## Generate project files for all configurations.
$(GENIE) --with-tools --with-shared-lib vs2008
$(GENIE) --with-tools --with-shared-lib vs2010
$(GENIE) --with-tools --with-shared-lib vs2012
@@ -49,171 +63,207 @@ all:
.build/projects/gmake-android-arm:
$(GENIE) --gcc=android-arm gmake
-android-arm-debug: .build/projects/gmake-android-arm
+android-arm-debug: .build/projects/gmake-android-arm ## Build - Android ARM Debug
$(MAKE) -R -C .build/projects/gmake-android-arm config=debug
-android-arm-release: .build/projects/gmake-android-arm
+android-arm-release: .build/projects/gmake-android-arm ## Build - Android ARM Release
$(MAKE) -R -C .build/projects/gmake-android-arm config=release
-android-arm: android-arm-debug android-arm-release
+android-arm: android-arm-debug android-arm-release ## Build - Android ARM Debug and Release
.build/projects/gmake-android-mips:
$(GENIE) --gcc=android-mips gmake
-android-mips-debug: .build/projects/gmake-android-mips
+android-mips-debug: .build/projects/gmake-android-mips ## Build - Android MIPS Debug
$(MAKE) -R -C .build/projects/gmake-android-mips config=debug
-android-mips-release: .build/projects/gmake-android-mips
+android-mips-release: .build/projects/gmake-android-mips ## Build - Android MIPS Release
$(MAKE) -R -C .build/projects/gmake-android-mips config=release
-android-mips: android-mips-debug android-mips-release
+android-mips: android-mips-debug android-mips-release ## Build - Android MIPS Debug and Release
.build/projects/gmake-android-x86:
$(GENIE) --gcc=android-x86 gmake
-android-x86-debug: .build/projects/gmake-android-x86
+android-x86-debug: .build/projects/gmake-android-x86 ## Build - Android x86 Debug and Release
$(MAKE) -R -C .build/projects/gmake-android-x86 config=debug
-android-x86-release: .build/projects/gmake-android-x86
+android-x86-release: .build/projects/gmake-android-x86 ## Build - Android x86 Debug and Release
$(MAKE) -R -C .build/projects/gmake-android-x86 config=release
-android-x86: android-x86-debug android-x86-release
+android-x86: android-x86-debug android-x86-release ## Build - Android x86 Debug and Release
.build/projects/gmake-asmjs:
$(GENIE) --gcc=asmjs gmake
-asmjs-debug: .build/projects/gmake-asmjs
+asmjs-debug: .build/projects/gmake-asmjs ## Build - Emscripten Debug
$(MAKE) -R -C .build/projects/gmake-asmjs config=debug
-asmjs-release: .build/projects/gmake-asmjs
+asmjs-release: .build/projects/gmake-asmjs ## Build - Emscripten Release
$(MAKE) -R -C .build/projects/gmake-asmjs config=release
-asmjs: asmjs-debug asmjs-release
+asmjs: asmjs-debug asmjs-release ## Build - Emscripten Debug and Release
.build/projects/gmake-linux:
$(GENIE) --with-tools --with-shared-lib --gcc=linux-gcc gmake
-linux-debug32: .build/projects/gmake-linux
+linux-debug32: .build/projects/gmake-linux ## Build - Linux x86 Debug
$(MAKE) -R -C .build/projects/gmake-linux config=debug32
-linux-release32: .build/projects/gmake-linux
+linux-release32: .build/projects/gmake-linux ## Build - Linux x86 Release
$(MAKE) -R -C .build/projects/gmake-linux config=release32
-linux-debug64: .build/projects/gmake-linux
+linux-debug64: .build/projects/gmake-linux ## Build - Linux x64 Debug
$(MAKE) -R -C .build/projects/gmake-linux config=debug64
-linux-release64: .build/projects/gmake-linux
+linux-release64: .build/projects/gmake-linux ## Build - Linux x64 Release
$(MAKE) -R -C .build/projects/gmake-linux config=release64
-linux: linux-debug32 linux-release32 linux-debug64 linux-release64
+linux: linux-debug32 linux-release32 linux-debug64 linux-release64 ## Build - Linux x86/x64 Debug and Release
.build/projects/gmake-freebsd:
$(GENIE) --with-tools --with-shared-lib --gcc=freebsd gmake
-freebsd-debug32: .build/projects/gmake-freebsd
+freebsd-debug32: .build/projects/gmake-freebsd ## Build - FreeBSD x86 Debug
$(MAKE) -R -C .build/projects/gmake-freebsd config=debug32
-freebsd-release32: .build/projects/gmake-freebsd
+freebsd-release32: .build/projects/gmake-freebsd ## Build - FreeBSD x86 Release
$(MAKE) -R -C .build/projects/gmake-freebsd config=release32
-freebsd-debug64: .build/projects/gmake-freebsd
+freebsd-debug64: .build/projects/gmake-freebsd ## Build - FreeBSD x86 Debug
$(MAKE) -R -C .build/projects/gmake-freebsd config=debug64
-freebsd-release64: .build/projects/gmake-freebsd
+freebsd-release64: .build/projects/gmake-freebsd ## Build - FreeBSD x86 Release
$(MAKE) -R -C .build/projects/gmake-freebsd config=release64
-freebsd: freebsd-debug32 freebsd-release32 freebsd-debug64 freebsd-release64
+freebsd: freebsd-debug32 freebsd-release32 freebsd-debug64 freebsd-release64 ## Build - FreeBSD x86/x64 Debug and Release
.build/projects/gmake-mingw-gcc:
$(GENIE) --with-tools --with-shared-lib --gcc=mingw-gcc gmake
-mingw-gcc-debug32: .build/projects/gmake-mingw-gcc
+mingw-gcc-debug32: .build/projects/gmake-mingw-gcc ## Build - MinGW GCC x86 Debug
$(MAKE) -R -C .build/projects/gmake-mingw-gcc config=debug32
-mingw-gcc-release32: .build/projects/gmake-mingw-gcc
+mingw-gcc-release32: .build/projects/gmake-mingw-gcc ## Build - MinGW GCC x86 Release
$(MAKE) -R -C .build/projects/gmake-mingw-gcc config=release32
-mingw-gcc-debug64: .build/projects/gmake-mingw-gcc
+mingw-gcc-debug64: .build/projects/gmake-mingw-gcc ## Build - MinGW GCC x64 Debug
$(MAKE) -R -C .build/projects/gmake-mingw-gcc config=debug64
-mingw-gcc-release64: .build/projects/gmake-mingw-gcc
+mingw-gcc-release64: .build/projects/gmake-mingw-gcc ## Build - MinGW GCC x64 Release
$(MAKE) -R -C .build/projects/gmake-mingw-gcc config=release64
-mingw-gcc: mingw-gcc-debug32 mingw-gcc-release32 mingw-gcc-debug64 mingw-gcc-release64
+mingw-gcc: mingw-gcc-debug32 mingw-gcc-release32 mingw-gcc-debug64 mingw-gcc-release64 ## Build - MinGW GCC x86/x64 Debug and Release
.build/projects/gmake-mingw-clang:
$(GENIE) --gcc=mingw-clang gmake
-mingw-clang-debug32: .build/projects/gmake-mingw-clang
+mingw-clang-debug32: .build/projects/gmake-mingw-clang ## Build - MinGW Clang x86 Debug
$(MAKE) -R -C .build/projects/gmake-mingw-clang config=debug32
-mingw-clang-release32: .build/projects/gmake-mingw-clang
+mingw-clang-release32: .build/projects/gmake-mingw-clang ## Build - MinGW Clang x86 Release
$(MAKE) -R -C .build/projects/gmake-mingw-clang config=release32
-mingw-clang-debug64: .build/projects/gmake-mingw-clang
+mingw-clang-debug64: .build/projects/gmake-mingw-clang ## Build - MinGW Clang x64 Debug
$(MAKE) -R -C .build/projects/gmake-mingw-clang config=debug64
-mingw-clang-release64: .build/projects/gmake-mingw-clang
+mingw-clang-release64: .build/projects/gmake-mingw-clang ## Build - MinGW Clang x64 Release
$(MAKE) -R -C .build/projects/gmake-mingw-clang config=release64
-mingw-clang: mingw-clang-debug32 mingw-clang-release32 mingw-clang-debug64 mingw-clang-release64
+mingw-clang: mingw-clang-debug32 mingw-clang-release32 mingw-clang-debug64 mingw-clang-release64 ## Build - MinGW Clang x86/x64 Debug and Release
.build/projects/vs2008:
$(GENIE) --with-tools --with-shared-lib vs2008
-vs2008-debug32: .build/projects/vs2008
+vs2008-debug32: .build/projects/vs2008 ## Build - VS2008 x86 Debug
devenv .build/projects/vs2008/bgfx.sln /Build "Debug|Win32"
-vs2008-release32: .build/projects/vs2008
+vs2008-release32: .build/projects/vs2008 ## Build - VS2008 x86 Release
devenv .build/projects/vs2008/bgfx.sln /Build "Release|Win32"
-vs2008-debug64: .build/projects/vs2008
+vs2008-debug64: .build/projects/vs2008 ## Build - VS2008 x64 Debug
devenv .build/projects/vs2008/bgfx.sln /Build "Debug|x64"
-vs2008-release64: .build/projects/vs2008
+vs2008-release64: .build/projects/vs2008 ## Build - VS2008 x64 Release
devenv .build/projects/vs2008/bgfx.sln /Build "Release|x64"
-vs2008: vs2008-debug32 vs2008-release32 vs2008-debug64 vs2008-release64
+vs2008: vs2008-debug32 vs2008-release32 vs2008-debug64 vs2008-release64 ## Build - VS2008 x86/x64 Debug and Release
.build/projects/vs2010:
$(GENIE) --with-tools --with-shared-lib vs2010
+vs2010-debug32: .build/projects/vs2010 ## Build - VS2010 x86 Debug
+ devenv .build/projects/vs2010/bgfx.sln /Build "Debug|Win32"
+vs2010-release32: .build/projects/vs2010 ## Build - VS2010 x86 Release
+ devenv .build/projects/vs2010/bgfx.sln /Build "Release|Win32"
+vs2010-debug64: .build/projects/vs2010 ## Build - VS2010 x64 Debug
+ devenv .build/projects/vs2010/bgfx.sln /Build "Debug|x64"
+vs2010-release64: .build/projects/vs2010 ## Build - VS2010 x64 Release
+ devenv .build/projects/vs2010/bgfx.sln /Build "Release|x64"
+vs2010: vs2010-debug32 vs2010-release32 vs2010-debug64 vs2010-release64 ## Build - VS2010 x86/x64 Debug and Release
.build/projects/vs2012:
$(GENIE) --with-tools --with-shared-lib vs2012
+vs2012-debug32: .build/projects/vs2012 ## Build - VS2012 x86 Debug
+ devenv .build/projects/vs2012/bgfx.sln /Build "Debug|Win32"
+vs2012-release32: .build/projects/vs2012 ## Build - VS2012 x86 Release
+ devenv .build/projects/vs2012/bgfx.sln /Build "Release|Win32"
+vs2012-debug64: .build/projects/vs2012 ## Build - VS2012 x64 Debug
+ devenv .build/projects/vs2012/bgfx.sln /Build "Debug|x64"
+vs2012-release64: .build/projects/vs2012 ## Build - VS2012 x64 Release
+ devenv .build/projects/vs2012/bgfx.sln /Build "Release|x64"
+vs2012: vs2012-debug32 vs2012-release32 vs2012-debug64 vs2012-release64 ## Build - VS2012 x86/x64 Debug and Release
.build/projects/vs2013:
$(GENIE) --with-tools --with-shared-lib vs2013
+vs2013-debug32: .build/projects/vs2013 ## Build - VS2013 x86 Debug
+ devenv .build/projects/vs2013/bgfx.sln /Build "Debug|Win32"
+vs2013-release32: .build/projects/vs2013 ## Build - VS2013 x86 Release
+ devenv .build/projects/vs2013/bgfx.sln /Build "Release|Win32"
+vs2013-debug64: .build/projects/vs2013 ## Build - VS2013 x64 Debug
+ devenv .build/projects/vs2013/bgfx.sln /Build "Debug|x64"
+vs2013-release64: .build/projects/vs2013 ## Build - VS2013 x64 Release
+ devenv .build/projects/vs2013/bgfx.sln /Build "Release|x64"
+vs2013: vs2013-debug32 vs2013-release32 vs2013-debug64 vs2013-release64 ## Build - VS2013 x86/x64 Debug and Release
.build/projects/vs2015:
$(GENIE) --with-tools --with-shared-lib vs2015
+vs2015-debug32: .build/projects/vs2015 ## Build - VS2015 x86 Debug
+ devenv .build/projects/vs2015/bgfx.sln /Build "Debug|Win32"
+vs2015-release32: .build/projects/vs2015 ## Build - VS2015 x86 Release
+ devenv .build/projects/vs2015/bgfx.sln /Build "Release|Win32"
+vs2015-debug64: .build/projects/vs2015 ## Build - VS2015 x64 Debug
+ devenv .build/projects/vs2015/bgfx.sln /Build "Debug|x64"
+vs2015-release64: .build/projects/vs2015 ## Build - VS2015 x64 Release
+ devenv .build/projects/vs2015/bgfx.sln /Build "Release|x64"
+vs2015: vs2015-debug32 vs2015-release32 vs2015-debug64 vs2015-release64 ## Build - VS2015 x86/x64 Debug and Release
.build/projects/gmake-nacl:
$(GENIE) --gcc=nacl gmake
-nacl-debug32: .build/projects/gmake-nacl
+nacl-debug32: .build/projects/gmake-nacl ## Build - Native Client x86 Debug
$(MAKE) -R -C .build/projects/gmake-nacl config=debug32
-nacl-release32: .build/projects/gmake-nacl
+nacl-release32: .build/projects/gmake-nacl ## Build - Native Client x86 Release
$(MAKE) -R -C .build/projects/gmake-nacl config=release32
-nacl-debug64: .build/projects/gmake-nacl
+nacl-debug64: .build/projects/gmake-nacl ## Build - Native Client x64 Debug
$(MAKE) -R -C .build/projects/gmake-nacl config=debug64
-nacl-release64: .build/projects/gmake-nacl
+nacl-release64: .build/projects/gmake-nacl ## Build - Native Client x64 Release
$(MAKE) -R -C .build/projects/gmake-nacl config=release64
-nacl: nacl-debug32 nacl-release32 nacl-debug64 nacl-release64
+nacl: nacl-debug32 nacl-release32 nacl-debug64 nacl-release64 ## Build - Native Client x86/x64 Debug and Release
.build/projects/gmake-nacl-arm:
$(GENIE) --gcc=nacl-arm gmake
-nacl-arm-debug: .build/projects/gmake-nacl-arm
+nacl-arm-debug: .build/projects/gmake-nacl-arm ## Build - Native Client ARM Debug
$(MAKE) -R -C .build/projects/gmake-nacl-arm config=debug
-nacl-arm-release: .build/projects/gmake-nacl-arm
+nacl-arm-release: .build/projects/gmake-nacl-arm ## Build - Native Client ARM Release
$(MAKE) -R -C .build/projects/gmake-nacl-arm config=release
-nacl-arm: nacl-arm-debug32 nacl-arm-release32
+nacl-arm: nacl-arm-debug32 nacl-arm-release32 ## Build - Native Client ARM Debug and Release
.build/projects/gmake-pnacl:
$(GENIE) --gcc=pnacl gmake
-pnacl-debug: .build/projects/gmake-pnacl
+pnacl-debug: .build/projects/gmake-pnacl ## Build - Portable Native Client Debug
$(MAKE) -R -C .build/projects/gmake-pnacl config=debug
-pnacl-release: .build/projects/gmake-pnacl
+pnacl-release: .build/projects/gmake-pnacl ## Build - Portable Native Client Release
$(MAKE) -R -C .build/projects/gmake-pnacl config=release
-pnacl: pnacl-debug pnacl-release
+pnacl: pnacl-debug pnacl-release ## Build - Portable Native Client Debug and Release
.build/projects/gmake-osx:
$(GENIE) --with-tools --with-shared-lib --gcc=osx gmake
-osx-debug32: .build/projects/gmake-osx
+osx-debug32: .build/projects/gmake-osx ## Build - OSX x86 Debug
$(MAKE) -C .build/projects/gmake-osx config=debug32
-osx-release32: .build/projects/gmake-osx
+osx-release32: .build/projects/gmake-osx ## Build - OSX x86 Release
$(MAKE) -C .build/projects/gmake-osx config=release32
-osx-debug64: .build/projects/gmake-osx
+osx-debug64: .build/projects/gmake-osx ## Build - OSX x64 Debug
$(MAKE) -C .build/projects/gmake-osx config=debug64
-osx-release64: .build/projects/gmake-osx
+osx-release64: .build/projects/gmake-osx ## Build - OSX x64 Release
$(MAKE) -C .build/projects/gmake-osx config=release64
-osx: osx-debug32 osx-release32 osx-debug64 osx-release64
+osx: osx-debug32 osx-release32 osx-debug64 osx-release64 ## Build - OSX x86/x64 Debug and Release
.build/projects/gmake-ios-arm:
$(GENIE) --gcc=ios-arm gmake
-ios-arm-debug: .build/projects/gmake-ios-arm
+ios-arm-debug: .build/projects/gmake-ios-arm ## Build - iOS ARM Debug
$(MAKE) -R -C .build/projects/gmake-ios-arm config=debug
-ios-arm-release: .build/projects/gmake-ios-arm
+ios-arm-release: .build/projects/gmake-ios-arm ## Build - iOS ARM Release
$(MAKE) -R -C .build/projects/gmake-ios-arm config=release
-ios-arm: ios-arm-debug ios-arm-release
+ios-arm: ios-arm-debug ios-arm-release ## Build - iOS ARM Debug and Release
.build/projects/gmake-ios-simulator:
$(GENIE) --gcc=ios-simulator gmake
-ios-simulator-debug: .build/projects/gmake-ios-simulator
+ios-simulator-debug: .build/projects/gmake-ios-simulator ## Build - iOS Simulator Debug
$(MAKE) -R -C .build/projects/gmake-ios-simulator config=debug
-ios-simulator-release: .build/projects/gmake-ios-simulator
+ios-simulator-release: .build/projects/gmake-ios-simulator ## Build - iOS Simulator Release
$(MAKE) -R -C .build/projects/gmake-ios-simulator config=release
-ios-simulator: ios-simulator-debug ios-simulator-release
+ios-simulator: ios-simulator-debug ios-simulator-release ## Build - iOS Simulator Debug and Release
.build/projects/gmake-rpi:
$(GENIE) --gcc=rpi gmake
-rpi-debug: .build/projects/gmake-rpi
+rpi-debug: .build/projects/gmake-rpi ## Build - RasberryPi Debug
$(MAKE) -R -C .build/projects/gmake-rpi config=debug
-rpi-release: .build/projects/gmake-rpi
+rpi-release: .build/projects/gmake-rpi ## Build - RasberryPi Release
$(MAKE) -R -C .build/projects/gmake-rpi config=release
-rpi: rpi-debug rpi-release
+rpi: rpi-debug rpi-release ## Build - RasberryPi Debug and Release
build-darwin: osx
@@ -234,10 +284,6 @@ docs:
doxygen scripts/bgfx.doxygen
markdown README.md > .build/docs/readme.html
-clean:
- @echo Cleaning...
- -@rm -rf .build
-
###
SILENT ?= @
@@ -271,22 +317,48 @@ endif
else
OS=windows
BUILD_PROJECT_DIR=gmake-mingw-gcc
-BUILD_OUTPUT_DIR=win32_mingw-gcc
-BUILD_TOOLS_CONFIG=release32
+BUILD_OUTPUT_DIR=win64_mingw-gcc
+BUILD_TOOLS_CONFIG=release64
BUILD_TOOLS_SUFFIX=Release
EXE=.exe
endif
-geometryc: .build/projects/$(BUILD_PROJECT_DIR)
+geometryc: .build/projects/$(BUILD_PROJECT_DIR) ## Build geometryc tool.
$(SILENT) $(MAKE) -C .build/projects/$(BUILD_PROJECT_DIR) -f geometryc.make config=$(BUILD_TOOLS_CONFIG)
$(SILENT) cp .build/$(BUILD_OUTPUT_DIR)/bin/geometryc$(BUILD_TOOLS_SUFFIX)$(EXE) tools/bin/$(OS)/geometryc$(EXE)
-shaderc: .build/projects/$(BUILD_PROJECT_DIR)
+shaderc: .build/projects/$(BUILD_PROJECT_DIR) ## Build shaderc tool.
$(SILENT) $(MAKE) -C .build/projects/$(BUILD_PROJECT_DIR) -f shaderc.make config=$(BUILD_TOOLS_CONFIG)
$(SILENT) cp .build/$(BUILD_OUTPUT_DIR)/bin/shaderc$(BUILD_TOOLS_SUFFIX)$(EXE) tools/bin/$(OS)/shaderc$(EXE)
-texturec: .build/projects/$(BUILD_PROJECT_DIR)
+texturec: .build/projects/$(BUILD_PROJECT_DIR) ## Build texturec tool.
$(SILENT) $(MAKE) -C .build/projects/$(BUILD_PROJECT_DIR) -f texturec.make config=$(BUILD_TOOLS_CONFIG)
$(SILENT) cp .build/$(BUILD_OUTPUT_DIR)/bin/texturec$(BUILD_TOOLS_SUFFIX)$(EXE) tools/bin/$(OS)/texturec$(EXE)
-tools: geometryc shaderc texturec
+tools: geometryc shaderc texturec ## Build tools.
+
+dist-windows: .build/projects/gmake-mingw-gcc
+ $(SILENT) $(MAKE) -C .build/projects/gmake-mingw-gcc config=release64 -j 6 geometryc
+ $(SILENT) cp .build/win64_mingw-gcc/bin/geometrycRelease tools/bin/windows/geometryc.exe
+ $(SILENT) $(MAKE) -C .build/projects/gmake-mingw-gcc config=release64 -j 6 shaderc
+ $(SILENT) cp .build/win64_mingw-gcc/bin/shadercRelease tools/bin/windows/shaderc.exe
+ $(SILENT) $(MAKE) -C .build/projects/gmake-mingw-gcc config=release64 -j 6 texturec
+ $(SILENT) cp .build/win64_mingw-gcc/bin/texturecRelease tools/bin/windows/texturec.exe
+
+dist-linux: .build/projects/gmake-linux
+ $(SILENT) $(MAKE) -C .build/projects/gmake-linux config=release64 -j 6 geometryc
+ $(SILENT) cp .build/linux64_gcc/bin/geometrycRelease tools/bin/linux/geometryc
+ $(SILENT) $(MAKE) -C .build/projects/gmake-linux config=release64 -j 6 shaderc
+ $(SILENT) cp .build/linux64_gcc/bin/shadercRelease tools/bin/linux/shaderc
+ $(SILENT) $(MAKE) -C .build/projects/gmake-linux config=release64 -j 6 texturec
+ $(SILENT) cp .build/linux64_gcc/bin/texturecRelease tools/bin/linux/texturec
+
+dist-darwin: .build/projects/gmake-osx
+ $(SILENT) $(MAKE) -C .build/projects/gmake-osx config=release64 -j 6 geometryc
+ $(SILENT) cp .build/osx64_clang/bin/geometrycRelease tools/bin/darwin/geometryc
+ $(SILENT) $(MAKE) -C .build/projects/gmake-osx config=release64 -j 6 shaderc
+ $(SILENT) cp .build/osx64_clang/bin/shadercRelease tools/bin/darwin/shaderc
+ $(SILENT) $(MAKE) -C .build/projects/gmake-osx config=release64 -j 6 texturec
+ $(SILENT) cp .build/osx64_clang/bin/texturecRelease tools/bin/darwin/texturec
+
+dist: clean dist-windows dist-linux dist-darwin
diff --git a/3rdparty/bgfx/scripts/genie.lua b/3rdparty/bgfx/scripts/genie.lua
index 52554366dfb..a0fa5b712d1 100644
--- a/3rdparty/bgfx/scripts/genie.lua
+++ b/3rdparty/bgfx/scripts/genie.lua
@@ -218,7 +218,7 @@ function exampleProject(_name)
configuration {}
end
- configuration { "vs*" }
+ configuration { "vs*", "x32 or x64" }
linkoptions {
"/ignore:4199", -- LNK4199: /DELAYLOAD:*.dll ignored; no imports found from *.dll
}
@@ -226,7 +226,7 @@ function exampleProject(_name)
"DelayImp",
}
- configuration { "vs201*" }
+ configuration { "vs201*", "x32 or x64" }
linkoptions { -- this is needed only for testing with GLES2/3 on Windows with VS201x
"/DELAYLOAD:\"libEGL.dll\"",
"/DELAYLOAD:\"libGLESv2.dll\"",
@@ -234,13 +234,24 @@ function exampleProject(_name)
configuration { "mingw*" }
targetextension ".exe"
+ links {
+ "gdi32",
+ "psapi",
+ }
- configuration { "vs20* or mingw*" }
+ configuration { "vs20*", "x32 or x64" }
links {
"gdi32",
"psapi",
}
+ configuration { "durango" }
+ links {
+ "d3d11_x",
+ "combase",
+ "kernelx",
+ }
+
configuration { "winphone8* or winstore8*" }
removelinks {
"DelayImp",
@@ -318,7 +329,7 @@ function exampleProject(_name)
"SDL2",
"pthread",
}
-
+
configuration { "rpi" }
links {
"X11",
@@ -409,6 +420,7 @@ exampleProject("23-vectordisplay")
exampleProject("24-nbody")
exampleProject("26-occlusion")
exampleProject("27-terrain")
+exampleProject("28-wireframe")
-- C99 source doesn't compile under WinRT settings
if not premake.vstudio.iswinrt() then
diff --git a/3rdparty/bgfx/scripts/shader-embeded.mk b/3rdparty/bgfx/scripts/shader-embeded.mk
index 59bb3d9d037..d6ccecf61dd 100644
--- a/3rdparty/bgfx/scripts/shader-embeded.mk
+++ b/3rdparty/bgfx/scripts/shader-embeded.mk
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
@@ -8,14 +8,17 @@ include $(THISDIR)/tools.mk
VS_FLAGS+=-i $(THISDIR)../src/ --type vertex
FS_FLAGS+=-i $(THISDIR)../src/ --type fragment
+CS_FLAGS+=-i $(THISDIR)../src/ --type compute
VS_SOURCES=$(wildcard vs_*.sc)
FS_SOURCES=$(wildcard fs_*.sc)
+CS_SOURCES=$(wildcard cs_*.sc)
VS_BIN = $(addsuffix .bin.h, $(basename $(VS_SOURCES)))
FS_BIN = $(addsuffix .bin.h, $(basename $(FS_SOURCES)))
+CS_BIN = $(addsuffix .bin.h, $(basename $(CS_SOURCES)))
-BIN = $(VS_BIN) $(FS_BIN)
+BIN = $(VS_BIN) $(FS_BIN) $(CS_BIN)
SHADER_TMP = $(TEMP)/tmp
@@ -41,6 +44,13 @@ fs_%.bin.h : fs_%.sc
-$(SILENT) $(SHADERC) $(FS_FLAGS) --platform ios -p metal -O 3 -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_mtl
-@cat $(SHADER_TMP) >> $(@)
+cs_%.bin.h : cs_%.sc
+ @echo [$(<)]
+ $(SILENT) $(SHADERC) $(CS_FLAGS) --platform linux -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_glsl
+ @cat $(SHADER_TMP) > $(@)
+ -$(SILENT) $(SHADERC) $(CS_FLAGS) --platform windows -p cs_5_0 -O 1 -f $(<) -o $(SHADER_TMP) --bin2c $(basename $(<))_dx11
+ -@cat $(SHADER_TMP) >> $(@)
+
.PHONY: all
all: $(BIN)
diff --git a/3rdparty/bgfx/scripts/shader.mk b/3rdparty/bgfx/scripts/shader.mk
index d7e0e151597..7a479ea8896 100644
--- a/3rdparty/bgfx/scripts/shader.mk
+++ b/3rdparty/bgfx/scripts/shader.mk
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
diff --git a/3rdparty/bgfx/scripts/tools.mk b/3rdparty/bgfx/scripts/tools.mk
index fec2885b7be..1c810c0d14d 100644
--- a/3rdparty/bgfx/scripts/tools.mk
+++ b/3rdparty/bgfx/scripts/tools.mk
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
diff --git a/3rdparty/bgfx/src/amalgamated.cpp b/3rdparty/bgfx/src/amalgamated.cpp
index d98dd37ddab..d61f06845cd 100644
--- a/3rdparty/bgfx/src/amalgamated.cpp
+++ b/3rdparty/bgfx/src/amalgamated.cpp
@@ -20,4 +20,5 @@
#include "shader_dxbc.cpp"
#include "shader_dx9bc.cpp"
#include "shader_spirv.cpp"
+#include "topology.cpp"
#include "vertexdecl.cpp"
diff --git a/3rdparty/bgfx/src/bgfx.cpp b/3rdparty/bgfx/src/bgfx.cpp
index e16d4f71c3f..0e9a558903c 100644
--- a/3rdparty/bgfx/src/bgfx.cpp
+++ b/3rdparty/bgfx/src/bgfx.cpp
@@ -18,6 +18,9 @@
# include <remotery/lib/Remotery.c>
#endif // BGFX_CONFIG_PROFILER_REMOTERY_BUILD_LIB
+#include <bx/crtimpl.h>
+#include "topology.h"
+
namespace bgfx
{
#define BGFX_MAIN_THREAD_MAGIC UINT32_C(0x78666762)
@@ -700,7 +703,8 @@ namespace bgfx
}
}
else if (RendererType::OpenGLES == g_caps.rendererType
- || RendererType::OpenGL == g_caps.rendererType)
+ || RendererType::OpenGL == g_caps.rendererType
+ || RendererType::Vulkan == g_caps.rendererType)
{
vsh = createShader(makeRef(vs_clear_glsl, sizeof(vs_clear_glsl) ) );
@@ -844,7 +848,7 @@ namespace bgfx
return PredefinedUniform::Count;
}
- uint32_t Frame::submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth)
+ uint32_t Frame::submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth, bool _preserveState)
{
if (m_discard)
{
@@ -891,9 +895,12 @@ namespace bgfx
m_renderItem[m_numRenderItems].draw = m_draw;
++m_numRenderItems;
- m_draw.clear();
- m_uniformBegin = m_uniformEnd;
- m_stateFlags = BGFX_STATE_NONE;
+ if (!_preserveState)
+ {
+ m_draw.clear();
+ m_uniformBegin = m_uniformEnd;
+ m_stateFlags = BGFX_STATE_NONE;
+ }
return m_num;
}
@@ -981,13 +988,13 @@ namespace bgfx
{
m_sortKeys[ii] = SortKey::remapView(m_sortKeys[ii], m_viewRemap);
}
- bx::radixSort64(m_sortKeys, s_ctx->m_tempKeys, m_sortValues, s_ctx->m_tempValues, m_num);
+ bx::radixSort(m_sortKeys, s_ctx->m_tempKeys, m_sortValues, s_ctx->m_tempValues, m_num);
for (uint32_t ii = 0, num = m_num; ii < num; ++ii)
{
m_blitKeys[ii] = BlitKey::remapView(m_blitKeys[ii], m_viewRemap);
}
- bx::radixSort32(m_blitKeys, (uint32_t*)&s_ctx->m_tempKeys, m_numBlitItems);
+ bx::radixSort(m_blitKeys, (uint32_t*)&s_ctx->m_tempKeys, m_numBlitItems);
}
RenderFrame::Enum renderFrame()
@@ -1145,6 +1152,38 @@ namespace bgfx
BX_TRACE("Max FB attachments: %d", g_caps.maxFBAttachments);
}
+ TextureFormat::Enum getViableTextureFormat(const ImageContainer& _imageContainer)
+ {
+ const uint32_t formatCaps = g_caps.formats[_imageContainer.m_format];
+ bool convert = 0 == formatCaps;
+
+ if (_imageContainer.m_cubeMap)
+ {
+ convert |= 0 == (formatCaps & BGFX_CAPS_FORMAT_TEXTURE_CUBE)
+ && 0 != (formatCaps & BGFX_CAPS_FORMAT_TEXTURE_CUBE_EMULATED)
+ ;
+ }
+ else if (_imageContainer.m_depth > 1)
+ {
+ convert |= 0 == (formatCaps & BGFX_CAPS_FORMAT_TEXTURE_3D)
+ && 0 != (formatCaps & BGFX_CAPS_FORMAT_TEXTURE_3D_EMULATED)
+ ;
+ }
+ else
+ {
+ convert |= 0 == (formatCaps & BGFX_CAPS_FORMAT_TEXTURE_2D)
+ && 0 != (formatCaps & BGFX_CAPS_FORMAT_TEXTURE_2D_EMULATED)
+ ;
+ }
+
+ if (convert)
+ {
+ return TextureFormat::BGRA8;
+ }
+
+ return _imageContainer.m_format;
+ }
+
static TextureFormat::Enum s_emulatedFormats[] =
{
TextureFormat::BC1,
@@ -1244,20 +1283,17 @@ namespace bgfx
for (uint32_t ii = 0; ii < BX_COUNTOF(s_emulatedFormats); ++ii)
{
const uint32_t fmt = s_emulatedFormats[ii];
- if (0 == (g_caps.formats[fmt] & BGFX_CAPS_FORMAT_TEXTURE_2D) )
- {
- g_caps.formats[fmt] |= BGFX_CAPS_FORMAT_TEXTURE_2D_EMULATED;
- }
-
- if (0 == (g_caps.formats[fmt] & BGFX_CAPS_FORMAT_TEXTURE_3D) )
- {
- g_caps.formats[fmt] |= BGFX_CAPS_FORMAT_TEXTURE_3D_EMULATED;
- }
+ g_caps.formats[fmt] |= 0 == (g_caps.formats[fmt] & BGFX_CAPS_FORMAT_TEXTURE_2D ) ? BGFX_CAPS_FORMAT_TEXTURE_2D_EMULATED : 0;
+ g_caps.formats[fmt] |= 0 == (g_caps.formats[fmt] & BGFX_CAPS_FORMAT_TEXTURE_3D ) ? BGFX_CAPS_FORMAT_TEXTURE_3D_EMULATED : 0;
+ g_caps.formats[fmt] |= 0 == (g_caps.formats[fmt] & BGFX_CAPS_FORMAT_TEXTURE_CUBE) ? BGFX_CAPS_FORMAT_TEXTURE_CUBE_EMULATED : 0;
+ }
- if (0 == (g_caps.formats[fmt] & BGFX_CAPS_FORMAT_TEXTURE_CUBE) )
- {
- g_caps.formats[fmt] |= BGFX_CAPS_FORMAT_TEXTURE_CUBE_EMULATED;
- }
+ for (uint32_t ii = 0; ii < TextureFormat::Count; ++ii)
+ {
+ bool convertable = imageConvert(TextureFormat::BGRA8, TextureFormat::Enum(ii) );
+ g_caps.formats[ii] |= 0 == (g_caps.formats[ii] & BGFX_CAPS_FORMAT_TEXTURE_2D ) && convertable ? BGFX_CAPS_FORMAT_TEXTURE_2D_EMULATED : 0;
+ g_caps.formats[ii] |= 0 == (g_caps.formats[ii] & BGFX_CAPS_FORMAT_TEXTURE_3D ) && convertable ? BGFX_CAPS_FORMAT_TEXTURE_3D_EMULATED : 0;
+ g_caps.formats[ii] |= 0 == (g_caps.formats[ii] & BGFX_CAPS_FORMAT_TEXTURE_CUBE) && convertable ? BGFX_CAPS_FORMAT_TEXTURE_CUBE_EMULATED : 0;
}
g_caps.rendererType = m_renderCtx->getRendererType();
@@ -1721,6 +1757,8 @@ namespace bgfx
RendererContextI* rendererCreate(RendererType::Enum _type)
{
+ RendererType::Enum last = RendererType::Count;
+
if (RendererType::Count == _type)
{
again:
@@ -1793,7 +1831,7 @@ again:
{
_type = RendererType::OpenGLES;
}
- else if (BX_ENABLED(BX_PLATFORM_WINRT) )
+ else if (BX_ENABLED(BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT) )
{
_type = RendererType::Direct3D11;
}
@@ -1823,14 +1861,17 @@ again:
}
RendererContextI* renderCtx = s_rendererCreator[_type].createFn();
-
- if (NULL == renderCtx)
+ if (last != _type)
{
- s_rendererCreator[_type].supported = false;
- goto again;
- }
+ if (NULL == renderCtx)
+ {
+ s_rendererCreator[_type].supported = false;
+ last = _type;
+ goto again;
+ }
- s_rendererDestroyFn = s_rendererCreator[_type].destroyFn;
+ s_rendererDestroyFn = s_rendererCreator[_type].destroyFn;
+ }
return renderCtx;
}
@@ -2339,6 +2380,11 @@ again:
flushTextureUpdateBatch(_cmdbuf);
}
+ uint32_t topologyConvert(TopologyConvert::Enum _conversion, void* _dst, uint32_t _dstSize, const void* _indices, uint32_t _numIndices, bool _index32)
+ {
+ return topologyConvert(_conversion, _dst, _dstSize, _indices, _numIndices, _index32, g_allocator);
+ }
+
uint8_t getSupportedRenderers(RendererType::Enum _enum[RendererType::Count])
{
uint8_t num = 0;
@@ -3359,12 +3405,22 @@ again:
s_ctx->setUniform(_handle, _value, _num);
}
+ void setIndexBuffer(IndexBufferHandle _handle)
+ {
+ setIndexBuffer(_handle, 0, UINT32_MAX);
+ }
+
void setIndexBuffer(IndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices)
{
BGFX_CHECK_MAIN_THREAD();
s_ctx->setIndexBuffer(_handle, _firstIndex, _numIndices);
}
+ void setIndexBuffer(DynamicIndexBufferHandle _handle)
+ {
+ setIndexBuffer(_handle, 0, UINT32_MAX);
+ }
+
void setIndexBuffer(DynamicIndexBufferHandle _handle, uint32_t _firstIndex, uint32_t _numIndices)
{
BGFX_CHECK_MAIN_THREAD();
@@ -3395,10 +3451,15 @@ again:
s_ctx->setVertexBuffer(_handle, _startVertex, _numVertices);
}
- void setVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _numVertices)
+ void setVertexBuffer(DynamicVertexBufferHandle _handle)
+ {
+ setVertexBuffer(_handle, 0, UINT32_MAX);
+ }
+
+ void setVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices)
{
BGFX_CHECK_MAIN_THREAD();
- s_ctx->setVertexBuffer(_handle, _numVertices);
+ s_ctx->setVertexBuffer(_handle, _startVertex, _numVertices);
}
void setVertexBuffer(const TransientVertexBuffer* _tvb)
@@ -3450,13 +3511,13 @@ again:
return submit(_id, handle);
}
- uint32_t submit(uint8_t _id, ProgramHandle _program, int32_t _depth)
+ uint32_t submit(uint8_t _id, ProgramHandle _program, int32_t _depth, bool _preserveState)
{
OcclusionQueryHandle handle = BGFX_INVALID_HANDLE;
- return submit(_id, _program, handle, _depth);
+ return submit(_id, _program, handle, _depth, _preserveState);
}
- uint32_t submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth)
+ uint32_t submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth, bool _preserveState)
{
BGFX_CHECK_MAIN_THREAD();
BX_CHECK(false
@@ -3464,13 +3525,13 @@ again:
|| 0 != (g_caps.supported & BGFX_CAPS_OCCLUSION_QUERY)
, "Occlusion query is not supported! Use bgfx::getCaps to check BGFX_CAPS_OCCLUSION_QUERY backend renderer capabilities."
);
- return s_ctx->submit(_id, _program, _occlusionQuery, _depth);
+ return s_ctx->submit(_id, _program, _occlusionQuery, _depth, _preserveState);
}
- uint32_t submit(uint8_t _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth)
+ uint32_t submit(uint8_t _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState)
{
BGFX_CHECK_MAIN_THREAD();
- return s_ctx->submit(_id, _program, _indirectHandle, _start, _num, _depth);
+ return s_ctx->submit(_id, _program, _indirectHandle, _start, _num, _depth, _preserveState);
}
void setBuffer(uint8_t _stage, IndexBufferHandle _handle, Access::Enum _access)
@@ -3593,23 +3654,34 @@ BX_STATIC_ASSERT(FLAGS_MASK_TEST(0
#undef FLAGS_MASK_TEST
-BX_STATIC_ASSERT(bgfx::Fatal::Count == bgfx::Fatal::Enum(BGFX_FATAL_COUNT) );
-BX_STATIC_ASSERT(bgfx::RendererType::Count == bgfx::RendererType::Enum(BGFX_RENDERER_TYPE_COUNT) );
-BX_STATIC_ASSERT(bgfx::Attrib::Count == bgfx::Attrib::Enum(BGFX_ATTRIB_COUNT) );
-BX_STATIC_ASSERT(bgfx::AttribType::Count == bgfx::AttribType::Enum(BGFX_ATTRIB_TYPE_COUNT) );
-BX_STATIC_ASSERT(bgfx::TextureFormat::Count == bgfx::TextureFormat::Enum(BGFX_TEXTURE_FORMAT_COUNT) );
-BX_STATIC_ASSERT(bgfx::UniformType::Count == bgfx::UniformType::Enum(BGFX_UNIFORM_TYPE_COUNT) );
-BX_STATIC_ASSERT(bgfx::RenderFrame::Count == bgfx::RenderFrame::Enum(BGFX_RENDER_FRAME_COUNT) );
-
-BX_STATIC_ASSERT(sizeof(bgfx::Memory) == sizeof(bgfx_memory_t) );
-BX_STATIC_ASSERT(sizeof(bgfx::VertexDecl) == sizeof(bgfx_vertex_decl_t) );
-BX_STATIC_ASSERT(sizeof(bgfx::TransientIndexBuffer) == sizeof(bgfx_transient_index_buffer_t) );
-BX_STATIC_ASSERT(sizeof(bgfx::TransientVertexBuffer) == sizeof(bgfx_transient_vertex_buffer_t) );
-BX_STATIC_ASSERT(sizeof(bgfx::InstanceDataBuffer) == sizeof(bgfx_instance_data_buffer_t) );
-BX_STATIC_ASSERT(sizeof(bgfx::TextureInfo) == sizeof(bgfx_texture_info_t) );
-BX_STATIC_ASSERT(sizeof(bgfx::Caps) == sizeof(bgfx_caps_t) );
-BX_STATIC_ASSERT(sizeof(bgfx::PlatformData) == sizeof(bgfx_platform_data_t) );
-BX_STATIC_ASSERT(sizeof(bgfx::InternalData) == sizeof(bgfx_internal_data_t) );
+#define BGFX_C99_ENUM_CHECK(_enum, _c99enumcount) \
+ BX_STATIC_ASSERT(_enum::Count == _enum::Enum(_c99enumcount) )
+
+BGFX_C99_ENUM_CHECK(bgfx::Fatal, BGFX_FATAL_COUNT);
+BGFX_C99_ENUM_CHECK(bgfx::RendererType, BGFX_RENDERER_TYPE_COUNT);
+BGFX_C99_ENUM_CHECK(bgfx::Attrib, BGFX_ATTRIB_COUNT);
+BGFX_C99_ENUM_CHECK(bgfx::AttribType, BGFX_ATTRIB_TYPE_COUNT);
+BGFX_C99_ENUM_CHECK(bgfx::TextureFormat, BGFX_TEXTURE_FORMAT_COUNT);
+BGFX_C99_ENUM_CHECK(bgfx::UniformType, BGFX_UNIFORM_TYPE_COUNT);
+BGFX_C99_ENUM_CHECK(bgfx::BackbufferRatio, BGFX_BACKBUFFER_RATIO_COUNT);
+BGFX_C99_ENUM_CHECK(bgfx::OcclusionQueryResult, BGFX_OCCLUSION_QUERY_RESULT_COUNT);
+BGFX_C99_ENUM_CHECK(bgfx::TopologyConvert, BGFX_TOPOLOGY_CONVERT_COUNT);
+BGFX_C99_ENUM_CHECK(bgfx::RenderFrame, BGFX_RENDER_FRAME_COUNT);
+#undef BGFX_C99_ENUM_CHECK
+
+#define BGFX_C99_STRUCT_SIZE_CHECK(_cppstruct, _c99struct) \
+ BX_STATIC_ASSERT(sizeof(_cppstruct) == sizeof(_c99struct) )
+
+BGFX_C99_STRUCT_SIZE_CHECK(bgfx::Memory, bgfx_memory_t);
+BGFX_C99_STRUCT_SIZE_CHECK(bgfx::VertexDecl, bgfx_vertex_decl_t);
+BGFX_C99_STRUCT_SIZE_CHECK(bgfx::TransientIndexBuffer, bgfx_transient_index_buffer_t);
+BGFX_C99_STRUCT_SIZE_CHECK(bgfx::TransientVertexBuffer, bgfx_transient_vertex_buffer_t);
+BGFX_C99_STRUCT_SIZE_CHECK(bgfx::InstanceDataBuffer, bgfx_instance_data_buffer_t);
+BGFX_C99_STRUCT_SIZE_CHECK(bgfx::TextureInfo, bgfx_texture_info_t);
+BGFX_C99_STRUCT_SIZE_CHECK(bgfx::Caps, bgfx_caps_t);
+BGFX_C99_STRUCT_SIZE_CHECK(bgfx::PlatformData, bgfx_platform_data_t);
+BGFX_C99_STRUCT_SIZE_CHECK(bgfx::InternalData, bgfx_internal_data_t);
+#undef BGFX_C99_STRUCT_SIZE_CHECK
namespace bgfx
{
@@ -3738,6 +3810,11 @@ BGFX_C_API uint16_t bgfx_weld_vertices(uint16_t* _output, const bgfx_vertex_decl
return bgfx::weldVertices(_output, decl, _data, _num, _epsilon);
}
+uint32_t bgfx_topology_convert(bgfx_topology_convert_t _conversion, void* _dst, uint32_t _dstSize, const void* _indices, uint32_t _numIndices, bool _index32)
+{
+ return bgfx::topologyConvert(bgfx::TopologyConvert::Enum(_conversion), _dst, _dstSize, _indices, _numIndices, _index32);
+}
+
BGFX_C_API void bgfx_image_swizzle_bgra8(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst)
{
bgfx::imageSwizzleBgra8(_width, _height, _pitch, _src, _dst);
@@ -4317,10 +4394,10 @@ BGFX_C_API void bgfx_set_vertex_buffer(bgfx_vertex_buffer_handle_t _handle, uint
bgfx::setVertexBuffer(handle.cpp, _startVertex, _numVertices);
}
-BGFX_C_API void bgfx_set_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _numVertices)
+BGFX_C_API void bgfx_set_dynamic_vertex_buffer(bgfx_dynamic_vertex_buffer_handle_t _handle, uint32_t _startVertex, uint32_t _numVertices)
{
union { bgfx_dynamic_vertex_buffer_handle_t c; bgfx::DynamicVertexBufferHandle cpp; } handle = { _handle };
- bgfx::setVertexBuffer(handle.cpp, _numVertices);
+ bgfx::setVertexBuffer(handle.cpp, _startVertex, _numVertices);
}
BGFX_C_API void bgfx_set_transient_vertex_buffer(const bgfx_transient_vertex_buffer_t* _tvb, uint32_t _startVertex, uint32_t _numVertices)
@@ -4364,24 +4441,24 @@ BGFX_C_API uint32_t bgfx_touch(uint8_t _id)
return bgfx::touch(_id);
}
-BGFX_C_API uint32_t bgfx_submit(uint8_t _id, bgfx_program_handle_t _handle, int32_t _depth)
+BGFX_C_API uint32_t bgfx_submit(uint8_t _id, bgfx_program_handle_t _handle, int32_t _depth, bool _preserveState)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
- return bgfx::submit(_id, handle.cpp, _depth);
+ return bgfx::submit(_id, handle.cpp, _depth, _preserveState);
}
-BGFX_C_API uint32_t bgfx_submit_occlusion_query(uint8_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, int32_t _depth)
+BGFX_C_API uint32_t bgfx_submit_occlusion_query(uint8_t _id, bgfx_program_handle_t _program, bgfx_occlusion_query_handle_t _occlusionQuery, int32_t _depth, bool _preserveState)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } program = { _program };
union { bgfx_occlusion_query_handle c; bgfx::OcclusionQueryHandle cpp; } occlusionQuery = { _occlusionQuery };
- return bgfx::submit(_id, program.cpp, occlusionQuery.cpp, _depth);
+ return bgfx::submit(_id, program.cpp, occlusionQuery.cpp, _depth, _preserveState);
}
-BGFX_C_API uint32_t bgfx_submit_indirect(uint8_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth)
+BGFX_C_API uint32_t bgfx_submit_indirect(uint8_t _id, bgfx_program_handle_t _handle, bgfx_indirect_buffer_handle_t _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState)
{
union { bgfx_program_handle_t c; bgfx::ProgramHandle cpp; } handle = { _handle };
union { bgfx_indirect_buffer_handle_t c; bgfx::IndirectBufferHandle cpp; } indirectHandle = { _indirectHandle };
- return bgfx::submit(_id, handle.cpp, indirectHandle.cpp, _start, _num, _depth);
+ return bgfx::submit(_id, handle.cpp, indirectHandle.cpp, _start, _num, _depth, _preserveState);
}
BGFX_C_API void bgfx_set_image(uint8_t _stage, bgfx_uniform_handle_t _sampler, bgfx_texture_handle_t _handle, uint8_t _mip, bgfx_access_t _access, bgfx_texture_format_t _format)
@@ -4510,6 +4587,7 @@ BGFX_C_API bgfx_interface_vtbl_t* bgfx_get_interface(uint32_t _version)
BGFX_IMPORT_FUNC(vertex_unpack) \
BGFX_IMPORT_FUNC(vertex_convert) \
BGFX_IMPORT_FUNC(weld_vertices) \
+ BGFX_IMPORT_FUNC(topology_convert) \
BGFX_IMPORT_FUNC(image_swizzle_bgra8) \
BGFX_IMPORT_FUNC(image_rgba8_downsample_2x2) \
BGFX_IMPORT_FUNC(get_supported_renderers) \
diff --git a/3rdparty/bgfx/src/bgfx_p.h b/3rdparty/bgfx/src/bgfx_p.h
index 1434b5ca41f..c56d8691794 100644
--- a/3rdparty/bgfx/src/bgfx_p.h
+++ b/3rdparty/bgfx/src/bgfx_p.h
@@ -332,6 +332,7 @@ namespace bgfx
void release(const Memory* _mem);
const char* getAttribName(Attrib::Enum _attr);
void getTextureSizeFromRatio(BackbufferRatio::Enum _ratio, uint16_t& _width, uint16_t& _height);
+ TextureFormat::Enum getViableTextureFormat(const ImageContainer& _imageContainer);
inline uint32_t castfu(float _value)
{
@@ -504,7 +505,7 @@ namespace bgfx
{
uint32_t* tempKeys = (uint32_t*)alloca(sizeof(m_keys) );
uint32_t* tempValues = (uint32_t*)alloca(sizeof(m_values) );
- bx::radixSort32(m_keys, tempKeys, m_values, tempValues, m_num);
+ bx::radixSort(m_keys, tempKeys, m_values, tempValues, m_num);
return true;
}
@@ -626,7 +627,7 @@ namespace bgfx
void write(const void* _data, uint32_t _size)
{
BX_CHECK(m_size == BGFX_CONFIG_MAX_COMMAND_BUFFER_SIZE, "Called write outside start/finish?");
- BX_CHECK(m_pos < m_size, "");
+ BX_CHECK(m_pos < m_size, "CommandBuffer::write error (pos: %d, size: %d).", m_pos, m_size);
memcpy(&m_buffer[m_pos], _data, _size);
m_pos += _size;
}
@@ -640,7 +641,7 @@ namespace bgfx
void read(void* _data, uint32_t _size)
{
- BX_CHECK(m_pos < m_size, "");
+ BX_CHECK(m_pos < m_size, "CommandBuffer::read error (pos: %d, size: %d).", m_pos, m_size);
memcpy(_data, &m_buffer[m_pos], _size);
m_pos += _size;
}
@@ -654,7 +655,7 @@ namespace bgfx
const uint8_t* skip(uint32_t _size)
{
- BX_CHECK(m_pos < m_size, "");
+ BX_CHECK(m_pos < m_size, "CommandBuffer::skip error (pos: %d, size: %d).", m_pos, m_size);
const uint8_t* result = &m_buffer[m_pos];
m_pos += _size;
return result;
@@ -1245,8 +1246,8 @@ namespace bgfx
uint32_t m_startVertex;
uint32_t m_numVertices;
uint32_t m_instanceDataOffset;
+ uint32_t m_numInstances;
uint16_t m_instanceDataStride;
- uint16_t m_numInstances;
uint16_t m_startIndirect;
uint16_t m_numIndirect;
uint16_t m_num;
@@ -1537,10 +1538,10 @@ namespace bgfx
m_draw.m_vertexBuffer = _handle;
}
- void setVertexBuffer(const DynamicVertexBuffer& _dvb, uint32_t _numVertices)
+ void setVertexBuffer(const DynamicVertexBuffer& _dvb, uint32_t _startVertex, uint32_t _numVertices)
{
- m_draw.m_startVertex = _dvb.m_startVertex;
- m_draw.m_numVertices = bx::uint32_min(_dvb.m_numVertices, _numVertices);
+ m_draw.m_startVertex = _dvb.m_startVertex + _startVertex;
+ m_draw.m_numVertices = bx::uint32_min(bx::uint32_imax(0, _dvb.m_numVertices - _startVertex), _numVertices);
m_draw.m_vertexBuffer = _dvb.m_handle;
m_draw.m_vertexDecl = _dvb.m_decl;
}
@@ -1548,7 +1549,7 @@ namespace bgfx
void setVertexBuffer(const TransientVertexBuffer* _tvb, uint32_t _startVertex, uint32_t _numVertices)
{
m_draw.m_startVertex = _tvb->startVertex + _startVertex;
- m_draw.m_numVertices = bx::uint32_min(_tvb->size/_tvb->stride, _numVertices);
+ m_draw.m_numVertices = bx::uint32_min(bx::uint32_imax(0, _tvb->size/_tvb->stride - _startVertex), _numVertices);
m_draw.m_vertexBuffer = _tvb->handle;
m_draw.m_vertexDecl = _tvb->decl;
}
@@ -1557,7 +1558,7 @@ namespace bgfx
{
m_draw.m_instanceDataOffset = _idb->offset;
m_draw.m_instanceDataStride = _idb->stride;
- m_draw.m_numInstances = uint16_t(bx::uint32_min(_idb->num, _num) );
+ m_draw.m_numInstances = bx::uint32_min(_idb->num, _num);
m_draw.m_instanceDataBuffer = _idb->handle;
BX_FREE(g_allocator, const_cast<InstanceDataBuffer*>(_idb) );
}
@@ -1566,7 +1567,7 @@ namespace bgfx
{
m_draw.m_instanceDataOffset = _startVertex * _stride;
m_draw.m_instanceDataStride = _stride;
- m_draw.m_numInstances = uint16_t(_num);
+ m_draw.m_numInstances = _num;
m_draw.m_instanceDataBuffer = _handle;
}
@@ -1631,15 +1632,15 @@ namespace bgfx
m_stateFlags = BGFX_STATE_NONE;
}
- uint32_t submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth);
+ uint32_t submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth, bool _preserveState);
- uint32_t submit(uint8_t _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth)
+ uint32_t submit(uint8_t _id, ProgramHandle _program, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState)
{
m_draw.m_startIndirect = _start;
m_draw.m_numIndirect = _num;
m_draw.m_indirectBuffer = _indirectHandle;
OcclusionQueryHandle handle = BGFX_INVALID_HANDLE;
- return submit(_id, _program, handle, _depth);
+ return submit(_id, _program, handle, _depth, _preserveState);
}
uint32_t dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _ngx, uint16_t _ngy, uint16_t _ngz, uint8_t _flags);
@@ -2281,12 +2282,14 @@ namespace bgfx
return ptr;
}
+ uint32_t allocSize = bx::uint32_max(BGFX_CONFIG_DYNAMIC_INDEX_BUFFER_SIZE, _size);
+
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateDynamicIndexBuffer);
cmdbuf.write(indexBufferHandle);
- cmdbuf.write(BGFX_CONFIG_DYNAMIC_INDEX_BUFFER_SIZE);
+ cmdbuf.write(allocSize);
cmdbuf.write(_flags);
- m_dynIndexBufferAllocator.add(uint64_t(indexBufferHandle.idx) << 32, BGFX_CONFIG_DYNAMIC_INDEX_BUFFER_SIZE);
+ m_dynIndexBufferAllocator.add(uint64_t(indexBufferHandle.idx) << 32, allocSize);
ptr = m_dynIndexBufferAllocator.alloc(_size);
}
@@ -2431,12 +2434,14 @@ namespace bgfx
return NonLocalAllocator::invalidBlock;
}
+ uint32_t allocSize = bx::uint32_max(BGFX_CONFIG_DYNAMIC_VERTEX_BUFFER_SIZE, _size);
+
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateDynamicVertexBuffer);
cmdbuf.write(vertexBufferHandle);
- cmdbuf.write(BGFX_CONFIG_DYNAMIC_VERTEX_BUFFER_SIZE);
+ cmdbuf.write(allocSize);
cmdbuf.write(_flags);
- m_dynVertexBufferAllocator.add(uint64_t(vertexBufferHandle.idx)<<32, BGFX_CONFIG_DYNAMIC_VERTEX_BUFFER_SIZE);
+ m_dynVertexBufferAllocator.add(uint64_t(vertexBufferHandle.idx) << 32, allocSize);
ptr = m_dynVertexBufferAllocator.alloc(_size);
}
@@ -2493,8 +2498,7 @@ namespace bgfx
BGFX_API_FUNC(DynamicVertexBufferHandle createDynamicVertexBuffer(const Memory* _mem, const VertexDecl& _decl, uint16_t _flags) )
{
uint32_t numVertices = _mem->size/_decl.m_stride;
- BX_CHECK(numVertices <= UINT16_MAX, "Num vertices exceeds maximum (num %d, max %d).", numVertices, UINT16_MAX);
- DynamicVertexBufferHandle handle = createDynamicVertexBuffer(uint16_t(numVertices), _decl, _flags);
+ DynamicVertexBufferHandle handle = createDynamicVertexBuffer(numVertices, _decl, _flags);
if (isValid(handle) )
{
updateDynamicVertexBuffer(handle, 0, _mem);
@@ -2794,14 +2798,14 @@ namespace bgfx
for (uint32_t ii = 0; ii < count; ++ii)
{
- uint8_t nameSize;
+ uint8_t nameSize = 0;
bx::read(&reader, nameSize);
char name[256];
bx::read(&reader, &name, nameSize);
name[nameSize] = '\0';
- uint8_t type;
+ uint8_t type = 0;
bx::read(&reader, type);
type &= ~BGFX_UNIFORM_MASK;
@@ -3649,10 +3653,10 @@ namespace bgfx
m_submit->setVertexBuffer(_handle, _startVertex, _numVertices);
}
- BGFX_API_FUNC(void setVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _numVertices) )
+ BGFX_API_FUNC(void setVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices) )
{
BGFX_CHECK_HANDLE("setVertexBuffer", m_dynamicVertexBufferHandle, _handle);
- m_submit->setVertexBuffer(m_dynamicVertexBuffers[_handle.idx], _numVertices);
+ m_submit->setVertexBuffer(m_dynamicVertexBuffers[_handle.idx], _startVertex, _numVertices);
}
BGFX_API_FUNC(void setVertexBuffer(const TransientVertexBuffer* _tvb, uint32_t _startVertex, uint32_t _numVertices) )
@@ -3708,11 +3712,12 @@ namespace bgfx
m_submit->setTexture(_stage, _sampler, textureHandle, _flags);
}
- BGFX_API_FUNC(uint32_t submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth) )
+ BGFX_API_FUNC(uint32_t submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth, bool _preserveState) )
{
BGFX_CHECK_HANDLE_INVALID_OK("submit", m_programHandle, _program);
BGFX_CHECK_HANDLE_INVALID_OK("submit", m_occlusionQueryHandle, _occlusionQuery);
- if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
+ if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM)
+ && !_preserveState)
{
m_uniformSet.clear();
}
@@ -3727,18 +3732,19 @@ namespace bgfx
m_occlusionQuerySet.insert(_occlusionQuery.idx);
}
- return m_submit->submit(_id, _program, _occlusionQuery, _depth);
+ return m_submit->submit(_id, _program, _occlusionQuery, _depth, _preserveState);
}
- BGFX_API_FUNC(uint32_t submit(uint8_t _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth) )
+ BGFX_API_FUNC(uint32_t submit(uint8_t _id, ProgramHandle _handle, IndirectBufferHandle _indirectHandle, uint16_t _start, uint16_t _num, int32_t _depth, bool _preserveState) )
{
BGFX_CHECK_HANDLE_INVALID_OK("submit", m_programHandle, _handle);
BGFX_CHECK_HANDLE("submit", m_vertexBufferHandle, _indirectHandle);
- if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) )
+ if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM)
+ && !_preserveState)
{
m_uniformSet.clear();
}
- return m_submit->submit(_id, _handle, _indirectHandle, _start, _num, _depth);
+ return m_submit->submit(_id, _handle, _indirectHandle, _start, _num, _depth, _preserveState);
}
BGFX_API_FUNC(void setBuffer(uint8_t _stage, IndexBufferHandle _handle, Access::Enum _access) )
diff --git a/3rdparty/bgfx/src/bgfx_shader.sh b/3rdparty/bgfx/src/bgfx_shader.sh
index 77998652e9d..a675fb6e68c 100644
--- a/3rdparty/bgfx/src/bgfx_shader.sh
+++ b/3rdparty/bgfx/src/bgfx_shader.sh
@@ -39,6 +39,13 @@
# define bvec4 bool4
# if BGFX_SHADER_LANGUAGE_HLSL > 3
+# if BGFX_SHADER_LANGUAGE_HLSL > 4
+# define dFdxCoarse(_x) ddx_coarse(_x)
+# define dFdxFine(_x) ddx_fine(_x)
+# define dFdyCoarse(_y) ddy_coarse(-_y)
+# define dFdyFine(_y) ddy_fine(-_y)
+# endif // BGFX_SHADER_LANGUAGE_HLSL > 4
+
struct BgfxSampler2D
{
SamplerState m_sampler;
@@ -239,14 +246,6 @@ float bgfxShadow2DProj(sampler2DShadow _sampler, vec4 _coord)
# endif // BGFX_SHADER_LANGUAGE_HLSL > 3
-vec2 vec2_splat(float _x) { return vec2(_x, _x); }
-vec3 vec3_splat(float _x) { return vec3(_x, _x, _x); }
-vec4 vec4_splat(float _x) { return vec4(_x, _x, _x, _x); }
-
-uvec2 uvec2_splat(uint _x) { return uvec2(_x, _x); }
-uvec3 uvec3_splat(uint _x) { return uvec3(_x, _x, _x); }
-uvec4 uvec4_splat(uint _x) { return uvec4(_x, _x, _x, _x); }
-
vec3 instMul(vec3 _vec, mat3 _mtx) { return mul(_mtx, _vec); }
vec3 instMul(mat3 _mtx, vec3 _vec) { return mul(_vec, _mtx); }
vec4 instMul(vec4 _vec, mat4 _mtx) { return mul(_mtx, _vec); }
@@ -294,12 +293,6 @@ vec4 mod(vec4 _a, vec4 _b) { return _a - _b * floor(_a / _b); }
# define SAMPLER3D(_name, _reg) uniform sampler3D _name
# define SAMPLERCUBE(_name, _reg) uniform samplerCube _name
# define SAMPLER2DSHADOW(_name, _reg) uniform sampler2DShadow _name
-# define vec2_splat(_x) vec2(_x)
-# define vec3_splat(_x) vec3(_x)
-# define vec4_splat(_x) vec4(_x)
-# define uvec2_splat(_x) uvec2(_x)
-# define uvec3_splat(_x) uvec3(_x)
-# define uvec4_splat(_x) uvec4(_x)
# if BGFX_SHADER_LANGUAGE_GLSL >= 130
# define ISAMPLER3D(_name, _reg) uniform isampler3D _name
@@ -319,6 +312,16 @@ vec3 rcp(vec3 _a) { return vec3(1.0)/_a; }
vec4 rcp(vec4 _a) { return vec4(1.0)/_a; }
#endif // BGFX_SHADER_LANGUAGE_*
+vec2 vec2_splat(float _x) { return vec2(_x, _x); }
+vec3 vec3_splat(float _x) { return vec3(_x, _x, _x); }
+vec4 vec4_splat(float _x) { return vec4(_x, _x, _x, _x); }
+
+#if BGFX_SHADER_LANGUAGE_GLSL >= 130 || BGFX_SHADER_LANGUAGE_HLSL
+uvec2 uvec2_splat(uint _x) { return uvec2(_x, _x); }
+uvec3 uvec3_splat(uint _x) { return uvec3(_x, _x, _x); }
+uvec4 uvec4_splat(uint _x) { return uvec4(_x, _x, _x, _x); }
+#endif // BGFX_SHADER_LANGUAGE_GLSL >= 130 || BGFX_SHADER_LANGUAGE_HLSL
+
uniform vec4 u_viewRect;
uniform vec4 u_viewTexel;
uniform mat4 u_view;
diff --git a/3rdparty/bgfx/src/config.h b/3rdparty/bgfx/src/config.h
index edfa69da75a..a0ccbe1dd06 100644
--- a/3rdparty/bgfx/src/config.h
+++ b/3rdparty/bgfx/src/config.h
@@ -32,12 +32,14 @@
# define BGFX_CONFIG_RENDERER_DIRECT3D11 (0 \
|| BX_PLATFORM_WINDOWS \
|| BX_PLATFORM_WINRT \
+ || BX_PLATFORM_XBOXONE \
? 1 : 0)
# endif // BGFX_CONFIG_RENDERER_DIRECT3D11
# ifndef BGFX_CONFIG_RENDERER_DIRECT3D12
# define BGFX_CONFIG_RENDERER_DIRECT3D12 (0 \
|| BX_PLATFORM_WINDOWS \
+ || BX_PLATFORM_XBOXONE \
? 1 : 0)
# endif // BGFX_CONFIG_RENDERER_DIRECT3D12
diff --git a/3rdparty/bgfx/src/glcontext_ppapi.cpp b/3rdparty/bgfx/src/glcontext_ppapi.cpp
index a4887103e63..c0c2c45aea6 100644
--- a/3rdparty/bgfx/src/glcontext_ppapi.cpp
+++ b/3rdparty/bgfx/src/glcontext_ppapi.cpp
@@ -121,15 +121,13 @@ namespace bgfx { namespace gl
static void GL_APIENTRY naclGetQueryObjectiv(GLuint _id, GLenum _pname, GLint* _params)
{
- BX_UNUSED(_id);
- BX_UNUSED(_pname);
+ BX_UNUSED(_id, _pname);
s_ppapi.m_query->GetQueryivEXT(s_ppapi.m_context, GL_ANY_SAMPLES_PASSED_EXT, GL_CURRENT_QUERY_EXT, _params);
}
static void GL_APIENTRY naclGetQueryObjectui64v(GLuint _id, GLenum _pname, GLuint64* _params)
{
- BX_UNUSED(_id);
- BX_UNUSED(_pname);
+ BX_UNUSED(_id, _pname);
GLint params;
s_ppapi.m_query->GetQueryivEXT(s_ppapi.m_context, GL_ANY_SAMPLES_PASSED_EXT, GL_CURRENT_QUERY_EXT, &params);
*_params = params;
diff --git a/3rdparty/bgfx/src/image.cpp b/3rdparty/bgfx/src/image.cpp
index 3a5c0d592b5..5b25a1df6b5 100644
--- a/3rdparty/bgfx/src/image.cpp
+++ b/3rdparty/bgfx/src/image.cpp
@@ -64,6 +64,10 @@ namespace bgfx
{ 64, 1, 1, 8, 1, 1, 0, 0, uint8_t(EncodingType::Int ) }, // RG32I
{ 64, 1, 1, 8, 1, 1, 0, 0, uint8_t(EncodingType::Uint ) }, // RG32U
{ 64, 1, 1, 8, 1, 1, 0, 0, uint8_t(EncodingType::Float) }, // RG32F
+ { 24, 1, 1, 3, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // RGB8
+ { 24, 1, 1, 3, 1, 1, 0, 0, uint8_t(EncodingType::Int ) }, // RGB8I
+ { 24, 1, 1, 3, 1, 1, 0, 0, uint8_t(EncodingType::Uint ) }, // RGB8U
+ { 24, 1, 1, 3, 1, 1, 0, 0, uint8_t(EncodingType::Snorm) }, // RGB8S
{ 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Float) }, // RGB9E5F
{ 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // BGRA8
{ 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // RGBA8
@@ -141,6 +145,10 @@ namespace bgfx
"RG32I", // RG32I
"RG32U", // RG32U
"RG32F", // RG32F
+ "RGB8", // RGB8
+ "RGB8I", // RGB8I
+ "RGB8U", // RGB8U
+ "RGB8S", // RGB8S
"RGB9E5", // RGB9E5F
"BGRA8", // BGRA8
"RGBA8", // RGBA8
@@ -717,23 +725,72 @@ namespace bgfx
_dst[1] = float(src[1]);
}
- // RGBA8
- void packRgba8(void* _dst, const float* _src)
+ // RGB8
+ void packRgb8(void* _dst, const float* _src)
{
uint8_t* dst = (uint8_t*)_dst;
dst[0] = uint8_t(toUnorm(_src[0], 255.0f) );
dst[1] = uint8_t(toUnorm(_src[1], 255.0f) );
dst[2] = uint8_t(toUnorm(_src[2], 255.0f) );
- dst[3] = uint8_t(toUnorm(_src[3], 255.0f) );
}
- void unpackRgba8(float* _dst, const void* _src)
+ void unpackRgb8(float* _dst, const void* _src)
{
const uint8_t* src = (const uint8_t*)_src;
_dst[0] = fromUnorm(src[0], 255.0f);
_dst[1] = fromUnorm(src[1], 255.0f);
_dst[2] = fromUnorm(src[2], 255.0f);
- _dst[3] = fromUnorm(src[3], 255.0f);
+ }
+
+ // RGB8S
+ void packRgb8S(void* _dst, const float* _src)
+ {
+ int8_t* dst = (int8_t*)_dst;
+ dst[0] = int8_t(toSnorm(_src[0], 127.0f) );
+ dst[1] = int8_t(toSnorm(_src[1], 127.0f) );
+ dst[2] = int8_t(toSnorm(_src[2], 127.0f) );
+ }
+
+ void unpackRgb8S(float* _dst, const void* _src)
+ {
+ const int8_t* src = (const int8_t*)_src;
+ _dst[0] = fromSnorm(src[0], 127.0f);
+ _dst[1] = fromSnorm(src[1], 127.0f);
+ _dst[2] = fromSnorm(src[2], 127.0f);
+ }
+
+ // RGB8I
+ void packRgb8I(void* _dst, const float* _src)
+ {
+ int8_t* dst = (int8_t*)_dst;
+ dst[0] = int8_t(_src[0]);
+ dst[1] = int8_t(_src[1]);
+ dst[2] = int8_t(_src[2]);
+ }
+
+ void unpackRgb8I(float* _dst, const void* _src)
+ {
+ const int8_t* src = (const int8_t*)_src;
+ _dst[0] = float(src[0]);
+ _dst[1] = float(src[1]);
+ _dst[2] = float(src[2]);
+ }
+
+ // RGB8U
+ void packRgb8U(void* _dst, const float* _src)
+ {
+ uint8_t* dst = (uint8_t*)_dst;
+ dst[0] = uint8_t(_src[0]);
+ dst[1] = uint8_t(_src[1]);
+ dst[2] = uint8_t(_src[2]);
+ }
+
+ void unpackRgb8U(float* _dst, const void* _src)
+ {
+ const uint8_t* src = (const uint8_t*)_src;
+ _dst[0] = float(src[0]);
+ _dst[1] = float(src[1]);
+ _dst[2] = float(src[2]);
}
// BGRA8
@@ -755,6 +812,25 @@ namespace bgfx
_dst[3] = fromUnorm(src[3], 255.0f);
}
+ // RGBA8
+ void packRgba8(void* _dst, const float* _src)
+ {
+ uint8_t* dst = (uint8_t*)_dst;
+ dst[0] = uint8_t(toUnorm(_src[0], 255.0f) );
+ dst[1] = uint8_t(toUnorm(_src[1], 255.0f) );
+ dst[2] = uint8_t(toUnorm(_src[2], 255.0f) );
+ dst[3] = uint8_t(toUnorm(_src[3], 255.0f) );
+ }
+
+ void unpackRgba8(float* _dst, const void* _src)
+ {
+ const uint8_t* src = (const uint8_t*)_src;
+ _dst[0] = fromUnorm(src[0], 255.0f);
+ _dst[1] = fromUnorm(src[1], 255.0f);
+ _dst[2] = fromUnorm(src[2], 255.0f);
+ _dst[3] = fromUnorm(src[3], 255.0f);
+ }
+
// RGBA8S
void packRgba8S(void* _dst, const float* _src)
{
@@ -1218,18 +1294,18 @@ namespace bgfx
void packR5G6B5(void* _dst, const float* _src)
{
*( (uint16_t*)_dst) = 0
- | uint16_t(toUnorm(_src[0], 31.0f) )
+ | uint16_t(toUnorm(_src[0], 31.0f)<<11)
| uint16_t(toUnorm(_src[1], 63.0f)<< 5)
- | uint16_t(toUnorm(_src[2], 31.0f)<<11)
+ | uint16_t(toUnorm(_src[2], 31.0f) )
;
}
void unpackR5G6B5(float* _dst, const void* _src)
{
uint16_t packed = *( (const uint16_t*)_src);
- _dst[0] = float( ( (packed ) & 0x1f) ) / 31.0f;
+ _dst[0] = float( ( (packed>>11) & 0x1f) ) / 31.0f;
_dst[1] = float( ( (packed>> 5) & 0x3f) ) / 63.0f;
- _dst[2] = float( ( (packed>>11) & 0x1f) ) / 31.0f;
+ _dst[2] = float( ( (packed ) & 0x1f) ) / 31.0f;
}
// RGBA4
@@ -1252,6 +1328,26 @@ namespace bgfx
_dst[3] = float( ( (packed>>12) & 0xf) ) / 15.0f;
}
+ // RGBA4
+ void packBgra4(void* _dst, const float* _src)
+ {
+ *( (uint16_t*)_dst) = 0
+ | uint16_t(toUnorm(_src[0], 15.0f)<< 8)
+ | uint16_t(toUnorm(_src[1], 15.0f)<< 4)
+ | uint16_t(toUnorm(_src[2], 15.0f) )
+ | uint16_t(toUnorm(_src[3], 15.0f)<<12)
+ ;
+ }
+
+ void unpackBgra4(float* _dst, const void* _src)
+ {
+ uint16_t packed = *( (const uint16_t*)_src);
+ _dst[0] = float( ( (packed>> 8) & 0xf) ) / 15.0f;
+ _dst[1] = float( ( (packed>> 4) & 0xf) ) / 15.0f;
+ _dst[2] = float( ( (packed ) & 0xf) ) / 15.0f;
+ _dst[3] = float( ( (packed>>12) & 0xf) ) / 15.0f;
+ }
+
// RGB5A1
void packRgb5a1(void* _dst, const float* _src)
{
@@ -1272,6 +1368,26 @@ namespace bgfx
_dst[3] = float( ( (packed>>14) & 0x1) );
}
+ // BGR5A1
+ void packBgr5a1(void* _dst, const float* _src)
+ {
+ *( (uint16_t*)_dst) = 0
+ | uint16_t(toUnorm(_src[0], 31.0f)<<10)
+ | uint16_t(toUnorm(_src[1], 31.0f)<< 5)
+ | uint16_t(toUnorm(_src[2], 31.0f) )
+ | uint16_t(toUnorm(_src[3], 1.0f)<<15)
+ ;
+ }
+
+ void unpackBgr5a1(float* _dst, const void* _src)
+ {
+ uint16_t packed = *( (const uint16_t*)_src);
+ _dst[0] = float( ( (packed>>10) & 0x1f) ) / 31.0f;
+ _dst[1] = float( ( (packed>> 5) & 0x1f) ) / 31.0f;
+ _dst[2] = float( ( (packed ) & 0x1f) ) / 31.0f;
+ _dst[3] = float( ( (packed>>14) & 0x1) );
+ }
+
// RGB10A2
void packRgb10A2(void* _dst, const float* _src)
{
@@ -1310,9 +1426,6 @@ namespace bgfx
_dst[2] = bx::halfToFloat( (packed>>17) & 0x7fe0);
}
- typedef void (*PackFn)(void*, const float*);
- typedef void (*UnpackFn)(float*, const void*);
-
struct PackUnpack
{
PackFn pack;
@@ -1365,6 +1478,10 @@ namespace bgfx
{ packRg32I, unpackRg32I }, // RG32I
{ packRg32U, unpackRg32U }, // RG32U
{ packRg32F, unpackRg32F }, // RG32F
+ { packRgb8, unpackRgb8 }, // RGB8
+ { packRgb8S, unpackRgb8S }, // RGB8S
+ { packRgb8I, unpackRgb8I }, // RGB8I
+ { packRgb8U, unpackRgb8U }, // RGB8U
{ packRgb9E5F, unpackRgb9E5F }, // RGB9E5F
{ packBgra8, unpackBgra8 }, // BGRA8
{ packRgba8, unpackRgba8 }, // RGBA8
@@ -1396,37 +1513,71 @@ namespace bgfx
};
BX_STATIC_ASSERT(TextureFormat::Count == BX_COUNTOF(s_packUnpack) );
- bool imageConvert(void* _dst, TextureFormat::Enum _dstFormat, const void* _src, TextureFormat::Enum _srcFormat, uint32_t _width, uint32_t _height)
+ bool imageConvert(TextureFormat::Enum _dstFormat, TextureFormat::Enum _srcFormat)
{
UnpackFn unpack = s_packUnpack[_srcFormat].unpack;
PackFn pack = s_packUnpack[_dstFormat].pack;
- if (NULL == pack
- || NULL == unpack)
+ return NULL != pack
+ && NULL != unpack
+ ;
+ }
+
+ void imageConvert(void* _dst, uint32_t _bpp, PackFn _pack, const void* _src, UnpackFn _unpack, uint32_t _size)
+ {
+ const uint8_t* src = (uint8_t*)_src;
+ uint8_t* dst = (uint8_t*)_dst;
+
+ const uint32_t size = _size * 8 / _bpp;
+
+ for (uint32_t ii = 0; ii < size; ++ii)
{
- return false;
+ float rgba[4];
+ _unpack(rgba, &src[ii*_bpp/8]);
+ _pack(&dst[ii*_bpp/8], rgba);
}
+ }
+ void imageConvert(void* _dst, uint32_t _dstBpp, PackFn _pack, const void* _src, uint32_t _srcBpp, UnpackFn _unpack, uint32_t _width, uint32_t _height, uint32_t _srcPitch)
+ {
const uint8_t* src = (uint8_t*)_src;
uint8_t* dst = (uint8_t*)_dst;
- const uint32_t srcBpp = s_imageBlockInfo[_srcFormat].bitsPerPixel;
- const uint32_t dstBpp = s_imageBlockInfo[_dstFormat].bitsPerPixel;
- const uint32_t srcPitch = _width * srcBpp / 8;
- const uint32_t dstPitch = _width * dstBpp / 8;
+ const uint32_t dstPitch = _width * _dstBpp / 8;
- for (uint32_t yy = 0; yy < _height; ++yy, src += srcPitch, dst += dstPitch)
+ for (uint32_t yy = 0; yy < _height; ++yy, src += _srcPitch, dst += dstPitch)
{
for (uint32_t xx = 0; xx < _width; ++xx)
{
float rgba[4];
- unpack(rgba, &src[xx*srcBpp/8]);
- pack(&dst[xx*dstBpp/8], rgba);
+ _unpack(rgba, &src[xx*_srcBpp/8]);
+ _pack(&dst[xx*_dstBpp/8], rgba);
}
}
+ }
+
+ bool imageConvert(void* _dst, TextureFormat::Enum _dstFormat, const void* _src, TextureFormat::Enum _srcFormat, uint32_t _width, uint32_t _height, uint32_t _srcPitch)
+ {
+ UnpackFn unpack = s_packUnpack[_srcFormat].unpack;
+ PackFn pack = s_packUnpack[_dstFormat].pack;
+ if (NULL == pack
+ || NULL == unpack)
+ {
+ return false;
+ }
+
+ const uint32_t srcBpp = s_imageBlockInfo[_srcFormat].bitsPerPixel;
+ const uint32_t dstBpp = s_imageBlockInfo[_dstFormat].bitsPerPixel;
+ imageConvert(_dst, dstBpp, pack, _src, srcBpp, unpack, _width, _height, _srcPitch);
return true;
}
+ bool imageConvert(void* _dst, TextureFormat::Enum _dstFormat, const void* _src, TextureFormat::Enum _srcFormat, uint32_t _width, uint32_t _height)
+ {
+ const uint32_t srcBpp = s_imageBlockInfo[_srcFormat].bitsPerPixel;
+ return imageConvert(_dst, _dstFormat, _src, _srcFormat, _width, _height, _width*srcBpp);
+ }
+
uint8_t bitRangeConvert(uint32_t _in, uint32_t _from, uint32_t _to)
{
using namespace bx;
@@ -2211,9 +2362,9 @@ namespace bgfx
}
}
- const Memory* imageAlloc(ImageContainer& _imageContainer, TextureFormat::Enum _format, uint16_t _width, uint16_t _height, uint16_t _depth, bool _cubeMap, bool _mipsActive)
+ const Memory* imageAlloc(ImageContainer& _imageContainer, TextureFormat::Enum _format, uint16_t _width, uint16_t _height, uint16_t _depth, bool _cubeMap, bool _generateMips)
{
- const uint8_t numMips = _mipsActive ? imageGetNumMips(_format, _width, _height) : 1;
+ const uint8_t numMips = _generateMips ? imageGetNumMips(_format, _width, _height) : 1;
uint32_t size = imageGetSize(_format, _width, _height, 0, false, numMips);
const Memory* image = alloc(size);
@@ -2673,6 +2824,7 @@ namespace bgfx
#define KTX_RG16_SNORM 0x8F99
#define KTX_RGB16_SNORM 0x8F9A
#define KTX_RGBA16_SNORM 0x8F9B
+#define KTX_SRGB8 0x8C41
#define KTX_SRGB8_ALPHA8 0x8C43
#define KTX_RGBA32UI 0x8D70
#define KTX_RGB32UI 0x8D71
@@ -2685,6 +2837,7 @@ namespace bgfx
#define KTX_RGBA16I 0x8D88
#define KTX_RGB16I 0x8D89
#define KTX_RGBA8I 0x8D8E
+#define KTX_RGB8 0x8051
#define KTX_RGB8I 0x8D8F
#define KTX_RGB9_E5 0x8C3D
#define KTX_R11F_G11F_B10F 0x8C3A
@@ -2766,6 +2919,10 @@ namespace bgfx
{ KTX_RG32I, KTX_ZERO, KTX_RG, KTX_INT, }, // RG32I
{ KTX_RG32UI, KTX_ZERO, KTX_RG, KTX_UNSIGNED_INT, }, // RG32U
{ KTX_RG32F, KTX_ZERO, KTX_RG, KTX_FLOAT, }, // RG32F
+ { KTX_RGB8, KTX_SRGB8, KTX_RGB, KTX_UNSIGNED_BYTE, }, // RGB8
+ { KTX_RGB8I, KTX_ZERO, KTX_RGB, KTX_BYTE, }, // RGB8I
+ { KTX_RGB8UI, KTX_ZERO, KTX_RGB, KTX_UNSIGNED_BYTE, }, // RGB8U
+ { KTX_RGB8_SNORM, KTX_ZERO, KTX_RGB, KTX_BYTE, }, // RGB8S
{ KTX_RGB9_E5, KTX_ZERO, KTX_RGB, KTX_UNSIGNED_INT_5_9_9_9_REV, }, // RGB9E5F
{ KTX_BGRA, KTX_SRGB8_ALPHA8, KTX_BGRA, KTX_UNSIGNED_BYTE, }, // BGRA8
{ KTX_RGBA8, KTX_SRGB8_ALPHA8, KTX_RGBA, KTX_UNSIGNED_BYTE, }, // RGBA8
@@ -3277,8 +3434,11 @@ namespace bgfx
break;
default:
- // Decompression not implemented... Make ugly red-yellow checkerboard texture.
- imageCheckerboard(_width, _height, 16, UINT32_C(0xffff0000), UINT32_C(0xffffff00), _dst);
+ if (!imageConvert(_dst, TextureFormat::BGRA8, _src, _format, _width, _height, _pitch) )
+ {
+ // Failed to convert, just make ugly red-yellow checkerboard texture.
+ imageCheckerboard(_width, _height, 16, UINT32_C(0xffff0000), UINT32_C(0xffffff00), _dst);
+ }
break;
}
}
@@ -3544,8 +3704,10 @@ namespace bgfx
return false;
}
- void imageWriteTga(bx::WriterI* _writer, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, bool _grayscale, bool _yflip)
+ void imageWriteTga(bx::WriterI* _writer, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, bool _grayscale, bool _yflip, bx::Error* _err)
{
+ BX_ERROR_SCOPE(_err);
+
uint8_t type = _grayscale ? 3 : 2;
uint8_t bpp = _grayscale ? 8 : 32;
@@ -3558,7 +3720,7 @@ namespace bgfx
header[16] = bpp;
header[17] = 32;
- bx::write(_writer, header, sizeof(header) );
+ bx::write(_writer, header, sizeof(header), _err);
uint32_t dstPitch = _width*bpp/8;
if (_yflip)
@@ -3566,52 +3728,56 @@ namespace bgfx
uint8_t* data = (uint8_t*)_src + _pitch*_height - _pitch;
for (uint32_t yy = 0; yy < _height; ++yy)
{
- bx::write(_writer, data, dstPitch);
+ bx::write(_writer, data, dstPitch, _err);
data -= _pitch;
}
}
else if (_pitch == dstPitch)
{
- bx::write(_writer, _src, _height*_pitch);
+ bx::write(_writer, _src, _height*_pitch, _err);
}
else
{
uint8_t* data = (uint8_t*)_src;
for (uint32_t yy = 0; yy < _height; ++yy)
{
- bx::write(_writer, data, dstPitch);
+ bx::write(_writer, data, dstPitch, _err);
data += _pitch;
}
}
}
- static int32_t imageWriteKtxHeader(bx::WriterI* _writer, TextureFormat::Enum _format, bool _cubeMap, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips)
+ static int32_t imageWriteKtxHeader(bx::WriterI* _writer, TextureFormat::Enum _format, bool _cubeMap, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips, bx::Error* _err)
{
+ BX_ERROR_SCOPE(_err);
+
const KtxFormatInfo& tfi = s_translateKtxFormat[_format];
int32_t size = 0;
- size += bx::write(_writer, "\xabKTX 11\xbb\r\n\x1a\n", 12);
- size += bx::write(_writer, UINT32_C(0x04030201) );
- size += bx::write(_writer, UINT32_C(0) ); // glType
- size += bx::write(_writer, UINT32_C(1) ); // glTypeSize
- size += bx::write(_writer, UINT32_C(0) ); // glFormat
- size += bx::write(_writer, tfi.m_internalFmt); // glInternalFormat
- size += bx::write(_writer, tfi.m_fmt); // glBaseInternalFormat
- size += bx::write(_writer, _width);
- size += bx::write(_writer, _height);
- size += bx::write(_writer, _depth);
- size += bx::write(_writer, UINT32_C(0) ); // numberOfArrayElements
- size += bx::write(_writer, _cubeMap ? UINT32_C(6) : UINT32_C(0) );
- size += bx::write(_writer, uint32_t(_numMips) );
- size += bx::write(_writer, UINT32_C(0) ); // Meta-data size.
-
- BX_CHECK(size == 64, "KTX: Failed to write header size %d (expected: %d).", size, 64);
+ size += bx::write(_writer, "\xabKTX 11\xbb\r\n\x1a\n", 12, _err);
+ size += bx::write(_writer, UINT32_C(0x04030201), _err);
+ size += bx::write(_writer, UINT32_C(0), _err); // glType
+ size += bx::write(_writer, UINT32_C(1), _err); // glTypeSize
+ size += bx::write(_writer, UINT32_C(0), _err); // glFormat
+ size += bx::write(_writer, tfi.m_internalFmt, _err); // glInternalFormat
+ size += bx::write(_writer, tfi.m_fmt, _err); // glBaseInternalFormat
+ size += bx::write(_writer, _width, _err);
+ size += bx::write(_writer, _height, _err);
+ size += bx::write(_writer, _depth, _err);
+ size += bx::write(_writer, UINT32_C(0), _err); // numberOfArrayElements
+ size += bx::write(_writer, _cubeMap ? UINT32_C(6) : UINT32_C(0), _err);
+ size += bx::write(_writer, uint32_t(_numMips), _err);
+ size += bx::write(_writer, UINT32_C(0), _err); // Meta-data size.
+
+ BX_WARN(size == 64, "KTX: Failed to write header size %d (expected: %d).", size, 64);
return size;
}
- void imageWriteKtx(bx::WriterI* _writer, TextureFormat::Enum _format, bool _cubeMap, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips, const void* _src)
+ void imageWriteKtx(bx::WriterI* _writer, TextureFormat::Enum _format, bool _cubeMap, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips, const void* _src, bx::Error* _err)
{
- imageWriteKtxHeader(_writer, _format, _cubeMap, _width, _height, _depth, _numMips);
+ BX_ERROR_SCOPE(_err);
+
+ imageWriteKtxHeader(_writer, _format, _cubeMap, _width, _height, _depth, _numMips, _err);
const ImageBlockInfo& blockInfo = s_imageBlockInfo[_format];
const uint8_t bpp = blockInfo.bitsPerPixel;
@@ -3632,11 +3798,11 @@ namespace bgfx
depth = bx::uint32_max(1, depth);
uint32_t size = width*height*depth*bpp/8;
- bx::write(_writer, size);
+ bx::write(_writer, size, _err);
for (uint8_t side = 0, numSides = _cubeMap ? 6 : 1; side < numSides; ++side)
{
- bx::write(_writer, src, size);
+ bx::write(_writer, src, size, _err);
src += size;
}
@@ -3646,8 +3812,10 @@ namespace bgfx
}
}
- void imageWriteKtx(bx::WriterI* _writer, ImageContainer& _imageContainer, const void* _data, uint32_t _size)
+ void imageWriteKtx(bx::WriterI* _writer, ImageContainer& _imageContainer, const void* _data, uint32_t _size, bx::Error* _err)
{
+ BX_ERROR_SCOPE(_err);
+
imageWriteKtxHeader(_writer
, TextureFormat::Enum(_imageContainer.m_format)
, _imageContainer.m_cubeMap
@@ -3655,19 +3823,20 @@ namespace bgfx
, _imageContainer.m_height
, _imageContainer.m_depth
, _imageContainer.m_numMips
+ , _err
);
for (uint8_t lod = 0, num = _imageContainer.m_numMips; lod < num; ++lod)
{
ImageMip mip;
imageGetRawData(_imageContainer, 0, lod, _data, _size, mip);
- bx::write(_writer, mip.m_size);
+ bx::write(_writer, mip.m_size, _err);
for (uint8_t side = 0, numSides = _imageContainer.m_cubeMap ? 6 : 1; side < numSides; ++side)
{
if (imageGetRawData(_imageContainer, side, lod, _data, _size, mip) )
{
- bx::write(_writer, mip.m_data, mip.m_size);
+ bx::write(_writer, mip.m_data, mip.m_size, _err);
}
}
}
diff --git a/3rdparty/bgfx/src/image.h b/3rdparty/bgfx/src/image.h
index 1baba0bae68..173cf7b0fff 100644
--- a/3rdparty/bgfx/src/image.h
+++ b/3rdparty/bgfx/src/image.h
@@ -66,6 +66,205 @@ namespace bgfx
uint8_t encoding;
};
+ typedef void (*PackFn)(void*, const float*);
+ typedef void (*UnpackFn)(float*, const void*);
+
+ // R8
+ void packR8(void* _dst, const float* _src);
+ void unpackR8(float* _dst, const void* _src);
+
+ // R8S
+ void packR8S(void* _dst, const float* _src);
+ void unpackR8S(float* _dst, const void* _src);
+
+ // R8I
+ void packR8I(void* _dst, const float* _src);
+ void unpackR8I(float* _dst, const void* _src);
+
+ // R8U
+ void packR8U(void* _dst, const float* _src);
+ void unpackR8U(float* _dst, const void* _src);
+
+ // RG8
+ void packRg8(void* _dst, const float* _src);
+ void unpackRg8(float* _dst, const void* _src);
+
+ // RG8S
+ void packRg8S(void* _dst, const float* _src);
+ void unpackRg8S(float* _dst, const void* _src);
+
+ // RG8I
+ void packRg8I(void* _dst, const float* _src);
+ void unpackRg8I(float* _dst, const void* _src);
+
+ // RG8U
+ void packRg8U(void* _dst, const float* _src);
+ void unpackRg8U(float* _dst, const void* _src);
+
+ // RGB8
+ void packRgb8(void* _dst, const float* _src);
+ void unpackRgb8(float* _dst, const void* _src);
+
+ // RGB8S
+ void packRgb8S(void* _dst, const float* _src);
+ void unpackRgb8S(float* _dst, const void* _src);
+
+ // RGB8I
+ void packRgb8I(void* _dst, const float* _src);
+ void unpackRgb8I(float* _dst, const void* _src);
+
+ // RGB8U
+ void packRgb8U(void* _dst, const float* _src);
+ void unpackRgb8U(float* _dst, const void* _src);
+
+ // RGBA8
+ void packRgba8(void* _dst, const float* _src);
+ void unpackRgba8(float* _dst, const void* _src);
+
+ // BGRA8
+ void packBgra8(void* _dst, const float* _src);
+ void unpackBgra8(float* _dst, const void* _src);
+
+ // RGBA8S
+ void packRgba8S(void* _dst, const float* _src);
+ void unpackRgba8S(float* _dst, const void* _src);
+
+ // RGBA8I
+ void packRgba8I(void* _dst, const float* _src);
+ void unpackRgba8I(float* _dst, const void* _src);
+
+ // RGBA8U
+ void packRgba8U(void* _dst, const float* _src);
+ void unpackRgba8U(float* _dst, const void* _src);
+
+ // R16
+ void packR16(void* _dst, const float* _src);
+ void unpackR16(float* _dst, const void* _src);
+
+ // R16S
+ void packR16S(void* _dst, const float* _src);
+ void unpackR16S(float* _dst, const void* _src);
+
+ // R16I
+ void packR16I(void* _dst, const float* _src);
+ void unpackR16I(float* _dst, const void* _src);
+
+ // R16U
+ void packR16U(void* _dst, const float* _src);
+ void unpackR16U(float* _dst, const void* _src);
+
+ // R16F
+ void packR16F(void* _dst, const float* _src);
+ void unpackR16F(float* _dst, const void* _src);
+
+ // RG16
+ void packRg16(void* _dst, const float* _src);
+ void unpackRg16(float* _dst, const void* _src);
+
+ // RG16S
+ void packRg16S(void* _dst, const float* _src);
+ void unpackRg16S(float* _dst, const void* _src);
+
+ // RG16I
+ void packRg16I(void* _dst, const float* _src);
+ void unpackRg16I(float* _dst, const void* _src);
+
+ // RG16U
+ void packRg16U(void* _dst, const float* _src);
+ void unpackRg16U(float* _dst, const void* _src);
+
+ // RG16F
+ void packRg16F(void* _dst, const float* _src);
+ void unpackRg16F(float* _dst, const void* _src);
+
+ // RGBA16
+ void packRgba16(void* _dst, const float* _src);
+ void unpackRgba16(float* _dst, const void* _src);
+
+ // RGBA16S
+ void packRgba16S(void* _dst, const float* _src);
+ void unpackRgba16S(float* _dst, const void* _src);
+
+ // RGBA16I
+ void packRgba16I(void* _dst, const float* _src);
+ void unpackRgba16I(float* _dst, const void* _src);
+
+ // RGBA16U
+ void packRgba16U(void* _dst, const float* _src);
+ void unpackRgba16U(float* _dst, const void* _src);
+
+ // RGBA16F
+ void packRgba16F(void* _dst, const float* _src);
+ void unpackRgba16F(float* _dst, const void* _src);
+
+ // R32I
+ void packR32I(void* _dst, const float* _src);
+ void unpackR32I(float* _dst, const void* _src);
+
+ // R32U
+ void packR32U(void* _dst, const float* _src);
+ void unpackR32U(float* _dst, const void* _src);
+
+ // R32F
+ void packR32F(void* _dst, const float* _src);
+ void unpackR32F(float* _dst, const void* _src);
+
+ // RG32I
+ void packRg32I(void* _dst, const float* _src);
+ void unpackRg32I(float* _dst, const void* _src);
+
+ // RG32U
+ void packRg32U(void* _dst, const float* _src);
+ void unpackRg32U(float* _dst, const void* _src);
+
+ // RGB9E5F
+ void packRgb9E5F(void* _dst, const float* _src);
+ void unpackRgb9E5F(float* _dst, const void* _src);
+
+ // RGBA32I
+ void packRgba32I(void* _dst, const float* _src);
+ void unpackRgba32I(float* _dst, const void* _src);
+
+ // RGBA32U
+ void packRgba32U(void* _dst, const float* _src);
+ void unpackRgba32U(float* _dst, const void* _src);
+
+ // RGBA32F
+ void packRgba32F(void* _dst, const float* _src);
+ void unpackRgba32F(float* _dst, const void* _src);
+
+ // R5G6B5
+ void packR5G6B5(void* _dst, const float* _src);
+ void unpackR5G6B5(float* _dst, const void* _src);
+
+ // RGBA4
+ void packRgba4(void* _dst, const float* _src);
+ void unpackRgba4(float* _dst, const void* _src);
+
+ // RGBA4
+ void packBgra4(void* _dst, const float* _src);
+ void unpackBgra4(float* _dst, const void* _src);
+
+ // RGB5A1
+ void packRgb5a1(void* _dst, const float* _src);
+ void unpackRgb5a1(float* _dst, const void* _src);
+
+ // BGR5A1
+ void packBgr5a1(void* _dst, const float* _src);
+ void unpackBgr5a1(float* _dst, const void* _src);
+
+ // RGB10A2
+ void packRgb10A2(void* _dst, const float* _src);
+ void unpackRgb10A2(float* _dst, const void* _src);
+
+ // R11G11B10F
+ void packR11G11B10F(void* _dst, const float* _src);
+ void unpackR11G11B10F(float* _dst, const void* _src);
+
+ // RG32F
+ void packRg32F(void* _dst, const float* _src);
+ void unpackRg32F(float* _dst, const void* _src);
+
/// Returns true if texture format is compressed.
bool isCompressed(TextureFormat::Enum _format);
@@ -118,22 +317,31 @@ namespace bgfx
void imageCopy(uint32_t _width, uint32_t _height, uint32_t _bpp, uint32_t _pitch, const void* _src, void* _dst);
///
+ bool imageConvert(TextureFormat::Enum _dstFormat, TextureFormat::Enum _srcFormat);
+
+ ///
+ void imageConvert(void* _dst, uint32_t _bpp, PackFn _pack, const void* _src, UnpackFn _unpack, uint32_t _size);
+
+ ///
+ void imageConvert(void* _dst, uint32_t _dstBpp, PackFn _pack, const void* _src, uint32_t _srcBpp, UnpackFn _unpack, uint32_t _width, uint32_t _height, uint32_t _srcPitch);
+
+ ///
bool imageConvert(void* _dst, TextureFormat::Enum _dstFormat, const void* _src, TextureFormat::Enum _srcFormat, uint32_t _width, uint32_t _height);
///
- const Memory* imageAlloc(ImageContainer& _imageContainer, TextureFormat::Enum _format, uint16_t _width, uint16_t _height, uint16_t _depth = 0, bool _cubeMap = false, bool _mipsActive = false);
+ const Memory* imageAlloc(ImageContainer& _imageContainer, TextureFormat::Enum _format, uint16_t _width, uint16_t _height, uint16_t _depth = 0, bool _cubeMap = false, bool _generateMips = false);
///
void imageFree(const Memory* _memory);
///
- void imageWriteTga(bx::WriterI* _writer, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, bool _grayscale, bool _yflip);
+ void imageWriteTga(bx::WriterI* _writer, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, bool _grayscale, bool _yflip, bx::Error* _err = NULL);
///
- void imageWriteKtx(bx::WriterI* _writer, TextureFormat::Enum _format, bool _cubeMap, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips, const void* _src);
+ void imageWriteKtx(bx::WriterI* _writer, TextureFormat::Enum _format, bool _cubeMap, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips, const void* _src, bx::Error* _err = NULL);
///
- void imageWriteKtx(bx::WriterI* _writer, ImageContainer& _imageContainer, const void* _data, uint32_t _size);
+ void imageWriteKtx(bx::WriterI* _writer, ImageContainer& _imageContainer, const void* _data, uint32_t _size, bx::Error* _err = NULL);
///
bool imageParse(ImageContainer& _imageContainer, bx::ReaderSeekerI* _reader);
diff --git a/3rdparty/bgfx/src/makefile b/3rdparty/bgfx/src/makefile
index 84d9bb33869..a09ec27c16b 100644
--- a/3rdparty/bgfx/src/makefile
+++ b/3rdparty/bgfx/src/makefile
@@ -1,5 +1,5 @@
#
-# Copyright 2011-2015 Branimir Karadzic. All rights reserved.
+# Copyright 2011-2016 Branimir Karadzic. All rights reserved.
# License: http://www.opensource.org/licenses/BSD-2-Clause
#
diff --git a/3rdparty/bgfx/src/renderer_d3d.h b/3rdparty/bgfx/src/renderer_d3d.h
index 314fbaa0f89..97cfb045821 100644
--- a/3rdparty/bgfx/src/renderer_d3d.h
+++ b/3rdparty/bgfx/src/renderer_d3d.h
@@ -21,6 +21,12 @@
namespace bgfx
{
+#if BX_PLATFORM_XBOXONE
+ typedef ::IGraphicsUnknown IUnknown;
+#else
+ typedef ::IUnknown IUnknown;
+#endif // BX_PLATFORM_XBOXONE
+
#define _DX_CHECK(_call) \
BX_MACRO_BLOCK_BEGIN \
HRESULT __hr__ = _call; \
@@ -96,7 +102,7 @@ namespace bgfx
return _interface->Release();
}
- template <typename Ty>
+ template<typename Ty>
class StateCacheT
{
public:
diff --git a/3rdparty/bgfx/src/renderer_d3d11.cpp b/3rdparty/bgfx/src/renderer_d3d11.cpp
index 4446d6b0324..27f1681a0d2 100644
--- a/3rdparty/bgfx/src/renderer_d3d11.cpp
+++ b/3rdparty/bgfx/src/renderer_d3d11.cpp
@@ -8,10 +8,12 @@
#if BGFX_CONFIG_RENDERER_DIRECT3D11
# include "renderer_d3d11.h"
-#if BX_PLATFORM_WINRT
+#if !BX_PLATFORM_WINDOWS
# include <inspectable.h>
-# include <windows.ui.xaml.media.dxinterop.h>
-#endif // BX_PLATFORM_WINRT
+# if BX_PLATFORM_WINRT
+# include <windows.ui.xaml.media.dxinterop.h>
+# endif // BX_PLATFORM_WINRT
+#endif // !BX_PLATFORM_WINDOWS
#if BGFX_CONFIG_PROFILER_REMOTERY
# define BGFX_GPU_PROFILER_BIND(_device, _context) rmt_BindD3D11(_device, _context)
@@ -101,20 +103,20 @@ namespace bgfx { namespace d3d11
static const D3D11_BLEND s_blendFactor[][2] =
{
- { (D3D11_BLEND)0, (D3D11_BLEND)0 }, // ignored
+ { D3D11_BLEND(0), D3D11_BLEND(0) }, // ignored
{ D3D11_BLEND_ZERO, D3D11_BLEND_ZERO }, // ZERO
- { D3D11_BLEND_ONE, D3D11_BLEND_ONE }, // ONE
- { D3D11_BLEND_SRC_COLOR, D3D11_BLEND_SRC_ALPHA }, // SRC_COLOR
- { D3D11_BLEND_INV_SRC_COLOR, D3D11_BLEND_INV_SRC_ALPHA }, // INV_SRC_COLOR
- { D3D11_BLEND_SRC_ALPHA, D3D11_BLEND_SRC_ALPHA }, // SRC_ALPHA
- { D3D11_BLEND_INV_SRC_ALPHA, D3D11_BLEND_INV_SRC_ALPHA }, // INV_SRC_ALPHA
- { D3D11_BLEND_DEST_ALPHA, D3D11_BLEND_DEST_ALPHA }, // DST_ALPHA
- { D3D11_BLEND_INV_DEST_ALPHA, D3D11_BLEND_INV_DEST_ALPHA }, // INV_DST_ALPHA
- { D3D11_BLEND_DEST_COLOR, D3D11_BLEND_DEST_ALPHA }, // DST_COLOR
- { D3D11_BLEND_INV_DEST_COLOR, D3D11_BLEND_INV_DEST_ALPHA }, // INV_DST_COLOR
- { D3D11_BLEND_SRC_ALPHA_SAT, D3D11_BLEND_ONE }, // SRC_ALPHA_SAT
- { D3D11_BLEND_BLEND_FACTOR, D3D11_BLEND_BLEND_FACTOR }, // FACTOR
- { D3D11_BLEND_INV_BLEND_FACTOR, D3D11_BLEND_INV_BLEND_FACTOR }, // INV_FACTOR
+ { D3D11_BLEND_ONE, D3D11_BLEND_ONE }, // ONE
+ { D3D11_BLEND_SRC_COLOR, D3D11_BLEND_SRC_ALPHA }, // SRC_COLOR
+ { D3D11_BLEND_INV_SRC_COLOR, D3D11_BLEND_INV_SRC_ALPHA }, // INV_SRC_COLOR
+ { D3D11_BLEND_SRC_ALPHA, D3D11_BLEND_SRC_ALPHA }, // SRC_ALPHA
+ { D3D11_BLEND_INV_SRC_ALPHA, D3D11_BLEND_INV_SRC_ALPHA }, // INV_SRC_ALPHA
+ { D3D11_BLEND_DEST_ALPHA, D3D11_BLEND_DEST_ALPHA }, // DST_ALPHA
+ { D3D11_BLEND_INV_DEST_ALPHA, D3D11_BLEND_INV_DEST_ALPHA }, // INV_DST_ALPHA
+ { D3D11_BLEND_DEST_COLOR, D3D11_BLEND_DEST_ALPHA }, // DST_COLOR
+ { D3D11_BLEND_INV_DEST_COLOR, D3D11_BLEND_INV_DEST_ALPHA }, // INV_DST_COLOR
+ { D3D11_BLEND_SRC_ALPHA_SAT, D3D11_BLEND_ONE }, // SRC_ALPHA_SAT
+ { D3D11_BLEND_BLEND_FACTOR, D3D11_BLEND_BLEND_FACTOR }, // FACTOR
+ { D3D11_BLEND_INV_BLEND_FACTOR, D3D11_BLEND_INV_BLEND_FACTOR }, // INV_FACTOR
};
static const D3D11_BLEND_OP s_blendEquation[] =
@@ -259,6 +261,10 @@ namespace bgfx { namespace d3d11
{ DXGI_FORMAT_R32G32_SINT, DXGI_FORMAT_R32G32_SINT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RG32I
{ DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RG32U
{ DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RG32F
+ { DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB8
+ { DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB8I
+ { DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB8U
+ { DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB8S
{ DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB9E5F
{ DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB }, // BGRA8
{ DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB }, // RGBA8
@@ -586,13 +592,14 @@ namespace bgfx { namespace d3d11
, m_currentDepthStencil(NULL)
, m_captureTexture(NULL)
, m_captureResolve(NULL)
- , m_wireframe(false)
, m_maxAnisotropy(1)
, m_depthClamp(false)
+ , m_wireframe(false)
, m_currentProgram(NULL)
, m_vsChanges(0)
, m_fsChanges(0)
, m_rtMsaa(false)
+ , m_timerQuerySupport(false)
, m_ovrRtv(NULL)
, m_ovrDsv(NULL)
{
@@ -790,9 +797,12 @@ namespace bgfx { namespace d3d11
#if BX_PLATFORM_WINRT
// WinRT requires the IDXGIFactory2 interface, which isn't supported on older platforms
hr = CreateDXGIFactory1(__uuidof(IDXGIFactory2), (void**)&factory);
-#else
+#elif BX_PLATFORM_WINDOWS
hr = CreateDXGIFactory(IID_IDXGIFactory, (void**)&factory);
-#endif // BX_PLATFORM_WINRT
+#else
+ hr = S_OK;
+ factory = NULL;
+#endif // BX_PLATFORM_*
BX_WARN(SUCCEEDED(hr), "Unable to create DXGI factory.");
if (FAILED(hr) )
{
@@ -811,60 +821,63 @@ namespace bgfx { namespace d3d11
: D3D_DRIVER_TYPE_HARDWARE
;
- IDXGIAdapter* adapter;
- for (uint32_t ii = 0
- ; DXGI_ERROR_NOT_FOUND != factory->EnumAdapters(ii, &adapter) && ii < BX_COUNTOF(g_caps.gpu)
- ; ++ii
- )
+ if (NULL != factory)
{
- DXGI_ADAPTER_DESC desc;
- hr = adapter->GetDesc(&desc);
- if (SUCCEEDED(hr) )
+ IDXGIAdapter* adapter;
+ for (uint32_t ii = 0
+ ; DXGI_ERROR_NOT_FOUND != factory->EnumAdapters(ii, &adapter) && ii < BX_COUNTOF(g_caps.gpu)
+ ; ++ii
+ )
{
- BX_TRACE("Adapter #%d", ii);
-
- char description[BX_COUNTOF(desc.Description)];
- wcstombs(description, desc.Description, BX_COUNTOF(desc.Description) );
- BX_TRACE("\tDescription: %s", description);
- BX_TRACE("\tVendorId: 0x%08x, DeviceId: 0x%08x, SubSysId: 0x%08x, Revision: 0x%08x"
- , desc.VendorId
- , desc.DeviceId
- , desc.SubSysId
- , desc.Revision
- );
- BX_TRACE("\tMemory: %" PRIi64 " (video), %" PRIi64 " (system), %" PRIi64 " (shared)"
- , desc.DedicatedVideoMemory
- , desc.DedicatedSystemMemory
- , desc.SharedSystemMemory
- );
+ DXGI_ADAPTER_DESC desc;
+ hr = adapter->GetDesc(&desc);
+ if (SUCCEEDED(hr) )
+ {
+ BX_TRACE("Adapter #%d", ii);
+
+ char description[BX_COUNTOF(desc.Description)];
+ wcstombs(description, desc.Description, BX_COUNTOF(desc.Description) );
+ BX_TRACE("\tDescription: %s", description);
+ BX_TRACE("\tVendorId: 0x%08x, DeviceId: 0x%08x, SubSysId: 0x%08x, Revision: 0x%08x"
+ , desc.VendorId
+ , desc.DeviceId
+ , desc.SubSysId
+ , desc.Revision
+ );
+ BX_TRACE("\tMemory: %" PRIi64 " (video), %" PRIi64 " (system), %" PRIi64 " (shared)"
+ , desc.DedicatedVideoMemory
+ , desc.DedicatedSystemMemory
+ , desc.SharedSystemMemory
+ );
- g_caps.gpu[ii].vendorId = (uint16_t)desc.VendorId;
- g_caps.gpu[ii].deviceId = (uint16_t)desc.DeviceId;
- ++g_caps.numGPUs;
+ g_caps.gpu[ii].vendorId = (uint16_t)desc.VendorId;
+ g_caps.gpu[ii].deviceId = (uint16_t)desc.DeviceId;
+ ++g_caps.numGPUs;
- if (NULL == m_adapter)
- {
- if ( (BGFX_PCI_ID_NONE != g_caps.vendorId || 0 != g_caps.deviceId)
- && (BGFX_PCI_ID_NONE == g_caps.vendorId || desc.VendorId == g_caps.vendorId)
- && ( 0 == g_caps.deviceId || desc.DeviceId == g_caps.deviceId) )
+ if (NULL == m_adapter)
{
- m_adapter = adapter;
- m_adapter->AddRef();
- m_driverType = D3D_DRIVER_TYPE_UNKNOWN;
- }
+ if ( (BGFX_PCI_ID_NONE != g_caps.vendorId || 0 != g_caps.deviceId)
+ && (BGFX_PCI_ID_NONE == g_caps.vendorId || desc.VendorId == g_caps.vendorId)
+ && ( 0 == g_caps.deviceId || desc.DeviceId == g_caps.deviceId) )
+ {
+ m_adapter = adapter;
+ m_adapter->AddRef();
+ m_driverType = D3D_DRIVER_TYPE_UNKNOWN;
+ }
- if (BX_ENABLED(BGFX_CONFIG_DEBUG_PERFHUD)
- && 0 != strstr(description, "PerfHUD") )
- {
- m_adapter = adapter;
- m_driverType = D3D_DRIVER_TYPE_REFERENCE;
+ if (BX_ENABLED(BGFX_CONFIG_DEBUG_PERFHUD)
+ && 0 != strstr(description, "PerfHUD") )
+ {
+ m_adapter = adapter;
+ m_driverType = D3D_DRIVER_TYPE_REFERENCE;
+ }
}
}
- }
- DX_RELEASE(adapter, adapter == m_adapter ? 1 : 0);
+ DX_RELEASE(adapter, adapter == m_adapter ? 1 : 0);
+ }
+ DX_RELEASE(factory, NULL != m_adapter ? 1 : 0);
}
- DX_RELEASE(factory, NULL != m_adapter ? 1 : 0);
D3D_FEATURE_LEVEL featureLevel[] =
{
@@ -1023,7 +1036,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
if (NULL == g_platformData.backBuffer)
{
-#if BX_PLATFORM_WINRT
+#if !BX_PLATFORM_WINDOWS
hr = adapter->GetParent(__uuidof(IDXGIFactory2), (void**)&m_factory);
BX_WARN(SUCCEEDED(hr), "Unable to create Direct3D11 device.");
DX_RELEASE(adapter, 2);
@@ -1068,6 +1081,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
);
BX_WARN(SUCCEEDED(hr), "Unable to create Direct3D11 swap chain.");
+# if BX_PLATFORM_WINRT
IInspectable* nativeWindow = reinterpret_cast<IInspectable *>(g_platformData.nwh);
ISwapChainBackgroundPanelNative* panel = NULL;
hr = nativeWindow->QueryInterface(__uuidof(ISwapChainBackgroundPanelNative), (void**)&panel);
@@ -1080,6 +1094,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
panel->Release();
}
+# endif // BX_PLATFORM_WINRT
}
#else
hr = adapter->GetParent(IID_IDXGIFactory, (void**)&m_factory);
@@ -1112,7 +1127,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
| DXGI_MWA_NO_WINDOW_CHANGES
| DXGI_MWA_NO_ALT_ENTER
) );
-#endif // BX_PLATFORM_WINRT
+#endif // BX_PLATFORM_*
BX_WARN(SUCCEEDED(hr), "Failed to create swap chain.");
if (FAILED(hr) )
{
@@ -1179,6 +1194,8 @@ BX_PRAGMA_DIAGNOSTIC_POP();
| BGFX_CAPS_OCCLUSION_QUERY
);
+ m_timerQuerySupport = m_featureLevel >= D3D_FEATURE_LEVEL_9_3;
+
if (m_featureLevel <= D3D_FEATURE_LEVEL_9_2)
{
g_caps.maxTextureSize = D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION;
@@ -2007,7 +2024,10 @@ BX_PRAGMA_DIAGNOSTIC_POP();
{
ovrPreReset();
- m_gpuTimer.preReset();
+ if (m_timerQuerySupport)
+ {
+ m_gpuTimer.preReset();
+ }
m_occlusionQuery.preReset();
if (NULL == g_platformData.backBufferDS)
@@ -2052,7 +2072,10 @@ BX_PRAGMA_DIAGNOSTIC_POP();
DX_RELEASE(color, 0);
}
- m_gpuTimer.postReset();
+ if (m_timerQuerySupport)
+ {
+ m_gpuTimer.postReset();
+ }
m_occlusionQuery.postReset();
ovrPostReset();
@@ -2106,7 +2129,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
if (NULL != m_swapChain)
{
HRESULT hr = S_OK;
- uint32_t syncInterval = BX_ENABLED(BX_PLATFORM_WINRT)
+ uint32_t syncInterval = BX_ENABLED(!BX_PLATFORM_WINDOWS)
? 1 // sync interval of 0 is not supported on WinRT
: !!(m_resolution.m_flags & BGFX_RESET_VSYNC)
;
@@ -2222,7 +2245,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
flags &= ~BGFX_RESET_INTERNAL_FORCE;
bool resize = true
- && !BX_ENABLED(BX_PLATFORM_WINRT) // can't use ResizeBuffers on Windows Phone
+ && !BX_ENABLED(BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT) // can't use ResizeBuffers on Windows Phone
&& (m_resolution.m_flags&BGFX_RESET_MSAA_MASK) == (flags&BGFX_RESET_MSAA_MASK)
;
@@ -2274,7 +2297,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
scd = &swapChainScd;
}
-#if BX_PLATFORM_WINRT
+#if !BX_PLATFORM_WINDOWS
HRESULT hr;
if (g_platformData.ndt == 0)
{
@@ -2297,6 +2320,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
);
BGFX_FATAL(SUCCEEDED(hr), Fatal::UnableToInitialize, "Unable to create Direct3D11 swap chain.");
+# if BX_PLATFORM_WINRT
IInspectable *nativeWindow = reinterpret_cast<IInspectable *>(g_platformData.nwh);
ISwapChainBackgroundPanelNative* panel = NULL;
hr = nativeWindow->QueryInterface(__uuidof(ISwapChainBackgroundPanelNative), (void **)&panel);
@@ -2309,6 +2333,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
panel->Release();
}
+# endif // BX_PLATFORM_WINRT
}
#else
HRESULT hr;
@@ -2316,7 +2341,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
, scd
, &m_swapChain
);
-#endif // BX_PLATFORM_WINRT
+#endif // !BX_PLATFORM_WINDOWS
BGFX_FATAL(SUCCEEDED(hr), bgfx::Fatal::UnableToInitialize, "Failed to create swap chain.");
}
}
@@ -2789,39 +2814,39 @@ BX_PRAGMA_DIAGNOSTIC_POP();
DXGI_FORMAT getBufferFormat()
{
-#if BX_PLATFORM_WINRT
- return m_scd.Format;
-#else
+#if BX_PLATFORM_WINDOWS
return m_scd.BufferDesc.Format;
+#else
+ return m_scd.Format;
#endif
}
uint32_t getBufferWidth()
{
-#if BX_PLATFORM_WINRT
- return m_scd.Width;
-#else
+#if BX_PLATFORM_WINDOWS
return m_scd.BufferDesc.Width;
+#else
+ return m_scd.Width;
#endif
}
uint32_t getBufferHeight()
{
-#if BX_PLATFORM_WINRT
- return m_scd.Height;
-#else
+#if BX_PLATFORM_WINDOWS
return m_scd.BufferDesc.Height;
+#else
+ return m_scd.Height;
#endif
}
void setBufferSize(uint32_t _width, uint32_t _height)
{
-#if BX_PLATFORM_WINRT
- m_scd.Width = _width;
- m_scd.Height = _height;
-#else
+#if BX_PLATFORM_WINDOWS
m_scd.BufferDesc.Width = _width;
m_scd.BufferDesc.Height = _height;
+#else
+ m_scd.Width = _width;
+ m_scd.Height = _height;
#endif
}
@@ -3348,13 +3373,13 @@ BX_PRAGMA_DIAGNOSTIC_POP();
D3D_FEATURE_LEVEL m_featureLevel;
IDXGIAdapter* m_adapter;
DXGI_ADAPTER_DESC m_adapterDesc;
-#if BX_PLATFORM_WINRT
- IDXGIFactory2* m_factory;
- IDXGISwapChain1* m_swapChain;
-#else
+#if BX_PLATFORM_WINDOWS
IDXGIFactory* m_factory;
IDXGISwapChain* m_swapChain;
-#endif // BX_PLATFORM_WINRT
+#else
+ IDXGIFactory2* m_factory;
+ IDXGISwapChain1* m_swapChain;
+#endif // BX_PLATFORM_WINDOWS
uint16_t m_lost;
uint16_t m_numWindows;
@@ -3375,17 +3400,17 @@ BX_PRAGMA_DIAGNOSTIC_POP();
ID3D11Texture2D* m_captureResolve;
Resolution m_resolution;
- bool m_wireframe;
-#if BX_PLATFORM_WINRT
- typedef DXGI_SWAP_CHAIN_DESC1 SwapChainDesc;
-#else
+#if BX_PLATFORM_WINDOWS
typedef DXGI_SWAP_CHAIN_DESC SwapChainDesc;
-#endif // BX_PLATFORM_WINRT
+#else
+ typedef DXGI_SWAP_CHAIN_DESC1 SwapChainDesc;
+#endif // BX_PLATFORM_WINDOWS
SwapChainDesc m_scd;
uint32_t m_maxAnisotropy;
bool m_depthClamp;
+ bool m_wireframe;
IndexBufferD3D11 m_indexBuffers[BGFX_CONFIG_MAX_INDEX_BUFFERS];
VertexBufferD3D11 m_vertexBuffers[BGFX_CONFIG_MAX_VERTEX_BUFFERS];
@@ -3418,6 +3443,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
FrameBufferHandle m_fbh;
bool m_rtMsaa;
+ bool m_timerQuerySupport;
OVR m_ovr;
TextureD3D11 m_ovrRT;
@@ -3712,8 +3738,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
{
bx::MemoryReader rd(_code, _size);
+ bx::Error err;
DxbcContext dxbc;
- read(&rd, dxbc);
+ read(&rd, dxbc, &err);
struct FindDepthOp
{
@@ -3856,7 +3883,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
uint16_t shaderSize;
bx::read(&reader, shaderSize);
- const DWORD* code = (const DWORD*)reader.getDataPtr();
+ const void* code = reader.getDataPtr();
bx::skip(&reader, shaderSize+1);
if (BGFX_CHUNK_MAGIC_FSH == magic)
@@ -3930,22 +3957,14 @@ BX_PRAGMA_DIAGNOSTIC_POP();
m_width = textureWidth;
m_height = textureHeight;
m_depth = imageContainer.m_depth;
- m_requestedFormat = (uint8_t)imageContainer.m_format;
- m_textureFormat = (uint8_t)imageContainer.m_format;
-
- const TextureFormatInfo& tfi = s_textureFormat[m_requestedFormat];
- const bool convert = DXGI_FORMAT_UNKNOWN == tfi.m_fmt;
-
- uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
- if (convert)
- {
- m_textureFormat = (uint8_t)TextureFormat::BGRA8;
- bpp = 32;
- }
+ m_requestedFormat = uint8_t(imageContainer.m_format);
+ m_textureFormat = uint8_t(getViableTextureFormat(imageContainer) );
+ const bool convert = m_textureFormat != m_requestedFormat;
+ const uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
if (imageContainer.m_cubeMap)
{
- m_type = TextureCube;
+ m_type = TextureCube;
}
else if (imageContainer.m_depth > 1)
{
@@ -4056,7 +4075,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
if (format == DXGI_FORMAT_UNKNOWN)
{
// not swizzled and not sRGB, or sRGB unsupported
- format = s_textureFormat[m_textureFormat].m_fmt;
+ format = s_textureFormat[m_textureFormat].m_fmt;
srvd.Format = s_textureFormat[m_textureFormat].m_fmtSrv;
}
@@ -4717,7 +4736,10 @@ BX_PRAGMA_DIAGNOSTIC_POP();
int64_t elapsed = -bx::getHPCounter();
int64_t captureElapsed = 0;
- m_gpuTimer.begin();
+ if (m_timerQuerySupport)
+ {
+ m_gpuTimer.begin();
+ }
if (0 < _render->m_iboffset)
{
@@ -5627,15 +5649,18 @@ BX_PRAGMA_DIAGNOSTIC_POP();
static double maxGpuElapsed = 0.0f;
double elapsedGpuMs = 0.0;
- m_gpuTimer.end();
-
- while (m_gpuTimer.get() )
+ if (m_timerQuerySupport)
{
- double toGpuMs = 1000.0 / double(m_gpuTimer.m_frequency);
- elapsedGpuMs = m_gpuTimer.m_elapsed * toGpuMs;
- maxGpuElapsed = elapsedGpuMs > maxGpuElapsed ? elapsedGpuMs : maxGpuElapsed;
+ m_gpuTimer.end();
+
+ while (m_gpuTimer.get() )
+ {
+ double toGpuMs = 1000.0 / double(m_gpuTimer.m_frequency);
+ elapsedGpuMs = m_gpuTimer.m_elapsed * toGpuMs;
+ maxGpuElapsed = elapsedGpuMs > maxGpuElapsed ? elapsedGpuMs : maxGpuElapsed;
+ }
+ maxGpuLatency = bx::uint32_imax(maxGpuLatency, m_gpuTimer.m_control.available()-1);
}
- maxGpuLatency = bx::uint32_imax(maxGpuLatency, m_gpuTimer.m_control.available()-1);
const int64_t timerFreq = bx::getHPFrequency();
diff --git a/3rdparty/bgfx/src/renderer_d3d11.h b/3rdparty/bgfx/src/renderer_d3d11.h
index 833eda40e1a..f4a92e4abb0 100644
--- a/3rdparty/bgfx/src/renderer_d3d11.h
+++ b/3rdparty/bgfx/src/renderer_d3d11.h
@@ -6,7 +6,7 @@
#ifndef BGFX_RENDERER_D3D11_H_HEADER_GUARD
#define BGFX_RENDERER_D3D11_H_HEADER_GUARD
-#define USE_D3D11_DYNAMIC_LIB !BX_PLATFORM_WINRT
+#define USE_D3D11_DYNAMIC_LIB BX_PLATFORM_WINDOWS
#if !USE_D3D11_DYNAMIC_LIB
# undef BGFX_CONFIG_DEBUG_PIX
@@ -19,11 +19,13 @@ BX_PRAGMA_DIAGNOSTIC_IGNORED_GCC("-Wpragmas");
BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4005) // warning C4005: '' : macro redefinition
#include <sal.h>
#define D3D11_NO_HELPERS
-#if BX_PLATFORM_WINRT
+#if BX_PLATFORM_WINDOWS
+# include <d3d11.h>
+#elif BX_PLATFORM_WINRT
# include <d3d11_3.h>
#else
-# include <d3d11.h>
-#endif // BX_PLATFORM_WINRT
+# include <d3d11_x.h>
+#endif // BX_PLATFORM_*
BX_PRAGMA_DIAGNOSTIC_POP()
#include "renderer.h"
@@ -118,7 +120,6 @@ namespace bgfx { namespace d3d11
}
void create(const Memory* _mem);
- DWORD* getShaderCode(uint8_t _fragmentBit, const Memory* _mem);
void destroy()
{
@@ -275,10 +276,11 @@ namespace bgfx { namespace d3d11
IDXGISwapChain* m_swapChain;
uint32_t m_width;
uint32_t m_height;
+
+ Attachment m_attachment[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
uint16_t m_denseIdx;
uint8_t m_num;
uint8_t m_numTh;
- Attachment m_attachment[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
};
struct TimerQueryD3D11
diff --git a/3rdparty/bgfx/src/renderer_d3d12.cpp b/3rdparty/bgfx/src/renderer_d3d12.cpp
index 409d33bce10..06bc0632536 100644
--- a/3rdparty/bgfx/src/renderer_d3d12.cpp
+++ b/3rdparty/bgfx/src/renderer_d3d12.cpp
@@ -18,7 +18,7 @@ namespace bgfx { namespace d3d12
struct PrimInfo
{
- D3D_PRIMITIVE_TOPOLOGY m_toplogy;
+ D3D_PRIMITIVE_TOPOLOGY m_topology;
D3D12_PRIMITIVE_TOPOLOGY_TYPE m_topologyType;
uint32_t m_min;
uint32_t m_div;
@@ -63,20 +63,20 @@ namespace bgfx { namespace d3d12
static const D3D12_BLEND s_blendFactor[][2] =
{
- { (D3D12_BLEND)0, (D3D12_BLEND)0 }, // ignored
+ { D3D12_BLEND(0), D3D12_BLEND(0) }, // ignored
{ D3D12_BLEND_ZERO, D3D12_BLEND_ZERO }, // ZERO
- { D3D12_BLEND_ONE, D3D12_BLEND_ONE }, // ONE
- { D3D12_BLEND_SRC_COLOR, D3D12_BLEND_SRC_ALPHA }, // SRC_COLOR
- { D3D12_BLEND_INV_SRC_COLOR, D3D12_BLEND_INV_SRC_ALPHA }, // INV_SRC_COLOR
- { D3D12_BLEND_SRC_ALPHA, D3D12_BLEND_SRC_ALPHA }, // SRC_ALPHA
- { D3D12_BLEND_INV_SRC_ALPHA, D3D12_BLEND_INV_SRC_ALPHA }, // INV_SRC_ALPHA
- { D3D12_BLEND_DEST_ALPHA, D3D12_BLEND_DEST_ALPHA }, // DST_ALPHA
- { D3D12_BLEND_INV_DEST_ALPHA, D3D12_BLEND_INV_DEST_ALPHA }, // INV_DST_ALPHA
- { D3D12_BLEND_DEST_COLOR, D3D12_BLEND_DEST_ALPHA }, // DST_COLOR
- { D3D12_BLEND_INV_DEST_COLOR, D3D12_BLEND_INV_DEST_ALPHA }, // INV_DST_COLOR
- { D3D12_BLEND_SRC_ALPHA_SAT, D3D12_BLEND_ONE }, // SRC_ALPHA_SAT
- { D3D12_BLEND_BLEND_FACTOR, D3D12_BLEND_BLEND_FACTOR }, // FACTOR
- { D3D12_BLEND_INV_BLEND_FACTOR, D3D12_BLEND_INV_BLEND_FACTOR }, // INV_FACTOR
+ { D3D12_BLEND_ONE, D3D12_BLEND_ONE }, // ONE
+ { D3D12_BLEND_SRC_COLOR, D3D12_BLEND_SRC_ALPHA }, // SRC_COLOR
+ { D3D12_BLEND_INV_SRC_COLOR, D3D12_BLEND_INV_SRC_ALPHA }, // INV_SRC_COLOR
+ { D3D12_BLEND_SRC_ALPHA, D3D12_BLEND_SRC_ALPHA }, // SRC_ALPHA
+ { D3D12_BLEND_INV_SRC_ALPHA, D3D12_BLEND_INV_SRC_ALPHA }, // INV_SRC_ALPHA
+ { D3D12_BLEND_DEST_ALPHA, D3D12_BLEND_DEST_ALPHA }, // DST_ALPHA
+ { D3D12_BLEND_INV_DEST_ALPHA, D3D12_BLEND_INV_DEST_ALPHA }, // INV_DST_ALPHA
+ { D3D12_BLEND_DEST_COLOR, D3D12_BLEND_DEST_ALPHA }, // DST_COLOR
+ { D3D12_BLEND_INV_DEST_COLOR, D3D12_BLEND_INV_DEST_ALPHA }, // INV_DST_COLOR
+ { D3D12_BLEND_SRC_ALPHA_SAT, D3D12_BLEND_ONE }, // SRC_ALPHA_SAT
+ { D3D12_BLEND_BLEND_FACTOR, D3D12_BLEND_BLEND_FACTOR }, // FACTOR
+ { D3D12_BLEND_INV_BLEND_FACTOR, D3D12_BLEND_INV_BLEND_FACTOR }, // INV_FACTOR
};
static const D3D12_BLEND_OP s_blendEquation[] =
@@ -221,6 +221,10 @@ namespace bgfx { namespace d3d12
{ DXGI_FORMAT_R32G32_SINT, DXGI_FORMAT_R32G32_SINT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RG32I
{ DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RG32U
{ DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RG32F
+ { DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB8
+ { DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB8I
+ { DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB8U
+ { DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB8S
{ DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // RGB9E5F
{ DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB }, // BGRA8
{ DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB }, // RGBA8
@@ -556,7 +560,12 @@ namespace bgfx { namespace d3d12
HRESULT hr;
+#if BX_PLATFORM_WINDOWS
hr = CreateDXGIFactory1(IID_IDXGIFactory4, (void**)&m_factory);
+#else
+ hr = S_OK;
+ m_factory = NULL;
+#endif // BX_PLATFORM_*
BX_WARN(SUCCEEDED(hr), "Unable to create DXGI factory.");
if (FAILED(hr) )
@@ -570,7 +579,11 @@ namespace bgfx { namespace d3d12
m_driverType = D3D_DRIVER_TYPE_HARDWARE;
{
+#if BX_PLATFORM_WINDOWS
IDXGIAdapter3* adapter;
+#else
+ IDXGIAdapter* adapter;
+#endif // BX_PLATFORM_*
for (uint32_t ii = 0; DXGI_ERROR_NOT_FOUND != m_factory->EnumAdapters(ii, reinterpret_cast<IDXGIAdapter**>(&adapter) ); ++ii)
{
DXGI_ADAPTER_DESC desc;
@@ -663,7 +676,11 @@ namespace bgfx { namespace d3d12
{
memset(&m_adapterDesc, 0, sizeof(m_adapterDesc) );
luid = m_device->GetAdapterLuid();
+#if BX_PLATFORM_WINDOWS
IDXGIAdapter3* adapter;
+#else
+ IDXGIAdapter* adapter;
+#endif // BX_PLATFORM_*
for (uint32_t ii = 0; DXGI_ERROR_NOT_FOUND != m_factory->EnumAdapters(ii, reinterpret_cast<IDXGIAdapter**>(&adapter) ); ++ii)
{
adapter->GetDesc(&m_adapterDesc);
@@ -756,14 +773,15 @@ namespace bgfx { namespace d3d12
m_resolution.m_width = BGFX_DEFAULT_WIDTH;
m_resolution.m_height = BGFX_DEFAULT_HEIGHT;
+ m_numWindows = 1;
+
+#if BX_PLATFORM_WINDOWS
DX_CHECK(m_factory->MakeWindowAssociation( (HWND)g_platformData.nwh
, 0
| DXGI_MWA_NO_WINDOW_CHANGES
| DXGI_MWA_NO_ALT_ENTER
) );
- m_numWindows = 1;
-
if (BX_ENABLED(BGFX_CONFIG_DEBUG) )
{
hr = m_device->QueryInterface(IID_ID3D12InfoQueue, (void**)&m_infoQueue);
@@ -789,6 +807,7 @@ namespace bgfx { namespace d3d12
DX_RELEASE_WARNONLY(m_infoQueue, 0);
}
}
+#endif // BX_PLATFORM_WINDOWS
D3D12_DESCRIPTOR_HEAP_DESC rtvDescHeap;
rtvDescHeap.NumDescriptors = 0
@@ -1772,6 +1791,8 @@ data.NumQualityLevels = 0;
preReset();
+ BX_UNUSED(resize);
+#if BX_PLATFORM_WINDOWS
if (resize)
{
uint32_t nodeMask[] = { 1, 1, 1, 1 };
@@ -1789,6 +1810,7 @@ data.NumQualityLevels = 0;
) );
}
else
+#endif // BX_PLATFORM_WINDOWS
{
updateMsaa();
m_scd.SampleDesc = s_msaa[(m_resolution.m_flags&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT];
@@ -1943,13 +1965,14 @@ data.NumQualityLevels = 0;
m_rtMsaa = _msaa;
}
- void setBlendState(D3D12_BLEND_DESC& desc, uint64_t _state, uint32_t _rgba = 0)
+ void setBlendState(D3D12_BLEND_DESC& _desc, uint64_t _state, uint32_t _rgba = 0)
{
- memset(&desc, 0, sizeof(desc) );
- desc.IndependentBlendEnable = !!(BGFX_STATE_BLEND_INDEPENDENT & _state);
+ _desc.AlphaToCoverageEnable = false;
+ _desc.IndependentBlendEnable = !!(BGFX_STATE_BLEND_INDEPENDENT & _state);
- D3D12_RENDER_TARGET_BLEND_DESC* drt = &desc.RenderTarget[0];
- drt->BlendEnable = !!(BGFX_STATE_BLEND_MASK & _state);
+ D3D12_RENDER_TARGET_BLEND_DESC* drt = &_desc.RenderTarget[0];
+ drt->BlendEnable = !!(BGFX_STATE_BLEND_MASK & _state);
+ drt->LogicOpEnable = false;
{
const uint32_t blend = uint32_t( (_state & BGFX_STATE_BLEND_MASK ) >> BGFX_STATE_BLEND_SHIFT);
@@ -1983,14 +2006,16 @@ data.NumQualityLevels = 0;
: 0
;
+ drt->LogicOp = D3D12_LOGIC_OP_CLEAR;
drt->RenderTargetWriteMask = writeMask;
- if (desc.IndependentBlendEnable)
+ if (_desc.IndependentBlendEnable)
{
for (uint32_t ii = 1, rgba = _rgba; ii < BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS; ++ii, rgba >>= 11)
{
- drt = &desc.RenderTarget[ii];
+ drt = &_desc.RenderTarget[ii];
drt->BlendEnable = 0 != (rgba & 0x7ff);
+ drt->LogicOpEnable = false;
const uint32_t src = (rgba ) & 0xf;
const uint32_t dst = (rgba >> 4) & 0xf;
@@ -2004,6 +2029,7 @@ data.NumQualityLevels = 0;
drt->DestBlendAlpha = s_blendFactor[dst][1];
drt->BlendOpAlpha = s_blendEquation[equation];
+ drt->LogicOp = D3D12_LOGIC_OP_CLEAR;
drt->RenderTargetWriteMask = writeMask;
}
}
@@ -2011,61 +2037,61 @@ data.NumQualityLevels = 0;
{
for (uint32_t ii = 1; ii < BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS; ++ii)
{
- memcpy(&desc.RenderTarget[ii], drt, sizeof(D3D12_RENDER_TARGET_BLEND_DESC) );
+ memcpy(&_desc.RenderTarget[ii], drt, sizeof(D3D12_RENDER_TARGET_BLEND_DESC) );
}
}
}
- void setRasterizerState(D3D12_RASTERIZER_DESC& desc, uint64_t _state, bool _wireframe = false)
+ void setRasterizerState(D3D12_RASTERIZER_DESC& _desc, uint64_t _state, bool _wireframe = false)
{
const uint32_t cull = (_state&BGFX_STATE_CULL_MASK) >> BGFX_STATE_CULL_SHIFT;
- desc.FillMode = _wireframe
+ _desc.FillMode = _wireframe
? D3D12_FILL_MODE_WIREFRAME
: D3D12_FILL_MODE_SOLID
;
- desc.CullMode = s_cullMode[cull];
- desc.FrontCounterClockwise = false;
- desc.DepthBias = 0;
- desc.DepthBiasClamp = 0.0f;
- desc.SlopeScaledDepthBias = 0.0f;
- desc.DepthClipEnable = !m_depthClamp;
- desc.MultisampleEnable = !!(_state&BGFX_STATE_MSAA);
- desc.AntialiasedLineEnable = false;
- desc.ForcedSampleCount = 0;
- desc.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF;
+ _desc.CullMode = s_cullMode[cull];
+ _desc.FrontCounterClockwise = false;
+ _desc.DepthBias = 0;
+ _desc.DepthBiasClamp = 0.0f;
+ _desc.SlopeScaledDepthBias = 0.0f;
+ _desc.DepthClipEnable = !m_depthClamp;
+ _desc.MultisampleEnable = !!(_state&BGFX_STATE_MSAA);
+ _desc.AntialiasedLineEnable = false;
+ _desc.ForcedSampleCount = 0;
+ _desc.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF;
}
- void setDepthStencilState(D3D12_DEPTH_STENCIL_DESC& desc, uint64_t _state, uint64_t _stencil = 0)
+ void setDepthStencilState(D3D12_DEPTH_STENCIL_DESC& _desc, uint64_t _state, uint64_t _stencil = 0)
{
const uint32_t fstencil = unpackStencil(0, _stencil);
- memset(&desc, 0, sizeof(desc) );
+ memset(&_desc, 0, sizeof(_desc) );
uint32_t func = (_state&BGFX_STATE_DEPTH_TEST_MASK)>>BGFX_STATE_DEPTH_TEST_SHIFT;
- desc.DepthEnable = 0 != func;
- desc.DepthWriteMask = !!(BGFX_STATE_DEPTH_WRITE & _state)
+ _desc.DepthEnable = 0 != func;
+ _desc.DepthWriteMask = !!(BGFX_STATE_DEPTH_WRITE & _state)
? D3D12_DEPTH_WRITE_MASK_ALL
: D3D12_DEPTH_WRITE_MASK_ZERO
;
- desc.DepthFunc = s_cmpFunc[func];
+ _desc.DepthFunc = s_cmpFunc[func];
uint32_t bstencil = unpackStencil(1, _stencil);
uint32_t frontAndBack = bstencil != BGFX_STENCIL_NONE && bstencil != fstencil;
bstencil = frontAndBack ? bstencil : fstencil;
- desc.StencilEnable = 0 != _stencil;
- desc.StencilReadMask = (fstencil & BGFX_STENCIL_FUNC_RMASK_MASK) >> BGFX_STENCIL_FUNC_RMASK_SHIFT;
- desc.StencilWriteMask = 0xff;
+ _desc.StencilEnable = 0 != _stencil;
+ _desc.StencilReadMask = (fstencil & BGFX_STENCIL_FUNC_RMASK_MASK) >> BGFX_STENCIL_FUNC_RMASK_SHIFT;
+ _desc.StencilWriteMask = 0xff;
- desc.FrontFace.StencilFailOp = s_stencilOp[(fstencil & BGFX_STENCIL_OP_FAIL_S_MASK) >> BGFX_STENCIL_OP_FAIL_S_SHIFT];
- desc.FrontFace.StencilDepthFailOp = s_stencilOp[(fstencil & BGFX_STENCIL_OP_FAIL_Z_MASK) >> BGFX_STENCIL_OP_FAIL_Z_SHIFT];
- desc.FrontFace.StencilPassOp = s_stencilOp[(fstencil & BGFX_STENCIL_OP_PASS_Z_MASK) >> BGFX_STENCIL_OP_PASS_Z_SHIFT];
- desc.FrontFace.StencilFunc = s_cmpFunc[(fstencil & BGFX_STENCIL_TEST_MASK) >> BGFX_STENCIL_TEST_SHIFT];
+ _desc.FrontFace.StencilFailOp = s_stencilOp[(fstencil & BGFX_STENCIL_OP_FAIL_S_MASK) >> BGFX_STENCIL_OP_FAIL_S_SHIFT];
+ _desc.FrontFace.StencilDepthFailOp = s_stencilOp[(fstencil & BGFX_STENCIL_OP_FAIL_Z_MASK) >> BGFX_STENCIL_OP_FAIL_Z_SHIFT];
+ _desc.FrontFace.StencilPassOp = s_stencilOp[(fstencil & BGFX_STENCIL_OP_PASS_Z_MASK) >> BGFX_STENCIL_OP_PASS_Z_SHIFT];
+ _desc.FrontFace.StencilFunc = s_cmpFunc[(fstencil & BGFX_STENCIL_TEST_MASK) >> BGFX_STENCIL_TEST_SHIFT];
- desc.BackFace.StencilFailOp = s_stencilOp[(bstencil & BGFX_STENCIL_OP_FAIL_S_MASK) >> BGFX_STENCIL_OP_FAIL_S_SHIFT];
- desc.BackFace.StencilDepthFailOp = s_stencilOp[(bstencil & BGFX_STENCIL_OP_FAIL_Z_MASK) >> BGFX_STENCIL_OP_FAIL_Z_SHIFT];
- desc.BackFace.StencilPassOp = s_stencilOp[(bstencil & BGFX_STENCIL_OP_PASS_Z_MASK) >> BGFX_STENCIL_OP_PASS_Z_SHIFT];
- desc.BackFace.StencilFunc = s_cmpFunc[(bstencil&BGFX_STENCIL_TEST_MASK) >> BGFX_STENCIL_TEST_SHIFT];
+ _desc.BackFace.StencilFailOp = s_stencilOp[(bstencil & BGFX_STENCIL_OP_FAIL_S_MASK) >> BGFX_STENCIL_OP_FAIL_S_SHIFT];
+ _desc.BackFace.StencilDepthFailOp = s_stencilOp[(bstencil & BGFX_STENCIL_OP_FAIL_Z_MASK) >> BGFX_STENCIL_OP_FAIL_Z_SHIFT];
+ _desc.BackFace.StencilPassOp = s_stencilOp[(bstencil & BGFX_STENCIL_OP_PASS_Z_MASK) >> BGFX_STENCIL_OP_PASS_Z_SHIFT];
+ _desc.BackFace.StencilFunc = s_cmpFunc[(bstencil&BGFX_STENCIL_TEST_MASK) >> BGFX_STENCIL_TEST_SHIFT];
}
uint32_t setInputLayout(D3D12_INPUT_ELEMENT_DESC* _vertexElements, const VertexDecl& _vertexDecl, const ProgramD3D12& _program, uint8_t _numInstanceData)
@@ -2230,7 +2256,8 @@ data.NumQualityLevels = 0;
bx::StaticMemoryBlockWriter wr(temp->data, temp->size);
DxbcContext dxbc;
- read(&rd, dxbc);
+ bx::Error err;
+ read(&rd, dxbc, &err);
bool patchShader = true;
if (BX_ENABLED(BGFX_CONFIG_DEBUG) )
@@ -2238,7 +2265,7 @@ data.NumQualityLevels = 0;
union { uint32_t offset; void* ptr; } cast = { 0 };
filter(dxbc.shader, dxbc.shader, patchCb0, cast.ptr);
- write(&wr, dxbc);
+ write(&wr, dxbc, &err);
dxbcHash(temp->data + 20, temp->size - 20, temp->data + 4);
@@ -2272,7 +2299,7 @@ data.NumQualityLevels = 0;
uint32_t(program.m_vsh->m_size)/16
};
filter(dxbc.shader, dxbc.shader, patchCb0, cast.ptr);
- write(&wr, dxbc);
+ write(&wr, dxbc, &err);
dxbcHash(temp->data + 20, temp->size - 20, temp->data + 4);
desc.PS.pShaderBytecode = temp->data;
@@ -2616,21 +2643,27 @@ data.NumQualityLevels = 0;
void* m_dxgidll;
D3D_DRIVER_TYPE m_driverType;
- IDXGIAdapter3* m_adapter;
DXGI_ADAPTER_DESC m_adapterDesc;
D3D12_FEATURE_DATA_ARCHITECTURE m_architecture;
D3D12_FEATURE_DATA_D3D12_OPTIONS m_options;
- IDXGIFactory4* m_factory;
-
+#if BX_PLATFORM_WINDOWS
+ IDXGIAdapter3* m_adapter;
+ IDXGIFactory4* m_factory;
IDXGISwapChain3* m_swapChain;
+ ID3D12InfoQueue* m_infoQueue;
+#else
+ IDXGIAdapter* m_adapter;
+ IDXGIFactory2* m_factory;
+ IDXGISwapChain1* m_swapChain;
+#endif // BX_PLATFORM_WINDOWS
+
int64_t m_presentElapsed;
uint16_t m_lost;
uint16_t m_numWindows;
FrameBufferHandle m_windows[BGFX_CONFIG_MAX_FRAME_BUFFERS];
ID3D12Device* m_device;
- ID3D12InfoQueue* m_infoQueue;
TimerQueryD3D12 m_gpuTimer;
OcclusionQueryD3D12 m_occlusionQuery;
@@ -3718,7 +3751,7 @@ data.NumQualityLevels = 0;
uint16_t shaderSize;
bx::read(&reader, shaderSize);
- const DWORD* code = (const DWORD*)reader.getDataPtr();
+ const void* code = reader.getDataPtr();
bx::skip(&reader, shaderSize+1);
m_code = copy(code, shaderSize);
@@ -3769,18 +3802,10 @@ data.NumQualityLevels = 0;
m_width = textureWidth;
m_height = textureHeight;
m_depth = imageContainer.m_depth;
- m_requestedFormat = (uint8_t)imageContainer.m_format;
- m_textureFormat = (uint8_t)imageContainer.m_format;
-
- const TextureFormatInfo& tfi = s_textureFormat[m_requestedFormat];
- const bool convert = DXGI_FORMAT_UNKNOWN == tfi.m_fmt;
-
- uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
- if (convert)
- {
- m_textureFormat = (uint8_t)TextureFormat::BGRA8;
- bpp = 32;
- }
+ m_requestedFormat = uint8_t(imageContainer.m_format);
+ m_textureFormat = uint8_t(getViableTextureFormat(imageContainer) );
+ const bool convert = m_textureFormat != m_requestedFormat;
+ const uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
if (imageContainer.m_cubeMap)
{
@@ -4578,7 +4603,9 @@ data.NumQualityLevels = 0;
uint32_t statsNumIndices = 0;
uint32_t statsKeyType[2] = {};
+#if BX_PLATFORM_WINDOWS
m_backBufferColorIdx = m_swapChain->GetCurrentBackBufferIndex();
+#endif // BX_PLATFORM_WINDOWS
const uint64_t f0 = BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_FACTOR, BGFX_STATE_BLEND_FACTOR);
const uint64_t f1 = BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_INV_FACTOR, BGFX_STATE_BLEND_INV_FACTOR);
@@ -4992,7 +5019,7 @@ data.NumQualityLevels = 0;
|| 0 != changedStencil
|| (hasFactor && blendFactor != draw.m_rgba)
|| (0 != (BGFX_STATE_PT_MASK & changedFlags)
- || prim.m_toplogy != s_primInfo[primIndex].m_toplogy)
+ || prim.m_topology != s_primInfo[primIndex].m_topology)
|| currentState.m_scissor != scissor
|| pso != currentPso
|| hasOcclusionQuery)
@@ -5083,12 +5110,12 @@ data.NumQualityLevels = 0;
}
if (0 != (BGFX_STATE_PT_MASK & changedFlags)
- || prim.m_toplogy != s_primInfo[primIndex].m_toplogy)
+ || prim.m_topology != s_primInfo[primIndex].m_topology)
{
const uint64_t pt = newFlags&BGFX_STATE_PT_MASK;
primIndex = uint8_t(pt>>BGFX_STATE_PT_SHIFT);
prim = s_primInfo[primIndex];
- m_commandList->IASetPrimitiveTopology(prim.m_toplogy);
+ m_commandList->IASetPrimitiveTopology(prim.m_topology);
}
if (currentState.m_scissor != scissor)
@@ -5272,6 +5299,7 @@ data.NumQualityLevels = 0;
, processMemoryUsed
);
+#if BX_PLATFORM_WINDOWS
DXGI_QUERY_VIDEO_MEMORY_INFO memInfo;
DX_CHECK(m_adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_LOCAL, &memInfo) );
@@ -5293,6 +5321,7 @@ data.NumQualityLevels = 0;
, availableForReservation
, currentReservation
);
+#endif // BX_PLATFORM_WINDOWS
pos = 10;
tvm.printf(10, pos++, 0x8e, " Frame: % 7.3f, % 7.3f \x1f, % 7.3f \x1e [ms] / % 6.2f FPS "
diff --git a/3rdparty/bgfx/src/renderer_d3d12.h b/3rdparty/bgfx/src/renderer_d3d12.h
index 39f165a03da..e78e0c52b62 100644
--- a/3rdparty/bgfx/src/renderer_d3d12.h
+++ b/3rdparty/bgfx/src/renderer_d3d12.h
@@ -6,10 +6,14 @@
#ifndef BGFX_RENDERER_D3D12_H_HEADER_GUARD
#define BGFX_RENDERER_D3D12_H_HEADER_GUARD
-#define USE_D3D12_DYNAMIC_LIB 1
+#define USE_D3D12_DYNAMIC_LIB BX_PLATFORM_WINDOWS
#include <sal.h>
-#include <d3d12.h>
+#if BX_PLATFORM_XBOXONE
+# include <d3d12_x.h>
+#else
+# include <d3d12.h>
+#endif // BX_PLATFORM_XBOXONE
#if defined(__MINGW32__) // BK - temp workaround for MinGW until I nuke d3dx12 usage.
extern "C++" {
@@ -27,10 +31,20 @@ extern "C++" {
BX_PRAGMA_DIAGNOSTIC_PUSH();
BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wmissing-field-initializers");
-#include <d3dx12.h>
+#if BX_PLATFORM_XBOXONE
+# include <d3dx12_x.h>
+#else
+# include <d3dx12.h>
+#endif // BX_PLATFORM_XBOXONE
BX_PRAGMA_DIAGNOSTIC_POP();
-#include <dxgi1_4.h>
+#if BX_PLATFORM_WINDOWS
+# include <dxgi1_4.h>
+#endif // BX_PLATFORM_WINDOWS
+
+#ifndef D3D12_TEXTURE_DATA_PITCH_ALIGNMENT
+# define D3D12_TEXTURE_DATA_PITCH_ALIGNMENT 1024
+#endif // D3D12_TEXTURE_DATA_PITCH_ALIGNMENT
#include "renderer.h"
#include "renderer_d3d.h"
@@ -173,7 +187,6 @@ namespace bgfx { namespace d3d12
}
void create(const Memory* _mem);
- DWORD* getShaderCode(uint8_t _fragmentBit, const Memory* _mem);
void destroy()
{
diff --git a/3rdparty/bgfx/src/renderer_d3d9.cpp b/3rdparty/bgfx/src/renderer_d3d9.cpp
index 919a952260b..8b52ff2d6b6 100644
--- a/3rdparty/bgfx/src/renderer_d3d9.cpp
+++ b/3rdparty/bgfx/src/renderer_d3d9.cpp
@@ -215,6 +215,10 @@ namespace bgfx { namespace d3d9
{ D3DFMT_UNKNOWN }, // RG32I
{ D3DFMT_UNKNOWN }, // RG32U
{ D3DFMT_G32R32F }, // RG32F
+ { D3DFMT_UNKNOWN }, // RGB8
+ { D3DFMT_UNKNOWN }, // RGB8I
+ { D3DFMT_UNKNOWN }, // RGB8U
+ { D3DFMT_UNKNOWN }, // RGB8S
{ D3DFMT_UNKNOWN }, // RGB9E5F
{ D3DFMT_A8R8G8B8 }, // BGRA8
{ D3DFMT_UNKNOWN }, // RGBA8
@@ -340,10 +344,10 @@ namespace bgfx { namespace d3d9
m_params.BackBufferHeight = rect.bottom-rect.top;
m_d3d9dll = bx::dlopen("d3d9.dll");
- BX_WARN(NULL != m_d3d9dll, "Failed to load d3d9.dll.");
if (NULL == m_d3d9dll)
{
+ BX_TRACE("Failed to load d3d9.dll.");
goto error;
}
@@ -370,16 +374,25 @@ namespace bgfx { namespace d3d9
&& NULL != Direct3DCreate9Ex)
{
Direct3DCreate9Ex(D3D_SDK_VERSION, &m_d3d9ex);
- DX_CHECK(m_d3d9ex->QueryInterface(IID_IDirect3D9, (void**)&m_d3d9) );
- m_pool = D3DPOOL_DEFAULT;
+ HRESULT hr = m_d3d9ex->QueryInterface(IID_IDirect3D9, (void**)&m_d3d9);
+ if (FAILED(hr) )
+ {
+ BX_TRACE("Failed to query D3D9 interface 0x%08x.", hr);
+ DX_RELEASE(m_d3d9ex, 0);
+ }
+ else
+ {
+ m_pool = D3DPOOL_DEFAULT;
+ }
}
- else
+
+ if (NULL == m_d3d9)
{
Direct3DCreate9 = (Direct3DCreate9Fn)bx::dlsym(m_d3d9dll, "Direct3DCreate9");
- BX_WARN(NULL != Direct3DCreate9, "Function Direct3DCreate9 not found.");
if (NULL == Direct3DCreate9)
{
+ BX_TRACE("Function Direct3DCreate9 not found.");
goto error;
}
@@ -387,10 +400,9 @@ namespace bgfx { namespace d3d9
m_pool = D3DPOOL_MANAGED;
}
- BX_WARN(NULL != m_d3d9, "Unable to create Direct3D.");
-
if (NULL == m_d3d9)
{
+ BX_TRACE("Unable to create Direct3D.");
goto error;
}
@@ -487,10 +499,9 @@ namespace bgfx { namespace d3d9
}
}
- BX_WARN(NULL != m_device, "Unable to create Direct3D9 device.");
-
if (NULL == m_device)
{
+ BX_TRACE("Unable to create Direct3D9 device.");
goto error;
}
@@ -1317,21 +1328,30 @@ namespace bgfx { namespace d3d9
// If frame buffer has only depth attachment D3DFMT_NULL
// render target is created.
- uint32_t fbnum = bx::uint32_max(1, frameBuffer.m_num);
+ const uint32_t fbnum = bx::uint32_max(2, frameBuffer.m_numTh);
+ const uint8_t dsIdx = frameBuffer.m_dsIdx;
+ DX_CHECK(m_device->SetDepthStencilSurface(UINT8_MAX == dsIdx
+ ? m_backBufferDepthStencil
+ : frameBuffer.m_surface[dsIdx]
+ ) );
+
+ uint32_t rtIdx = 0;
for (uint32_t ii = 0; ii < fbnum; ++ii)
{
- DX_CHECK(m_device->SetRenderTarget(ii, frameBuffer.m_color[ii]) );
+ IDirect3DSurface9* surface = frameBuffer.m_surface[ii];
+ if (ii != dsIdx)
+ {
+ DX_CHECK(m_device->SetRenderTarget(rtIdx, surface) );
+ ++rtIdx;
+ }
}
- for (uint32_t ii = fbnum, num = g_caps.maxFBAttachments; ii < num; ++ii)
+ for (uint32_t ii = rtIdx, num = g_caps.maxFBAttachments; ii < num; ++ii)
{
DX_CHECK(m_device->SetRenderTarget(ii, NULL) );
}
- IDirect3DSurface9* depthStencil = frameBuffer.m_depthStencil;
- DX_CHECK(m_device->SetDepthStencilSurface(NULL != depthStencil ? depthStencil : m_backBufferDepthStencil) );
-
DX_CHECK(m_device->SetRenderState(D3DRS_SRGBWRITEENABLE, FALSE) );
}
@@ -2819,16 +2839,11 @@ namespace bgfx { namespace d3d9
m_height = textureHeight;
m_depth = imageContainer.m_depth;
m_numMips = numMips;
- m_requestedFormat =
- m_textureFormat = uint8_t(imageContainer.m_format);
+ m_requestedFormat = uint8_t(imageContainer.m_format);
+ m_textureFormat = uint8_t(getViableTextureFormat(imageContainer) );
+ const bool convert = m_textureFormat != m_requestedFormat;
- const TextureFormatInfo& tfi = s_textureFormat[m_requestedFormat];
uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
- if (D3DFMT_UNKNOWN == tfi.m_fmt)
- {
- m_textureFormat = (uint8_t)TextureFormat::BGRA8;
- bpp = 32;
- }
if (imageContainer.m_cubeMap)
{
@@ -2871,8 +2886,6 @@ namespace bgfx { namespace d3d9
&& imageContainer.m_format != TextureFormat::BC5
;
- const bool convert = m_textureFormat != m_requestedFormat;
-
for (uint8_t side = 0, numSides = imageContainer.m_cubeMap ? 6 : 1; side < numSides; ++side)
{
uint32_t width = textureWidth;
@@ -2925,7 +2938,20 @@ namespace bgfx { namespace d3d9
else
{
uint32_t size = useMipSize ? mip.m_size : mipSize;
- memcpy(bits, mip.m_data, size);
+ switch (m_textureFormat)
+ {
+ case TextureFormat::RGB5A1:
+ imageConvert(bits, 16, packBgr5a1, mip.m_data, unpackRgb5a1, size);
+ break;
+
+ case TextureFormat::RGBA4:
+ imageConvert(bits, 16, packBgra4, mip.m_data, unpackRgba4, size);
+ break;
+
+ default:
+ memcpy(bits, mip.m_data, size);
+ break;
+ }
}
unlock(side, lod);
@@ -2974,7 +3000,20 @@ namespace bgfx { namespace d3d9
uint8_t* dst = bits;
for (uint32_t yy = 0, height = _rect.m_height; yy < height; ++yy)
{
- memcpy(dst, src, rectpitch);
+ switch (m_textureFormat)
+ {
+ case TextureFormat::RGB5A1:
+ imageConvert(dst, 16, packBgr5a1, src, unpackRgb5a1, rectpitch);
+ break;
+
+ case TextureFormat::RGBA4:
+ imageConvert(dst, 16, packBgra4, src, unpackRgba4, rectpitch);
+ break;
+
+ default:
+ memcpy(dst, src, rectpitch);
+ break;
+ }
src += srcpitch;
dst += dstpitch;
}
@@ -3064,50 +3103,53 @@ namespace bgfx { namespace d3d9
void FrameBufferD3D9::create(uint8_t _num, const Attachment* _attachment)
{
- for (uint32_t ii = 0; ii < BX_COUNTOF(m_color); ++ii)
+ for (uint32_t ii = 0; ii < BX_COUNTOF(m_surface); ++ii)
{
- m_color[ii] = NULL;
+ m_surface[ii] = NULL;
}
- m_depthStencil = NULL;
- m_num = 0;
+ m_dsIdx = UINT8_MAX;
+ m_num = 0;
+ m_numTh = _num;
m_needResolve = false;
+ memcpy(m_attachment, _attachment, _num*sizeof(Attachment) );
+
for (uint32_t ii = 0; ii < _num; ++ii)
{
- TextureHandle handle = _attachment[ii].handle;
+ TextureHandle handle = m_attachment[ii].handle;
if (isValid(handle) )
{
const TextureD3D9& texture = s_renderD3D9->m_textures[handle.idx];
+ if (NULL != texture.m_surface)
+ {
+ m_surface[ii] = texture.m_surface;
+ m_surface[ii]->AddRef();
+ }
+ else
+ {
+ m_surface[ii] = texture.getSurface(uint8_t(m_attachment[ii].layer), uint8_t(m_attachment[ii].mip) );
+ }
+
+ if (0 == m_num)
+ {
+ m_width = texture.m_width;
+ m_height = texture.m_height;
+ }
+
if (isDepth( (TextureFormat::Enum)texture.m_textureFormat) )
{
- m_depthHandle = handle;
- if (NULL != texture.m_surface)
- {
- m_depthStencil = texture.m_surface;
- m_depthStencil->AddRef();
- }
- else
- {
- m_depthStencil = texture.getSurface();
- }
+ m_dsIdx = uint8_t(ii);
}
else
{
- m_colorHandle[m_num] = handle;
- if (NULL != texture.m_surface)
- {
- m_color[m_num] = texture.m_surface;
- m_color[m_num]->AddRef();
- }
- else
- {
- m_color[m_num] = texture.getSurface(uint8_t(_attachment[ii].layer) );
- }
- m_num++;
+ ++m_num;
}
- m_needResolve |= (NULL != texture.m_surface) && (NULL != texture.m_texture2d);
+ m_needResolve |= true
+ && (NULL != texture.m_surface)
+ && (NULL != texture.m_texture2d)
+ ;
}
}
@@ -3132,7 +3174,7 @@ namespace bgfx { namespace d3d9
params.BackBufferHeight = m_height;
DX_CHECK(s_renderD3D9->m_device->CreateAdditionalSwapChain(&params, &m_swapChain) );
- DX_CHECK(m_swapChain->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &m_color[0]) );
+ DX_CHECK(m_swapChain->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &m_surface[0]) );
DX_CHECK(s_renderD3D9->m_device->CreateDepthStencilSurface(
params.BackBufferWidth
@@ -3141,11 +3183,11 @@ namespace bgfx { namespace d3d9
, params.MultiSampleType
, params.MultiSampleQuality
, FALSE
- , &m_depthStencil
+ , &m_surface[1]
, NULL
) );
- m_colorHandle[0].idx = invalidHandle;
+ m_dsIdx = 1;
m_denseIdx = _denseIdx;
m_num = 1;
m_needResolve = false;
@@ -3155,44 +3197,29 @@ namespace bgfx { namespace d3d9
{
if (NULL != m_hwnd)
{
- DX_RELEASE(m_depthStencil, 0);
- DX_RELEASE(m_color[0], 0);
- DX_RELEASE(m_swapChain, 0);
+ DX_RELEASE(m_surface[0], 0);
+ DX_RELEASE(m_surface[1], 0);
+ DX_RELEASE(m_swapChain, 0);
}
else
{
- for (uint32_t ii = 0, num = m_num; ii < num; ++ii)
- {
- m_colorHandle[ii].idx = invalidHandle;
+ uint32_t num = m_numTh;
+ num += uint32_t(0 < m_numTh && 0 == m_num);
- IDirect3DSurface9* ptr = m_color[ii];
+ for (uint32_t ii = 0; ii < num; ++ii)
+ {
+ IDirect3DSurface9* ptr = m_surface[ii];
if (NULL != ptr)
{
ptr->Release();
- m_color[ii] = NULL;
+ m_surface[ii] = NULL;
}
}
-
- if (NULL != m_depthStencil)
- {
- if (0 == m_num)
- {
- IDirect3DSurface9* ptr = m_color[0];
- if (NULL != ptr)
- {
- ptr->Release();
- m_color[0] = NULL;
- }
- }
-
- m_depthStencil->Release();
- m_depthStencil = NULL;
- }
}
- m_hwnd = NULL;
- m_num = 0;
- m_depthHandle.idx = invalidHandle;
+ m_hwnd = NULL;
+ m_num = 0;
+ m_numTh = 0;
uint16_t denseIdx = m_denseIdx;
m_denseIdx = UINT16_MAX;
@@ -3209,15 +3236,9 @@ namespace bgfx { namespace d3d9
{
if (m_needResolve)
{
- if (isValid(m_depthHandle) )
- {
- const TextureD3D9& texture = s_renderD3D9->m_textures[m_depthHandle.idx];
- texture.resolve();
- }
-
- for (uint32_t ii = 0, num = m_num; ii < num; ++ii)
+ for (uint32_t ii = 0, num = m_numTh; ii < num; ++ii)
{
- const TextureD3D9& texture = s_renderD3D9->m_textures[m_colorHandle[ii].idx];
+ const TextureD3D9& texture = s_renderD3D9->m_textures[m_attachment[ii].handle.idx];
texture.resolve();
}
}
@@ -3227,28 +3248,19 @@ namespace bgfx { namespace d3d9
{
if (NULL != m_hwnd)
{
- DX_RELEASE(m_color[0], 0);
- DX_RELEASE(m_depthStencil, 0);
+ DX_RELEASE(m_surface[0], 0);
+ DX_RELEASE(m_surface[1], 0);
DX_RELEASE(m_swapChain, 0);
}
else
{
- for (uint32_t ii = 0, num = m_num; ii < num; ++ii)
- {
- m_color[ii]->Release();
- m_color[ii] = NULL;
- }
+ uint32_t num = m_numTh;
+ num += uint32_t(0 < m_numTh && 0 == m_num);
- if (isValid(m_depthHandle) )
+ for (uint32_t ii = 0; ii < num; ++ii)
{
- if (0 == m_num)
- {
- m_color[0]->Release();
- m_color[0] = NULL;
- }
-
- m_depthStencil->Release();
- m_depthStencil = NULL;
+ m_surface[ii]->Release();
+ m_surface[ii] = NULL;
}
}
}
@@ -3263,69 +3275,55 @@ namespace bgfx { namespace d3d9
params.BackBufferHeight = m_height;
DX_CHECK(s_renderD3D9->m_device->CreateAdditionalSwapChain(&params, &m_swapChain) );
- DX_CHECK(m_swapChain->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &m_color[0]) );
+ DX_CHECK(m_swapChain->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &m_surface[0]) );
DX_CHECK(s_renderD3D9->m_device->CreateDepthStencilSurface(params.BackBufferWidth
, params.BackBufferHeight
, params.AutoDepthStencilFormat
, params.MultiSampleType
, params.MultiSampleQuality
, FALSE
- , &m_depthStencil
+ , &m_surface[1]
, NULL
) );
}
- else
+ else if (0 < m_numTh)
{
- for (uint32_t ii = 0, num = m_num; ii < num; ++ii)
+ for (uint32_t ii = 0, num = m_numTh; ii < num; ++ii)
{
- TextureHandle th = m_colorHandle[ii];
+ TextureHandle th = m_attachment[ii].handle;
if (isValid(th) )
{
TextureD3D9& texture = s_renderD3D9->m_textures[th.idx];
if (NULL != texture.m_surface)
{
- m_color[ii] = texture.m_surface;
- m_color[ii]->AddRef();
+ m_surface[ii] = texture.m_surface;
+ m_surface[ii]->AddRef();
}
else
{
- m_color[ii] = texture.getSurface();
+ m_surface[ii] = texture.getSurface(uint8_t(m_attachment[ii].layer), uint8_t(m_attachment[ii].mip) );
}
}
}
- if (isValid(m_depthHandle) )
+ if (0 == m_num)
{
- TextureD3D9& texture = s_renderD3D9->m_textures[m_depthHandle.idx];
- if (NULL != texture.m_surface)
- {
- m_depthStencil = texture.m_surface;
- m_depthStencil->AddRef();
- }
- else
- {
- m_depthStencil = texture.getSurface();
- }
-
- if (0 == m_num)
- {
- createNullColorRT();
- }
+ createNullColorRT();
}
}
}
void FrameBufferD3D9::createNullColorRT()
{
- const TextureD3D9& texture = s_renderD3D9->m_textures[m_depthHandle.idx];
- DX_CHECK(s_renderD3D9->m_device->CreateRenderTarget(texture.m_width
- , texture.m_height
+ DX_CHECK(s_renderD3D9->m_device->CreateRenderTarget(
+ m_width
+ , m_height
, D3DFMT_NULL
, D3DMULTISAMPLE_NONE
, 0
, false
- , &m_color[0]
+ , &m_surface[1]
, NULL
) );
}
diff --git a/3rdparty/bgfx/src/renderer_d3d9.h b/3rdparty/bgfx/src/renderer_d3d9.h
index 0b0e030dc5c..e93022ae660 100644
--- a/3rdparty/bgfx/src/renderer_d3d9.h
+++ b/3rdparty/bgfx/src/renderer_d3d9.h
@@ -236,7 +236,6 @@ namespace bgfx { namespace d3d9
}
void create(const Memory* _mem);
- DWORD* getShaderCode(uint8_t _fragmentBit, const Memory* _mem);
void destroy()
{
@@ -383,10 +382,11 @@ namespace bgfx { namespace d3d9
FrameBufferD3D9()
: m_hwnd(NULL)
, m_denseIdx(UINT16_MAX)
- , m_num(0)
, m_needResolve(0)
+ , m_num(0)
+ , m_numTh(0)
+ , m_dsIdx(UINT8_MAX)
{
- m_depthHandle.idx = invalidHandle;
}
void create(uint8_t _num, const Attachment* _attachment);
@@ -398,18 +398,18 @@ namespace bgfx { namespace d3d9
void postReset();
void createNullColorRT();
- IDirect3DSurface9* m_color[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS-1];
- IDirect3DSurface9* m_depthStencil;
+ IDirect3DSurface9* m_surface[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS-1];
IDirect3DSwapChain9* m_swapChain;
HWND m_hwnd;
uint32_t m_width;
uint32_t m_height;
- TextureHandle m_colorHandle[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS-1];
- TextureHandle m_depthHandle;
+ Attachment m_attachment[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
uint16_t m_denseIdx;
- uint8_t m_num;
bool m_needResolve;
+ uint8_t m_num;
+ uint8_t m_numTh;
+ uint8_t m_dsIdx;
};
struct TimerQueryD3D9
diff --git a/3rdparty/bgfx/src/renderer_gl.cpp b/3rdparty/bgfx/src/renderer_gl.cpp
index 0feccaf9680..7fc65a3dbd8 100644
--- a/3rdparty/bgfx/src/renderer_gl.cpp
+++ b/3rdparty/bgfx/src/renderer_gl.cpp
@@ -246,6 +246,10 @@ namespace bgfx { namespace gl
{ GL_RG32I, GL_ZERO, GL_RG, GL_INT, false }, // RG32I
{ GL_RG32UI, GL_ZERO, GL_RG, GL_UNSIGNED_INT, false }, // RG32U
{ GL_RG32F, GL_ZERO, GL_RG, GL_FLOAT, false }, // RG32F
+ { GL_RGB8, GL_SRGB8, GL_RGB, GL_UNSIGNED_BYTE, false }, // RGB8
+ { GL_RGB8I, GL_ZERO, GL_RGB, GL_BYTE, false }, // RGB8I
+ { GL_RGB8UI, GL_ZERO, GL_RGB, GL_UNSIGNED_BYTE, false }, // RGB8U
+ { GL_RGB8_SNORM, GL_ZERO, GL_RGB, GL_BYTE, false }, // RGB8S
{ GL_RGB9_E5, GL_ZERO, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV, false }, // RGB9E5F
{ GL_RGBA8, GL_SRGB8_ALPHA8, GL_BGRA, GL_UNSIGNED_BYTE, false }, // BGRA8
{ GL_RGBA8, GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, false }, // RGBA8
@@ -260,7 +264,7 @@ namespace bgfx { namespace gl
{ GL_RGBA32I, GL_ZERO, GL_RGBA, GL_INT, false }, // RGBA32I
{ GL_RGBA32UI, GL_ZERO, GL_RGBA, GL_UNSIGNED_INT, false }, // RGBA32U
{ GL_RGBA32F, GL_ZERO, GL_RGBA, GL_FLOAT, false }, // RGBA32F
- { GL_RGB565, GL_ZERO, GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV, false }, // R5G6B5
+ { GL_RGB565, GL_ZERO, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, false }, // R5G6B5
{ GL_RGBA4, GL_ZERO, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4_REV, false }, // RGBA4
{ GL_RGB5_A1, GL_ZERO, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV, false }, // RGB5A1
{ GL_RGB10_A2, GL_ZERO, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV, false }, // RGB10A2
@@ -325,6 +329,10 @@ namespace bgfx { namespace gl
GL_RG32I, // RG32I
GL_RG32UI, // RG32U
GL_RG32F, // RG32F
+ GL_RGB8, // RGB8
+ GL_RGB8I, // RGB8I
+ GL_RGB8UI, // RGB8UI
+ GL_RGB8_SNORM, // RGB8S
GL_RGB9_E5, // RGB9E5F
GL_RGBA8, // BGRA8
GL_RGBA8, // RGBA8
@@ -402,6 +410,10 @@ namespace bgfx { namespace gl
GL_RG32I, // RG32I
GL_RG32UI, // RG32U
GL_RG32F, // RG32F
+ GL_RGB8, // RGB8
+ GL_RGB8I, // RGB8I
+ GL_RGB8UI, // RGB8UI
+ GL_RGB8_SNORM, // RGB8S
GL_RGB9_E5, // RGB9E5F
GL_RGBA8, // BGRA8
GL_RGBA8, // RGBA8
@@ -1551,6 +1563,8 @@ namespace bgfx { namespace gl
if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL)
|| BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) )
{
+ setTextureFormat(TextureFormat::R8I, GL_R8I, GL_RED_INTEGER, GL_BYTE);
+ setTextureFormat(TextureFormat::R8U, GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE);
setTextureFormat(TextureFormat::R16I, GL_R16I, GL_RED_INTEGER, GL_SHORT);
setTextureFormat(TextureFormat::R16U, GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT);
// setTextureFormat(TextureFormat::RG16, GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_SHORT);
@@ -3692,9 +3706,19 @@ namespace bgfx { namespace gl
case GL_IMAGE_CUBE:
case GL_INT_IMAGE_CUBE:
case GL_UNSIGNED_INT_IMAGE_CUBE:
- BX_TRACE("Sampler #%d at location %d.", m_numSamplers, loc);
- m_sampler[m_numSamplers] = loc;
- m_numSamplers++;
+ if (m_numSamplers < BX_COUNTOF(m_sampler) )
+ {
+ BX_TRACE("Sampler #%d at location %d.", m_numSamplers, loc);
+ m_sampler[m_numSamplers] = loc;
+ m_numSamplers++;
+ }
+ else
+ {
+ BX_TRACE("Too many samplers (max: %d)! Sampler at location %d."
+ , BX_COUNTOF(m_sampler)
+ , loc
+ );
+ }
break;
default:
@@ -3949,7 +3973,7 @@ namespace bgfx { namespace gl
}
}
- bool TextureGL::init(GLenum _target, uint32_t _width, uint32_t _height, uint32_t _depth, TextureFormat::Enum _format, uint8_t _numMips, uint32_t _flags)
+ bool TextureGL::init(GLenum _target, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips, uint32_t _flags)
{
m_target = _target;
m_numMips = _numMips;
@@ -3957,9 +3981,7 @@ namespace bgfx { namespace gl
m_width = _width;
m_height = _height;
m_depth = _depth;
- m_currentSamplerHash = UINT32_MAX;
- m_requestedFormat =
- m_textureFormat = uint8_t(_format);
+ m_currentSamplerHash = UINT32_MAX;
const bool writeOnly = 0 != (m_flags&BGFX_TEXTURE_RT_WRITE_ONLY);
const bool computeWrite = 0 != (m_flags&BGFX_TEXTURE_COMPUTE_WRITE );
@@ -3970,7 +3992,7 @@ namespace bgfx { namespace gl
BX_CHECK(0 != m_id, "Failed to generate texture id.");
GL_CHECK(glBindTexture(_target, m_id) );
- const TextureFormatInfo& tfi = s_textureFormat[_format];
+ const TextureFormatInfo& tfi = s_textureFormat[m_textureFormat];
m_fmt = tfi.m_fmt;
m_type = tfi.m_type;
@@ -3979,11 +4001,9 @@ namespace bgfx { namespace gl
&& !s_textureFormat[m_requestedFormat].m_supported
&& !s_renderGL->m_textureSwizzleSupport
;
- const bool compressed = isCompressed(TextureFormat::Enum(m_requestedFormat) );
- const bool convert = false
- || (compressed && m_textureFormat != m_requestedFormat)
+ const bool convert = false
+ || m_textureFormat != m_requestedFormat
|| swizzle
- || !s_textureFormat[m_requestedFormat].m_supported
;
if (convert)
@@ -4095,6 +4115,9 @@ namespace bgfx { namespace gl
textureDepth = imageContainer.m_depth;
}
+ m_requestedFormat = uint8_t(imageContainer.m_format);
+ m_textureFormat = uint8_t(getViableTextureFormat(imageContainer) );
+
GLenum target = GL_TEXTURE_2D;
if (imageContainer.m_cubeMap)
{
@@ -4109,7 +4132,6 @@ namespace bgfx { namespace gl
, textureWidth
, textureHeight
, textureDepth
- , imageContainer.m_format
, numMips
, _flags
) )
@@ -4590,7 +4612,7 @@ namespace bgfx { namespace gl
for (uint32_t ii = 0; ii < count; ++ii)
{
- uint8_t nameSize;
+ uint8_t nameSize = 0;
bx::read(&reader, nameSize);
char name[256];
@@ -6638,4 +6660,3 @@ namespace bgfx { namespace gl
} /* namespace gl */ } // namespace bgfx
#endif // (BGFX_CONFIG_RENDERER_OPENGLES || BGFX_CONFIG_RENDERER_OPENGL)
-
diff --git a/3rdparty/bgfx/src/renderer_gl.h b/3rdparty/bgfx/src/renderer_gl.h
index 91c49c22f02..884cc614ce5 100644
--- a/3rdparty/bgfx/src/renderer_gl.h
+++ b/3rdparty/bgfx/src/renderer_gl.h
@@ -222,6 +222,30 @@ typedef uint64_t GLuint64;
# define GL_RG32F 0x8230
#endif // GL_RG32F
+#ifndef GL_RGB8
+# define GL_RGB8 0x8051
+#endif // GL_RGB8
+
+#ifndef GL_SRGB
+# define GL_SRGB 0x8C40
+#endif // GL_SRGB
+
+#ifndef GL_SRGB8
+# define GL_SRGB8 0x8C41
+#endif // GL_SRGB8
+
+#ifndef GL_RGB8I
+# define GL_RGB8I 0x8D8F
+#endif // GL_RGB8I
+
+#ifndef GL_RGB8UI
+# define GL_RGB8UI 0x8D7D
+#endif // GL_RGB8UI
+
+#ifndef GL_RGB8_SNORM
+# define GL_RGB8_SNORM 0x8F96
+#endif // GL_RGB8_SNORM
+
#ifndef GL_RGBA8I
# define GL_RGBA8I 0x8D8E
#endif // GL_RGBA8I
@@ -1120,7 +1144,7 @@ namespace bgfx { namespace gl
{
}
- bool init(GLenum _target, uint32_t _width, uint32_t _height, uint32_t _depth, TextureFormat::Enum _format, uint8_t _numMips, uint32_t _flags);
+ bool init(GLenum _target, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips, uint32_t _flags);
void create(const Memory* _mem, uint32_t _flags, uint8_t _skip);
void destroy();
void overrideInternal(uintptr_t _ptr);
diff --git a/3rdparty/bgfx/src/renderer_mtl.mm b/3rdparty/bgfx/src/renderer_mtl.mm
index 08faee495f7..ffb2c38a793 100644
--- a/3rdparty/bgfx/src/renderer_mtl.mm
+++ b/3rdparty/bgfx/src/renderer_mtl.mm
@@ -1855,20 +1855,10 @@ namespace bgfx { namespace mtl
const uint32_t textureHeight = bx::uint32_max(blockInfo.blockHeight, imageContainer.m_height>>startLod);
m_flags = _flags;
- m_requestedFormat = (uint8_t)imageContainer.m_format;
- m_textureFormat = MTLPixelFormatInvalid == s_textureFormat[m_requestedFormat].m_fmt
- ? uint8_t(TextureFormat::BGRA8)
- : m_requestedFormat
- ;
-
- const bool convert = m_requestedFormat != m_textureFormat;
-
- uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
- if (convert)
- {
- m_textureFormat = (uint8_t)TextureFormat::RGBA8;
- bpp = 32;
- }
+ m_requestedFormat = uint8_t(imageContainer.m_format);
+ m_textureFormat = uint8_t(getViableTextureFormat(imageContainer) );
+ const bool convert = m_textureFormat != m_requestedFormat;
+ const uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(m_textureFormat) );
TextureDescriptor desc = s_renderMtl->m_textureDescriptor;
diff --git a/3rdparty/bgfx/src/renderer_vk.cpp b/3rdparty/bgfx/src/renderer_vk.cpp
index 31455c1992f..e885b84e58f 100644
--- a/3rdparty/bgfx/src/renderer_vk.cpp
+++ b/3rdparty/bgfx/src/renderer_vk.cpp
@@ -6,7 +6,7 @@
#include "bgfx_p.h"
#if BGFX_CONFIG_RENDERER_VULKAN
-# include "../../bgfx-ext/src/renderer_vk.cpp"
+# include "../../bgfx-ext/src/renderer_vk1.cpp"
#else
namespace bgfx { namespace vk
diff --git a/3rdparty/bgfx/src/shader_dx9bc.cpp b/3rdparty/bgfx/src/shader_dx9bc.cpp
index 071a9e2705e..bb2b6a0e4db 100644
--- a/3rdparty/bgfx/src/shader_dx9bc.cpp
+++ b/3rdparty/bgfx/src/shader_dx9bc.cpp
@@ -274,12 +274,12 @@ namespace bgfx
};
BX_STATIC_ASSERT(BX_COUNTOF(s_dx9bcDeclUsage) == Dx9bcDeclUsage::Count);
- int32_t read(bx::ReaderI* _reader, Dx9bcSubOperand& _subOperand)
+ int32_t read(bx::ReaderI* _reader, Dx9bcSubOperand& _subOperand, bx::Error* _err)
{
int32_t size = 0;
uint32_t token;
- size += bx::read(_reader, token);
+ size += bx::read(_reader, token, _err);
_subOperand.type = Dx9bcOperandType::Enum( ( (token & UINT32_C(0x70000000) ) >> 28)
| ( (token & UINT32_C(0x00001800) ) >> 8) );
@@ -289,7 +289,7 @@ namespace bgfx
return size;
}
- int32_t write(bx::WriterI* _writer, const Dx9bcSubOperand& _subOperand)
+ int32_t write(bx::WriterI* _writer, const Dx9bcSubOperand& _subOperand, bx::Error* _err)
{
int32_t size = 0;
@@ -298,17 +298,17 @@ namespace bgfx
token |= (_subOperand.type << 8) & UINT32_C(0x00001800);
token |= _subOperand.regIndex & UINT32_C(0x000007ff);
token |= (_subOperand.swizzleBits << 16) & UINT32_C(0x00ff0000);
- size += bx::write(_writer, token);
+ size += bx::write(_writer, token, _err);
return size;
}
- int32_t read(bx::ReaderI* _reader, Dx9bcOperand& _operand)
+ int32_t read(bx::ReaderI* _reader, Dx9bcOperand& _operand, bx::Error* _err)
{
int32_t size = 0;
uint32_t token;
- size += bx::read(_reader, token);
+ size += bx::read(_reader, token, _err);
_operand.type = Dx9bcOperandType::Enum( ( (token & UINT32_C(0x70000000) ) >> 28)
| ( (token & UINT32_C(0x00001800) ) >> 8) );
@@ -339,13 +339,13 @@ namespace bgfx
if (Dx9bcOperandAddrMode::Relative == _operand.addrMode)
{
- size += read(_reader, _operand.subOperand);
+ size += read(_reader, _operand.subOperand, _err);
}
return size;
}
- int32_t write(bx::WriterI* _writer, const Dx9bcOperand& _operand)
+ int32_t write(bx::WriterI* _writer, const Dx9bcOperand& _operand, bx::Error* _err)
{
int32_t size = 0;
@@ -354,22 +354,22 @@ namespace bgfx
token |= (_operand.type << 8) & UINT32_C(0x00001800);
token |= _operand.regIndex & UINT32_C(0x000007ff);
token |= (_operand.addrMode << 13) & UINT32_C(0x00002000);
- size += bx::write(_writer, token);
+ size += bx::write(_writer, token, _err);
if (Dx9bcOperandAddrMode::Relative == _operand.addrMode)
{
- size += write(_writer, _operand.subOperand);
+ size += write(_writer, _operand.subOperand, _err);
}
return size;
}
- int32_t read(bx::ReaderI* _reader, Dx9bcInstruction& _instruction)
+ int32_t read(bx::ReaderI* _reader, Dx9bcInstruction& _instruction, bx::Error* _err)
{
int32_t size = 0;
uint32_t token;
- size += bx::read(_reader, token);
+ size += bx::read(_reader, token, _err);
_instruction.opcode = Dx9bcOpcode::Enum( (token & UINT32_C(0x0000ffff) ) );
@@ -395,7 +395,7 @@ namespace bgfx
for (int32_t ii = 0, num = _instruction.length-1; ii < num; ++ii)
{
uint32_t tmp;
- size += bx::read(_reader, tmp);
+ size += bx::read(_reader, tmp, _err);
}
}
@@ -436,24 +436,24 @@ namespace bgfx
if (valuesBeforeOpcode
&& 0 < info.numValues)
{
- size += read(_reader, _instruction.value, info.numValues*sizeof(uint32_t) );
+ size += read(_reader, _instruction.value, info.numValues*sizeof(uint32_t), _err);
}
_instruction.operand[0].destination = true;
switch (_instruction.numOperands)
{
- case 6: size += read(_reader, _instruction.operand[currOp++]);
- case 5: size += read(_reader, _instruction.operand[currOp++]);
- case 4: size += read(_reader, _instruction.operand[currOp++]);
- case 3: size += read(_reader, _instruction.operand[currOp++]);
- case 2: size += read(_reader, _instruction.operand[currOp++]);
- case 1: size += read(_reader, _instruction.operand[currOp++]);
+ case 6: size += read(_reader, _instruction.operand[currOp++], _err);
+ case 5: size += read(_reader, _instruction.operand[currOp++], _err);
+ case 4: size += read(_reader, _instruction.operand[currOp++], _err);
+ case 3: size += read(_reader, _instruction.operand[currOp++], _err);
+ case 2: size += read(_reader, _instruction.operand[currOp++], _err);
+ case 1: size += read(_reader, _instruction.operand[currOp++], _err);
case 0:
if (!valuesBeforeOpcode
&& 0 < info.numValues)
{
- size += read(_reader, _instruction.value, info.numValues*sizeof(uint32_t) );
+ size += read(_reader, _instruction.value, info.numValues*sizeof(uint32_t), _err);
}
break;
@@ -469,7 +469,7 @@ namespace bgfx
return size;
}
- int32_t write(bx::WriterI* _writer, const Dx9bcInstruction& _instruction)
+ int32_t write(bx::WriterI* _writer, const Dx9bcInstruction& _instruction, bx::Error* _err)
{
int32_t size = 0;
@@ -477,17 +477,17 @@ namespace bgfx
token |= _instruction.opcode & UINT32_C(0x0000ffff);
token |= (_instruction.specific << 16) & UINT32_C(0x00ff0000);
token |= ( (_instruction.length - 1) << 24) & UINT32_C(0x0f000000);
- size += bx::write(_writer, token);
+ size += bx::write(_writer, token, _err);
uint32_t currOp = 0;
switch (_instruction.numOperands)
{
- case 6: size += write(_writer, _instruction.operand[currOp++]);
- case 5: size += write(_writer, _instruction.operand[currOp++]);
- case 4: size += write(_writer, _instruction.operand[currOp++]);
- case 3: size += write(_writer, _instruction.operand[currOp++]);
- case 2: size += write(_writer, _instruction.operand[currOp++]);
- case 1: size += write(_writer, _instruction.operand[currOp++]);
+ case 6: size += write(_writer, _instruction.operand[currOp++], _err);
+ case 5: size += write(_writer, _instruction.operand[currOp++], _err);
+ case 4: size += write(_writer, _instruction.operand[currOp++], _err);
+ case 3: size += write(_writer, _instruction.operand[currOp++], _err);
+ case 2: size += write(_writer, _instruction.operand[currOp++], _err);
+ case 1: size += write(_writer, _instruction.operand[currOp++], _err);
case 0:
break;
}
@@ -626,7 +626,7 @@ namespace bgfx
return size;
}
- int32_t read(bx::ReaderSeekerI* _reader, Dx9bcShader& _shader)
+ int32_t read(bx::ReaderSeekerI* _reader, Dx9bcShader& _shader, bx::Error* _err)
{
int32_t size = 0;
int64_t offset = bx::seek(_reader);
@@ -634,7 +634,7 @@ namespace bgfx
for (;;)
{
Dx9bcInstruction instruction;
- int32_t length = read(_reader, instruction);
+ int32_t length = read(_reader, instruction, _err);
size += length;
if (Dx9bcOpcode::Count > instruction.opcode)
@@ -662,22 +662,22 @@ namespace bgfx
bx::seek(_reader, offset, bx::Whence::Begin);
_shader.byteCode.resize(size);
- bx::read(_reader, _shader.byteCode.data(), size);
+ bx::read(_reader, _shader.byteCode.data(), size, _err);
return size;
}
- int32_t write(bx::WriterI* _writer, const Dx9bcShader& _shader)
+ int32_t write(bx::WriterI* _writer, const Dx9bcShader& _shader, bx::Error* _err)
{
- BX_UNUSED(_writer, _shader);
+ BX_UNUSED(_writer, _shader, _err);
return 0;
}
- int32_t read(bx::ReaderSeekerI* _reader, Dx9bc& _bc)
+ int32_t read(bx::ReaderSeekerI* _reader, Dx9bc& _bc, bx::Error* _err)
{
int32_t size = 0;
- size += bx::read(_reader, _bc.version);
+ size += bx::read(_reader, _bc.version, _err);
bool pixelShader = (0xffff0000 == (_bc.version & 0xffff0000) );
uint32_t versionMajor = (_bc.version>>8)&0xff;
@@ -689,37 +689,45 @@ namespace bgfx
, versionMinor
);
- size += read(_reader, _bc.shader);
+ size += read(_reader, _bc.shader, _err);
return size;
}
- int32_t write(bx::WriterSeekerI* _writer, const Dx9bc& _dxbc)
+ int32_t write(bx::WriterSeekerI* _writer, const Dx9bc& _dxbc, bx::Error* _err)
{
- BX_UNUSED(_writer, _dxbc);
+ BX_UNUSED(_writer, _dxbc, _err);
return 0;
}
- void parse(const Dx9bcShader& _src, Dx9bcParseFn _fn, void* _userData)
+ void parse(const Dx9bcShader& _src, Dx9bcParseFn _fn, void* _userData, bx::Error* _err)
{
+ BX_ERROR_SCOPE(_err);
+
bx::MemoryReader reader(_src.byteCode.data(), uint32_t(_src.byteCode.size() ) );
-//BX_TRACE("parse %d", _src.byteCode.size());
+ bx::Error err;
for (uint32_t token = 0, numTokens = uint32_t(_src.byteCode.size() / sizeof(uint32_t) ); token < numTokens;)
{
Dx9bcInstruction instruction;
- uint32_t size = read(&reader, instruction);
+ uint32_t size = read(&reader, instruction, _err);
BX_CHECK(size/4 == instruction.length, "read %d, expected %d", size/4, instruction.length); BX_UNUSED(size);
- _fn(token * sizeof(uint32_t), instruction, _userData);
+ bool cont = _fn(token * sizeof(uint32_t), instruction, _userData);
+ if (!cont)
+ {
+ return;
+ }
token += instruction.length;
}
}
- void filter(Dx9bcShader& _dst, const Dx9bcShader& _src, Dx9bcFilterFn _fn, void* _userData)
+ void filter(Dx9bcShader& _dst, const Dx9bcShader& _src, Dx9bcFilterFn _fn, void* _userData, bx::Error* _err)
{
+ BX_ERROR_SCOPE(_err);
+
bx::MemoryReader reader(_src.byteCode.data(), uint32_t(_src.byteCode.size() ) );
bx::MemoryBlock mb(g_allocator);
@@ -728,7 +736,7 @@ namespace bgfx
for (uint32_t token = 0, numTokens = uint32_t(_src.byteCode.size() / sizeof(uint32_t) ); token < numTokens;)
{
Dx9bcInstruction instruction;
- uint32_t size = read(&reader, instruction);
+ uint32_t size = read(&reader, instruction, _err);
BX_CHECK(size/4 == instruction.length, "read %d, expected %d", size/4, instruction.length); BX_UNUSED(size);
_fn(instruction, _userData);
diff --git a/3rdparty/bgfx/src/shader_dx9bc.h b/3rdparty/bgfx/src/shader_dx9bc.h
index d7b6b381dc3..0680d641a12 100644
--- a/3rdparty/bgfx/src/shader_dx9bc.h
+++ b/3rdparty/bgfx/src/shader_dx9bc.h
@@ -226,8 +226,8 @@ namespace bgfx
int32_t value[4];
};
- int32_t read(bx::ReaderI* _reader, Dx9bcInstruction& _instruction);
- int32_t write(bx::WriterI* _writer, const Dx9bcInstruction& _instruction);
+ int32_t read(bx::ReaderI* _reader, Dx9bcInstruction& _instruction, bx::Error* _err);
+ int32_t write(bx::WriterI* _writer, const Dx9bcInstruction& _instruction, bx::Error* _err);
int32_t toString(char* _out, int32_t _size, const Dx9bcInstruction& _instruction);
struct Dx9bcShader
@@ -235,8 +235,8 @@ namespace bgfx
stl::vector<uint8_t> byteCode;
};
- int32_t read(bx::ReaderSeekerI* _reader, Dx9bcShader& _shader);
- int32_t write(bx::WriterI* _writer, const Dx9bcShader& _shader);
+ int32_t read(bx::ReaderSeekerI* _reader, Dx9bcShader& _shader, bx::Error* _err);
+ int32_t write(bx::WriterI* _writer, const Dx9bcShader& _shader, bx::Error* _err);
struct Dx9bc
{
@@ -244,14 +244,14 @@ namespace bgfx
Dx9bcShader shader;
};
- int32_t read(bx::ReaderSeekerI* _reader, Dx9bc& _dx9bc);
- int32_t write(bx::WriterSeekerI* _writer, const Dx9bc& _dx9bc);
+ int32_t read(bx::ReaderSeekerI* _reader, Dx9bc& _dx9bc, bx::Error* _err);
+ int32_t write(bx::WriterSeekerI* _writer, const Dx9bc& _dx9bc, bx::Error* _err);
- typedef void (*Dx9bcParseFn)(uint32_t _offset, const Dx9bcInstruction& _instruction, void* _userData);
- void parse(const Dx9bcShader& _src, Dx9bcParseFn _fn, void* _userData);
+ typedef bool (*Dx9bcParseFn)(uint32_t _offset, const Dx9bcInstruction& _instruction, void* _userData);
+ void parse(const Dx9bcShader& _src, Dx9bcParseFn _fn, void* _userData, bx::Error* _err = NULL);
typedef void (*Dx9bcFilterFn)(Dx9bcInstruction& _instruction, void* _userData);
- void filter(Dx9bcShader& _dst, const Dx9bcShader& _src, Dx9bcFilterFn _fn, void* _userData);
+ void filter(Dx9bcShader& _dst, const Dx9bcShader& _src, Dx9bcFilterFn _fn, void* _userData, bx::Error* _err = NULL);
} // namespace bgfx
diff --git a/3rdparty/bgfx/src/shader_dxbc.cpp b/3rdparty/bgfx/src/shader_dxbc.cpp
index 36d81842c8d..9f8b351e76a 100644
--- a/3rdparty/bgfx/src/shader_dxbc.cpp
+++ b/3rdparty/bgfx/src/shader_dxbc.cpp
@@ -552,7 +552,7 @@ namespace bgfx
#define DXBC_MAX_NAME_STRING 512
- int32_t readString(bx::ReaderSeekerI* _reader, int64_t _offset, char* _out, uint32_t _max = DXBC_MAX_NAME_STRING)
+ int32_t readString(bx::ReaderSeekerI* _reader, int64_t _offset, char* _out, uint32_t _max, bx::Error* _err)
{
int64_t oldOffset = bx::seek(_reader);
bx::seek(_reader, _offset, bx::Whence::Begin);
@@ -562,7 +562,7 @@ namespace bgfx
for (uint32_t ii = 0; ii < _max-1; ++ii)
{
char ch;
- size += bx::read(_reader, ch);
+ size += bx::read(_reader, ch, _err);
*_out++ = ch;
if ('\0' == ch)
@@ -755,7 +755,7 @@ namespace bgfx
memcpy(_digest, hash, 16);
}
- int32_t read(bx::ReaderI* _reader, DxbcSubOperand& _subOperand)
+ int32_t read(bx::ReaderI* _reader, DxbcSubOperand& _subOperand, bx::Error* _err)
{
uint32_t token;
int32_t size = 0;
@@ -773,7 +773,7 @@ namespace bgfx
// |+------------------------------- addressing mode 2
// +-------------------------------- extended
- size += bx::read(_reader, token);
+ size += bx::read(_reader, token, _err);
_subOperand.type = DxbcOperandType::Enum( (token & UINT32_C(0x000ff000) ) >> 12);
_subOperand.numAddrModes = uint8_t( (token & UINT32_C(0x00300000) ) >> 20);
_subOperand.addrMode = uint8_t( (token & UINT32_C(0x01c00000) ) >> 22);
@@ -784,7 +784,7 @@ namespace bgfx
switch (_subOperand.addrMode)
{
case DxbcOperandAddrMode::Imm32:
- size += bx::read(_reader, _subOperand.regIndex);
+ size += bx::read(_reader, _subOperand.regIndex, _err);
break;
case DxbcOperandAddrMode::Reg:
@@ -796,7 +796,7 @@ namespace bgfx
case DxbcOperandAddrMode::RegImm32:
{
- size += bx::read(_reader, _subOperand.regIndex);
+ size += bx::read(_reader, _subOperand.regIndex, _err);
DxbcSubOperand subOperand;
size += read(_reader, subOperand);
@@ -805,8 +805,8 @@ namespace bgfx
case DxbcOperandAddrMode::RegImm64:
{
- size += bx::read(_reader, _subOperand.regIndex);
- size += bx::read(_reader, _subOperand.regIndex);
+ size += bx::read(_reader, _subOperand.regIndex, _err);
+ size += bx::read(_reader, _subOperand.regIndex, _err);
DxbcSubOperand subOperand;
size += read(_reader, subOperand);
@@ -821,7 +821,7 @@ namespace bgfx
return size;
}
- int32_t write(bx::WriterI* _writer, const DxbcSubOperand& _subOperand)
+ int32_t write(bx::WriterI* _writer, const DxbcSubOperand& _subOperand, bx::Error* _err)
{
int32_t size = 0;
@@ -832,12 +832,12 @@ namespace bgfx
token |= (_subOperand.mode << 2) & UINT32_C(0x0000000c);
token |= (_subOperand.modeBits << 4) & UINT32_C(0x00000ff0);
token |= _subOperand.num & UINT32_C(0x00000003);
- size += bx::write(_writer, token);
+ size += bx::write(_writer, token, _err);
switch (_subOperand.addrMode)
{
case DxbcOperandAddrMode::Imm32:
- size += bx::write(_writer, _subOperand.regIndex);
+ size += bx::write(_writer, _subOperand.regIndex, _err);
break;
case DxbcOperandAddrMode::Reg:
@@ -849,7 +849,7 @@ namespace bgfx
case DxbcOperandAddrMode::RegImm32:
{
- size += bx::write(_writer, _subOperand.regIndex);
+ size += bx::write(_writer, _subOperand.regIndex, _err);
DxbcSubOperand subOperand;
size += write(_writer, subOperand);
@@ -858,8 +858,8 @@ namespace bgfx
case DxbcOperandAddrMode::RegImm64:
{
- size += bx::write(_writer, _subOperand.regIndex);
- size += bx::write(_writer, _subOperand.regIndex);
+ size += bx::write(_writer, _subOperand.regIndex, _err);
+ size += bx::write(_writer, _subOperand.regIndex, _err);
DxbcSubOperand subOperand;
size += write(_writer, subOperand);
@@ -874,12 +874,12 @@ namespace bgfx
return size;
}
- int32_t read(bx::ReaderI* _reader, DxbcOperand& _operand)
+ int32_t read(bx::ReaderI* _reader, DxbcOperand& _operand, bx::Error* _err)
{
int32_t size = 0;
uint32_t token;
- size += bx::read(_reader, token);
+ size += bx::read(_reader, token, _err);
// 0 1 2 3
// 76543210765432107654321076543210
@@ -906,7 +906,7 @@ namespace bgfx
if (_operand.extended)
{
- size += bx::read(_reader, _operand.extBits);
+ size += bx::read(_reader, _operand.extBits, _err);
}
switch (_operand.type)
@@ -915,7 +915,7 @@ namespace bgfx
_operand.num = 2 == _operand.num ? 4 : _operand.num;
for (uint32_t ii = 0; ii < _operand.num; ++ii)
{
- size += bx::read(_reader, _operand.un.imm32[ii]);
+ size += bx::read(_reader, _operand.un.imm32[ii], _err);
}
break;
@@ -923,7 +923,7 @@ namespace bgfx
_operand.num = 2 == _operand.num ? 4 : _operand.num;
for (uint32_t ii = 0; ii < _operand.num; ++ii)
{
- size += bx::read(_reader, _operand.un.imm64[ii]);
+ size += bx::read(_reader, _operand.un.imm64[ii], _err);
}
break;
@@ -936,16 +936,16 @@ namespace bgfx
switch (_operand.addrMode[ii])
{
case DxbcOperandAddrMode::Imm32:
- size += bx::read(_reader, _operand.regIndex[ii]);
+ size += bx::read(_reader, _operand.regIndex[ii], _err);
break;
case DxbcOperandAddrMode::Reg:
- size += read(_reader, _operand.subOperand[ii]);
+ size += read(_reader, _operand.subOperand[ii], _err);
break;
case DxbcOperandAddrMode::RegImm32:
- size += bx::read(_reader, _operand.regIndex[ii]);
- size += read(_reader, _operand.subOperand[ii]);
+ size += bx::read(_reader, _operand.regIndex[ii], _err);
+ size += read(_reader, _operand.subOperand[ii], _err);
break;
default:
@@ -957,7 +957,7 @@ namespace bgfx
return size;
}
- int32_t write(bx::WriterI* _writer, const DxbcOperand& _operand)
+ int32_t write(bx::WriterI* _writer, const DxbcOperand& _operand, bx::Error* _err)
{
int32_t size = 0;
@@ -973,7 +973,7 @@ namespace bgfx
token |= (4 == _operand.num ? 2 : _operand.num) & UINT32_C(0x00000003);
token |= ( (_operand.modeBits & "\x0f\xff\x03\x00"[_operand.mode]) << 4) & UINT32_C(0x00000ff0);
- size += bx::write(_writer, token);
+ size += bx::write(_writer, token, _err);
if (_operand.extended)
{
@@ -985,14 +985,14 @@ namespace bgfx
case DxbcOperandType::Imm32:
for (uint32_t ii = 0; ii < _operand.num; ++ii)
{
- size += bx::write(_writer, _operand.un.imm32[ii]);
+ size += bx::write(_writer, _operand.un.imm32[ii], _err);
}
break;
case DxbcOperandType::Imm64:
for (uint32_t ii = 0; ii < _operand.num; ++ii)
{
- size += bx::write(_writer, _operand.un.imm64[ii]);
+ size += bx::write(_writer, _operand.un.imm64[ii], _err);
}
break;
@@ -1005,16 +1005,16 @@ namespace bgfx
switch (_operand.addrMode[ii])
{
case DxbcOperandAddrMode::Imm32:
- size += bx::write(_writer, _operand.regIndex[ii]);
+ size += bx::write(_writer, _operand.regIndex[ii], _err);
break;
case DxbcOperandAddrMode::Reg:
- size += write(_writer, _operand.subOperand[ii]);
+ size += write(_writer, _operand.subOperand[ii], _err);
break;
case DxbcOperandAddrMode::RegImm32:
- size += bx::write(_writer, _operand.regIndex[ii]);
- size += write(_writer, _operand.subOperand[ii]);
+ size += bx::write(_writer, _operand.regIndex[ii], _err);
+ size += write(_writer, _operand.subOperand[ii], _err);
break;
default:
@@ -1026,12 +1026,12 @@ namespace bgfx
return size;
}
- int32_t read(bx::ReaderI* _reader, DxbcInstruction& _instruction)
+ int32_t read(bx::ReaderI* _reader, DxbcInstruction& _instruction, bx::Error* _err)
{
uint32_t size = 0;
uint32_t token;
- size += bx::read(_reader, token);
+ size += bx::read(_reader, token, _err);
// 0 1 2 3
// 76543210765432107654321076543210
@@ -1077,7 +1077,7 @@ namespace bgfx
for (uint32_t ii = 0, num = (_instruction.length-2)/4; ii < num; ++ii)
{
char temp[16];
- size += bx::read(_reader, temp, 16);
+ size += bx::read(_reader, temp, 16, _err);
}
}
@@ -1190,7 +1190,7 @@ namespace bgfx
uint32_t extBits;
size += bx::read(_reader, extBits);
extended = 0 != (extBits & UINT32_C(0x80000000) );
- _instruction.extended[ii] = DxbcInstruction::ExtendedType::Enum(extBits & UINT32_C(0x0000001f) );
+ _instruction.extended[ii ] = DxbcInstruction::ExtendedType::Enum(extBits & UINT32_C(0x0000001f) );
_instruction.extended[ii+1] = DxbcInstruction::ExtendedType::Count;
switch (_instruction.extended[ii])
@@ -1244,7 +1244,7 @@ namespace bgfx
case DxbcOpcode::DCL_FUNCTION_TABLE:
{
uint32_t tableId;
- size += read(_reader, tableId);
+ size += read(_reader, tableId, _err);
uint32_t num;
size += read(_reader, num);
@@ -1252,7 +1252,7 @@ namespace bgfx
for (uint32_t ii = 0; ii < num; ++ii)
{
uint32_t bodyId;
- size += read(_reader, bodyId);
+ size += read(_reader, bodyId, _err);
}
}
break;
@@ -1260,10 +1260,10 @@ namespace bgfx
case DxbcOpcode::DCL_INTERFACE:
{
uint32_t interfaceId;
- size += read(_reader, interfaceId);
+ size += read(_reader, interfaceId, _err);
uint32_t num;
- size += read(_reader, num);
+ size += read(_reader, num, _err);
BX_CHECK(false, "not implemented.");
}
@@ -1279,16 +1279,16 @@ namespace bgfx
_instruction.numOperands = info.numOperands;
switch (info.numOperands)
{
- case 6: size += read(_reader, _instruction.operand[currOp++]);
- case 5: size += read(_reader, _instruction.operand[currOp++]);
- case 4: size += read(_reader, _instruction.operand[currOp++]);
- case 3: size += read(_reader, _instruction.operand[currOp++]);
- case 2: size += read(_reader, _instruction.operand[currOp++]);
- case 1: size += read(_reader, _instruction.operand[currOp++]);
+ case 6: size += read(_reader, _instruction.operand[currOp++], _err);
+ case 5: size += read(_reader, _instruction.operand[currOp++], _err);
+ case 4: size += read(_reader, _instruction.operand[currOp++], _err);
+ case 3: size += read(_reader, _instruction.operand[currOp++], _err);
+ case 2: size += read(_reader, _instruction.operand[currOp++], _err);
+ case 1: size += read(_reader, _instruction.operand[currOp++], _err);
case 0:
if (0 < info.numValues)
{
- size += read(_reader, _instruction.value, info.numValues*sizeof(uint32_t) );
+ size += read(_reader, _instruction.value, info.numValues*sizeof(uint32_t), _err);
}
break;
@@ -1304,7 +1304,7 @@ namespace bgfx
return size;
}
- int32_t write(bx::WriterI* _writer, const DxbcInstruction& _instruction)
+ int32_t write(bx::WriterI* _writer, const DxbcInstruction& _instruction, bx::Error* _err)
{
uint32_t token = 0;
token |= (_instruction.opcode ) & UINT32_C(0x000007ff);
@@ -1366,7 +1366,7 @@ namespace bgfx
uint32_t size =0;
size += bx::write(_writer, token);
-;
+
for (uint32_t ii = 0; _instruction.extended[ii] != DxbcInstruction::ExtendedType::Count; ++ii)
{
// 0 1 2 3
@@ -1427,18 +1427,18 @@ namespace bgfx
break;
}
- size += bx::write(_writer, token);
+ size += bx::write(_writer, token, _err);
}
for (uint32_t ii = 0; ii < _instruction.numOperands; ++ii)
{
- size += write(_writer, _instruction.operand[ii]);
+ size += write(_writer, _instruction.operand[ii], _err);
}
const DxbcOpcodeInfo& info = s_dxbcOpcodeInfo[_instruction.opcode];
if (0 < info.numValues)
{
- size += bx::write(_writer, _instruction.value, info.numValues*sizeof(uint32_t) );
+ size += bx::write(_writer, _instruction.value, info.numValues*sizeof(uint32_t), _err);
}
return size;
@@ -1609,15 +1609,15 @@ namespace bgfx
return size;
}
- int32_t read(bx::ReaderSeekerI* _reader, DxbcSignature& _signature)
+ int32_t read(bx::ReaderSeekerI* _reader, DxbcSignature& _signature, bx::Error* _err)
{
int32_t size = 0;
int64_t offset = bx::seek(_reader);
uint32_t num;
- size += bx::read(_reader, num);
- size += bx::read(_reader, _signature.key);
+ size += bx::read(_reader, num, _err);
+ size += bx::read(_reader, _signature.key, _err);
for (uint32_t ii = 0; ii < num; ++ii)
{
@@ -1627,20 +1627,20 @@ namespace bgfx
size += bx::read(_reader, nameOffset);
char name[DXBC_MAX_NAME_STRING];
- readString(_reader, offset + nameOffset, name);
+ readString(_reader, offset + nameOffset, name, DXBC_MAX_NAME_STRING, _err);
element.name = name;
- size += bx::read(_reader, element.semanticIndex);
- size += bx::read(_reader, element.valueType);
- size += bx::read(_reader, element.componentType);
- size += bx::read(_reader, element.registerIndex);
- size += bx::read(_reader, element.mask);
- size += bx::read(_reader, element.readWriteMask);
- size += bx::read(_reader, element.stream);
+ size += bx::read(_reader, element.semanticIndex, _err);
+ size += bx::read(_reader, element.valueType, _err);
+ size += bx::read(_reader, element.componentType, _err);
+ size += bx::read(_reader, element.registerIndex, _err);
+ size += bx::read(_reader, element.mask, _err);
+ size += bx::read(_reader, element.readWriteMask, _err);
+ size += bx::read(_reader, element.stream, _err);
// padding
uint8_t padding;
- size += bx::read(_reader, padding);
+ size += bx::read(_reader, padding, _err);
_signature.elements.push_back(element);
}
@@ -1648,13 +1648,13 @@ namespace bgfx
return size;
}
- int32_t write(bx::WriterI* _writer, const DxbcSignature& _signature)
+ int32_t write(bx::WriterI* _writer, const DxbcSignature& _signature, bx::Error* _err)
{
int32_t size = 0;
const uint32_t num = uint32_t(_signature.elements.size() );
- size += bx::write(_writer, num);
- size += bx::write(_writer, _signature.key);
+ size += bx::write(_writer, num, _err);
+ size += bx::write(_writer, _signature.key, _err);
typedef stl::unordered_map<stl::string, uint32_t> NameOffsetMap;
NameOffsetMap nom;
@@ -1669,7 +1669,7 @@ namespace bgfx
if (it == nom.end() )
{
nom.insert(stl::make_pair(element.name, nameOffset) );
- size += bx::write(_writer, nameOffset);
+ size += bx::write(_writer, nameOffset, _err);
nameOffset += uint32_t(element.name.size() + 1);
}
else
@@ -1677,15 +1677,14 @@ namespace bgfx
size += bx::write(_writer, it->second);
}
- size += bx::write(_writer, element.semanticIndex);
- size += bx::write(_writer, element.valueType);
- size += bx::write(_writer, element.componentType);
- size += bx::write(_writer, element.registerIndex);
- size += bx::write(_writer, element.mask);
- size += bx::write(_writer, element.readWriteMask);
- size += bx::write(_writer, element.stream);
- size += bx::write(_writer, pad);
-
+ size += bx::write(_writer, element.semanticIndex, _err);
+ size += bx::write(_writer, element.valueType, _err);
+ size += bx::write(_writer, element.componentType, _err);
+ size += bx::write(_writer, element.registerIndex, _err);
+ size += bx::write(_writer, element.mask, _err);
+ size += bx::write(_writer, element.readWriteMask, _err);
+ size += bx::write(_writer, element.stream, _err);
+ size += bx::write(_writer, pad, _err);
}
uint32_t len = 0;
@@ -1696,42 +1695,42 @@ namespace bgfx
if (it != nom.end() )
{
nom.erase(it);
- size += bx::write(_writer, element.name.c_str(), uint32_t(element.name.size() + 1) );
+ size += bx::write(_writer, element.name.c_str(), uint32_t(element.name.size() + 1), _err);
len += uint32_t(element.name.size() + 1);
}
}
// align 4 bytes
- size += bx::writeRep(_writer, 0xab, (len+3)/4*4 - len);
+ size += bx::writeRep(_writer, 0xab, (len+3)/4*4 - len, _err);
return size;
}
- int32_t read(bx::ReaderSeekerI* _reader, DxbcShader& _shader)
+ int32_t read(bx::ReaderSeekerI* _reader, DxbcShader& _shader, bx::Error* _err)
{
int32_t size = 0;
- size += bx::read(_reader, _shader.version);
+ size += bx::read(_reader, _shader.version, _err);
uint32_t bcLength;
- size += bx::read(_reader, bcLength);
+ size += bx::read(_reader, bcLength, _err);
uint32_t len = (bcLength-2)*sizeof(uint32_t);
_shader.byteCode.resize(len);
- size += bx::read(_reader, _shader.byteCode.data(), len);
+ size += bx::read(_reader, _shader.byteCode.data(), len, _err);
return size;
}
- int32_t write(bx::WriterI* _writer, const DxbcShader& _shader)
+ int32_t write(bx::WriterI* _writer, const DxbcShader& _shader, bx::Error* _err)
{
const uint32_t len = uint32_t(_shader.byteCode.size() );
const uint32_t bcLength = len / sizeof(uint32_t) + 2;
int32_t size = 0;
- size += bx::write(_writer, _shader.version);
- size += bx::write(_writer, bcLength);
- size += bx::write(_writer, _shader.byteCode.data(), len);
+ size += bx::write(_writer, _shader.version, _err);
+ size += bx::write(_writer, bcLength, _err);
+ size += bx::write(_writer, _shader.byteCode.data(), len, _err);
return size;
}
@@ -1743,10 +1742,10 @@ namespace bgfx
#define DXBC_CHUNK_INPUT_SIGNATURE BX_MAKEFOURCC('I', 'S', 'G', 'N')
#define DXBC_CHUNK_OUTPUT_SIGNATURE BX_MAKEFOURCC('O', 'S', 'G', 'N')
- int32_t read(bx::ReaderSeekerI* _reader, DxbcContext& _dxbc)
+ int32_t read(bx::ReaderSeekerI* _reader, DxbcContext& _dxbc, bx::Error* _err)
{
int32_t size = 0;
- size += bx::read(_reader, _dxbc.header);
+ size += bx::read(_reader, _dxbc.header, _err);
_dxbc.shader.shex = false;
for (uint32_t ii = 0; ii < _dxbc.header.numChunks; ++ii)
@@ -1754,15 +1753,15 @@ namespace bgfx
bx::seek(_reader, sizeof(DxbcContext::Header) + ii*sizeof(uint32_t), bx::Whence::Begin);
uint32_t chunkOffset;
- size += bx::read(_reader, chunkOffset);
+ size += bx::read(_reader, chunkOffset, _err);
bx::seek(_reader, chunkOffset, bx::Whence::Begin);
uint32_t fourcc;
- size += bx::read(_reader, fourcc);
+ size += bx::read(_reader, fourcc, _err);
uint32_t chunkSize;
- size += bx::read(_reader, chunkSize);
+ size += bx::read(_reader, chunkSize, _err);
switch (fourcc)
{
@@ -1771,18 +1770,18 @@ namespace bgfx
// fallthrough
case DXBC_CHUNK_SHADER:
- size += read(_reader, _dxbc.shader);
+ size += read(_reader, _dxbc.shader, _err);
break;
case BX_MAKEFOURCC('I', 'S', 'G', '1'):
case DXBC_CHUNK_INPUT_SIGNATURE:
- size += read(_reader, _dxbc.inputSignature);
+ size += read(_reader, _dxbc.inputSignature, _err);
break;
case BX_MAKEFOURCC('O', 'S', 'G', '1'):
case BX_MAKEFOURCC('O', 'S', 'G', '5'):
case DXBC_CHUNK_OUTPUT_SIGNATURE:
- size += read(_reader, _dxbc.outputSignature);
+ size += read(_reader, _dxbc.outputSignature, _err);
break;
case BX_MAKEFOURCC('A', 'o', 'n', '9'): // Contains DX9BC for feature level 9.x (*s_4_0_level_9_*) shaders.
@@ -1816,43 +1815,43 @@ namespace bgfx
return size;
}
- int32_t write(bx::WriterSeekerI* _writer, const DxbcContext& _dxbc)
+ int32_t write(bx::WriterSeekerI* _writer, const DxbcContext& _dxbc, bx::Error* _err)
{
int32_t size = 0;
int64_t dxbcOffset = bx::seek(_writer);
size += bx::write(_writer, DXBC_CHUNK_HEADER);
- size += bx::writeRep(_writer, 0, 16);
+ size += bx::writeRep(_writer, 0, 16, _err);
- size += bx::write(_writer, UINT32_C(1) );
+ size += bx::write(_writer, UINT32_C(1), _err);
int64_t sizeOffset = bx::seek(_writer);
- size += bx::writeRep(_writer, 0, 4);
+ size += bx::writeRep(_writer, 0, 4, _err);
uint32_t numChunks = 3;
- size += bx::write(_writer, numChunks);
+ size += bx::write(_writer, numChunks, _err);
int64_t chunksOffsets = bx::seek(_writer);
- size += bx::writeRep(_writer, 0, numChunks*sizeof(uint32_t) );
+ size += bx::writeRep(_writer, 0, numChunks*sizeof(uint32_t), _err);
uint32_t chunkOffset[3];
uint32_t chunkSize[3];
chunkOffset[0] = uint32_t(bx::seek(_writer) - dxbcOffset);
- size += write(_writer, DXBC_CHUNK_INPUT_SIGNATURE);
- size += write(_writer, UINT32_C(0) );
- chunkSize[0] = write(_writer, _dxbc.inputSignature);
+ size += write(_writer, DXBC_CHUNK_INPUT_SIGNATURE, _err);
+ size += write(_writer, UINT32_C(0), _err);
+ chunkSize[0] = write(_writer, _dxbc.inputSignature, _err);
chunkOffset[1] = uint32_t(bx::seek(_writer) - dxbcOffset);
- size += write(_writer, DXBC_CHUNK_OUTPUT_SIGNATURE);
- size += write(_writer, UINT32_C(0) );
- chunkSize[1] = write(_writer, _dxbc.outputSignature);
+ size += write(_writer, DXBC_CHUNK_OUTPUT_SIGNATURE, _err);
+ size += write(_writer, UINT32_C(0), _err);
+ chunkSize[1] = write(_writer, _dxbc.outputSignature, _err);
chunkOffset[2] = uint32_t(bx::seek(_writer) - dxbcOffset);
- size += write(_writer, _dxbc.shader.shex ? DXBC_CHUNK_SHADER_EX : DXBC_CHUNK_SHADER);
- size += write(_writer, UINT32_C(0) );
- chunkSize[2] = write(_writer, _dxbc.shader);
+ size += write(_writer, _dxbc.shader.shex ? DXBC_CHUNK_SHADER_EX : DXBC_CHUNK_SHADER, _err);
+ size += write(_writer, UINT32_C(0), _err);
+ chunkSize[2] = write(_writer, _dxbc.shader, _err);
size += 0
+ chunkSize[0]
@@ -1863,15 +1862,15 @@ namespace bgfx
int64_t eof = bx::seek(_writer);
bx::seek(_writer, sizeOffset, bx::Whence::Begin);
- bx::write(_writer, size);
+ bx::write(_writer, size, _err);
bx::seek(_writer, chunksOffsets, bx::Whence::Begin);
- bx::write(_writer, chunkOffset, sizeof(chunkOffset) );
+ bx::write(_writer, chunkOffset, sizeof(chunkOffset), _err);
for (uint32_t ii = 0; ii < BX_COUNTOF(chunkOffset); ++ii)
{
bx::seek(_writer, chunkOffset[ii]+4, bx::Whence::Begin);
- bx::write(_writer, chunkSize[ii]);
+ bx::write(_writer, chunkSize[ii], _err);
}
bx::seek(_writer, eof, bx::Whence::Begin);
@@ -1879,14 +1878,16 @@ namespace bgfx
return size;
}
- void parse(const DxbcShader& _src, DxbcParseFn _fn, void* _userData)
+ void parse(const DxbcShader& _src, DxbcParseFn _fn, void* _userData, bx::Error* _err)
{
+ BX_ERROR_SCOPE(_err);
+
bx::MemoryReader reader(_src.byteCode.data(), uint32_t(_src.byteCode.size() ) );
for (uint32_t token = 0, numTokens = uint32_t(_src.byteCode.size() / sizeof(uint32_t) ); token < numTokens;)
{
DxbcInstruction instruction;
- uint32_t size = read(&reader, instruction);
+ uint32_t size = read(&reader, instruction, _err);
BX_CHECK(size/4 == instruction.length, "read %d, expected %d", size/4, instruction.length); BX_UNUSED(size);
bool cont = _fn(token * sizeof(uint32_t), instruction, _userData);
@@ -1899,8 +1900,10 @@ namespace bgfx
}
}
- void filter(DxbcShader& _dst, const DxbcShader& _src, DxbcFilterFn _fn, void* _userData)
+ void filter(DxbcShader& _dst, const DxbcShader& _src, DxbcFilterFn _fn, void* _userData, bx::Error* _err)
{
+ BX_ERROR_SCOPE(_err);
+
bx::MemoryReader reader(_src.byteCode.data(), uint32_t(_src.byteCode.size() ) );
bx::MemoryBlock mb(g_allocator);
@@ -1909,12 +1912,12 @@ namespace bgfx
for (uint32_t token = 0, numTokens = uint32_t(_src.byteCode.size() / sizeof(uint32_t) ); token < numTokens;)
{
DxbcInstruction instruction;
- uint32_t size = read(&reader, instruction);
+ uint32_t size = read(&reader, instruction, _err);
BX_CHECK(size/4 == instruction.length, "read %d, expected %d", size/4, instruction.length); BX_UNUSED(size);
_fn(instruction, _userData);
- write(&writer, instruction);
+ write(&writer, instruction, _err);
token += instruction.length;
}
diff --git a/3rdparty/bgfx/src/shader_dxbc.h b/3rdparty/bgfx/src/shader_dxbc.h
index 4aa3420fd89..381fd2f79cc 100644
--- a/3rdparty/bgfx/src/shader_dxbc.h
+++ b/3rdparty/bgfx/src/shader_dxbc.h
@@ -540,8 +540,8 @@ namespace bgfx
DxbcOperand operand[6];
};
- int32_t read(bx::ReaderI* _reader, DxbcInstruction& _instruction);
- int32_t write(bx::WriterI* _writer, const DxbcInstruction& _instruction);
+ int32_t read(bx::ReaderI* _reader, DxbcInstruction& _instruction, bx::Error* _err);
+ int32_t write(bx::WriterI* _writer, const DxbcInstruction& _instruction, bx::Error* _err);
int32_t toString(char* _out, int32_t _size, const DxbcInstruction& _instruction);
struct DxbcSignature
@@ -562,8 +562,8 @@ namespace bgfx
stl::vector<Element> elements;
};
- int32_t read(bx::ReaderSeekerI* _reader, DxbcSignature& _signature);
- int32_t write(bx::WriterI* _writer, const DxbcSignature& _signature);
+ int32_t read(bx::ReaderSeekerI* _reader, DxbcSignature& _signature, bx::Error* _err);
+ int32_t write(bx::WriterI* _writer, const DxbcSignature& _signature, bx::Error* _err);
struct DxbcShader
{
@@ -572,14 +572,14 @@ namespace bgfx
bool shex;
};
- int32_t read(bx::ReaderSeekerI* _reader, DxbcShader& _shader);
- int32_t write(bx::WriterI* _writer, const DxbcShader& _shader);
+ int32_t read(bx::ReaderSeekerI* _reader, DxbcShader& _shader, bx::Error* _err);
+ int32_t write(bx::WriterI* _writer, const DxbcShader& _shader, bx::Error* _err);
typedef bool (*DxbcParseFn)(uint32_t _offset, const DxbcInstruction& _instruction, void* _userData);
- void parse(const DxbcShader& _src, DxbcParseFn _fn, void* _userData);
+ void parse(const DxbcShader& _src, DxbcParseFn _fn, void* _userData, bx::Error* _err = NULL);
typedef void (*DxbcFilterFn)(DxbcInstruction& _instruction, void* _userData);
- void filter(DxbcShader& _dst, const DxbcShader& _src, DxbcFilterFn _fn, void* _userData);
+ void filter(DxbcShader& _dst, const DxbcShader& _src, DxbcFilterFn _fn, void* _userData, bx::Error* _err = NULL);
struct DxbcContext
{
@@ -598,8 +598,8 @@ namespace bgfx
DxbcShader shader;
};
- int32_t read(bx::ReaderSeekerI* _reader, DxbcContext& _dxbc);
- int32_t write(bx::WriterSeekerI* _writer, const DxbcContext& _dxbc);
+ int32_t read(bx::ReaderSeekerI* _reader, DxbcContext& _dxbc, bx::Error* _err);
+ int32_t write(bx::WriterSeekerI* _writer, const DxbcContext& _dxbc, bx::Error* _err);
/// Calculate DXBC hash from data.
void dxbcHash(const void* _data, uint32_t _size, void* _digest);
diff --git a/3rdparty/bgfx/src/shader_spirv.cpp b/3rdparty/bgfx/src/shader_spirv.cpp
index 63a8b0aa1d7..2fec1c0b0e4 100644
--- a/3rdparty/bgfx/src/shader_spirv.cpp
+++ b/3rdparty/bgfx/src/shader_spirv.cpp
@@ -8,303 +8,387 @@
namespace bgfx
{
- struct SpirvOpcodeInfo
+ struct SpvOpcodeInfo
{
- uint8_t numOperands;
- uint8_t numValues;
- bool hasVariable;
+ bool hasType;
+ bool hasResult;
+ SpvOperand::Enum operands[8];
};
- static const SpirvOpcodeInfo s_sprivOpcodeInfo[] =
+ static const SpvOpcodeInfo s_spvOpcodeInfo[] =
{
- { 0, 0, false }, // Nop,
- { 0, 0, true }, // Source
- { 0, 0, true }, // SourceExtension
- { 0, 0, false }, // Extension
- { 0, 1, true }, // ExtInstImport
- { 0, 2, false }, // MemoryModel
- { 0, 2, false }, // EntryPoint
- { 0, 0, false }, // ExecutionMode
- { 0, 1, false }, // TypeVoid
- { 0, 1, false }, // TypeBool
- { 0, 3, false }, // TypeInt
- { 0, 2, false }, // TypeFloat
- { 0, 3, false }, // TypeVector
- { 0, 3, false }, // TypeMatrix
- { 1, 7, false }, // TypeSampler
- { 0, 0, false }, // TypeFilter
- { 0, 0, false }, // TypeArray
- { 0, 0, false }, // TypeRuntimeArray
- { 0, 0, false }, // TypeStruct
- { 0, 0, false }, // TypeOpaque
- { 0, 3, false }, // TypePointer
- { 0, 2, true }, // TypeFunction
- { 0, 0, false }, // TypeEvent
- { 0, 0, false }, // TypeDeviceEvent
- { 0, 0, false }, // TypeReserveId
- { 0, 0, false }, // TypeQueue
- { 0, 0, false }, // TypePipe
- { 0, 0, false }, // ConstantTrue
- { 0, 0, false }, // ConstantFalse
- { 0, 2, true }, // Constant
- { 0, 2, true }, // ConstantComposite
- { 0, 0, false }, // ConstantSampler
- { 0, 0, false }, // ConstantNullPointer
- { 0, 0, false }, // ConstantNullObject
- { 0, 0, false }, // SpecConstantTrue
- { 0, 0, false }, // SpecConstantFalse
- { 0, 0, false }, // SpecConstant
- { 0, 0, false }, // SpecConstantComposite
- { 0, 3, true }, // Variable
- { 0, 0, false }, // VariableArray
- { 0, 4, false }, // Function
- { 0, 0, false }, // FunctionParameter
- { 0, 0, false }, // FunctionEnd
- { 0, 0, false }, // FunctionCall
- { 0, 0, false }, // ExtInst
- { 0, 0, false }, // Undef
- { 0, 0, false }, // Load
- { 0, 2, true }, // Store
- { 0, 0, false }, // Phi
- { 0, 0, false }, // DecorationGroup
- { 0, 2, true }, // Decorate
- { 0, 0, false }, // MemberDecorate
- { 0, 0, false }, // GroupDecorate
- { 0, 0, false }, // GroupMemberDecorate
- { 0, 1, true }, // Name
- { 0, 1, true }, // MemberName
- { 0, 0, false }, // String
- { 0, 0, false }, // Line
- { 0, 0, false }, // VectorExtractDynamic
- { 0, 0, false }, // VectorInsertDynamic
- { 0, 0, false }, // VectorShuffle
- { 0, 0, false }, // CompositeConstruct
- { 0, 0, false }, // CompositeExtract
- { 0, 0, false }, // CompositeInsert
- { 0, 0, false }, // CopyObject
- { 0, 0, false }, // CopyMemory
- { 0, 0, false }, // CopyMemorySized
- { 0, 0, false }, // Sampler
- { 0, 0, false }, // TextureSample
- { 0, 0, false }, // TextureSampleDref
- { 0, 0, false }, // TextureSampleLod
- { 0, 0, false }, // TextureSampleProj
- { 0, 0, false }, // TextureSampleGrad
- { 0, 0, false }, // TextureSampleOffset
- { 0, 0, false }, // TextureSampleProjLod
- { 0, 0, false }, // TextureSampleProjGrad
- { 0, 0, false }, // TextureSampleLodOffset
- { 0, 0, false }, // TextureSampleProjOffset
- { 0, 0, false }, // TextureSampleGradOffset
- { 0, 0, false }, // TextureSampleProjLodOffset
- { 0, 0, false }, // TextureSampleProjGradOffset
- { 0, 0, false }, // TextureFetchTexelLod
- { 0, 0, false }, // TextureFetchTexelOffset
- { 0, 0, false }, // TextureFetchSample
- { 0, 0, false }, // TextureFetchTexel
- { 0, 0, false }, // TextureGather
- { 0, 0, false }, // TextureGatherOffset
- { 0, 0, false }, // TextureGatherOffsets
- { 0, 0, false }, // TextureQuerySizeLod
- { 0, 0, false }, // TextureQuerySize
- { 0, 0, false }, // TextureQueryLod
- { 0, 0, false }, // TextureQueryLevels
- { 0, 0, false }, // TextureQuerySamples
- { 0, 0, false }, // AccessChain
- { 0, 0, false }, // InBoundsAccessChain
- { 0, 0, false }, // SNegate
- { 0, 0, false }, // FNegate
- { 0, 0, false }, // Not
- { 0, 0, false }, // Any
- { 0, 0, false }, // All
- { 0, 0, false }, // ConvertFToU
- { 0, 0, false }, // ConvertFToS
- { 0, 0, false }, // ConvertSToF
- { 0, 0, false }, // ConvertUToF
- { 0, 0, false }, // UConvert
- { 0, 0, false }, // SConvert
- { 0, 0, false }, // FConvert
- { 0, 0, false }, // ConvertPtrToU
- { 0, 0, false }, // ConvertUToPtr
- { 0, 0, false }, // PtrCastToGeneric
- { 0, 0, false }, // GenericCastToPtr
- { 0, 0, false }, // Bitcast
- { 0, 0, false }, // Transpose
- { 0, 0, false }, // IsNan
- { 0, 0, false }, // IsInf
- { 0, 0, false }, // IsFinite
- { 0, 0, false }, // IsNormal
- { 0, 0, false }, // SignBitSet
- { 0, 0, false }, // LessOrGreater
- { 0, 0, false }, // Ordered
- { 0, 0, false }, // Unordered
- { 0, 0, false }, // ArrayLength
- { 0, 0, false }, // IAdd
- { 0, 0, false }, // FAdd
- { 0, 0, false }, // ISub
- { 0, 0, false }, // FSub
- { 0, 0, false }, // IMul
- { 0, 0, false }, // FMul
- { 0, 0, false }, // UDiv
- { 0, 0, false }, // SDiv
- { 0, 0, false }, // FDiv
- { 0, 0, false }, // UMod
- { 0, 0, false }, // SRem
- { 0, 0, false }, // SMod
- { 0, 0, false }, // FRem
- { 0, 0, false }, // FMod
- { 0, 0, false }, // VectorTimesScalar
- { 0, 0, false }, // MatrixTimesScalar
- { 0, 0, false }, // VectorTimesMatrix
- { 0, 0, false }, // MatrixTimesVector
- { 0, 0, false }, // MatrixTimesMatrix
- { 0, 0, false }, // OuterProduct
- { 0, 0, false }, // Dot
- { 0, 0, false }, // ShiftRightLogical
- { 0, 0, false }, // ShiftRightArithmetic
- { 0, 0, false }, // ShiftLeftLogical
- { 0, 0, false }, // LogicalOr
- { 0, 0, false }, // LogicalXor
- { 0, 0, false }, // LogicalAnd
- { 0, 0, false }, // BitwiseOr
- { 0, 0, false }, // BitwiseXor
- { 0, 0, false }, // BitwiseAnd
- { 0, 0, false }, // Select
- { 0, 0, false }, // IEqual
- { 0, 0, false }, // FOrdEqual
- { 0, 0, false }, // FUnordEqual
- { 0, 0, false }, // INotEqual
- { 0, 0, false }, // FOrdNotEqual
- { 0, 0, false }, // FUnordNotEqual
- { 0, 0, false }, // ULessThan
- { 0, 0, false }, // SLessThan
- { 0, 0, false }, // FOrdLessThan
- { 0, 0, false }, // FUnordLessThan
- { 0, 0, false }, // UGreaterThan
- { 0, 0, false }, // SGreaterThan
- { 0, 0, false }, // FOrdGreaterThan
- { 0, 0, false }, // FUnordGreaterThan
- { 0, 0, false }, // ULessThanEqual
- { 0, 0, false }, // SLessThanEqual
- { 0, 0, false }, // FOrdLessThanEqual
- { 0, 0, false }, // FUnordLessThanEqual
- { 0, 0, false }, // UGreaterThanEqual
- { 0, 0, false }, // SGreaterThanEqual
- { 0, 0, false }, // FOrdGreaterThanEqual
- { 0, 0, false }, // FUnordGreaterThanEqual
- { 0, 0, false }, // DPdx
- { 0, 0, false }, // DPdy
- { 0, 0, false }, // Fwidth
- { 0, 0, false }, // DPdxFine
- { 0, 0, false }, // DPdyFine
- { 0, 0, false }, // FwidthFine
- { 0, 0, false }, // DPdxCoarse
- { 0, 0, false }, // DPdyCoarse
- { 0, 0, false }, // FwidthCoarse
- { 0, 0, false }, // EmitVertex
- { 0, 0, false }, // EndPrimitive
- { 0, 0, false }, // EmitStreamVertex
- { 0, 0, false }, // EndStreamPrimitive
- { 0, 0, false }, // ControlBarrier
- { 0, 0, false }, // MemoryBarrier
- { 0, 0, false }, // ImagePointer
- { 0, 0, false }, // AtomicInit
- { 0, 0, false }, // AtomicLoad
- { 0, 0, false }, // AtomicStore
- { 0, 0, false }, // AtomicExchange
- { 0, 0, false }, // AtomicCompareExchange
- { 0, 0, false }, // AtomicCompareExchangeWeak
- { 0, 0, false }, // AtomicIIncrement
- { 0, 0, false }, // AtomicIDecrement
- { 0, 0, false }, // AtomicIAdd
- { 0, 0, false }, // AtomicISub
- { 0, 0, false }, // AtomicUMin
- { 0, 0, false }, // AtomicUMax
- { 0, 0, false }, // AtomicAnd
- { 0, 0, false }, // AtomicOr
- { 0, 0, false }, // AtomicXor
- { 0, 0, false }, // LoopMerge
- { 0, 0, false }, // SelectionMerge
- { 0, 1, false }, // Label
- { 0, 1, false }, // Branch
- { 0, 0, false }, // BranchConditional
- { 0, 0, false }, // Switch
- { 0, 0, false }, // Kill
- { 0, 0, false }, // Return
- { 0, 0, false }, // ReturnValue
- { 0, 0, false }, // Unreachable
- { 0, 0, false }, // LifetimeStart
- { 0, 0, false }, // LifetimeStop
- { 0, 0, false }, // CompileFlag
- { 0, 0, false }, // AsyncGroupCopy
- { 0, 0, false }, // WaitGroupEvents
- { 0, 0, false }, // GroupAll
- { 0, 0, false }, // GroupAny
- { 0, 0, false }, // GroupBroadcast
- { 0, 0, false }, // GroupIAdd
- { 0, 0, false }, // GroupFAdd
- { 0, 0, false }, // GroupFMin
- { 0, 0, false }, // GroupUMin
- { 0, 0, false }, // GroupSMin
- { 0, 0, false }, // GroupFMax
- { 0, 0, false }, // GroupUMax
- { 0, 0, false }, // GroupSMax
- { 0, 0, false }, // GenericCastToPtrExplicit
- { 0, 0, false }, // GenericPtrMemSemantics
- { 0, 0, false }, // ReadPipe
- { 0, 0, false }, // WritePipe
- { 0, 0, false }, // ReservedReadPipe
- { 0, 0, false }, // ReservedWritePipe
- { 0, 0, false }, // ReserveReadPipePackets
- { 0, 0, false }, // ReserveWritePipePackets
- { 0, 0, false }, // CommitReadPipe
- { 0, 0, false }, // CommitWritePipe
- { 0, 0, false }, // IsValidReserveId
- { 0, 0, false }, // GetNumPipePackets
- { 0, 0, false }, // GetMaxPipePackets
- { 0, 0, false }, // GroupReserveReadPipePackets
- { 0, 0, false }, // GroupReserveWritePipePackets
- { 0, 0, false }, // GroupCommitReadPipe
- { 0, 0, false }, // GroupCommitWritePipe
- { 0, 0, false }, // EnqueueMarker
- { 0, 0, false }, // EnqueueKernel
- { 0, 0, false }, // GetKernelNDrangeSubGroupCount
- { 0, 0, false }, // GetKernelNDrangeMaxSubGroupSize
- { 0, 0, false }, // GetKernelWorkGroupSize
- { 0, 0, false }, // GetKernelPreferredWorkGroupSizeMultiple
- { 0, 0, false }, // RetainEvent
- { 0, 0, false }, // ReleaseEvent
- { 0, 0, false }, // CreateUserEvent
- { 0, 0, false }, // IsValidEvent
- { 0, 0, false }, // SetUserEventStatus
- { 0, 0, false }, // CaptureEventProfilingInfo
- { 0, 0, false }, // GetDefaultQueue
- { 0, 0, false }, // BuildNDRange
- { 0, 0, false }, // SatConvertSToU
- { 0, 0, false }, // SatConvertUToS
- { 0, 0, false }, // AtomicIMin
- { 0, 0, false }, // AtomicIMax
+#define SPV_OPERAND_1(_a0) SpvOperand::_a0
+#define SPV_OPERAND_2(_a0, _a1) SPV_OPERAND_1(_a0), SPV_OPERAND_1(_a1)
+#define SPV_OPERAND_3(_a0, _a1, _a2) SPV_OPERAND_1(_a0), SPV_OPERAND_2(_a1, _a2)
+#define SPV_OPERAND_4(_a0, _a1, _a2, _a3) SPV_OPERAND_1(_a0), SPV_OPERAND_3(_a1, _a2, _a3)
+#define SPV_OPERAND_5(_a0, _a1, _a2, _a3, _a4) SPV_OPERAND_1(_a0), SPV_OPERAND_4(_a1, _a2, _a3, _a4)
+#define SPV_OPERAND_6(_a0, _a1, _a2, _a3, _a4, _a5) SPV_OPERAND_1(_a0), SPV_OPERAND_5(_a1, _a2, _a3, _a4, _a5)
+#define SPV_OPERAND_7(_a0, _a1, _a2, _a3, _a4, _a5, _a6) SPV_OPERAND_1(_a0), SPV_OPERAND_6(_a1, _a2, _a3, _a4, _a5, _a6)
+#define SPV_OPERAND_8(_a0, _a1, _a2, _a3, _a4, _a5, _a6, _a7) SPV_OPERAND_1(_a0), SPV_OPERAND_7(_a1, _a2, _a3, _a4, _a5, _a6, _a7)
+#define SPV_OPERAND_9(_a0, _a1, _a2, _a3, _a4, _a5, _a6, _a7, _a8) SPV_OPERAND_1(_a0), SPV_OPERAND_8(_a1, _a2, _a3, _a4, _a5, _a6, _a7, _a8)
+#if BX_COMPILER_MSVC
+// Workaround MSVS bug...
+# define SPV_OPERAND(...) { BX_MACRO_DISPATCHER(SPV_OPERAND_, __VA_ARGS__) BX_VA_ARGS_PASS(__VA_ARGS__) }
+#else
+# define SPV_OPERAND(...) { BX_MACRO_DISPATCHER(SPV_OPERAND_, __VA_ARGS__)(__VA_ARGS__) }
+#endif // BX_COMPILER_MSVC
+#define _ Count
+ { false, false, /* Nop, // 0 */ SPV_OPERAND(_) },
+ { true, true, /* Undef, // 1 */ SPV_OPERAND(_) },
+ { false, false, /* SourceContinued, // 2 */ SPV_OPERAND(_) },
+ { false, false, /* Source, // 3 */ SPV_OPERAND(SourceLanguage, LiteralNumber, Id, LiteralString) },
+ { false, false, /* SourceExtension, // 4 */ SPV_OPERAND(LiteralString) },
+ { false, true, /* Name, // 5 */ SPV_OPERAND(LiteralString) },
+ { false, true, /* MemberName, // 6 */ SPV_OPERAND(LiteralNumber, LiteralString) },
+ { false, false, /* String, // 7 */ SPV_OPERAND(_) },
+ { false, false, /* Line, // 8 */ SPV_OPERAND(_) },
+ { false, false, /* ------------------------------- Invalid9 // 9 */ SPV_OPERAND(_) },
+ { false, false, /* Extension, // 10 */ SPV_OPERAND(LiteralString) },
+ { false, true, /* ExtInstImport, // 11 */ SPV_OPERAND(LiteralString) },
+ { true, true, /* ExtInst, // 12 */ SPV_OPERAND(LiteralNumber) },
+ { false, false, /* ------------------------------ Invalid13 // 13 */ SPV_OPERAND(_) },
+ { false, false, /* MemoryModel, // 14 */ SPV_OPERAND(AddressingModel, MemoryModel) },
+ { false, false, /* EntryPoint, // 15 */ SPV_OPERAND(ExecutionModel, Id, LiteralString) },
+ { true, true, /* ExecutionMode, // 16 */ SPV_OPERAND(_) },
+ { false, false, /* Capability, // 17 */ SPV_OPERAND(Capability ) },
+ { false, false, /* ------------------------------ Invalid18 // 18 */ SPV_OPERAND(_) },
+ { false, true, /* TypeVoid, // 19 */ SPV_OPERAND(LiteralNumber) },
+ { false, true, /* TypeBool, // 20 */ SPV_OPERAND(LiteralNumber) },
+ { false, true, /* TypeInt, // 21 */ SPV_OPERAND(LiteralNumber) },
+ { false, true, /* TypeFloat, // 22 */ SPV_OPERAND(LiteralNumber) },
+ { false, true, /* TypeVector, // 23 */ SPV_OPERAND(ComponentType, LiteralNumber) },
+ { false, true, /* TypeMatrix, // 24 */ SPV_OPERAND(LiteralNumber) },
+ { false, true, /* TypeImage, // 25 */ SPV_OPERAND(SampledType, Dim, LiteralNumber, LiteralNumber, LiteralNumber, LiteralNumber, ImageFormat, AccessQualifier) },
+ { false, true, /* TypeSampler, // 26 */ SPV_OPERAND(LiteralNumber) },
+ { false, true, /* TypeSampledImage, // 27 */ SPV_OPERAND(LiteralNumber) },
+ { false, true, /* TypeArray, // 28 */ SPV_OPERAND(LiteralNumber) },
+ { false, true, /* TypeRuntimeArray, // 29 */ SPV_OPERAND(_) },
+ { false, true, /* TypeStruct, // 30 */ SPV_OPERAND(_) },
+ { false, true, /* TypeOpaque, // 31 */ SPV_OPERAND(_) },
+ { false, true, /* TypePointer, // 32 */ SPV_OPERAND(StorageClass, Id) },
+ { false, true, /* TypeFunction, // 33 */ SPV_OPERAND(Id, Id, Id, Id, Id) },
+ { false, true, /* TypeEvent, // 34 */ SPV_OPERAND(_) },
+ { false, true, /* TypeDeviceEvent, // 35 */ SPV_OPERAND(_) },
+ { false, true, /* TypeReserveId, // 36 */ SPV_OPERAND(_) },
+ { false, true, /* TypeQueue, // 37 */ SPV_OPERAND(_) },
+ { false, true, /* TypePipe, // 38 */ SPV_OPERAND(_) },
+ { false, true, /* TypeForwardPointer, // 39 */ SPV_OPERAND(_) },
+ { false, false, /* ------------------------------ Invalid40 // 40 */ SPV_OPERAND(_) },
+ { true, true, /* ConstantTrue, // 41 */ SPV_OPERAND(_) },
+ { true, true, /* ConstantFalse, // 42 */ SPV_OPERAND(_) },
+ { true, true, /* Constant, // 43 */ SPV_OPERAND(LiteralRep) },
+ { true, true, /* ConstantComposite, // 44 */ SPV_OPERAND(LiteralRep) },
+ { true, true, /* ConstantSampler, // 45 */ SPV_OPERAND(SamplerAddressingMode, LiteralNumber, SamplerFilterMode) },
+ { true, true, /* ConstantNull, // 46 */ SPV_OPERAND(_) },
+ { false, false, /* ------------------------------ Invalid47 // 47 */ SPV_OPERAND(_) },
+ { true, true, /* SpecConstantTrue, // 48 */ SPV_OPERAND(_) },
+ { true, true, /* SpecConstantFalse, // 49 */ SPV_OPERAND(_) },
+ { true, true, /* SpecConstant, // 50 */ SPV_OPERAND(_) },
+ { true, true, /* SpecConstantComposite, // 51 */ SPV_OPERAND(_) },
+ { true, true, /* SpecConstantOp, // 52 */ SPV_OPERAND(_) },
+ { false, false, /* ------------------------------ Invalid53 // 53 */ SPV_OPERAND(_) },
+ { true, true, /* Function, // 54 */ SPV_OPERAND(FunctionControl, Id) },
+ { true, true, /* FunctionParameter, // 55 */ SPV_OPERAND(_) },
+ { false, false, /* FunctionEnd, // 56 */ SPV_OPERAND(_) },
+ { true, true, /* FunctionCall, // 57 */ SPV_OPERAND(Function, IdRep) },
+ { false, false, /* ------------------------------ Invalid58 // 58 */ SPV_OPERAND(_) },
+ { true, true, /* Variable, // 59 */ SPV_OPERAND(StorageClass, Id) },
+ { true, true, /* ImageTexelPointer, // 60 */ SPV_OPERAND(_) },
+ { true, true, /* Load, // 61 */ SPV_OPERAND(Pointer, MemoryAccess) },
+ { false, false, /* Store, // 62 */ SPV_OPERAND(Pointer, Object, MemoryAccess) },
+ { false, false, /* CopyMemory, // 63 */ SPV_OPERAND(_) },
+ { false, false, /* CopyMemorySized, // 64 */ SPV_OPERAND(_) },
+ { true, true, /* AccessChain, // 65 */ SPV_OPERAND(Base, IdRep) },
+ { true, true, /* InBoundsAccessChain, // 66 */ SPV_OPERAND(Base, IdRep) },
+ { true, true, /* PtrAccessChain, // 67 */ SPV_OPERAND(_) },
+ { true, true, /* ArrayLength, // 68 */ SPV_OPERAND(_) },
+ { true, true, /* GenericPtrMemSemantics, // 69 */ SPV_OPERAND(_) },
+ { true, true, /* InBoundsPtrAccessChain, // 70 */ SPV_OPERAND(_) },
+ { false, false, /* Decorate, // 71 */ SPV_OPERAND(Id, Decoration, LiteralRep) },
+ { false, false, /* MemberDecorate, // 72 */ SPV_OPERAND(StructureType, LiteralNumber, Decoration, LiteralRep) },
+ { false, false, /* DecorationGroup, // 73 */ SPV_OPERAND(_) },
+ { false, false, /* GroupDecorate, // 74 */ SPV_OPERAND(_) },
+ { false, false, /* GroupMemberDecorate, // 75 */ SPV_OPERAND(_) },
+ { false, false, /* ------------------------------ Invalid76 // 76 */ SPV_OPERAND(_) },
+ { true, true, /* VectorExtractDynamic, // 77 */ SPV_OPERAND(_) },
+ { true, true, /* VectorInsertDynamic, // 78 */ SPV_OPERAND(_) },
+ { true, true, /* VectorShuffle, // 79 */ SPV_OPERAND(Id, Id, LiteralRep) },
+ { true, true, /* CompositeConstruct, // 80 */ SPV_OPERAND(IdRep) },
+ { true, true, /* CompositeExtract, // 81 */ SPV_OPERAND(Composite, LiteralRep) },
+ { true, true, /* CompositeInsert, // 82 */ SPV_OPERAND(Id, Composite, LiteralRep) },
+ { true, true, /* CopyObject, // 83 */ SPV_OPERAND(Id) },
+ { true, true, /* Transpose, // 84 */ SPV_OPERAND(Matrix) },
+ { false, false, /* ------------------------------ Invalid85 // 85 */ SPV_OPERAND(_) },
+ { true, true, /* SampledImage, // 86 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSampleImplicitLod, // 87 */ SPV_OPERAND(SampledImage, Coordinate, ImageOperands, IdRep) },
+ { true, true, /* ImageSampleExplicitLod, // 88 */ SPV_OPERAND(SampledImage, Coordinate, ImageOperands, Id, IdRep) },
+ { true, true, /* ImageSampleDrefImplicitLod, // 89 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSampleDrefExplicitLod, // 90 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSampleProjImplicitLod, // 91 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSampleProjExplicitLod, // 92 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSampleProjDrefImplicitLod, // 93 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSampleProjDrefExplicitLod, // 94 */ SPV_OPERAND(_) },
+ { true, true, /* ImageFetch, // 95 */ SPV_OPERAND(_) },
+ { true, true, /* ImageGather, // 96 */ SPV_OPERAND(SampledImage, Coordinate, Component, ImageOperands, IdRep) },
+ { true, true, /* ImageDrefGather, // 97 */ SPV_OPERAND(SampledImage, Coordinate, Dref, ImageOperands, IdRep) },
+ { true, true, /* ImageRead, // 98 */ SPV_OPERAND(_) },
+ { false, false, /* ImageWrite, // 99 */ SPV_OPERAND(_) },
+ { true, true, /* Image, // 100 */ SPV_OPERAND(_) },
+ { true, true, /* ImageQueryFormat, // 101 */ SPV_OPERAND(_) },
+ { true, true, /* ImageQueryOrder, // 102 */ SPV_OPERAND(_) },
+ { true, true, /* ImageQuerySizeLod, // 103 */ SPV_OPERAND(_) },
+ { true, true, /* ImageQuerySize, // 104 */ SPV_OPERAND(_) },
+ { true, true, /* ImageQueryLod, // 105 */ SPV_OPERAND(_) },
+ { true, true, /* ImageQueryLevels, // 106 */ SPV_OPERAND(_) },
+ { true, true, /* ImageQuerySamples, // 107 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid108 // 108 */ SPV_OPERAND(_) },
+ { true, true, /* ConvertFToU, // 109 */ SPV_OPERAND(_) },
+ { true, true, /* ConvertFToS, // 110 */ SPV_OPERAND(_) },
+ { true, true, /* ConvertSToF, // 111 */ SPV_OPERAND(_) },
+ { true, true, /* ConvertUToF, // 112 */ SPV_OPERAND(_) },
+ { true, true, /* UConvert, // 113 */ SPV_OPERAND(Id) },
+ { true, true, /* SConvert, // 114 */ SPV_OPERAND(Id) },
+ { true, true, /* FConvert, // 115 */ SPV_OPERAND(Id) },
+ { true, true, /* QuantizeToF16, // 116 */ SPV_OPERAND(_) },
+ { true, true, /* ConvertPtrToU, // 117 */ SPV_OPERAND(_) },
+ { true, true, /* SatConvertSToU, // 118 */ SPV_OPERAND(_) },
+ { true, true, /* SatConvertUToS, // 119 */ SPV_OPERAND(_) },
+ { true, true, /* ConvertUToPtr, // 120 */ SPV_OPERAND(_) },
+ { true, true, /* PtrCastToGeneric, // 121 */ SPV_OPERAND(_) },
+ { true, true, /* GenericCastToPtr, // 122 */ SPV_OPERAND(_) },
+ { true, true, /* GenericCastToPtrExplicit, // 123 */ SPV_OPERAND(_) },
+ { true, true, /* Bitcast, // 124 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid125 // 125 */ SPV_OPERAND(_) },
+ { true, true, /* SNegate, // 126 */ SPV_OPERAND(Id) },
+ { true, true, /* FNegate, // 127 */ SPV_OPERAND(Id) },
+ { true, true, /* IAdd, // 128 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* FAdd, // 129 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* ISub, // 130 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* FSub, // 131 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* IMul, // 132 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* FMul, // 133 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* UDiv, // 134 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* SDiv, // 135 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* FDiv, // 136 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* UMod, // 137 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* SRem, // 138 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* SMod, // 139 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* FRem, // 140 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* FMod, // 141 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* VectorTimesScalar, // 142 */ SPV_OPERAND(Vector, Scalar) },
+ { true, true, /* MatrixTimesScalar, // 143 */ SPV_OPERAND(Matrix, Scalar) },
+ { true, true, /* VectorTimesMatrix, // 144 */ SPV_OPERAND(Vector, Matrix) },
+ { true, true, /* MatrixTimesVector, // 145 */ SPV_OPERAND(Matrix, Vector) },
+ { true, true, /* MatrixTimesMatrix, // 146 */ SPV_OPERAND(Matrix, Matrix) },
+ { true, true, /* OuterProduct, // 147 */ SPV_OPERAND(Vector, Vector) },
+ { true, true, /* Dot, // 148 */ SPV_OPERAND(Vector, Vector) },
+ { true, true, /* IAddCarry, // 149 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* ISubBorrow, // 150 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* UMulExtended, // 151 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* SMulExtended, // 152 */ SPV_OPERAND(Id, Id) },
+ { false, false, /* ----------------------------- Invalid153 // 153 */ SPV_OPERAND(_) },
+ { true, true, /* Any, // 154 */ SPV_OPERAND(Vector) },
+ { true, true, /* All, // 155 */ SPV_OPERAND(Vector) },
+ { true, true, /* IsNan, // 156 */ SPV_OPERAND(Id) },
+ { true, true, /* IsInf, // 157 */ SPV_OPERAND(Id) },
+ { true, true, /* IsFinite, // 158 */ SPV_OPERAND(Id) },
+ { true, true, /* IsNormal, // 159 */ SPV_OPERAND(Id) },
+ { true, true, /* SignBitSet, // 160 */ SPV_OPERAND(Id) },
+ { true, true, /* LessOrGreater, // 161 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* Ordered, // 162 */ SPV_OPERAND(Id, Id) },
+ { true, true, /* Unordered, // 163 */ SPV_OPERAND(_) },
+ { true, true, /* LogicalEqual, // 164 */ SPV_OPERAND(_) },
+ { true, true, /* LogicalNotEqual, // 165 */ SPV_OPERAND(_) },
+ { true, true, /* LogicalOr, // 166 */ SPV_OPERAND(_) },
+ { true, true, /* LogicalAnd, // 167 */ SPV_OPERAND(_) },
+ { true, true, /* LogicalNot, // 168 */ SPV_OPERAND(_) },
+ { true, true, /* Select, // 169 */ SPV_OPERAND(Condition, Id, Id) },
+ { true, true, /* IEqual, // 170 */ SPV_OPERAND(_) },
+ { true, true, /* INotEqual, // 171 */ SPV_OPERAND(_) },
+ { true, true, /* UGreaterThan, // 172 */ SPV_OPERAND(_) },
+ { true, true, /* SGreaterThan, // 173 */ SPV_OPERAND(_) },
+ { true, true, /* UGreaterThanEqual, // 174 */ SPV_OPERAND(_) },
+ { true, true, /* SGreaterThanEqual, // 175 */ SPV_OPERAND(_) },
+ { true, true, /* ULessThan, // 176 */ SPV_OPERAND(_) },
+ { true, true, /* SLessThan, // 177 */ SPV_OPERAND(_) },
+ { true, true, /* ULessThanEqual, // 178 */ SPV_OPERAND(_) },
+ { true, true, /* SLessThanEqual, // 179 */ SPV_OPERAND(_) },
+ { true, true, /* FOrdEqual, // 180 */ SPV_OPERAND(_) },
+ { true, true, /* FUnordEqual, // 181 */ SPV_OPERAND(_) },
+ { true, true, /* FOrdNotEqual, // 182 */ SPV_OPERAND(_) },
+ { true, true, /* FUnordNotEqual, // 183 */ SPV_OPERAND(_) },
+ { true, true, /* FOrdLessThan, // 184 */ SPV_OPERAND(_) },
+ { true, true, /* FUnordLessThan, // 185 */ SPV_OPERAND(_) },
+ { true, true, /* FOrdGreaterThan, // 186 */ SPV_OPERAND(_) },
+ { true, true, /* FUnordGreaterThan, // 187 */ SPV_OPERAND(_) },
+ { true, true, /* FOrdLessThanEqual, // 188 */ SPV_OPERAND(_) },
+ { true, true, /* FUnordLessThanEqual, // 189 */ SPV_OPERAND(_) },
+ { true, true, /* FOrdGreaterThanEqual, // 190 */ SPV_OPERAND(_) },
+ { true, true, /* FUnordGreaterThanEqual, // 191 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid192 // 192 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid193 // 193 */ SPV_OPERAND(_) },
+ { true, true, /* ShiftRightLogical, // 194 */ SPV_OPERAND(_) },
+ { true, true, /* ShiftRightArithmetic, // 195 */ SPV_OPERAND(_) },
+ { true, true, /* ShiftLeftLogical, // 196 */ SPV_OPERAND(_) },
+ { true, true, /* BitwiseOr, // 197 */ SPV_OPERAND(_) },
+ { true, true, /* BitwiseXor, // 198 */ SPV_OPERAND(_) },
+ { true, true, /* BitwiseAnd, // 199 */ SPV_OPERAND(_) },
+ { true, true, /* Not, // 200 */ SPV_OPERAND(_) },
+ { true, true, /* BitFieldInsert, // 201 */ SPV_OPERAND(_) },
+ { true, true, /* BitFieldSExtract, // 202 */ SPV_OPERAND(_) },
+ { true, true, /* BitFieldUExtract, // 203 */ SPV_OPERAND(_) },
+ { true, true, /* BitReverse, // 204 */ SPV_OPERAND(_) },
+ { true, true, /* BitCount, // 205 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid206 // 206 */ SPV_OPERAND(_) },
+ { true, true, /* DPdx, // 207 */ SPV_OPERAND(_) },
+ { true, true, /* DPdy, // 208 */ SPV_OPERAND(_) },
+ { true, true, /* Fwidth, // 209 */ SPV_OPERAND(_) },
+ { true, true, /* DPdxFine, // 210 */ SPV_OPERAND(_) },
+ { true, true, /* DPdyFine, // 211 */ SPV_OPERAND(_) },
+ { true, true, /* FwidthFine, // 212 */ SPV_OPERAND(_) },
+ { true, true, /* DPdxCoarse, // 213 */ SPV_OPERAND(_) },
+ { true, true, /* DPdyCoarse, // 214 */ SPV_OPERAND(_) },
+ { true, true, /* FwidthCoarse, // 215 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid216 // 216 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid217 // 217 */ SPV_OPERAND(_) },
+ { false, false, /* EmitVertex, // 218 */ SPV_OPERAND(_) },
+ { false, false, /* EndPrimitive, // 219 */ SPV_OPERAND(_) },
+ { false, false, /* EmitStreamVertex, // 220 */ SPV_OPERAND(_) },
+ { false, false, /* EndStreamPrimitive, // 221 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid222 // 222 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid223 // 223 */ SPV_OPERAND(_) },
+ { false, false, /* ControlBarrier, // 224 */ SPV_OPERAND(_) },
+ { false, false, /* MemoryBarrier, // 225 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid226 // 226 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicLoad, // 227 */ SPV_OPERAND(_) },
+ { false, false, /* AtomicStore, // 228 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicExchange, // 229 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicCompareExchange, // 230 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicCompareExchangeWeak, // 231 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicIIncrement, // 232 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicIDecrement, // 233 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicIAdd, // 234 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicISub, // 235 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicSMin, // 236 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicUMin, // 237 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicSMax, // 238 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicUMax, // 239 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicAnd, // 240 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicOr, // 241 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicXor, // 242 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid243 // 243 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid244 // 244 */ SPV_OPERAND(_) },
+ { true, true, /* Phi, // 245 */ SPV_OPERAND(_) },
+ { false, false, /* LoopMerge, // 246 */ SPV_OPERAND(_) },
+ { false, false, /* SelectionMerge, // 247 */ SPV_OPERAND(_) },
+ { false, true, /* Label, // 248 */ SPV_OPERAND(_) },
+ { false, false, /* Branch, // 249 */ SPV_OPERAND(Id) },
+ { false, false, /* BranchConditional, // 250 */ SPV_OPERAND(Condition, Id, Id, LiteralRep) },
+ { false, false, /* Switch, // 251 */ SPV_OPERAND(_) },
+ { false, false, /* Kill, // 252 */ SPV_OPERAND(_) },
+ { false, false, /* Return, // 253 */ SPV_OPERAND(_) },
+ { false, false, /* ReturnValue, // 254 */ SPV_OPERAND(Id) },
+ { false, false, /* Unreachable, // 255 */ SPV_OPERAND(_) },
+ { false, false, /* LifetimeStart, // 256 */ SPV_OPERAND(_) },
+ { false, false, /* LifetimeStop, // 257 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid258 // 258 */ SPV_OPERAND(_) },
+ { true, true, /* GroupAsyncCopy, // 259 */ SPV_OPERAND(_) },
+ { false, false, /* GroupWaitEvents, // 260 */ SPV_OPERAND(_) },
+ { true, true, /* GroupAll, // 261 */ SPV_OPERAND(_) },
+ { true, true, /* GroupAny, // 262 */ SPV_OPERAND(_) },
+ { true, true, /* GroupBroadcast, // 263 */ SPV_OPERAND(_) },
+ { true, true, /* GroupIAdd, // 264 */ SPV_OPERAND(_) },
+ { true, true, /* GroupFAdd, // 265 */ SPV_OPERAND(_) },
+ { true, true, /* GroupFMin, // 266 */ SPV_OPERAND(_) },
+ { true, true, /* GroupUMin, // 267 */ SPV_OPERAND(_) },
+ { true, true, /* GroupSMin, // 268 */ SPV_OPERAND(_) },
+ { true, true, /* GroupFMax, // 269 */ SPV_OPERAND(_) },
+ { true, true, /* GroupUMax, // 270 */ SPV_OPERAND(_) },
+ { true, true, /* GroupSMax, // 271 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid272 // 272 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid273 // 273 */ SPV_OPERAND(_) },
+ { true, true, /* ReadPipe, // 274 */ SPV_OPERAND(_) },
+ { true, true, /* WritePipe, // 275 */ SPV_OPERAND(_) },
+ { true, true, /* ReservedReadPipe, // 276 */ SPV_OPERAND(_) },
+ { true, true, /* ReservedWritePipe, // 277 */ SPV_OPERAND(_) },
+ { true, true, /* ReserveReadPipePackets, // 278 */ SPV_OPERAND(_) },
+ { true, true, /* ReserveWritePipePackets, // 279 */ SPV_OPERAND(_) },
+ { false, false, /* CommitReadPipe, // 280 */ SPV_OPERAND(_) },
+ { false, false, /* CommitWritePipe, // 281 */ SPV_OPERAND(_) },
+ { true, true, /* IsValidReserveId, // 282 */ SPV_OPERAND(_) },
+ { true, true, /* GetNumPipePackets, // 283 */ SPV_OPERAND(_) },
+ { true, true, /* GetMaxPipePackets, // 284 */ SPV_OPERAND(_) },
+ { true, true, /* GroupReserveReadPipePackets, // 285 */ SPV_OPERAND(_) },
+ { true, true, /* GroupReserveWritePipePackets, // 286 */ SPV_OPERAND(_) },
+ { false, false, /* GroupCommitReadPipe, // 287 */ SPV_OPERAND(_) },
+ { false, false, /* GroupCommitWritePipe, // 288 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid289 // 289 */ SPV_OPERAND(_) },
+ { false, false, /* ----------------------------- Invalid290 // 290 */ SPV_OPERAND(_) },
+ { true, true, /* EnqueueMarker, // 291 */ SPV_OPERAND(_) },
+ { true, true, /* EnqueueKernel, // 292 */ SPV_OPERAND(_) },
+ { true, true, /* GetKernelNDrangeSubGroupCount, // 293 */ SPV_OPERAND(_) },
+ { true, true, /* GetKernelNDrangeMaxSubGroupSize, // 294 */ SPV_OPERAND(_) },
+ { true, true, /* GetKernelWorkGroupSize, // 295 */ SPV_OPERAND(_) },
+ { true, true, /* GetKernelPreferredWorkGroupSizeMultiple, // 296 */ SPV_OPERAND(_) },
+ { false, false, /* RetainEvent, // 297 */ SPV_OPERAND(_) },
+ { false, false, /* ReleaseEvent, // 298 */ SPV_OPERAND(_) },
+ { true, true, /* CreateUserEvent, // 299 */ SPV_OPERAND(_) },
+ { true, true, /* IsValidEvent, // 300 */ SPV_OPERAND(_) },
+ { false, false, /* SetUserEventStatus, // 301 */ SPV_OPERAND(_) },
+ { false, false, /* CaptureEventProfilingInfo, // 302 */ SPV_OPERAND(_) },
+ { true, true, /* GetDefaultQueue, // 303 */ SPV_OPERAND(_) },
+ { true, true, /* BuildNDRange, // 304 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSparseSampleImplicitLod, // 305 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSparseSampleExplicitLod, // 306 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSparseSampleDrefImplicitLod, // 307 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSparseSampleDrefExplicitLod, // 308 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSparseSampleProjImplicitLod, // 309 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSparseSampleProjExplicitLod, // 310 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSparseSampleProjDrefImplicitLod, // 311 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSparseSampleProjDrefExplicitLod, // 312 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSparseFetch, // 313 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSparseGather, // 314 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSparseDrefGather, // 315 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSparseTexelsResident, // 316 */ SPV_OPERAND(_) },
+ { false, false, /* NoLine, // 317 */ SPV_OPERAND(_) },
+ { true, true, /* AtomicFlagTestAndSet, // 318 */ SPV_OPERAND(_) },
+ { false, false, /* AtomicFlagClear, // 319 */ SPV_OPERAND(_) },
+ { true, true, /* ImageSparseRead, // 320 */ SPV_OPERAND(_) },
+#undef _
+#undef SPV_OPERAND
};
- BX_STATIC_ASSERT(BX_COUNTOF(s_sprivOpcodeInfo) == SpirvOpcode::Count);
+ BX_STATIC_ASSERT(BX_COUNTOF(s_spvOpcodeInfo) == SpvOpcode::Count);
- const char* s_spirvOpcode[] =
+ const char* s_spvOpcode[] =
{
"Nop",
+ "Undef",
+ "SourceContinued",
"Source",
"SourceExtension",
+ "Name",
+ "MemberName",
+ "String",
+ "Line",
+ "Invalid9",
"Extension",
"ExtInstImport",
+ "ExtInst",
+ "Invalid13",
"MemoryModel",
"EntryPoint",
"ExecutionMode",
+ "Capability",
+ "Invalid18",
"TypeVoid",
"TypeBool",
"TypeInt",
"TypeFloat",
"TypeVector",
"TypeMatrix",
+ "TypeImage",
"TypeSampler",
- "TypeFilter",
+ "TypeSampledImage",
"TypeArray",
"TypeRuntimeArray",
"TypeStruct",
@@ -316,37 +400,44 @@ namespace bgfx
"TypeReserveId",
"TypeQueue",
"TypePipe",
+ "TypeForwardPointer",
+ "Invalid40",
"ConstantTrue",
"ConstantFalse",
"Constant",
"ConstantComposite",
"ConstantSampler",
- "ConstantNullPointer",
- "ConstantNullObject",
+ "ConstantNull",
+ "Invalid47",
"SpecConstantTrue",
"SpecConstantFalse",
"SpecConstant",
"SpecConstantComposite",
- "Variable",
- "VariableArray",
+ "SpecConstantOp",
+ "Invalid53",
"Function",
"FunctionParameter",
"FunctionEnd",
"FunctionCall",
- "ExtInst",
- "Undef",
+ "Invalid58",
+ "Variable",
+ "ImageTexelPointer",
"Load",
"Store",
- "Phi",
- "DecorationGroup",
+ "CopyMemory",
+ "CopyMemorySized",
+ "AccessChain",
+ "InBoundsAccessChain",
+ "PtrAccessChain",
+ "ArrayLength",
+ "GenericPtrMemSemantics",
+ "InBoundsPtrAccessChain",
"Decorate",
"MemberDecorate",
+ "DecorationGroup",
"GroupDecorate",
"GroupMemberDecorate",
- "Name",
- "MemberName",
- "String",
- "Line",
+ "Invalid76",
"VectorExtractDynamic",
"VectorInsertDynamic",
"VectorShuffle",
@@ -354,41 +445,31 @@ namespace bgfx
"CompositeExtract",
"CompositeInsert",
"CopyObject",
- "CopyMemory",
- "CopyMemorySized",
- "Sampler",
- "TextureSample",
- "TextureSampleDref",
- "TextureSampleLod",
- "TextureSampleProj",
- "TextureSampleGrad",
- "TextureSampleOffset",
- "TextureSampleProjLod",
- "TextureSampleProjGrad",
- "TextureSampleLodOffset",
- "TextureSampleProjOffset",
- "TextureSampleGradOffset",
- "TextureSampleProjLodOffset",
- "TextureSampleProjGradOffset",
- "TextureFetchTexelLod",
- "TextureFetchTexelOffset",
- "TextureFetchSample",
- "TextureFetchTexel",
- "TextureGather",
- "TextureGatherOffset",
- "TextureGatherOffsets",
- "TextureQuerySizeLod",
- "TextureQuerySize",
- "TextureQueryLod",
- "TextureQueryLevels",
- "TextureQuerySamples",
- "AccessChain",
- "InBoundsAccessChain",
- "SNegate",
- "FNegate",
- "Not",
- "Any",
- "All",
+ "Transpose",
+ "Invalid85",
+ "SampledImage",
+ "ImageSampleImplicitLod",
+ "ImageSampleExplicitLod",
+ "ImageSampleDrefImplicitLod",
+ "ImageSampleDrefExplicitLod",
+ "ImageSampleProjImplicitLod",
+ "ImageSampleProjExplicitLod",
+ "ImageSampleProjDrefImplicitLod",
+ "ImageSampleProjDrefExplicitLod",
+ "ImageFetch",
+ "ImageGather",
+ "ImageDrefGather",
+ "ImageRead",
+ "ImageWrite",
+ "Image",
+ "ImageQueryFormat",
+ "ImageQueryOrder",
+ "ImageQuerySizeLod",
+ "ImageQuerySize",
+ "ImageQueryLod",
+ "ImageQueryLevels",
+ "ImageQuerySamples",
+ "Invalid108",
"ConvertFToU",
"ConvertFToS",
"ConvertSToF",
@@ -396,21 +477,18 @@ namespace bgfx
"UConvert",
"SConvert",
"FConvert",
+ "QuantizeToF16",
"ConvertPtrToU",
+ "SatConvertSToU",
+ "SatConvertUToS",
"ConvertUToPtr",
"PtrCastToGeneric",
"GenericCastToPtr",
+ "GenericCastToPtrExplicit",
"Bitcast",
- "Transpose",
- "IsNan",
- "IsInf",
- "IsFinite",
- "IsNormal",
- "SignBitSet",
- "LessOrGreater",
- "Ordered",
- "Unordered",
- "ArrayLength",
+ "Invalid125",
+ "SNegate",
+ "FNegate",
"IAdd",
"FAdd",
"ISub",
@@ -432,38 +510,64 @@ namespace bgfx
"MatrixTimesMatrix",
"OuterProduct",
"Dot",
- "ShiftRightLogical",
- "ShiftRightArithmetic",
- "ShiftLeftLogical",
+ "IAddCarry",
+ "ISubBorrow",
+ "UMulExtended",
+ "SMulExtended",
+ "Invalid153",
+ "Any",
+ "All",
+ "IsNan",
+ "IsInf",
+ "IsFinite",
+ "IsNormal",
+ "SignBitSet",
+ "LessOrGreater",
+ "Ordered",
+ "Unordered",
+ "LogicalEqual",
+ "LogicalNotEqual",
"LogicalOr",
- "LogicalXor",
"LogicalAnd",
- "BitwiseOr",
- "BitwiseXor",
- "BitwiseAnd",
+ "LogicalNot",
"Select",
"IEqual",
+ "INotEqual",
+ "UGreaterThan",
+ "SGreaterThan",
+ "UGreaterThanEqual",
+ "SGreaterThanEqual",
+ "ULessThan",
+ "SLessThan",
+ "ULessThanEqual",
+ "SLessThanEqual",
"FOrdEqual",
"FUnordEqual",
- "INotEqual",
"FOrdNotEqual",
"FUnordNotEqual",
- "ULessThan",
- "SLessThan",
"FOrdLessThan",
"FUnordLessThan",
- "UGreaterThan",
- "SGreaterThan",
"FOrdGreaterThan",
"FUnordGreaterThan",
- "ULessThanEqual",
- "SLessThanEqual",
"FOrdLessThanEqual",
"FUnordLessThanEqual",
- "UGreaterThanEqual",
- "SGreaterThanEqual",
"FOrdGreaterThanEqual",
"FUnordGreaterThanEqual",
+ "Invalid192",
+ "Invalid193",
+ "ShiftRightLogical",
+ "ShiftRightArithmetic",
+ "ShiftLeftLogical",
+ "BitwiseOr",
+ "BitwiseXor",
+ "BitwiseAnd",
+ "Not",
+ "BitFieldInsert",
+ "BitFieldSExtract",
+ "BitFieldUExtract",
+ "BitReverse",
+ "BitCount",
+ "Invalid206",
"DPdx",
"DPdy",
"Fwidth",
@@ -473,14 +577,17 @@ namespace bgfx
"DPdxCoarse",
"DPdyCoarse",
"FwidthCoarse",
+ "Invalid216",
+ "Invalid217",
"EmitVertex",
"EndPrimitive",
"EmitStreamVertex",
+ "Invalid222",
+ "Invalid223",
"EndStreamPrimitive",
"ControlBarrier",
"MemoryBarrier",
- "ImagePointer",
- "AtomicInit",
+ "Invalid226",
"AtomicLoad",
"AtomicStore",
"AtomicExchange",
@@ -490,11 +597,16 @@ namespace bgfx
"AtomicIDecrement",
"AtomicIAdd",
"AtomicISub",
+ "AtomicSMin",
"AtomicUMin",
+ "AtomicSMax",
"AtomicUMax",
"AtomicAnd",
"AtomicOr",
"AtomicXor",
+ "Invalid243",
+ "Invalid244",
+ "Phi",
"LoopMerge",
"SelectionMerge",
"Label",
@@ -507,9 +619,9 @@ namespace bgfx
"Unreachable",
"LifetimeStart",
"LifetimeStop",
- "CompileFlag",
- "AsyncGroupCopy",
- "WaitGroupEvents",
+ "Invalid258",
+ "GroupAsyncCopy",
+ "GroupWaitEvents",
"GroupAll",
"GroupAny",
"GroupBroadcast",
@@ -521,8 +633,8 @@ namespace bgfx
"GroupFMax",
"GroupUMax",
"GroupSMax",
- "GenericCastToPtrExplicit",
- "GenericPtrMemSemantics",
+ "Invalid272",
+ "Invalid273",
"ReadPipe",
"WritePipe",
"ReservedReadPipe",
@@ -538,6 +650,8 @@ namespace bgfx
"GroupReserveWritePipePackets",
"GroupCommitReadPipe",
"GroupCommitWritePipe",
+ "Invalid289",
+ "Invalid290",
"EnqueueMarker",
"EnqueueKernel",
"GetKernelNDrangeSubGroupCount",
@@ -552,170 +666,318 @@ namespace bgfx
"CaptureEventProfilingInfo",
"GetDefaultQueue",
"BuildNDRange",
- "SatConvertSToU",
- "SatConvertUToS",
- "AtomicIMin",
- "AtomicIMax",
+ "ImageSparseSampleImplicitLod",
+ "ImageSparseSampleExplicitLod",
+ "ImageSparseSampleDrefImplicitLod",
+ "ImageSparseSampleDrefExplicitLod",
+ "ImageSparseSampleProjImplicitLod",
+ "ImageSparseSampleProjExplicitLod",
+ "ImageSparseSampleProjDrefImplicitLod",
+ "ImageSparseSampleProjDrefExplicitLod",
+ "ImageSparseFetch",
+ "ImageSparseGather",
+ "ImageSparseDrefGather",
+ "ImageSparseTexelsResident",
+ "NoLine",
+ "AtomicFlagTestAndSet",
+ "AtomicFlagClear",
+ "ImageSparseRead",
+ };
+ BX_STATIC_ASSERT(BX_COUNTOF(s_spvOpcode) == SpvOpcode::Count);
+
+ const char* getName(SpvOpcode::Enum _opcode)
+ {
+ BX_WARN(_opcode < SpvOpcode::Count, "Unknown opcode id %d.", _opcode);
+ return _opcode < SpvOpcode::Count
+ ? s_spvOpcode[_opcode]
+ : "?SpvOpcode?"
+ ;
+ }
+
+ static const char* s_spvStorageClass[] =
+ {
+ "UniformConstant",
+ "Input",
+ "Uniform",
+ "Output",
+ "Workgroup",
+ "CrossWorkgroup",
+ "Private",
+ "Function",
+ "Generic",
+ "PushConstant",
+ "AtomicCounter",
+ "Image",
};
- BX_STATIC_ASSERT(BX_COUNTOF(s_spirvOpcode) == SpirvOpcode::Count);
+ BX_STATIC_ASSERT(BX_COUNTOF(s_spvStorageClass) == SpvStorageClass::Count);
- const char* getName(SpirvOpcode::Enum _opcode)
+ const char* getName(SpvStorageClass::Enum _enum)
{
- BX_CHECK(_opcode < SpirvOpcode::Count, "Unknown opcode id %d.", _opcode);
- return s_spirvOpcode[_opcode];
+ BX_CHECK(_enum < SpvStorageClass::Count, "Unknown storage class id %d.", _enum);
+ return _enum < SpvStorageClass::Count
+ ? s_spvStorageClass[_enum]
+ : "?SpvStorageClass?"
+ ;
}
- int32_t read(bx::ReaderI* _reader, SpirvOperand& _operand)
+ int32_t read(bx::ReaderI* _reader, SpvOperand& _operand, bx::Error* _err)
{
int32_t size = 0;
- BX_UNUSED(_operand);
uint32_t token;
- size += bx::read(_reader, token);
+ _operand.literalString = "";
+
+ switch (_operand.type)
+ {
+ case SpvOperand::LiteralString:
+ do
+ {
+ size += bx::read(_reader, token, _err);
+ _operand.literalString.append( (char*)&token, (char*)&token + sizeof(token) );
+ }
+ while (0 != (token & 0xff000000) && _err->isOk() );
+ break;
+
+ default:
+ size += bx::read(_reader, _operand.data[0], _err);
+ break;
+ }
return size;
}
- int32_t read(bx::ReaderI* _reader, SpirvInstruction& _instruction)
+ int32_t read(bx::ReaderI* _reader, SpvInstruction& _instruction, bx::Error* _err)
{
int32_t size = 0;
uint32_t token;
- size += bx::read(_reader, token);
+ size += bx::read(_reader, token, _err);
+
+ _instruction.opcode = SpvOpcode::Enum( (token & UINT32_C(0x0000ffff) ) );
+ _instruction.length = uint16_t( (token & UINT32_C(0xffff0000) ) >> 16);
- _instruction.opcode = SpirvOpcode::Enum( (token & UINT32_C(0x0000ffff) ) );
- _instruction.length = uint16_t( (token & UINT32_C(0xffff0000) ) >> 16);
+ if (_instruction.opcode >= SpvOpcode::Count)
+ {
+ BX_ERROR_SET(_err, BGFX_SHADER_SPIRV_INVALID_INSTRUCTION, "SPIR-V: Invalid instruction.");
+ return size;
+ }
- uint32_t currOp = 0;
+ if (0 == _instruction.length)
+ {
+ return size;
+ }
- const SpirvOpcodeInfo& info = s_sprivOpcodeInfo[_instruction.opcode];
+ const SpvOpcodeInfo& info = s_spvOpcodeInfo[_instruction.opcode];
+ _instruction.hasType = info.hasType;
+ _instruction.hasResult = info.hasResult;
- if (0 < info.numValues)
+ if (info.hasType)
{
- size += read(_reader, _instruction.un.value, info.numValues*sizeof(uint32_t) );
+ size += read(_reader, _instruction.type, _err);
}
- if (info.hasVariable)
+ if (info.hasResult)
{
- while (size/4 != _instruction.length)
- {
- uint32_t tmp;
- size += bx::read(_reader, tmp);
- }
+ size += read(_reader, _instruction.result, _err);
}
- else
+
+ uint16_t currOp = 0;
+ switch (_instruction.opcode)
{
- _instruction.numOperands = info.numOperands;
- switch (info.numOperands)
+ case SpvOpcode::EntryPoint:
+ _instruction.operand[currOp].type = info.operands[currOp];
+ size += read(_reader, _instruction.operand[currOp++], _err);
+ _instruction.operand[currOp].type = info.operands[currOp];
+ size += read(_reader, _instruction.operand[currOp++], _err);
+ _instruction.operand[currOp].type = info.operands[currOp];
+ size += read(_reader, _instruction.operand[currOp++], _err);
+
+ _instruction.operand[currOp].type = SpvOperand::Id;
+ for (uint32_t ii = 0, num = _instruction.length - size/4; ii < num; ++ii)
{
- case 6: size += read(_reader, _instruction.operand[currOp++]);
- case 5: size += read(_reader, _instruction.operand[currOp++]);
- case 4: size += read(_reader, _instruction.operand[currOp++]);
- case 3: size += read(_reader, _instruction.operand[currOp++]);
- case 2: size += read(_reader, _instruction.operand[currOp++]);
- case 1: size += read(_reader, _instruction.operand[currOp++]);
- case 0:
- break;
-
- default:
- BX_WARN(false, "Instruction %s with invalid number of operands %d (numValues %d)."
- , getName(_instruction.opcode)
- , info.numOperands
- , info.numValues
- );
- break;
+ size += read(_reader, _instruction.operand[currOp], _err);
}
+ break;
- BX_WARN(size/4 == _instruction.length, "read %d, expected %d, %s"
- , size/4
- , _instruction.length
- , getName(_instruction.opcode)
- );
- while (size/4 != _instruction.length)
+ default:
+ for (;size/4 != _instruction.length && _err->isOk(); ++currOp)
{
- uint32_t tmp;
- size += bx::read(_reader, tmp);
+ _instruction.operand[currOp].type = info.operands[currOp];
+ size += read(_reader, _instruction.operand[currOp], _err);
}
+ break;
}
+ _instruction.numOperands = currOp;
+
return size;
}
- int32_t write(bx::WriterI* _writer, const SpirvInstruction& _instruction)
+ int32_t write(bx::WriterI* _writer, const SpvInstruction& _instruction, bx::Error* _err)
{
int32_t size = 0;
- BX_UNUSED(_writer, _instruction);
+ BX_UNUSED(_writer, _instruction, _err);
return size;
}
- int32_t toString(char* _out, int32_t _size, const SpirvInstruction& _instruction)
+ int32_t toString(char* _out, int32_t _size, const SpvInstruction& _instruction)
{
int32_t size = 0;
+
+ if (_instruction.hasResult)
+ {
+ size += bx::snprintf(&_out[size], bx::uint32_imax(0, _size-size)
+ , " %%%d = "
+ , _instruction.result
+ );
+ }
+
size += bx::snprintf(&_out[size], bx::uint32_imax(0, _size-size)
- , "%s %d (%d, %d)"
+ , "%s"
, getName(_instruction.opcode)
- , _instruction.numOperands
- , _instruction.un.value[0]
- , _instruction.un.value[1]
);
+ for (uint32_t ii = 0, num = _instruction.numOperands; ii < num; ++ii)
+ {
+ const SpvOperand& operand = _instruction.operand[ii];
+ switch (operand.type)
+ {
+ case SpvOperand::AddressingModel:
+ size += bx::snprintf(&_out[size], bx::uint32_imax(0, _size-size)
+ , "%sAddressingModel(%d)"
+ , 0 == ii ? " " : ", "
+ , operand.data[0]
+ );
+ break;
+
+ case SpvOperand::FunctionControl:
+ size += bx::snprintf(&_out[size], bx::uint32_imax(0, _size-size)
+ , "%s0x%08x"
+ , 0 == ii ? " " : ", "
+ , operand.data[0]
+ );
+ break;
+
+ case SpvOperand::LiteralNumber:
+ size += bx::snprintf(&_out[size], bx::uint32_imax(0, _size-size)
+ , "%s%d"
+ , 0 == ii ? " " : ", "
+ , operand.data[0]
+ );
+ break;
+
+ case SpvOperand::LiteralString:
+ size += bx::snprintf(&_out[size], bx::uint32_imax(0, _size-size)
+ , "%s%s"
+ , 0 == ii ? " " : ", "
+ , operand.literalString.c_str()
+ );
+ break;
+
+ case SpvOperand::MemoryModel:
+ size += bx::snprintf(&_out[size], bx::uint32_imax(0, _size-size)
+ , "%sMemoryModel(%d)"
+ , 0 == ii ? " " : ", "
+ , operand.data[0]
+ );
+ break;
+
+ case SpvOperand::StorageClass:
+ size += bx::snprintf(&_out[size], bx::uint32_imax(0, _size-size)
+ , "%s%s"
+ , 0 == ii ? " " : ", "
+ , getName(SpvStorageClass::Enum(operand.data[0]) )
+ );
+ break;
+
+ case SpvOperand::Count:
+ size += bx::snprintf(&_out[size], bx::uint32_imax(0, _size-size)
+ , "%s__%d__"
+ , 0 == ii ? " " : ", "
+ , operand.data[0]
+ );
+ break;
+
+ default:
+ size += bx::snprintf(&_out[size], bx::uint32_imax(0, _size-size)
+ , "%s%%%d"
+ , 0 == ii ? " " : ", "
+ , operand.data[0]
+ );
+ break;
+
+ }
+ }
+
return size;
}
- int32_t read(bx::ReaderSeekerI* _reader, SpirvShader& _shader)
+ int32_t read(bx::ReaderSeekerI* _reader, SpvShader& _shader, bx::Error* _err)
{
int32_t size = 0;
- uint32_t len = uint32_t(bx::getSize(_reader) - bx::seek(_reader) );
- _shader.byteCode.resize(len);
- size += bx::read(_reader, _shader.byteCode.data(), len);
+ uint32_t numBytes = uint32_t(bx::getSize(_reader) - bx::seek(_reader) );
+ _shader.byteCode.resize(numBytes);
+ size += bx::read(_reader, _shader.byteCode.data(), numBytes, _err);
return size;
}
- int32_t write(bx::WriterI* _writer, const SpirvShader& _shader)
+ int32_t write(bx::WriterI* _writer, const SpvShader& _shader, bx::Error* _err)
{
int32_t size = 0;
- BX_UNUSED(_writer, _shader);
+ BX_UNUSED(_writer, _shader, _err);
return size;
}
#define SPIRV_MAGIC 0x07230203
- int32_t read(bx::ReaderSeekerI* _reader, Spirv& _spirv)
+ int32_t read(bx::ReaderSeekerI* _reader, SpirV& _spirv, bx::Error* _err)
{
+ BX_ERROR_SCOPE(_err);
+
int32_t size = 0;
- size += bx::read(_reader, _spirv.header);
+ size += bx::read(_reader, _spirv.header, _err);
- if (size != sizeof(Spirv::Header)
+ if (!_err->isOk()
+ || size != sizeof(SpirV::Header)
|| _spirv.header.magic != SPIRV_MAGIC
)
{
- // error
- return -size;
+ BX_ERROR_SET(_err, BGFX_SHADER_SPIRV_INVALID_HEADER, "SPIR-V: Invalid header.");
+ return size;
}
- size += read(_reader, _spirv.shader);
+ size += read(_reader, _spirv.shader, _err);
return size;
}
- int32_t write(bx::WriterSeekerI* _writer, const Spirv& _spirv)
+ int32_t write(bx::WriterSeekerI* _writer, const SpirV& _spirv, bx::Error* _err)
{
int32_t size = 0;
- BX_UNUSED(_writer, _spirv);
+ BX_UNUSED(_writer, _spirv, _err);
return size;
}
- void parse(const SpirvShader& _src, SpirvParseFn _fn, void* _userData)
+ void parse(const SpvShader& _src, SpirvParseFn _fn, void* _userData, bx::Error* _err)
{
- bx::MemoryReader reader(_src.byteCode.data(), uint32_t(_src.byteCode.size() ) );
+ BX_ERROR_SCOPE(_err);
+
+ uint32_t numBytes = uint32_t(_src.byteCode.size() );
+ bx::MemoryReader reader(_src.byteCode.data(), numBytes);
for (uint32_t token = 0, numTokens = uint32_t(_src.byteCode.size() / sizeof(uint32_t) ); token < numTokens;)
{
- SpirvInstruction instruction;
- uint32_t size = read(&reader, instruction);
+ SpvInstruction instruction;
+ uint32_t size = read(&reader, instruction, _err);
+
+ if (!_err->isOk() )
+ {
+ return;
+ }
+
BX_CHECK(size/4 == instruction.length, "read %d, expected %d, %s"
, size/4
, instruction.length
@@ -723,7 +985,11 @@ namespace bgfx
);
BX_UNUSED(size);
- _fn(token * sizeof(uint32_t), instruction, _userData);
+ bool cont = _fn(token * sizeof(uint32_t), instruction, _userData);
+ if (!cont)
+ {
+ return;
+ }
token += instruction.length;
}
diff --git a/3rdparty/bgfx/src/shader_spirv.h b/3rdparty/bgfx/src/shader_spirv.h
index 73577e77030..9a7c81b1ac2 100644
--- a/3rdparty/bgfx/src/shader_spirv.h
+++ b/3rdparty/bgfx/src/shader_spirv.h
@@ -8,30 +8,45 @@
#include <bx/readerwriter.h>
+BX_ERROR_RESULT(BGFX_SHADER_SPIRV_INVALID_HEADER, BX_MAKEFOURCC('S', 'H', 0, 1) );
+BX_ERROR_RESULT(BGFX_SHADER_SPIRV_INVALID_INSTRUCTION, BX_MAKEFOURCC('S', 'H', 0, 2) );
+
namespace bgfx
{
// Reference: https://www.khronos.org/registry/spir-v/specs/1.0/SPIRV.html
- struct SpirvOpcode
+ struct SpvOpcode
{
enum Enum
{
Nop,
+ Undef,
+ SourceContinued,
Source,
SourceExtension,
+ Name,
+ MemberName,
+ String,
+ Line,
+ Invalid9,
Extension,
ExtInstImport,
+ ExtInst,
+ Invalid13,
MemoryModel,
EntryPoint,
ExecutionMode,
+ Capability,
+ Invalid18,
TypeVoid,
TypeBool,
TypeInt,
TypeFloat,
TypeVector,
TypeMatrix,
+ TypeImage,
TypeSampler,
- TypeFilter,
+ TypeSampledImage,
TypeArray,
TypeRuntimeArray,
TypeStruct,
@@ -43,37 +58,44 @@ namespace bgfx
TypeReserveId,
TypeQueue,
TypePipe,
+ TypeForwardPointer,
+ Invalid40,
ConstantTrue,
ConstantFalse,
Constant,
ConstantComposite,
ConstantSampler,
- ConstantNullPointer,
- ConstantNullObject,
+ ConstantNull,
+ Invalid47,
SpecConstantTrue,
SpecConstantFalse,
SpecConstant,
SpecConstantComposite,
- Variable,
- VariableArray,
+ SpecConstantOp,
+ Invalid53,
Function,
FunctionParameter,
FunctionEnd,
FunctionCall,
- ExtInst,
- Undef,
+ Invalid58,
+ Variable,
+ ImageTexelPointer,
Load,
Store,
- Phi,
- DecorationGroup,
+ CopyMemory,
+ CopyMemorySized,
+ AccessChain,
+ InBoundsAccessChain,
+ PtrAccessChain,
+ ArrayLength,
+ GenericPtrMemSemantics,
+ InBoundsPtrAccessChain,
Decorate,
MemberDecorate,
+ DecorationGroup,
GroupDecorate,
GroupMemberDecorate,
- Name,
- MemberName,
- String,
- Line,
+ Invalid76,
VectorExtractDynamic,
VectorInsertDynamic,
VectorShuffle,
@@ -81,41 +103,31 @@ namespace bgfx
CompositeExtract,
CompositeInsert,
CopyObject,
- CopyMemory,
- CopyMemorySized,
- Sampler,
- TextureSample,
- TextureSampleDref,
- TextureSampleLod,
- TextureSampleProj,
- TextureSampleGrad,
- TextureSampleOffset,
- TextureSampleProjLod,
- TextureSampleProjGrad,
- TextureSampleLodOffset,
- TextureSampleProjOffset,
- TextureSampleGradOffset,
- TextureSampleProjLodOffset,
- TextureSampleProjGradOffset,
- TextureFetchTexelLod,
- TextureFetchTexelOffset,
- TextureFetchSample,
- TextureFetchTexel,
- TextureGather,
- TextureGatherOffset,
- TextureGatherOffsets,
- TextureQuerySizeLod,
- TextureQuerySize,
- TextureQueryLod,
- TextureQueryLevels,
- TextureQuerySamples,
- AccessChain,
- InBoundsAccessChain,
- SNegate,
- FNegate,
- Not,
- Any,
- All,
+ Transpose,
+ Invalid85,
+ SampledImage,
+ ImageSampleImplicitLod,
+ ImageSampleExplicitLod,
+ ImageSampleDrefImplicitLod,
+ ImageSampleDrefExplicitLod,
+ ImageSampleProjImplicitLod,
+ ImageSampleProjExplicitLod,
+ ImageSampleProjDrefImplicitLod,
+ ImageSampleProjDrefExplicitLod,
+ ImageFetch,
+ ImageGather,
+ ImageDrefGather,
+ ImageRead,
+ ImageWrite,
+ Image,
+ ImageQueryFormat,
+ ImageQueryOrder,
+ ImageQuerySizeLod,
+ ImageQuerySize,
+ ImageQueryLod,
+ ImageQueryLevels,
+ ImageQuerySamples,
+ Invalid108,
ConvertFToU,
ConvertFToS,
ConvertSToF,
@@ -123,21 +135,18 @@ namespace bgfx
UConvert,
SConvert,
FConvert,
+ QuantizeToF16,
ConvertPtrToU,
+ SatConvertSToU,
+ SatConvertUToS,
ConvertUToPtr,
PtrCastToGeneric,
GenericCastToPtr,
+ GenericCastToPtrExplicit,
Bitcast,
- Transpose,
- IsNan,
- IsInf,
- IsFinite,
- IsNormal,
- SignBitSet,
- LessOrGreater,
- Ordered,
- Unordered,
- ArrayLength,
+ Invalid125,
+ SNegate,
+ FNegate,
IAdd,
FAdd,
ISub,
@@ -159,38 +168,64 @@ namespace bgfx
MatrixTimesMatrix,
OuterProduct,
Dot,
- ShiftRightLogical,
- ShiftRightArithmetic,
- ShiftLeftLogical,
+ IAddCarry,
+ ISubBorrow,
+ UMulExtended,
+ SMulExtended,
+ Invalid153,
+ Any,
+ All,
+ IsNan,
+ IsInf,
+ IsFinite,
+ IsNormal,
+ SignBitSet,
+ LessOrGreater,
+ Ordered,
+ Unordered,
+ LogicalEqual,
+ LogicalNotEqual,
LogicalOr,
- LogicalXor,
LogicalAnd,
- BitwiseOr,
- BitwiseXor,
- BitwiseAnd,
+ LogicalNot,
Select,
IEqual,
+ INotEqual,
+ UGreaterThan,
+ SGreaterThan,
+ UGreaterThanEqual,
+ SGreaterThanEqual,
+ ULessThan,
+ SLessThan,
+ ULessThanEqual,
+ SLessThanEqual,
FOrdEqual,
FUnordEqual,
- INotEqual,
FOrdNotEqual,
FUnordNotEqual,
- ULessThan,
- SLessThan,
FOrdLessThan,
FUnordLessThan,
- UGreaterThan,
- SGreaterThan,
FOrdGreaterThan,
FUnordGreaterThan,
- ULessThanEqual,
- SLessThanEqual,
FOrdLessThanEqual,
FUnordLessThanEqual,
- UGreaterThanEqual,
- SGreaterThanEqual,
FOrdGreaterThanEqual,
FUnordGreaterThanEqual,
+ Invalid192,
+ Invalid193,
+ ShiftRightLogical,
+ ShiftRightArithmetic,
+ ShiftLeftLogical,
+ BitwiseOr,
+ BitwiseXor,
+ BitwiseAnd,
+ Not,
+ BitFieldInsert,
+ BitFieldSExtract,
+ BitFieldUExtract,
+ BitReverse,
+ BitCount,
+ Invalid206,
DPdx,
DPdy,
Fwidth,
@@ -200,14 +235,17 @@ namespace bgfx
DPdxCoarse,
DPdyCoarse,
FwidthCoarse,
+ Invalid216,
+ Invalid217,
EmitVertex,
EndPrimitive,
EmitStreamVertex,
EndStreamPrimitive,
+ Invalid222,
+ Invalid223,
ControlBarrier,
MemoryBarrier,
- ImagePointer,
- AtomicInit,
+ Invalid226,
AtomicLoad,
AtomicStore,
AtomicExchange,
@@ -217,11 +255,16 @@ namespace bgfx
AtomicIDecrement,
AtomicIAdd,
AtomicISub,
+ AtomicSMin,
AtomicUMin,
+ AtomicSMax,
AtomicUMax,
AtomicAnd,
AtomicOr,
AtomicXor,
+ Invalid243,
+ Invalid244,
+ Phi,
LoopMerge,
SelectionMerge,
Label,
@@ -234,9 +277,9 @@ namespace bgfx
Unreachable,
LifetimeStart,
LifetimeStop,
- CompileFlag,
- AsyncGroupCopy,
- WaitGroupEvents,
+ Invalid258,
+ GroupAsyncCopy,
+ GroupWaitEvents,
GroupAll,
GroupAny,
GroupBroadcast,
@@ -248,8 +291,8 @@ namespace bgfx
GroupFMax,
GroupUMax,
GroupSMax,
- GenericCastToPtrExplicit,
- GenericPtrMemSemantics,
+ Invalid272,
+ Invalid273,
ReadPipe,
WritePipe,
ReservedReadPipe,
@@ -265,6 +308,8 @@ namespace bgfx
GroupReserveWritePipePackets,
GroupCommitReadPipe,
GroupCommitWritePipe,
+ Invalid289,
+ Invalid290,
EnqueueMarker,
EnqueueKernel,
GetKernelNDrangeSubGroupCount,
@@ -279,10 +324,22 @@ namespace bgfx
CaptureEventProfilingInfo,
GetDefaultQueue,
BuildNDRange,
- SatConvertSToU,
- SatConvertUToS,
- AtomicIMin,
- AtomicIMax,
+ ImageSparseSampleImplicitLod,
+ ImageSparseSampleExplicitLod,
+ ImageSparseSampleDrefImplicitLod,
+ ImageSparseSampleDrefExplicitLod,
+ ImageSparseSampleProjImplicitLod,
+ ImageSparseSampleProjExplicitLod,
+ ImageSparseSampleProjDrefImplicitLod,
+ ImageSparseSampleProjDrefExplicitLod,
+ ImageSparseFetch,
+ ImageSparseGather,
+ ImageSparseDrefGather,
+ ImageSparseTexelsResident,
+ NoLine,
+ AtomicFlagTestAndSet,
+ AtomicFlagClear,
+ ImageSparseRead,
Count
};
@@ -294,12 +351,11 @@ namespace bgfx
{
Position,
PointSize,
- ClipVertex,
ClipDistance,
CullDistance,
VertexId,
InstanceId,
- BuiltInPrimitiveId,
+ PrimitiveId,
InvocationId,
Layer,
ViewportIndex,
@@ -313,7 +369,6 @@ namespace bgfx
SampleId,
SamplePosition,
SampleMask,
- FragColor,
FragDepth,
HelperInvocation,
NumWorkgroups,
@@ -327,17 +382,20 @@ namespace bgfx
EnqueuedWorkgroupSize,
GlobalOffset,
GlobalLinearId,
- WorkgroupLinearId,
SubgroupSize,
SubgroupMaxSize,
NumSubgroups,
NumEnqueuedSubgroups,
SubgroupId,
SubgroupLocalInvocationId,
+ VertexIndex,
+ InstanceIndex,
+
+ Count
};
};
- struct SpirvExecutionModel
+ struct SpvExecutionModel
{
enum Enum
{
@@ -353,21 +411,31 @@ namespace bgfx
};
};
- struct SpirvMemoryModel
+ struct SpvAddressingModel
+ {
+ enum Enum
+ {
+ Logical,
+ Physical32,
+ Physical64,
+
+ Count
+ };
+ };
+
+ struct SpvMemoryModel
{
enum Enum
{
Simple,
GLSL450,
- OpenCL12,
- OpenCL20,
- OpenCL21,
+ OpenCL,
Count
};
};
- struct SpirvStorageClass
+ struct SpvStorageClass
{
enum Enum
{
@@ -375,17 +443,20 @@ namespace bgfx
Input,
Uniform,
Output,
- WorkgroupLocal,
- WorkgroupGlobal,
- PrivateGlobal,
+ Workgroup,
+ CrossWorkgroup,
+ Private,
Function,
Generic,
- Private,
+ PushConstant,
AtomicCounter,
+ Image,
+
+ Count
};
};
- struct SpirvResourceDim
+ struct SpvResourceDim
{
enum Enum
{
@@ -395,26 +466,27 @@ namespace bgfx
TextureCube,
TextureRect,
Buffer,
+ SubpassData,
};
};
- struct SpirvDecoration
+ struct SpvDecoration
{
enum Enum
{
- PrecisionLow,
- PrecisionMedium,
- PrecisionHigh,
+ RelaxedPrecision,
+ SpecId,
Block,
BufferBlock,
RowMajor,
ColMajor,
+ ArrayStride,
+ MatrixStride,
GLSLShared,
- GLSLStd140,
- GLSLStd430,
GLSLPacked,
- Smooth,
- Noperspective,
+ CPacked,
+ BuiltIn,
+ NoPerspective,
Flat,
Patch,
Centroid,
@@ -425,11 +497,9 @@ namespace bgfx
Volatile,
Constant,
Coherent,
- Nonwritable,
- Nonreadable,
+ NonWritable,
+ NonReadable,
Uniform,
- NoStaticUse,
- CPacked,
SaturatedConversion,
Stream,
Location,
@@ -438,66 +508,104 @@ namespace bgfx
Binding,
DescriptorSet,
Offset,
- Alignment,
XfbBuffer,
- Stride,
- BuiltIn,
+ XfbStride,
FuncParamAttr,
FPRoundingMode,
FPFastMathMode,
LinkageAttributes,
- SpecId,
+ NoContraction,
+ InputAttachmentIndex,
+ Alignment,
Count
};
};
- struct SpirvOperand
+ struct SpvOperand
{
+ enum Enum
+ {
+ AccessQualifier,
+ AddressingModel,
+ Base,
+ Capability,
+ Component,
+ ComponentType,
+ Composite,
+ Condition,
+ Coordinate,
+ Decoration,
+ Dim,
+ Dref,
+ ExecutionModel,
+ Function,
+ FunctionControl,
+ Id,
+ IdRep,
+ ImageFormat,
+ ImageOperands,
+ LiteralNumber,
+ LiteralRep,
+ LiteralString,
+ Matrix,
+ MemoryAccess,
+ MemoryModel,
+ Object,
+ Pointer,
+ SampledType,
+ SampledImage,
+ SamplerAddressingMode,
+ SamplerFilterMode,
+ Scalar,
+ SourceLanguage,
+ StorageClass,
+ StructureType,
+ Vector,
+
+ Count
+ };
+
+ Enum type;
+ uint32_t data[4];
+
+ uint32_t target;
+ stl::string literalString;
};
- struct SpirvInstruction
+ struct SpvInstruction
{
- SpirvOpcode::Enum opcode;
+ SpvOpcode::Enum opcode;
uint16_t length;
+ uint16_t numOperands;
- uint8_t numOperands;
- SpirvOperand operand[6];
-
- union
- {
- struct ResultTypeId
- {
- uint32_t resultType;
- uint32_t id;
- };
-
- ResultTypeId constant;
- ResultTypeId constantComposite;
+ uint32_t type;
+ uint32_t result;
+ bool hasType;
+ bool hasResult;
- uint32_t value[8];
- } un;
+ SpvOperand operand[8];
};
- int32_t read(bx::ReaderI* _reader, SpirvInstruction& _instruction);
- int32_t write(bx::WriterI* _writer, const SpirvInstruction& _instruction);
- int32_t toString(char* _out, int32_t _size, const SpirvInstruction& _instruction);
+ int32_t read(bx::ReaderI* _reader, SpvInstruction& _instruction, bx::Error* _err);
+ int32_t write(bx::WriterI* _writer, const SpvInstruction& _instruction, bx::Error* _err);
+ int32_t toString(char* _out, int32_t _size, const SpvInstruction& _instruction);
- struct SpirvShader
+ struct SpvShader
{
stl::vector<uint8_t> byteCode;
};
- int32_t read(bx::ReaderSeekerI* _reader, SpirvShader& _shader);
- int32_t write(bx::WriterI* _writer, const SpirvShader& _shader);
+ int32_t read(bx::ReaderSeekerI* _reader, SpvShader& _shader, bx::Error* _err);
+ int32_t write(bx::WriterI* _writer, const SpvShader& _shader, bx::Error* _err);
- typedef void (*SpirvParseFn)(uint32_t _offset, const SpirvInstruction& _instruction, void* _userData);
- void parse(const SpirvShader& _src, SpirvParseFn _fn, void* _userData);
+ typedef bool (*SpirvParseFn)(uint32_t _offset, const SpvInstruction& _instruction, void* _userData);
+ void parse(const SpvShader& _src, SpirvParseFn _fn, void* _userData, bx::Error* _err = NULL);
- typedef void (*SpirvFilterFn)(SpirvInstruction& _instruction, void* _userData);
- void filter(SpirvShader& _dst, const SpirvShader& _src, SpirvFilterFn _fn, void* _userData);
+ typedef void (*SpirvFilterFn)(SpvInstruction& _instruction, void* _userData);
+ void filter(SpvShader& _dst, const SpvShader& _src, SpirvFilterFn _fn, void* _userData, bx::Error* _err = NULL);
- struct Spirv
+ struct SpirV
{
struct Header
{
@@ -509,11 +617,11 @@ namespace bgfx
};
Header header;
- SpirvShader shader;
+ SpvShader shader;
};
- int32_t read(bx::ReaderSeekerI* _reader, Spirv& _spirv);
- int32_t write(bx::WriterSeekerI* _writer, const Spirv& _spirv);
+ int32_t read(bx::ReaderSeekerI* _reader, SpirV& _spirv, bx::Error* _err);
+ int32_t write(bx::WriterSeekerI* _writer, const SpirV& _spirv, bx::Error* _err);
} // namespace bgfx
diff --git a/3rdparty/bgfx/src/topology.cpp b/3rdparty/bgfx/src/topology.cpp
new file mode 100644
index 00000000000..767e4995772
--- /dev/null
+++ b/3rdparty/bgfx/src/topology.cpp
@@ -0,0 +1,216 @@
+/*
+ * Copyright 2011-2016 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#include <bx/debug.h>
+#include <bx/allocator.h>
+#include <bx/radixsort.h>
+
+#include "config.h"
+#include "topology.h"
+
+namespace bgfx
+{
+ template<typename IndexT>
+ static uint32_t topologyConvertTriListFlipWinding(void* _dst, uint32_t _dstSize, const IndexT* _indices, uint32_t _numIndices)
+ {
+ if (NULL == _dst)
+ {
+ return _numIndices;
+ }
+
+ IndexT* dst = (IndexT*)_dst;
+ IndexT* end = &dst[_dstSize/sizeof(IndexT)];
+ for (uint32_t ii = 0; ii < _numIndices && dst < end; ii += 3, dst += 3)
+ {
+ const IndexT* tri = &_indices[ii];
+ IndexT i0 = tri[0], i1 = tri[1], i2 = tri[2];
+
+ dst[0] = i0;
+ dst[1] = i2;
+ dst[2] = i1;
+ }
+
+ return _numIndices;
+ }
+
+ template<typename IndexT, typename SortT>
+ static uint32_t topologyConvertTriListToLineList(void* _dst, uint32_t _dstSize, const IndexT* _indices, uint32_t _numIndices, IndexT* _temp, SortT* _tempSort)
+ {
+ // Create all line pairs and sort indices.
+ IndexT* dst = _temp;
+ for (uint32_t ii = 0; ii < _numIndices; ii += 3)
+ {
+ const IndexT* tri = &_indices[ii];
+ IndexT i0 = tri[0], i1 = tri[1], i2 = tri[2];
+
+ if (i0 > i1) { bx::xchg(i0, i1); }
+ if (i1 > i2) { bx::xchg(i1, i2); }
+ if (i0 > i1) { bx::xchg(i0, i1); }
+ BX_CHECK(i0 < i1 && i1 < i2, "");
+
+ dst[0] = i0; dst[1] = i1;
+ dst[2] = i1; dst[3] = i2;
+ dst[4] = i0; dst[5] = i2;
+ dst += 6;
+ }
+
+ // Sort all line pairs.
+ SortT* sorted = (SortT*)_temp;
+ bx::radixSort(sorted, _tempSort, _numIndices);
+
+ uint32_t num = 0;
+
+ // Remove all line pair duplicates.
+ if (NULL == _dst)
+ {
+ SortT last = sorted[0];
+ for (uint32_t ii = 1; ii < _numIndices; ++ii)
+ {
+ if (last != sorted[ii])
+ {
+ num += 2;
+ last = sorted[ii];
+ }
+ }
+ num += 2;
+ }
+ else
+ {
+ dst = (IndexT*)_dst;
+ IndexT* end = &dst[_dstSize/sizeof(IndexT)];
+ SortT last = sorted[0];
+ for (uint32_t ii = 1; ii < _numIndices && dst < end; ++ii)
+ {
+ if (last != sorted[ii])
+ {
+ union Un { SortT key; struct { IndexT i0; IndexT i1; } u16; } un = { last };
+ dst[0] = un.u16.i0;
+ dst[1] = un.u16.i1;
+ dst += 2;
+ last = sorted[ii];
+ }
+ }
+
+ if (dst < end)
+ {
+ union Un { SortT key; struct { IndexT i0; IndexT i1; } u16; } un = { last };
+ dst[0] = un.u16.i0;
+ dst[1] = un.u16.i1;
+ dst += 2;
+ }
+
+ num = uint32_t(dst - (IndexT*)_dst);
+ }
+
+ return num;
+ }
+
+ template<typename IndexT, typename SortT>
+ static uint32_t topologyConvertTriListToLineList(void* _dst, uint32_t _dstSize, const IndexT* _indices, uint32_t _numIndices, bx::AllocatorI* _allocator)
+ {
+ IndexT* temp = (IndexT*)BX_ALLOC(_allocator, _numIndices*2*sizeof(IndexT)*2);
+ SortT* tempSort = (SortT*)&temp[_numIndices*2];
+ uint32_t num = topologyConvertTriListToLineList(_dst, _dstSize, _indices, _numIndices, temp, tempSort);
+ BX_FREE(_allocator, temp);
+ return num;
+ }
+
+ template<typename IndexT>
+ static uint32_t topologyConvertTriStripToTriList(void* _dst, uint32_t _dstSize, const IndexT* _indices, uint32_t _numIndices)
+ {
+ IndexT* dst = (IndexT*)_dst;
+ IndexT* end = &dst[_dstSize/sizeof(IndexT)];
+
+ for (uint32_t ii = 0, num = _numIndices-2; ii < num && dst < end; ++ii)
+ {
+ IndexT i0 = _indices[ii+0];
+ IndexT i1 = _indices[ii+1];
+ IndexT i2 = _indices[ii+2];
+ if (i0 != i1
+ && i1 != i2)
+ {
+ dst[0] = i0;
+ dst[1] = i1;
+ dst[2] = i2;
+ dst += 3;
+ }
+ }
+
+ return uint32_t(dst - (IndexT*)_dst);
+ }
+
+ template<typename IndexT>
+ static uint32_t topologyConvertLineStripToLineList(void* _dst, uint32_t _dstSize, const IndexT* _indices, uint32_t _numIndices)
+ {
+ IndexT* dst = (IndexT*)_dst;
+ IndexT* end = &dst[_dstSize/sizeof(IndexT)];
+
+ IndexT i0 = _indices[0];
+
+ for (uint32_t ii = 1; ii < _numIndices && dst < end; ++ii)
+ {
+ IndexT i1 = _indices[ii];
+ if (i0 != i1)
+ {
+ dst[0] = i0;
+ dst[1] = i1;
+ dst += 2;
+
+ i0 = i1;
+ }
+ }
+
+ return uint32_t(dst - (IndexT*)_dst);
+ }
+
+ uint32_t topologyConvert(TopologyConvert::Enum _conversion, void* _dst, uint32_t _dstSize, const void* _indices, uint32_t _numIndices, bool _index32, bx::AllocatorI* _allocator)
+ {
+ switch (_conversion)
+ {
+ case TopologyConvert::TriStripToTriList:
+ if (_index32)
+ {
+ return topologyConvertTriStripToTriList(_dst, _dstSize, (const uint32_t*)_indices, _numIndices);
+ }
+
+ return topologyConvertTriStripToTriList(_dst, _dstSize, (const uint16_t*)_indices, _numIndices);
+
+ case TopologyConvert::TriListFlipWinding:
+ if (_index32)
+ {
+ return topologyConvertTriListFlipWinding(_dst, _dstSize, (const uint32_t*)_indices, _numIndices);
+ }
+
+ return topologyConvertTriListFlipWinding(_dst, _dstSize, (const uint16_t*)_indices, _numIndices);
+
+ case TopologyConvert::TriListToLineList:
+ if (NULL == _allocator)
+ {
+ return 0;
+ }
+
+ if (_index32)
+ {
+ return topologyConvertTriListToLineList<uint32_t, uint64_t>(_dst, _dstSize, (const uint32_t*)_indices, _numIndices, _allocator);
+ }
+
+ return topologyConvertTriListToLineList<uint16_t, uint32_t>(_dst, _dstSize, (const uint16_t*)_indices, _numIndices, _allocator);
+
+ case TopologyConvert::LineStripToLineList:
+ if (_index32)
+ {
+ return topologyConvertLineStripToLineList(_dst, _dstSize, (const uint32_t*)_indices, _numIndices);
+ }
+
+ return topologyConvertLineStripToLineList(_dst, _dstSize, (const uint16_t*)_indices, _numIndices);
+
+ default:
+ break;
+ }
+
+ return 0;
+ }
+
+} //namespace bgfx
diff --git a/3rdparty/bgfx/src/topology.h b/3rdparty/bgfx/src/topology.h
new file mode 100644
index 00000000000..014d67559df
--- /dev/null
+++ b/3rdparty/bgfx/src/topology.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2011-2016 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ */
+
+#ifndef BGFX_TOPOLOGY_H_HEADER_GUARD
+#define BGFX_TOPOLOGY_H_HEADER_GUARD
+
+#include <bgfx/bgfx.h>
+
+namespace bgfx
+{
+ /// Convert index buffer for use with different primitive topologies.
+ ///
+ /// @param[in] _conversion Conversion type, see `TopologyConvert::Enum`.
+ /// @param[in] _dst Destination index buffer. If this argument it NULL
+ /// function will return number of indices after conversion.
+ /// @param[in] _dstSize Destination index buffer in bytes. It must be
+ /// large enough to contain output indices. If destination size is
+ /// insufficient index buffer will be truncated.
+ /// @param[in] _indices Source indices.
+ /// @param[in] _numIndices Number of input indices.
+ /// @param[in] _index32 Set to `true` if input indices are 32-bit.
+ ///
+ /// @returns Number of output indices after conversion.
+ ///
+ /// @attention C99 equivalent is `bgfx_topology_convert`.
+ ///
+ uint32_t topologyConvert(TopologyConvert::Enum _conversion, void* _dst, uint32_t _dstSize, const void* _indices, uint32_t _numIndices, bool _index32, bx::AllocatorI* _allocator);
+
+} // namespace bgfx
+
+#endif // BGFX_TOPOLOGY_H_HEADER_GUARD
diff --git a/3rdparty/bgfx/src/vertexdecl.cpp b/3rdparty/bgfx/src/vertexdecl.cpp
index 91ef865d0c9..c5fb4b05dec 100644
--- a/3rdparty/bgfx/src/vertexdecl.cpp
+++ b/3rdparty/bgfx/src/vertexdecl.cpp
@@ -6,9 +6,10 @@
#include <string.h>
#include <bx/debug.h>
#include <bx/hash.h>
-#include <bx/uint32_t.h>
-#include <bx/string.h>
#include <bx/readerwriter.h>
+#include <bx/radixsort.h>
+#include <bx/string.h>
+#include <bx/uint32_t.h>
#include "config.h"
#include "vertexdecl.h"
@@ -285,8 +286,10 @@ namespace bgfx
return s_attribTypeToId[_attr].id;
}
- int32_t write(bx::WriterI* _writer, const VertexDecl& _decl)
+ int32_t write(bx::WriterI* _writer, const VertexDecl& _decl, bx::Error* _err)
{
+ BX_ERROR_SCOPE(_err);
+
int32_t total = 0;
uint8_t numAttrs = 0;
@@ -295,8 +298,8 @@ namespace bgfx
numAttrs += UINT16_MAX == _decl.m_attributes[attr] ? 0 : 1;
}
- total += bx::write(_writer, numAttrs);
- total += bx::write(_writer, _decl.m_stride);
+ total += bx::write(_writer, numAttrs, _err);
+ total += bx::write(_writer, _decl.m_stride, _err);
for (uint32_t attr = 0; attr < Attrib::Count; ++attr)
{
@@ -307,49 +310,61 @@ namespace bgfx
bool normalized;
bool asInt;
_decl.decode(Attrib::Enum(attr), num, type, normalized, asInt);
- total += bx::write(_writer, _decl.m_offset[attr]);
- total += bx::write(_writer, s_attribToId[attr].id);
- total += bx::write(_writer, num);
- total += bx::write(_writer, s_attribTypeToId[type].id);
- total += bx::write(_writer, normalized);
- total += bx::write(_writer, asInt);
+ total += bx::write(_writer, _decl.m_offset[attr], _err);
+ total += bx::write(_writer, s_attribToId[attr].id, _err);
+ total += bx::write(_writer, num, _err);
+ total += bx::write(_writer, s_attribTypeToId[type].id, _err);
+ total += bx::write(_writer, normalized, _err);
+ total += bx::write(_writer, asInt, _err);
}
}
return total;
}
- int32_t read(bx::ReaderI* _reader, VertexDecl& _decl)
+ int32_t read(bx::ReaderI* _reader, VertexDecl& _decl, bx::Error* _err)
{
+ BX_ERROR_SCOPE(_err);
+
int32_t total = 0;
uint8_t numAttrs;
- total += bx::read(_reader, numAttrs);
+ total += bx::read(_reader, numAttrs, _err);
uint16_t stride;
- total += bx::read(_reader, stride);
+ total += bx::read(_reader, stride, _err);
+
+ if (!_err->isOk() )
+ {
+ return total;
+ }
_decl.begin();
for (uint32_t ii = 0; ii < numAttrs; ++ii)
{
uint16_t offset;
- total += bx::read(_reader, offset);
+ total += bx::read(_reader, offset, _err);
uint16_t attribId = 0;
- total += bx::read(_reader, attribId);
+ total += bx::read(_reader, attribId, _err);
uint8_t num;
- total += bx::read(_reader, num);
+ total += bx::read(_reader, num, _err);
uint16_t attribTypeId;
- total += bx::read(_reader, attribTypeId);
+ total += bx::read(_reader, attribTypeId, _err);
bool normalized;
- total += bx::read(_reader, normalized);
+ total += bx::read(_reader, normalized, _err);
bool asInt;
- total += bx::read(_reader, asInt);
+ total += bx::read(_reader, asInt, _err);
+
+ if (!_err->isOk() )
+ {
+ return total;
+ }
Attrib::Enum attr = idToAttrib(attribId);
AttribType::Enum type = idToAttribType(attribTypeId);
@@ -839,4 +854,5 @@ namespace bgfx
return (uint16_t)numVertices;
}
+
} // namespace bgfx
diff --git a/3rdparty/bgfx/src/vertexdecl.h b/3rdparty/bgfx/src/vertexdecl.h
index 642aae35592..866c53a3f22 100644
--- a/3rdparty/bgfx/src/vertexdecl.h
+++ b/3rdparty/bgfx/src/vertexdecl.h
@@ -30,10 +30,10 @@ namespace bgfx
AttribType::Enum idToAttribType(uint16_t id);
///
- int32_t write(bx::WriterI* _writer, const bgfx::VertexDecl& _decl);
+ int32_t write(bx::WriterI* _writer, const bgfx::VertexDecl& _decl, bx::Error* _err = NULL);
///
- int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl);
+ int32_t read(bx::ReaderI* _reader, bgfx::VertexDecl& _decl, bx::Error* _err = NULL);
} // namespace bgfx
diff --git a/3rdparty/bgfx/tools/geometryc/geometryc.cpp b/3rdparty/bgfx/tools/geometryc/geometryc.cpp
index 7687f3c5e38..fe4de46ada8 100644
--- a/3rdparty/bgfx/tools/geometryc/geometryc.cpp
+++ b/3rdparty/bgfx/tools/geometryc/geometryc.cpp
@@ -58,11 +58,11 @@ namespace stl = tinystl;
#include <bx/debug.h>
#include <bx/commandline.h>
#include <bx/timer.h>
-#include <bx/readerwriter.h>
#include <bx/hash.h>
#include <bx/uint32_t.h>
#include <bx/fpumath.h>
#include <bx/tokenizecmd.h>
+#include <bx/crtimpl.h>
#include "bounds.h"
@@ -81,6 +81,7 @@ struct Index3
int32_t m_texcoord;
int32_t m_normal;
int32_t m_vertexIndex;
+ int32_t m_vbc; // Barycentric ID. Holds eigher 0, 1 or 2.
};
typedef stl::unordered_map<uint64_t, Index3> Index3Map;
@@ -387,6 +388,7 @@ void help(const char* _error = NULL)
" 0 - unpacked 8 bytes (default).\n"
" 1 - packed 4 bytes.\n"
" --tangent Calculate tangent vectors (packing mode is the same as normal).\n"
+ " --barycentric Adds barycentric vertex attribute (packed in bgfx::Attrib::Color1).\n"
" -c, --compress Compress indices.\n"
"\n"
@@ -450,6 +452,7 @@ int main(int _argc, const char* _argv[])
bool ccw = cmdLine.hasArg("ccw");
bool flipV = cmdLine.hasArg("flipv");
bool hasTangent = cmdLine.hasArg("tangent");
+ bool hasBc = cmdLine.hasArg("barycentric");
FILE* file = fopen(filePath, "r");
if (NULL == file)
@@ -513,6 +516,14 @@ int main(int _argc, const char* _argv[])
index.m_texcoord = -1;
index.m_normal = -1;
index.m_vertexIndex = -1;
+ if (hasBc)
+ {
+ index.m_vbc = edge < 3 ? edge : (1+(edge+1) )&1;
+ }
+ else
+ {
+ index.m_vbc = 0;
+ }
char* vertex = argv[edge+1];
char* texcoord = strchr(vertex, '/');
@@ -542,7 +553,8 @@ int main(int _argc, const char* _argv[])
uint64_t hash0 = index.m_position;
uint64_t hash1 = uint64_t(index.m_texcoord)<<20;
uint64_t hash2 = uint64_t(index.m_normal)<<40;
- uint64_t hash = hash0^hash1^hash2;
+ uint64_t hash3 = uint64_t(index.m_vbc)<<60;
+ uint64_t hash = hash0^hash1^hash2^hash3;
stl::pair<Index3Map::iterator, bool> result = indexMap.insert(stl::make_pair(hash, index) );
if (!result.second)
@@ -755,6 +767,11 @@ int main(int _argc, const char* _argv[])
decl.add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true);
}
+ if (hasBc)
+ {
+ decl.add(bgfx::Attrib::Color1, 4, bgfx::AttribType::Uint8, true);
+ }
+
if (hasTexcoord)
{
switch (packUv)
@@ -914,6 +931,17 @@ int main(int _argc, const char* _argv[])
*color0 = rgbaToAbgr(numVertices%255, numIndices%255, 0, 0xff);
}
+ if (hasBc)
+ {
+ const float bc[3] =
+ {
+ (index.m_vbc == 0) ? 1.0f : 0.0f,
+ (index.m_vbc == 1) ? 1.0f : 0.0f,
+ (index.m_vbc == 2) ? 1.0f : 0.0f,
+ };
+ bgfx::vertexPack(bc, true, bgfx::Attrib::Color1, decl, vertices);
+ }
+
if (hasTexcoord)
{
float uv[2];
diff --git a/3rdparty/bgfx/tools/shaderc/shaderc.h b/3rdparty/bgfx/tools/shaderc/shaderc.h
index 29bf450e474..47bae98c3aa 100644
--- a/3rdparty/bgfx/tools/shaderc/shaderc.h
+++ b/3rdparty/bgfx/tools/shaderc/shaderc.h
@@ -59,9 +59,9 @@ namespace bgfx
#include <bx/commandline.h>
#include <bx/endian.h>
#include <bx/uint32_t.h>
-#include <bx/readerwriter.h>
#include <bx/string.h>
#include <bx/hash.h>
+#include <bx/crtimpl.h>
#include "../../src/vertexdecl.h"
namespace bgfx
diff --git a/3rdparty/bgfx/tools/texturec/texturec.cpp b/3rdparty/bgfx/tools/texturec/texturec.cpp
index 81bccfeb6f6..35983dc9849 100644
--- a/3rdparty/bgfx/tools/texturec/texturec.cpp
+++ b/3rdparty/bgfx/tools/texturec/texturec.cpp
@@ -27,8 +27,8 @@
#endif // DEBUG
#include <bx/bx.h>
-#include <bx/allocator.h>
#include <bx/commandline.h>
+#include <bx/crtimpl.h>
#include <bx/uint32_t.h>
namespace bgfx
@@ -117,7 +117,7 @@ namespace bgfx
case TextureFormat::PTC14:
{
using namespace Javelin;
- RgbBitmap bmp;
+ RgbaBitmap bmp;
bmp.width = _width;
bmp.height = _height;
bmp.data = (uint8_t*)const_cast<void*>(_src);
@@ -511,6 +511,8 @@ int main(int _argc, const char* _argv[])
{
imageRgba32fDownsample2x2NormalMap(mip.m_width, mip.m_height, mip.m_width*16, rgba, rgba);
imageRgba32f11to01(rgbaDst, mip.m_width, mip.m_height, mip.m_width*16, rgba);
+ mip.m_width = bx::uint32_max(1, mip.m_width >> 1);
+ mip.m_height = bx::uint32_max(1, mip.m_height >> 1);
ImageMip dstMip;
imageGetRawData(imageContainer, 0, lod, output->data, output->size, dstMip);
@@ -541,6 +543,8 @@ int main(int _argc, const char* _argv[])
for (uint8_t lod = 1; lod < numMips; ++lod)
{
imageRgba8Downsample2x2(mip.m_width, mip.m_height, mip.m_width*4, rgba, rgba);
+ mip.m_width = bx::uint32_max(1, mip.m_width >> 1);
+ mip.m_height = bx::uint32_max(1, mip.m_height >> 1);
ImageMip dstMip;
imageGetRawData(imageContainer, 0, lod, output->data, output->size, dstMip);
diff --git a/3rdparty/bx/include/bx/allocator.h b/3rdparty/bx/include/bx/allocator.h
index 50d526535b6..61356321134 100644
--- a/3rdparty/bx/include/bx/allocator.h
+++ b/3rdparty/bx/include/bx/allocator.h
@@ -12,10 +12,6 @@
#include <string.h> //::memmove
#include <new>
-#if BX_CONFIG_ALLOCATOR_CRT
-# include <malloc.h>
-#endif // BX_CONFIG_ALLOCATOR_CRT
-
#if BX_CONFIG_ALLOCATOR_DEBUG
# define BX_ALLOC(_allocator, _size) bx::alloc(_allocator, _size, 0, __FILE__, __LINE__)
# define BX_REALLOC(_allocator, _ptr, _size) bx::realloc(_allocator, _ptr, _size, 0, __FILE__, __LINE__)
@@ -145,70 +141,6 @@ namespace bx
}
}
-#if BX_CONFIG_ALLOCATOR_CRT
- class CrtAllocator : public AllocatorI
- {
- public:
- CrtAllocator()
- {
- }
-
- virtual ~CrtAllocator()
- {
- }
-
- virtual void* realloc(void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line) BX_OVERRIDE
- {
- if (0 == _size)
- {
- if (NULL != _ptr)
- {
- if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
- {
- ::free(_ptr);
- return NULL;
- }
-
-# if BX_COMPILER_MSVC
- BX_UNUSED(_file, _line);
- _aligned_free(_ptr);
-# else
- bx::alignedFree(this, _ptr, _align, _file, _line);
-# endif // BX_
- }
-
- return NULL;
- }
- else if (NULL == _ptr)
- {
- if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
- {
- return ::malloc(_size);
- }
-
-# if BX_COMPILER_MSVC
- BX_UNUSED(_file, _line);
- return _aligned_malloc(_size, _align);
-# else
- return bx::alignedAlloc(this, _size, _align, _file, _line);
-# endif // BX_
- }
-
- if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
- {
- return ::realloc(_ptr, _size);
- }
-
-# if BX_COMPILER_MSVC
- BX_UNUSED(_file, _line);
- return _aligned_realloc(_ptr, _size, _align);
-# else
- return bx::alignedRealloc(this, _ptr, _size, _align, _file, _line);
-# endif // BX_
- }
- };
-#endif // BX_CONFIG_ALLOCATOR_CRT
-
} // namespace bx
#endif // BX_ALLOCATOR_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/config.h b/3rdparty/bx/include/bx/config.h
index 6b8cfe45a7f..72a6dc3e4af 100644
--- a/3rdparty/bx/include/bx/config.h
+++ b/3rdparty/bx/include/bx/config.h
@@ -21,19 +21,7 @@
#endif // BX_CONFIG_SPSCQUEUE_USE_MUTEX
#ifndef BX_CONFIG_CRT_FILE_READER_WRITER
-# define BX_CONFIG_CRT_FILE_READER_WRITER (0 \
- || BX_PLATFORM_ANDROID \
- || BX_PLATFORM_BSD \
- || BX_PLATFORM_EMSCRIPTEN \
- || BX_PLATFORM_IOS \
- || BX_PLATFORM_LINUX \
- || BX_PLATFORM_OSX \
- || BX_PLATFORM_QNX \
- || BX_PLATFORM_RPI \
- || BX_PLATFORM_STEAMLINK \
- || BX_PLATFORM_WINDOWS \
- || BX_PLATFORM_WINRT \
- ? 1 : 0)
+# define BX_CONFIG_CRT_FILE_READER_WRITER !(BX_PLATFORM_NACL)
#endif // BX_CONFIG_CRT_FILE_READER_WRITER
#ifndef BX_CONFIG_SEMAPHORE_PTHREAD
diff --git a/3rdparty/bx/include/bx/crtimpl.h b/3rdparty/bx/include/bx/crtimpl.h
new file mode 100644
index 00000000000..70cee21d028
--- /dev/null
+++ b/3rdparty/bx/include/bx/crtimpl.h
@@ -0,0 +1,197 @@
+/*
+ * Copyright 2010-2016 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#ifndef BX_CRTIMPL_H_HEADER_GUARD
+#define BX_CRTIMPL_H_HEADER_GUARD
+
+#if BX_CONFIG_ALLOCATOR_CRT
+# include <malloc.h>
+# include "allocator.h"
+#endif // BX_CONFIG_ALLOCATOR_CRT
+
+#if BX_CONFIG_CRT_FILE_READER_WRITER
+# include "readerwriter.h"
+#endif // BX_CONFIG_CRT_FILE_READER_WRITER
+
+namespace bx
+{
+#if BX_CONFIG_ALLOCATOR_CRT
+ class CrtAllocator : public AllocatorI
+ {
+ public:
+ CrtAllocator()
+ {
+ }
+
+ virtual ~CrtAllocator()
+ {
+ }
+
+ virtual void* realloc(void* _ptr, size_t _size, size_t _align, const char* _file, uint32_t _line) BX_OVERRIDE
+ {
+ if (0 == _size)
+ {
+ if (NULL != _ptr)
+ {
+ if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
+ {
+ ::free(_ptr);
+ return NULL;
+ }
+
+# if BX_COMPILER_MSVC
+ BX_UNUSED(_file, _line);
+ _aligned_free(_ptr);
+# else
+ bx::alignedFree(this, _ptr, _align, _file, _line);
+# endif // BX_
+ }
+
+ return NULL;
+ }
+ else if (NULL == _ptr)
+ {
+ if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
+ {
+ return ::malloc(_size);
+ }
+
+# if BX_COMPILER_MSVC
+ BX_UNUSED(_file, _line);
+ return _aligned_malloc(_size, _align);
+# else
+ return bx::alignedAlloc(this, _size, _align, _file, _line);
+# endif // BX_
+ }
+
+ if (BX_CONFIG_ALLOCATOR_NATURAL_ALIGNMENT >= _align)
+ {
+ return ::realloc(_ptr, _size);
+ }
+
+# if BX_COMPILER_MSVC
+ BX_UNUSED(_file, _line);
+ return _aligned_realloc(_ptr, _size, _align);
+# else
+ return bx::alignedRealloc(this, _ptr, _size, _align, _file, _line);
+# endif // BX_
+ }
+ };
+#endif // BX_CONFIG_ALLOCATOR_CRT
+
+#if BX_CONFIG_CRT_FILE_READER_WRITER
+ class CrtFileReader : public FileReaderI
+ {
+ public:
+ CrtFileReader()
+ : m_file(NULL)
+ {
+ }
+
+ virtual ~CrtFileReader()
+ {
+ }
+
+ virtual bool open(const char* _filePath, Error* _err) BX_OVERRIDE
+ {
+ BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
+
+ m_file = fopen(_filePath, "rb");
+ if (NULL == m_file)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "CrtFileReader: Failed to open file.");
+ return false;
+ }
+
+ return true;
+ }
+
+ virtual void close() BX_OVERRIDE
+ {
+ fclose(m_file);
+ }
+
+ virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE
+ {
+ fseeko64(m_file, _offset, _whence);
+ return ftello64(m_file);
+ }
+
+ virtual int32_t read(void* _data, int32_t _size, Error* _err) BX_OVERRIDE
+ {
+ BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
+
+ int32_t size = (int32_t)fread(_data, 1, _size, m_file);
+ if (size != _size)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_READ, "CrtFileReader: read failed.");
+ return size >= 0 ? size : 0;
+ }
+
+ return size;
+ }
+
+ private:
+ FILE* m_file;
+ };
+
+ class CrtFileWriter : public FileWriterI
+ {
+ public:
+ CrtFileWriter()
+ : m_file(NULL)
+ {
+ }
+
+ virtual ~CrtFileWriter()
+ {
+ }
+
+ virtual bool open(const char* _filePath, bool _append, Error* _err) BX_OVERRIDE
+ {
+ m_file = fopen(_filePath, _append ? "ab" : "wb");
+
+ if (NULL == m_file)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "CrtFileWriter: Failed to open file.");
+ return false;
+ }
+
+ return true;
+ }
+
+ virtual void close() BX_OVERRIDE
+ {
+ fclose(m_file);
+ }
+
+ virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE
+ {
+ fseeko64(m_file, _offset, _whence);
+ return ftello64(m_file);
+ }
+
+ virtual int32_t write(const void* _data, int32_t _size, Error* _err) BX_OVERRIDE
+ {
+ BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
+
+ int32_t size = (int32_t)fwrite(_data, 1, _size, m_file);
+ if (size != _size)
+ {
+ BX_ERROR_SET(_err, BX_ERROR_READERWRITER_WRITE, "CrtFileWriter: write failed.");
+ return size >= 0 ? size : 0;
+ }
+
+ return size;
+ }
+
+ private:
+ FILE* m_file;
+ };
+#endif // BX_CONFIG_CRT_FILE_READER_WRITER
+
+} // namespace bx
+
+#endif // BX_CRTIMPL_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/fpumath.h b/3rdparty/bx/include/bx/fpumath.h
index be125aa69eb..0dd274feb24 100644
--- a/3rdparty/bx/include/bx/fpumath.h
+++ b/3rdparty/bx/include/bx/fpumath.h
@@ -607,7 +607,7 @@ namespace bx
inline void mtxLookAtLh(float* __restrict _result, const float* __restrict _eye, const float* __restrict _at, const float* __restrict _up = NULL)
{
float tmp[4];
- vec3Sub(tmp, _eye, _at);
+ vec3Sub(tmp, _at, _eye);
float view[4];
vec3Norm(view, tmp);
@@ -618,7 +618,7 @@ namespace bx
inline void mtxLookAtRh(float* __restrict _result, const float* __restrict _eye, const float* __restrict _at, const float* __restrict _up = NULL)
{
float tmp[4];
- vec3Sub(tmp, _at, _eye);
+ vec3Sub(tmp, _eye, _at);
float view[4];
vec3Norm(view, tmp);
@@ -628,7 +628,7 @@ namespace bx
inline void mtxLookAt(float* __restrict _result, const float* __restrict _eye, const float* __restrict _at, const float* __restrict _up = NULL)
{
- mtxLookAtRh(_result, _eye, _at, _up);
+ mtxLookAtLh(_result, _eye, _at, _up);
}
inline void mtxProjRhXYWH(float* _result, float _x, float _y, float _width, float _height, float _near, float _far, bool _oglNdc = false)
@@ -640,19 +640,21 @@ namespace bx
memset(_result, 0, sizeof(float)*16);
_result[ 0] = _width;
_result[ 5] = _height;
- _result[ 8] = _x;
- _result[ 9] = -_y;
- _result[10] = aa;
- _result[11] = 1.0f;
+ _result[ 8] = _x;
+ _result[ 9] = _y;
+ _result[10] = -aa;
+ _result[11] = -1.0f;
_result[14] = -bb;
}
inline void mtxProjRh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc = false)
{
- const float width = 2.0f / (_lt + _rt);
- const float height = 2.0f / (_ut + _dt);
- const float xx = (_lt - _rt) * width * 0.5f;
- const float yy = (_ut - _dt) * height * 0.5f;
+ const float invDiffRl = 1.0f/(_rt - _lt);
+ const float invDiffUd = 1.0f/(_ut - _dt);
+ const float width = 2.0f*_near * invDiffRl;
+ const float height = 2.0f*_near * invDiffUd;
+ const float xx = (_rt + _lt) * invDiffRl;
+ const float yy = (_ut + _dt) * invDiffUd;
mtxProjRhXYWH(_result, xx, yy, width, height, _near, _far, _oglNdc);
}
@@ -677,19 +679,21 @@ namespace bx
memset(_result, 0, sizeof(float)*16);
_result[ 0] = _width;
_result[ 5] = _height;
- _result[ 8] = _x;
+ _result[ 8] = -_x;
_result[ 9] = -_y;
- _result[10] = -aa;
- _result[11] = -1.0f;
+ _result[10] = aa;
+ _result[11] = 1.0f;
_result[14] = -bb;
}
inline void mtxProjLh(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc = false)
{
- const float width = 2.0f / (_lt + _rt);
- const float height = 2.0f / (_ut + _dt);
- const float xx = (_lt - _rt) * width * 0.5f;
- const float yy = (_ut - _dt) * height * 0.5f;
+ const float invDiffRl = 1.0f/(_rt - _lt);
+ const float invDiffUd = 1.0f/(_ut - _dt);
+ const float width = 2.0f*_near * invDiffRl;
+ const float height = 2.0f*_near * invDiffUd;
+ const float xx = (_rt + _lt) * invDiffRl;
+ const float yy = (_ut + _dt) * invDiffUd;
mtxProjLhXYWH(_result, xx, yy, width, height, _near, _far, _oglNdc);
}
@@ -707,20 +711,20 @@ namespace bx
inline void mtxProj(float* _result, float _ut, float _dt, float _lt, float _rt, float _near, float _far, bool _oglNdc = false)
{
- mtxProjRh(_result, _ut, _dt, _lt, _rt, _near, _far, _oglNdc);
+ mtxProjLh(_result, _ut, _dt, _lt, _rt, _near, _far, _oglNdc);
}
inline void mtxProj(float* _result, const float _fov[4], float _near, float _far, bool _oglNdc = false)
{
- mtxProjRh(_result, _fov, _near, _far, _oglNdc);
+ mtxProjLh(_result, _fov, _near, _far, _oglNdc);
}
inline void mtxProj(float* _result, float _fovy, float _aspect, float _near, float _far, bool _oglNdc = false)
{
- mtxProjRh(_result, _fovy, _aspect, _near, _far, _oglNdc);
+ mtxProjLh(_result, _fovy, _aspect, _near, _far, _oglNdc);
}
- inline void mtxOrtho(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset = 0.0f, bool _oglNdc = false)
+ inline void mtxOrthoLh(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset = 0.0f, bool _oglNdc = false)
{
const float aa = 2.0f/(_right - _left);
const float bb = 2.0f/(_top - _bottom);
@@ -739,6 +743,30 @@ namespace bx
_result[15] = 1.0f;
}
+ inline void mtxOrthoRh(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset = 0.0f, bool _oglNdc = false)
+ {
+ const float aa = 2.0f/(_right - _left);
+ const float bb = 2.0f/(_top - _bottom);
+ const float cc = (_oglNdc ? 2.0f : 1.0f) / (_far - _near);
+ const float dd = (_left + _right)/(_left - _right);
+ const float ee = (_top + _bottom)/(_bottom - _top);
+ const float ff = _oglNdc ? (_near + _far)/(_near - _far) : _near/(_near - _far);
+
+ memset(_result, 0, sizeof(float)*16);
+ _result[ 0] = aa;
+ _result[ 5] = bb;
+ _result[10] = -cc;
+ _result[12] = dd + _offset;
+ _result[13] = ee;
+ _result[14] = ff;
+ _result[15] = 1.0f;
+ }
+
+ inline void mtxOrtho(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset = 0.0f, bool _oglNdc = false)
+ {
+ return mtxOrthoLh(_result, _left, _right, _bottom, _top, _near, _far, _offset, _oglNdc);
+ }
+
inline void mtxRotateX(float* _result, float _ax)
{
const float sx = fsin(_ax);
diff --git a/3rdparty/bx/include/bx/mutex.h b/3rdparty/bx/include/bx/mutex.h
index a68525f14cd..b01be030bf4 100644
--- a/3rdparty/bx/include/bx/mutex.h
+++ b/3rdparty/bx/include/bx/mutex.h
@@ -21,7 +21,7 @@
namespace bx
{
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT
+#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
typedef CRITICAL_SECTION pthread_mutex_t;
typedef unsigned pthread_mutexattr_t;
@@ -70,7 +70,7 @@ namespace bx
Mutex()
{
pthread_mutexattr_t attr;
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT
+#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
#else
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
diff --git a/3rdparty/bx/include/bx/os.h b/3rdparty/bx/include/bx/os.h
index 074ec0e513c..314ef0607cc 100644
--- a/3rdparty/bx/include/bx/os.h
+++ b/3rdparty/bx/include/bx/os.h
@@ -75,7 +75,7 @@ namespace bx
{
#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360
::Sleep(_ms);
-#elif BX_PLATFORM_WINRT
+#elif BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
BX_UNUSED(_ms);
debugOutput("sleep is not implemented"); debugBreak();
#else
@@ -91,7 +91,7 @@ namespace bx
::SwitchToThread();
#elif BX_PLATFORM_XBOX360
::Sleep(0);
-#elif BX_PLATFORM_WINRT
+#elif BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
debugOutput("yield is not implemented"); debugBreak();
#else
::sched_yield();
@@ -180,6 +180,7 @@ namespace bx
#elif BX_PLATFORM_EMSCRIPTEN \
|| BX_PLATFORM_NACL \
|| BX_PLATFORM_PS4 \
+ || BX_PLATFORM_XBOXONE \
|| BX_PLATFORM_WINRT
BX_UNUSED(_filePath);
return NULL;
@@ -195,6 +196,7 @@ namespace bx
#elif BX_PLATFORM_EMSCRIPTEN \
|| BX_PLATFORM_NACL \
|| BX_PLATFORM_PS4 \
+ || BX_PLATFORM_XBOXONE \
|| BX_PLATFORM_WINRT
BX_UNUSED(_handle);
#else
@@ -209,6 +211,7 @@ namespace bx
#elif BX_PLATFORM_EMSCRIPTEN \
|| BX_PLATFORM_NACL \
|| BX_PLATFORM_PS4 \
+ || BX_PLATFORM_XBOXONE \
|| BX_PLATFORM_WINRT
BX_UNUSED(_handle, _symbol);
return NULL;
@@ -222,6 +225,7 @@ namespace bx
#if BX_PLATFORM_WINDOWS
::SetEnvironmentVariableA(_name, _value);
#elif BX_PLATFORM_PS4 \
+ || BX_PLATFORM_XBOXONE \
|| BX_PLATFORM_WINRT
BX_UNUSED(_name, _value);
#else
@@ -234,6 +238,7 @@ namespace bx
#if BX_PLATFORM_WINDOWS
::SetEnvironmentVariableA(_name, NULL);
#elif BX_PLATFORM_PS4 \
+ || BX_PLATFORM_XBOXONE \
|| BX_PLATFORM_WINRT
BX_UNUSED(_name);
#else
@@ -244,6 +249,7 @@ namespace bx
inline int chdir(const char* _path)
{
#if BX_PLATFORM_PS4 \
+ || BX_PLATFORM_XBOXONE \
|| BX_PLATFORM_WINRT
BX_UNUSED(_path);
return -1;
@@ -257,6 +263,7 @@ namespace bx
inline char* pwd(char* _buffer, uint32_t _size)
{
#if BX_PLATFORM_PS4 \
+ || BX_PLATFORM_XBOXONE \
|| BX_PLATFORM_WINRT
BX_UNUSED(_buffer, _size);
return NULL;
diff --git a/3rdparty/bx/include/bx/platform.h b/3rdparty/bx/include/bx/platform.h
index 3f245d5dff9..d07e031de34 100644
--- a/3rdparty/bx/include/bx/platform.h
+++ b/3rdparty/bx/include/bx/platform.h
@@ -123,7 +123,7 @@
#if defined(_XBOX_VER)
# undef BX_PLATFORM_XBOX360
# define BX_PLATFORM_XBOX360 1
-#elif defined (_DURANGO)
+#elif defined(_DURANGO) || defined(_XBOX_ONE)
# undef BX_PLATFORM_XBOXONE
# define BX_PLATFORM_XBOXONE 1
#elif defined(_WIN32) || defined(_WIN64)
diff --git a/3rdparty/bx/include/bx/radixsort.h b/3rdparty/bx/include/bx/radixsort.h
index 8118a0aa0bf..d14398cacc8 100644
--- a/3rdparty/bx/include/bx/radixsort.h
+++ b/3rdparty/bx/include/bx/radixsort.h
@@ -14,7 +14,7 @@ namespace bx
#define BX_RADIXSORT_HISTOGRAM_SIZE (1<<BX_RADIXSORT_BITS)
#define BX_RADIXSORT_BIT_MASK (BX_RADIXSORT_HISTOGRAM_SIZE-1)
- inline void radixSort32(uint32_t* __restrict _keys, uint32_t* __restrict _tempKeys, uint32_t _size)
+ inline void radixSort(uint32_t* __restrict _keys, uint32_t* __restrict _tempKeys, uint32_t _size)
{
uint32_t* __restrict keys = _keys;
uint32_t* __restrict tempKeys = _tempKeys;
@@ -76,7 +76,7 @@ done:
}
template <typename Ty>
- inline void radixSort32(uint32_t* __restrict _keys, uint32_t* __restrict _tempKeys, Ty* __restrict _values, Ty* __restrict _tempValues, uint32_t _size)
+ inline void radixSort(uint32_t* __restrict _keys, uint32_t* __restrict _tempKeys, Ty* __restrict _values, Ty* __restrict _tempValues, uint32_t _size)
{
uint32_t* __restrict keys = _keys;
uint32_t* __restrict tempKeys = _tempKeys;
@@ -148,7 +148,7 @@ done:
}
}
- inline void radixSort64(uint64_t* __restrict _keys, uint64_t* __restrict _tempKeys, uint32_t _size)
+ inline void radixSort(uint64_t* __restrict _keys, uint64_t* __restrict _tempKeys, uint32_t _size)
{
uint64_t* __restrict keys = _keys;
uint64_t* __restrict tempKeys = _tempKeys;
@@ -210,7 +210,7 @@ done:
}
template <typename Ty>
- inline void radixSort64(uint64_t* __restrict _keys, uint64_t* __restrict _tempKeys, Ty* __restrict _values, Ty* __restrict _tempValues, uint32_t _size)
+ inline void radixSort(uint64_t* __restrict _keys, uint64_t* __restrict _tempKeys, Ty* __restrict _values, Ty* __restrict _tempValues, uint32_t _size)
{
uint64_t* __restrict keys = _keys;
uint64_t* __restrict tempKeys = _tempKeys;
diff --git a/3rdparty/bx/include/bx/readerwriter.h b/3rdparty/bx/include/bx/readerwriter.h
index ef8c810a870..13fe205399e 100644
--- a/3rdparty/bx/include/bx/readerwriter.h
+++ b/3rdparty/bx/include/bx/readerwriter.h
@@ -6,6 +6,7 @@
#ifndef BX_READERWRITER_H_HEADER_GUARD
#define BX_READERWRITER_H_HEADER_GUARD
+#include <alloca.h>
#include <stdarg.h> // va_list
#include <stdio.h>
#include <string.h>
@@ -359,8 +360,8 @@ namespace bx
m_top += morecore;
}
- int64_t reminder = m_top-m_pos;
- int32_t size = uint32_min(_size, int32_t(reminder > INT32_MAX ? INT32_MAX : reminder) );
+ int64_t remainder = m_top-m_pos;
+ int32_t size = uint32_min(_size, int32_t(remainder > INT32_MAX ? INT32_MAX : remainder) );
m_pos += size;
if (size != _size)
{
@@ -412,8 +413,8 @@ namespace bx
{
BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
- int64_t reminder = m_top-m_pos;
- int32_t size = uint32_min(_size, int32_t(reminder > INT32_MAX ? INT32_MAX : reminder) );
+ int64_t remainder = m_top-m_pos;
+ int32_t size = uint32_min(_size, int32_t(remainder > INT32_MAX ? INT32_MAX : remainder) );
memcpy(_data, &m_data[m_pos], size);
m_pos += size;
if (size != _size)
@@ -493,8 +494,8 @@ namespace bx
m_size = m_memBlock->getSize();
}
- int64_t reminder = m_size-m_pos;
- int32_t size = uint32_min(_size, int32_t(reminder > INT32_MAX ? INT32_MAX : reminder) );
+ int64_t remainder = m_size-m_pos;
+ int32_t size = uint32_min(_size, int32_t(remainder > INT32_MAX ? INT32_MAX : remainder) );
memcpy(&m_data[m_pos], _data, size);
m_pos += size;
m_top = int64_max(m_top, m_pos);
@@ -530,117 +531,6 @@ namespace bx
StaticMemoryBlock m_smb;
};
-#if BX_CONFIG_CRT_FILE_READER_WRITER
- class CrtFileReader : public FileReaderI
- {
- public:
- CrtFileReader()
- : m_file(NULL)
- {
- }
-
- virtual ~CrtFileReader()
- {
- }
-
- virtual bool open(const char* _filePath, Error* _err) BX_OVERRIDE
- {
- BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
-
- m_file = fopen(_filePath, "rb");
- if (NULL == m_file)
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "CrtFileReader: Failed to open file.");
- return false;
- }
-
- return true;
- }
-
- virtual void close() BX_OVERRIDE
- {
- fclose(m_file);
- }
-
- virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE
- {
- fseeko64(m_file, _offset, _whence);
- return ftello64(m_file);
- }
-
- virtual int32_t read(void* _data, int32_t _size, Error* _err) BX_OVERRIDE
- {
- BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
-
- int32_t size = (int32_t)fread(_data, 1, _size, m_file);
- if (size != _size)
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_READ, "CrtFileReader: read failed.");
- return size >= 0 ? size : 0;
- }
-
- return size;
- }
-
- private:
- FILE* m_file;
- };
-
- class CrtFileWriter : public FileWriterI
- {
- public:
- CrtFileWriter()
- : m_file(NULL)
- {
- }
-
- virtual ~CrtFileWriter()
- {
- }
-
- virtual bool open(const char* _filePath, bool _append, Error* _err) BX_OVERRIDE
- {
- m_file = fopen(_filePath, _append ? "ab" : "wb");
-
- if (NULL == m_file)
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_OPEN, "CrtFileWriter: Failed to open file.");
- return false;
- }
-
- return true;
- }
-
- virtual void close() BX_OVERRIDE
- {
- fclose(m_file);
- }
-
- virtual int64_t seek(int64_t _offset = 0, Whence::Enum _whence = Whence::Current) BX_OVERRIDE
- {
- fseeko64(m_file, _offset, _whence);
- return ftello64(m_file);
- }
-
- virtual int32_t write(const void* _data, int32_t _size, Error* _err) BX_OVERRIDE
- {
- BX_CHECK(NULL != _err, "Reader/Writer interface calling functions must handle errors.");
-
- int32_t size = (int32_t)fwrite(_data, 1, _size, m_file);
- if (size != _size)
- {
- BX_ERROR_SET(_err, BX_ERROR_READERWRITER_WRITE, "CrtFileWriter: write failed.");
- return size >= 0 ? size : 0;
- }
-
- return size;
- }
-
- private:
- FILE* m_file;
- };
-#endif // BX_CONFIG_CRT_FILE_READER_WRITER
-
} // namespace bx
#endif // BX_READERWRITER_H_HEADER_GUARD
diff --git a/3rdparty/bx/include/bx/sem.h b/3rdparty/bx/include/bx/sem.h
index 85c66168d58..37141c53614 100644
--- a/3rdparty/bx/include/bx/sem.h
+++ b/3rdparty/bx/include/bx/sem.h
@@ -16,7 +16,9 @@
# include <semaphore.h>
# include <time.h>
# include <pthread.h>
-#elif BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT
+#elif BX_PLATFORM_XBOXONE
+# include <synchapi.h>
+#elif BX_PLATFORM_XBOX360 || BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT
# include <windows.h>
# include <limits.h>
#endif // BX_PLATFORM_
@@ -211,7 +213,7 @@ namespace bx
};
# endif // BX_CONFIG_SEMAPHORE_PTHREAD
-#elif BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT
+#elif BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT
class Semaphore
{
@@ -223,10 +225,10 @@ namespace bx
public:
Semaphore()
{
-#if BX_PLATFORM_WINRT
- m_handle = CreateSemaphoreEx(NULL, 0, LONG_MAX, NULL, 0, SEMAPHORE_ALL_ACCESS);
+#if BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
+ m_handle = CreateSemaphoreExW(NULL, 0, LONG_MAX, NULL, 0, SEMAPHORE_ALL_ACCESS);
#else
- m_handle = CreateSemaphore(NULL, 0, LONG_MAX, NULL);
+ m_handle = CreateSemaphoreA(NULL, 0, LONG_MAX, NULL);
#endif
BX_CHECK(NULL != m_handle, "Failed to create Semaphore!");
}
@@ -244,7 +246,7 @@ namespace bx
bool wait(int32_t _msecs = -1) const
{
DWORD milliseconds = (0 > _msecs) ? INFINITE : _msecs;
-#if BX_PLATFORM_WINRT
+#if BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
return WAIT_OBJECT_0 == WaitForSingleObjectEx(m_handle, milliseconds, FALSE);
#else
return WAIT_OBJECT_0 == WaitForSingleObject(m_handle, milliseconds);
diff --git a/3rdparty/bx/include/bx/thread.h b/3rdparty/bx/include/bx/thread.h
index 015bd57eff8..5e3a920c1ce 100644
--- a/3rdparty/bx/include/bx/thread.h
+++ b/3rdparty/bx/include/bx/thread.h
@@ -34,7 +34,7 @@ namespace bx
public:
Thread()
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT
+#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
: m_handle(INVALID_HANDLE_VALUE)
, m_threadId(UINT32_MAX)
#elif BX_PLATFORM_POSIX
@@ -224,7 +224,7 @@ namespace bx
}
#endif // BX_PLATFORM_
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT
+#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
HANDLE m_handle;
DWORD m_threadId;
#elif BX_PLATFORM_POSIX
@@ -269,7 +269,7 @@ namespace bx
uint32_t m_id;
};
-#elif !BX_PLATFORM_WINRT
+#elif !(BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT)
class TlsData
{
diff --git a/3rdparty/bx/include/bx/timer.h b/3rdparty/bx/include/bx/timer.h
index c3d16d29793..462d9757a60 100644
--- a/3rdparty/bx/include/bx/timer.h
+++ b/3rdparty/bx/include/bx/timer.h
@@ -12,7 +12,7 @@
# include <time.h> // clock, clock_gettime
#elif BX_PLATFORM_EMSCRIPTEN
# include <emscripten.h>
-#elif BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT
+#elif BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
# include <windows.h>
#else
# include <sys/time.h> // gettimeofday
@@ -22,7 +22,7 @@ namespace bx
{
inline int64_t getHPCounter()
{
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT
+#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
LARGE_INTEGER li;
// Performance counter value may unexpectedly leap forward
// http://support.microsoft.com/kb/274323
@@ -44,7 +44,7 @@ namespace bx
inline int64_t getHPFrequency()
{
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_WINRT
+#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360 || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
LARGE_INTEGER li;
QueryPerformanceFrequency(&li);
return li.QuadPart;
diff --git a/3rdparty/bx/include/bx/uint32_t.h b/3rdparty/bx/include/bx/uint32_t.h
index 411ac28ee6b..50f8e097a22 100644
--- a/3rdparty/bx/include/bx/uint32_t.h
+++ b/3rdparty/bx/include/bx/uint32_t.h
@@ -29,7 +29,7 @@
#include "bx.h"
#if BX_COMPILER_MSVC
-# if BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT
+# if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT
# include <math.h> // math.h is included because VS bitches:
// warning C4985: 'ceil': attributes not present on previous declaration.
// must be included before intrin.h.
diff --git a/3rdparty/bx/scripts/toolchain.lua b/3rdparty/bx/scripts/toolchain.lua
index fc674de9570..0cabfae5a9d 100644
--- a/3rdparty/bx/scripts/toolchain.lua
+++ b/3rdparty/bx/scripts/toolchain.lua
@@ -18,14 +18,14 @@ function toolchain(_buildDir, _libDir)
{ "android-x86", "Android - x86" },
{ "asmjs", "Emscripten/asm.js" },
{ "freebsd", "FreeBSD" },
+ { "ios-arm", "iOS - ARM" },
+ { "ios-simulator", "iOS - Simulator" },
{ "linux-gcc", "Linux (GCC compiler)" },
{ "linux-gcc-5", "Linux (GCC-5 compiler)" },
{ "linux-clang", "Linux (Clang compiler)" },
{ "linux-mips-gcc", "Linux (MIPS, GCC compiler)" },
{ "linux-arm-gcc", "Linux (ARM, GCC compiler)" },
{ "linux-steamlink", "Steam Link" },
- { "ios-arm", "iOS - ARM" },
- { "ios-simulator", "iOS - Simulator" },
{ "tvos-arm64", "tvOS - ARM64" },
{ "tvos-simulator", "tvOS - Simulator" },
{ "mingw-gcc", "MinGW" },
@@ -54,6 +54,7 @@ function toolchain(_buildDir, _libDir)
{ "winphone81", "Windows Phone 8.1" },
{ "winstore81", "Windows Store 8.1" },
{ "winstore82", "Universal Windows App" },
+ { "durango", "Durango" },
},
}
@@ -363,18 +364,28 @@ function toolchain(_buildDir, _libDir)
platforms { "ARM" }
location (path.join(_buildDir, "projects", _ACTION .. "-winstore82"))
+ elseif "durango" == _OPTIONS["vs"] then
+ if not os.getenv("DurangoXDK") then
+ print("DurangoXDK not found.")
+ end
+
+ premake.vstudio.toolset = "v140"
+ premake.vstudio.storeapp = "durango"
+ platforms { "Durango" }
+ location (path.join(_buildDir, "projects", _ACTION .. "-durango"))
+ end
+
elseif ("vs2012-xp") == _OPTIONS["vs"] then
premake.vstudio.toolset = ("v110_xp")
location (path.join(_buildDir, "projects", _ACTION .. "-xp"))
- elseif ("vs2013-xp") == _OPTIONS["vs"] then
+ elseif "vs2013-xp" == _OPTIONS["vs"] then
premake.vstudio.toolset = ("v120_xp")
location (path.join(_buildDir, "projects", _ACTION .. "-xp"))
- elseif ("vs2015-xp") == _OPTIONS["vs"] then
+ elseif "vs2015-xp" == _OPTIONS["vs"] then
premake.vstudio.toolset = ("v140_xp")
location (path.join(_buildDir, "projects", _ACTION .. "-xp"))
- end
elseif _ACTION == "xcode4" then
@@ -664,6 +675,7 @@ function toolchain(_buildDir, _libDir)
}
configuration { "android-*" }
+ targetprefix ("lib")
flags {
"NoImportLib",
}
@@ -800,7 +812,7 @@ function toolchain(_buildDir, _libDir)
linkoptions {
"--sysroot=" .. path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-x86"),
path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-x86/usr/lib/crtbegin_so.o"),
- path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "/arch-x86/usr/lib/crtend_so.o"),
+ path.join("$(ANDROID_NDK_ROOT)/platforms", androidPlatform, "arch-x86/usr/lib/crtend_so.o"),
}
configuration { "asmjs" }
@@ -899,14 +911,23 @@ function toolchain(_buildDir, _libDir)
configuration { "pnacl", "Release" }
libdirs { "$(NACL_SDK_ROOT)/lib/pnacl/Release" }
- configuration { "Xbox360" }
+ configuration { "xbox360" }
targetdir (path.join(_buildDir, "xbox360/bin"))
objdir (path.join(_buildDir, "xbox360/obj"))
includedirs { path.join(bxDir, "include/compat/msvc") }
libdirs { path.join(_libDir, "lib/xbox360") }
defines {
"NOMINMAX",
- "_XBOX",
+ }
+
+ configuration { "durango" }
+ targetdir (path.join(_buildDir, "durango/bin"))
+ objdir (path.join(_buildDir, "durango/obj"))
+ includedirs { path.join(bxDir, "include/compat/msvc") }
+ libdirs { path.join(_libDir, "lib/durango") }
+ removeflags { "StaticRuntime" }
+ defines {
+ "NOMINMAX",
}
configuration { "osx", "x32" }
diff --git a/3rdparty/bx/tools/bin/darwin/genie b/3rdparty/bx/tools/bin/darwin/genie
index a7c61b7300e..9113b07986b 100644
--- a/3rdparty/bx/tools/bin/darwin/genie
+++ b/3rdparty/bx/tools/bin/darwin/genie
Binary files differ
diff --git a/3rdparty/bx/tools/bin/linux/genie b/3rdparty/bx/tools/bin/linux/genie
index 223ef23852e..c7be887f7d6 100644
--- a/3rdparty/bx/tools/bin/linux/genie
+++ b/3rdparty/bx/tools/bin/linux/genie
Binary files differ
diff --git a/3rdparty/bx/tools/bin/windows/genie.exe b/3rdparty/bx/tools/bin/windows/genie.exe
index 59575ce272e..fb46691d96f 100644
--- a/3rdparty/bx/tools/bin/windows/genie.exe
+++ b/3rdparty/bx/tools/bin/windows/genie.exe
Binary files differ
diff --git a/3rdparty/bx/tools/bin2c/bin2c.cpp b/3rdparty/bx/tools/bin2c/bin2c.cpp
index bdb92a4c04f..8aa1b9f9142 100644
--- a/3rdparty/bx/tools/bin2c/bin2c.cpp
+++ b/3rdparty/bx/tools/bin2c/bin2c.cpp
@@ -7,7 +7,7 @@
#include <vector>
#include <bx/commandline.h>
-#include <bx/readerwriter.h>
+#include <bx/crtimpl.h>
#include <bx/string.h>
class Bin2cWriter : public bx::WriterI
diff --git a/3rdparty/compat/mingw/alloca.h b/3rdparty/compat/mingw/alloca.h
new file mode 100644
index 00000000000..2cc6e9a5a4e
--- /dev/null
+++ b/3rdparty/compat/mingw/alloca.h
@@ -0,0 +1,6 @@
+#ifndef MINGW32_ALLOCA_H_HEADER_GUARD
+#define MINGW32_ALLOCA_H_HEADER_GUARD
+
+#include <malloc.h>
+
+#endif // MINGW32_ALLOCA_H_HEADER_GUARD
diff --git a/3rdparty/compat/mingw/xaudio2.h b/3rdparty/compat/mingw/xaudio2.h
new file mode 100644
index 00000000000..15165a3ecdd
--- /dev/null
+++ b/3rdparty/compat/mingw/xaudio2.h
@@ -0,0 +1,6491 @@
+/*** Autogenerated by WIDL 1.6 from xaudio2.idl - Do not edit ***/
+
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __widl_tab__
+#define __widl_tab__
+
+/* Forward declarations */
+
+#ifndef __XAudio20_FWD_DEFINED__
+#define __XAudio20_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio20 XAudio20;
+#else
+typedef struct XAudio20 XAudio20;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio20_FWD_DEFINED__ */
+
+#ifndef __XAudio21_FWD_DEFINED__
+#define __XAudio21_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio21 XAudio21;
+#else
+typedef struct XAudio21 XAudio21;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio21_FWD_DEFINED__ */
+
+#ifndef __XAudio22_FWD_DEFINED__
+#define __XAudio22_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio22 XAudio22;
+#else
+typedef struct XAudio22 XAudio22;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio22_FWD_DEFINED__ */
+
+#ifndef __XAudio23_FWD_DEFINED__
+#define __XAudio23_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio23 XAudio23;
+#else
+typedef struct XAudio23 XAudio23;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio23_FWD_DEFINED__ */
+
+#ifndef __XAudio24_FWD_DEFINED__
+#define __XAudio24_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio24 XAudio24;
+#else
+typedef struct XAudio24 XAudio24;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio24_FWD_DEFINED__ */
+
+#ifndef __XAudio25_FWD_DEFINED__
+#define __XAudio25_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio25 XAudio25;
+#else
+typedef struct XAudio25 XAudio25;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio25_FWD_DEFINED__ */
+
+#ifndef __XAudio26_FWD_DEFINED__
+#define __XAudio26_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio26 XAudio26;
+#else
+typedef struct XAudio26 XAudio26;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio26_FWD_DEFINED__ */
+
+#ifndef __XAudio27_FWD_DEFINED__
+#define __XAudio27_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio27 XAudio27;
+#else
+typedef struct XAudio27 XAudio27;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio27_FWD_DEFINED__ */
+
+#ifndef __XAudio2Debug_FWD_DEFINED__
+#define __XAudio2Debug_FWD_DEFINED__
+#ifdef __cplusplus
+typedef class XAudio2Debug XAudio2Debug;
+#else
+typedef struct XAudio2Debug XAudio2Debug;
+#endif /* defined __cplusplus */
+#endif /* defined __XAudio2Debug_FWD_DEFINED__ */
+
+#ifndef __IXAudio2EngineCallback_FWD_DEFINED__
+#define __IXAudio2EngineCallback_FWD_DEFINED__
+typedef interface IXAudio2EngineCallback IXAudio2EngineCallback;
+#endif
+
+#ifndef __IXAudio20Voice_FWD_DEFINED__
+#define __IXAudio20Voice_FWD_DEFINED__
+typedef interface IXAudio20Voice IXAudio20Voice;
+#endif
+
+#ifndef __IXAudio23Voice_FWD_DEFINED__
+#define __IXAudio23Voice_FWD_DEFINED__
+typedef interface IXAudio23Voice IXAudio23Voice;
+#endif
+
+#ifndef __IXAudio2Voice_FWD_DEFINED__
+#define __IXAudio2Voice_FWD_DEFINED__
+typedef interface IXAudio2Voice IXAudio2Voice;
+#endif
+
+#ifndef __IXAudio20SourceVoice_FWD_DEFINED__
+#define __IXAudio20SourceVoice_FWD_DEFINED__
+typedef interface IXAudio20SourceVoice IXAudio20SourceVoice;
+#endif
+
+#ifndef __IXAudio23SourceVoice_FWD_DEFINED__
+#define __IXAudio23SourceVoice_FWD_DEFINED__
+typedef interface IXAudio23SourceVoice IXAudio23SourceVoice;
+#endif
+
+#ifndef __IXAudio27SourceVoice_FWD_DEFINED__
+#define __IXAudio27SourceVoice_FWD_DEFINED__
+typedef interface IXAudio27SourceVoice IXAudio27SourceVoice;
+#endif
+
+#ifndef __IXAudio2SourceVoice_FWD_DEFINED__
+#define __IXAudio2SourceVoice_FWD_DEFINED__
+typedef interface IXAudio2SourceVoice IXAudio2SourceVoice;
+#endif
+
+#ifndef __IXAudio20SubmixVoice_FWD_DEFINED__
+#define __IXAudio20SubmixVoice_FWD_DEFINED__
+typedef interface IXAudio20SubmixVoice IXAudio20SubmixVoice;
+#endif
+
+#ifndef __IXAudio23SubmixVoice_FWD_DEFINED__
+#define __IXAudio23SubmixVoice_FWD_DEFINED__
+typedef interface IXAudio23SubmixVoice IXAudio23SubmixVoice;
+#endif
+
+#ifndef __IXAudio2SubmixVoice_FWD_DEFINED__
+#define __IXAudio2SubmixVoice_FWD_DEFINED__
+typedef interface IXAudio2SubmixVoice IXAudio2SubmixVoice;
+#endif
+
+#ifndef __IXAudio20MasteringVoice_FWD_DEFINED__
+#define __IXAudio20MasteringVoice_FWD_DEFINED__
+typedef interface IXAudio20MasteringVoice IXAudio20MasteringVoice;
+#endif
+
+#ifndef __IXAudio23MasteringVoice_FWD_DEFINED__
+#define __IXAudio23MasteringVoice_FWD_DEFINED__
+typedef interface IXAudio23MasteringVoice IXAudio23MasteringVoice;
+#endif
+
+#ifndef __IXAudio2MasteringVoice_FWD_DEFINED__
+#define __IXAudio2MasteringVoice_FWD_DEFINED__
+typedef interface IXAudio2MasteringVoice IXAudio2MasteringVoice;
+#endif
+
+#ifndef __IXAudio20VoiceCallback_FWD_DEFINED__
+#define __IXAudio20VoiceCallback_FWD_DEFINED__
+typedef interface IXAudio20VoiceCallback IXAudio20VoiceCallback;
+#endif
+
+#ifndef __IXAudio2VoiceCallback_FWD_DEFINED__
+#define __IXAudio2VoiceCallback_FWD_DEFINED__
+typedef interface IXAudio2VoiceCallback IXAudio2VoiceCallback;
+#endif
+
+#ifndef __IXAudio20_FWD_DEFINED__
+#define __IXAudio20_FWD_DEFINED__
+typedef interface IXAudio20 IXAudio20;
+#endif
+
+#ifndef __IXAudio22_FWD_DEFINED__
+#define __IXAudio22_FWD_DEFINED__
+typedef interface IXAudio22 IXAudio22;
+#endif
+
+#ifndef __IXAudio27_FWD_DEFINED__
+#define __IXAudio27_FWD_DEFINED__
+typedef interface IXAudio27 IXAudio27;
+#endif
+
+#ifndef __IXAudio2_FWD_DEFINED__
+#define __IXAudio2_FWD_DEFINED__
+typedef interface IXAudio2 IXAudio2;
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+#include <mmdeviceapi.h>
+#include <audiosessiontypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <pshpack1.h>
+/*****************************************************************************
+ * XAudio20 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio20, 0xfac23f48, 0x31f5, 0x45a8, 0xb4,0x9b, 0x52,0x25,0xd6,0x14,0x01,0xaa);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("fac23f48-31f5-45a8-b49b-5225d61401aa") XAudio20;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio20, 0xfac23f48, 0x31f5, 0x45a8, 0xb4,0x9b, 0x52,0x25,0xd6,0x14,0x01,0xaa)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio21 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio21, 0xe21a7345, 0xeb21, 0x468e, 0xbe,0x50, 0x80,0x4d,0xb9,0x7c,0xf7,0x08);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("e21a7345-eb21-468e-be50-804db97cf708") XAudio21;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio21, 0xe21a7345, 0xeb21, 0x468e, 0xbe,0x50, 0x80,0x4d,0xb9,0x7c,0xf7,0x08)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio22 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio22, 0xb802058a, 0x464a, 0x42db, 0xbc,0x10, 0xb6,0x50,0xd6,0xf2,0x58,0x6a);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("b802058a-464a-42db-bc10-b650d6f2586a") XAudio22;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio22, 0xb802058a, 0x464a, 0x42db, 0xbc,0x10, 0xb6,0x50,0xd6,0xf2,0x58,0x6a)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio23 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio23, 0x4c5e637a, 0x16c7, 0x4de3, 0x9c,0x46, 0x5e,0xd2,0x21,0x81,0x96,0x2d);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("4c5e637a-16c7-4de3-9c46-5ed22181962d") XAudio23;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio23, 0x4c5e637a, 0x16c7, 0x4de3, 0x9c,0x46, 0x5e,0xd2,0x21,0x81,0x96,0x2d)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio24 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio24, 0x03219e78, 0x5bc3, 0x44d1, 0xb9,0x2e, 0xf6,0x3d,0x89,0xcc,0x65,0x26);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("03219e78-5bc3-44d1-b92e-f63d89cc6526") XAudio24;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio24, 0x03219e78, 0x5bc3, 0x44d1, 0xb9,0x2e, 0xf6,0x3d,0x89,0xcc,0x65,0x26)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio25 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio25, 0x4c9b6dde, 0x6809, 0x46e6, 0xa2,0x78, 0x9b,0x6a,0x97,0x58,0x86,0x70);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("4c9b6dde-6809-46e6-a278-9b6a97588670") XAudio25;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio25, 0x4c9b6dde, 0x6809, 0x46e6, 0xa2,0x78, 0x9b,0x6a,0x97,0x58,0x86,0x70)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio26 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio26, 0x3eda9b49, 0x2085, 0x498b, 0x9b,0xb2, 0x39,0xa6,0x77,0x84,0x93,0xde);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("3eda9b49-2085-498b-9bb2-39a6778493de") XAudio26;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio26, 0x3eda9b49, 0x2085, 0x498b, 0x9b,0xb2, 0x39,0xa6,0x77,0x84,0x93,0xde)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio27 coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio27, 0x5a508685, 0xa254, 0x4fba, 0x9b,0x82, 0x9a,0x24,0xb0,0x03,0x06,0xaf);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("5a508685-a254-4fba-9b82-9a24b00306af") XAudio27;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio27, 0x5a508685, 0xa254, 0x4fba, 0x9b,0x82, 0x9a,0x24,0xb0,0x03,0x06,0xaf)
+#endif
+#endif
+
+/*****************************************************************************
+ * XAudio2Debug coclass
+ */
+
+DEFINE_GUID(CLSID_XAudio2Debug, 0xdb05ea35, 0x0329, 0x4d4b, 0xa5,0x3a, 0x6d,0xea,0xd0,0x3d,0x38,0x52);
+
+#ifdef __cplusplus
+class DECLSPEC_UUID("db05ea35-0329-4d4b-a53a-6dead03d3852") XAudio2Debug;
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(XAudio2Debug, 0xdb05ea35, 0x0329, 0x4d4b, 0xa5,0x3a, 0x6d,0xea,0xd0,0x3d,0x38,0x52)
+#endif
+#endif
+
+#if 0
+typedef struct WAVEFORMATEX {
+ WORD wFormatTag;
+ WORD nChannels;
+ DWORD nSamplesPerSec;
+ DWORD nAvgBytesPerSec;
+ WORD nBlockAlign;
+ WORD wBitsPerSample;
+ WORD cbSize;
+} WAVEFORMATEX;
+typedef struct __WIDL_xaudio2_generated_name_00000013 {
+ WAVEFORMATEX Format;
+ union {
+ WORD wValidBitsPerSample;
+ WORD wSamplesPerBlock;
+ WORD wReserved;
+ } Samples;
+ DWORD dwChannelMask;
+ GUID SubFormat;
+} WAVEFORMATEXTENSIBLE;
+typedef struct __WIDL_xaudio2_generated_name_00000013 *PWAVEFORMATEXTENSIBLE;
+#else
+#include <mmreg.h>
+#endif
+#ifndef __IXAudio2Voice_FWD_DEFINED__
+#define __IXAudio2Voice_FWD_DEFINED__
+typedef interface IXAudio2Voice IXAudio2Voice;
+#endif
+
+typedef enum XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER {
+ Processor1 = 0x1,
+ Processor2 = 0x2,
+ Processor3 = 0x4,
+ Processor4 = 0x8,
+ Processor5 = 0x10,
+ Processor6 = 0x20,
+ Processor7 = 0x40,
+ Processor8 = 0x80,
+ Processor9 = 0x100,
+ Processor10 = 0x200,
+ Processor11 = 0x400,
+ Processor12 = 0x800,
+ Processor13 = 0x1000,
+ Processor14 = 0x2000,
+ Processor15 = 0x4000,
+ Processor16 = 0x8000,
+ Processor17 = 0x10000,
+ Processor18 = 0x20000,
+ Processor19 = 0x40000,
+ Processor20 = 0x80000,
+ Processor21 = 0x100000,
+ Processor22 = 0x200000,
+ Processor23 = 0x400000,
+ Processor24 = 0x800000,
+ Processor25 = 0x1000000,
+ Processor26 = 0x2000000,
+ Processor27 = 0x4000000,
+ Processor28 = 0x8000000,
+ Processor29 = 0x10000000,
+ Processor30 = 0x20000000,
+ Processor31 = 0x40000000,
+ Processor32 = 0x80000000,
+ XAUDIO2_ANY_PROCESSOR = 0xffffffff,
+ XAUDIO2_DEFAULT_PROCESSOR = XAUDIO2_ANY_PROCESSOR
+} XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER;
+typedef enum XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER XAUDIO2_PROCESSOR;
+typedef struct XAUDIO2_PERFORMANCE_DATA {
+ UINT64 AudioCyclesSinceLastQuery;
+ UINT64 TotalCyclesSinceLastQuery;
+ UINT32 MinimumCyclesPerQuantum;
+ UINT32 MaximumCyclesPerQuantum;
+ UINT32 MemoryUsageInBytes;
+ UINT32 CurrentLatencyInSamples;
+ UINT32 GlitchesSinceEngineStarted;
+ UINT32 ActiveSourceVoiceCount;
+ UINT32 TotalSourceVoiceCount;
+ UINT32 ActiveSubmixVoiceCount;
+ UINT32 ActiveResamplerCount;
+ UINT32 ActiveMatrixMixCount;
+ UINT32 ActiveXmaSourceVoices;
+ UINT32 ActiveXmaStreams;
+} XAUDIO2_PERFORMANCE_DATA;
+typedef struct XAUDIO22_PERFORMANCE_DATA {
+ UINT64 AudioCyclesSinceLastQuery;
+ UINT64 TotalCyclesSinceLastQuery;
+ UINT32 MinimumCyclesPerQuantum;
+ UINT32 MaximumCyclesPerQuantum;
+ UINT32 MemoryUsageInBytes;
+ UINT32 CurrentLatencyInSamples;
+ UINT32 GlitchesSinceEngineStarted;
+ UINT32 ActiveSourceVoiceCount;
+ UINT32 TotalSourceVoiceCount;
+ UINT32 ActiveSubmixVoiceCount;
+ UINT32 TotalSubmixVoiceCount;
+ UINT32 ActiveXmaSourceVoices;
+ UINT32 ActiveXmaStreams;
+} XAUDIO22_PERFORMANCE_DATA;
+typedef struct XAUDIO20_PERFORMANCE_DATA {
+ UINT64 AudioCyclesSinceLastQuery;
+ UINT64 TotalCyclesSinceLastQuery;
+ UINT32 MinimumCyclesPerQuantum;
+ UINT32 MaximumCyclesPerQuantum;
+ UINT32 MemoryUsageInBytes;
+ UINT32 CurrentLatencyInSamples;
+ UINT32 GlitchesSinceLastQuery;
+ UINT32 ActiveSourceVoiceCount;
+ UINT32 TotalSourceVoiceCount;
+ UINT32 ActiveSubmixVoiceCount;
+ UINT32 TotalSubmixVoiceCount;
+ UINT32 ActiveXmaSourceVoices;
+ UINT32 ActiveXmaStreams;
+} XAUDIO20_PERFORMANCE_DATA;
+typedef enum XAUDIO2_DEVICE_ROLE {
+ NotDefaultDevice = 0x0,
+ DefaultConsoleDevice = 0x1,
+ DefaultMultimediaDevice = 0x2,
+ DefaultCommunicationsDevice = 0x4,
+ DefaultGameDevice = 0x8,
+ GlobalDefaultDevice = 0xf,
+ InvalidDeviceRole = ~GlobalDefaultDevice
+} XAUDIO2_DEVICE_ROLE;
+typedef struct XAUDIO2_DEVICE_DETAILS {
+ WCHAR DeviceID[256];
+ WCHAR DisplayName[256];
+ XAUDIO2_DEVICE_ROLE Role;
+ WAVEFORMATEXTENSIBLE OutputFormat;
+} XAUDIO2_DEVICE_DETAILS;
+typedef struct XAUDIO2_VOICE_DETAILS {
+ UINT32 CreationFlags;
+ UINT32 InputChannels;
+ UINT32 InputSampleRate;
+} XAUDIO2_VOICE_DETAILS;
+typedef struct XAUDIO2_SEND_DESCRIPTOR {
+ UINT32 Flags;
+ IXAudio2Voice *pOutputVoice;
+} XAUDIO2_SEND_DESCRIPTOR;
+typedef struct XAUDIO23_VOICE_SENDS {
+ UINT32 OutputCount;
+ IXAudio2Voice **pOutputVoices;
+} XAUDIO23_VOICE_SENDS;
+typedef struct XAUDIO2_VOICE_SENDS {
+ UINT32 SendCount;
+ XAUDIO2_SEND_DESCRIPTOR *pSends;
+} XAUDIO2_VOICE_SENDS;
+typedef struct XAUDIO2_EFFECT_DESCRIPTOR {
+ IUnknown *pEffect;
+ BOOL InitialState;
+ UINT32 OutputChannels;
+} XAUDIO2_EFFECT_DESCRIPTOR;
+typedef struct XAUDIO2_EFFECT_CHAIN {
+ UINT32 EffectCount;
+ XAUDIO2_EFFECT_DESCRIPTOR *pEffectDescriptors;
+} XAUDIO2_EFFECT_CHAIN;
+#define XAUDIO2_MAX_BUFFER_BYTES (0x80000000)
+
+#define XAUDIO2_MAX_QUEUED_BUFFERS (64)
+
+#define XAUDIO2_MAX_BUFFERS_SYSTEM (2)
+
+#define XAUDIO2_MAX_AUDIO_CHANNELS (64)
+
+#define XAUDIO2_MIN_SAMPLE_RATE (1000)
+
+#define XAUDIO2_MAX_SAMPLE_RATE (200000)
+
+#define XAUDIO2_MAX_VOLUME_LEVEL (16777216.0000000)
+
+#define XAUDIO2_MIN_FREQ_RATIO (1 / 1024.00000000000)
+
+#define XAUDIO2_MAX_FREQ_RATIO (1024.00000000000)
+
+#define XAUDIO2_DEFAULT_FREQ_RATIO (2.00000000000000)
+
+#define XAUDIO2_MAX_FILTER_ONEOVERQ (1.50000000000000)
+
+#define XAUDIO2_MAX_FILTER_FREQUENCY (1.00000000000000)
+
+#define XAUDIO2_MAX_LOOP_COUNT (254)
+
+#define XAUDIO20_MAX_LOOP_COUNT (0x100000)
+
+#define XAUDIO2_COMMIT_NOW (0)
+
+#define XAUDIO2_COMMIT_ALL (0)
+
+#define XAUDIO2_INVALID_OPSET (0xffffffff)
+
+#define XAUDIO2_NO_LOOP_REGION (0)
+
+#define XAUDIO2_LOOP_INFINITE (255)
+
+#define XAUDIO20_LOOP_INFINITE ((UINT)-1)
+
+#define XAUDIO2_DEFAULT_CHANNELS (0)
+
+#define XAUDIO2_DEFAULT_SAMPLERATE (0)
+
+/*****************************************************************************
+ * IXAudio2EngineCallback interface
+ */
+#ifndef __IXAudio2EngineCallback_INTERFACE_DEFINED__
+#define __IXAudio2EngineCallback_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio2EngineCallback
+{
+ BEGIN_INTERFACE
+
+ virtual void STDMETHODCALLTYPE OnProcessingPassStart(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE OnProcessingPassEnd(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE OnCriticalError(
+ HRESULT Error) = 0;
+
+ END_INTERFACE
+};
+#else
+typedef struct IXAudio2EngineCallbackVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio2EngineCallback methods ***/
+ void (STDMETHODCALLTYPE *OnProcessingPassStart)(
+ IXAudio2EngineCallback* This);
+
+ void (STDMETHODCALLTYPE *OnProcessingPassEnd)(
+ IXAudio2EngineCallback* This);
+
+ void (STDMETHODCALLTYPE *OnCriticalError)(
+ IXAudio2EngineCallback* This,
+ HRESULT Error);
+
+ END_INTERFACE
+} IXAudio2EngineCallbackVtbl;
+interface IXAudio2EngineCallback {
+ CONST_VTBL IXAudio2EngineCallbackVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio2EngineCallback methods ***/
+#define IXAudio2EngineCallback_OnProcessingPassStart(This) (This)->lpVtbl->OnProcessingPassStart(This)
+#define IXAudio2EngineCallback_OnProcessingPassEnd(This) (This)->lpVtbl->OnProcessingPassEnd(This)
+#define IXAudio2EngineCallback_OnCriticalError(This,Error) (This)->lpVtbl->OnCriticalError(This,Error)
+#else
+/*** IXAudio2EngineCallback methods ***/
+static FORCEINLINE void IXAudio2EngineCallback_OnProcessingPassStart(IXAudio2EngineCallback* This) {
+ This->lpVtbl->OnProcessingPassStart(This);
+}
+static FORCEINLINE void IXAudio2EngineCallback_OnProcessingPassEnd(IXAudio2EngineCallback* This) {
+ This->lpVtbl->OnProcessingPassEnd(This);
+}
+static FORCEINLINE void IXAudio2EngineCallback_OnCriticalError(IXAudio2EngineCallback* This,HRESULT Error) {
+ This->lpVtbl->OnCriticalError(This,Error);
+}
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IXAudio2EngineCallback_OnProcessingPassStart_Proxy(
+ IXAudio2EngineCallback* This);
+void __RPC_STUB IXAudio2EngineCallback_OnProcessingPassStart_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2EngineCallback_OnProcessingPassEnd_Proxy(
+ IXAudio2EngineCallback* This);
+void __RPC_STUB IXAudio2EngineCallback_OnProcessingPassEnd_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2EngineCallback_OnCriticalError_Proxy(
+ IXAudio2EngineCallback* This,
+ HRESULT Error);
+void __RPC_STUB IXAudio2EngineCallback_OnCriticalError_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio2EngineCallback_INTERFACE_DEFINED__ */
+
+typedef enum XAUDIO2_FILTER_TYPE {
+ LowPassFilter = 0,
+ BandPassFilter = 1,
+ HighPassFilter = 2,
+ NotchFilter = 3
+} XAUDIO2_FILTER_TYPE;
+typedef struct XAUDIO2_FILTER_PARAMETERS {
+ XAUDIO2_FILTER_TYPE Type;
+ float Frequency;
+ float OneOverQ;
+} XAUDIO2_FILTER_PARAMETERS;
+/*****************************************************************************
+ * IXAudio20Voice interface
+ */
+#ifndef __IXAudio20Voice_INTERFACE_DEFINED__
+#define __IXAudio20Voice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio20Voice
+{
+ BEGIN_INTERFACE
+
+ virtual void STDMETHODCALLTYPE GetVoiceDetails(
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetOutputVoices(
+ const XAUDIO23_VOICE_SENDS *pSendList) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetEffectChain(
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnableEffect(
+ UINT32 EffectIndex,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DisableEffect(
+ UINT32 EffectIndex,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetEffectState(
+ UINT32 EffectIndex,
+ BOOL *pEnabled) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetEffectParameters(
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetEffectParameters(
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFilterParameters(
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetFilterParameters(
+ XAUDIO2_FILTER_PARAMETERS *pParameters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVolume(
+ float Volume,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetVolume(
+ float *pVolume) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetChannelVolumes(
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetChannelVolumes(
+ UINT32 Channels,
+ float *pVolumes) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetOutputMatrix(
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetOutputMatrix(
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix) = 0;
+
+ virtual void STDMETHODCALLTYPE DestroyVoice(
+ ) = 0;
+
+ END_INTERFACE
+};
+#else
+typedef struct IXAudio20VoiceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio20Voice methods ***/
+ void (STDMETHODCALLTYPE *GetVoiceDetails)(
+ IXAudio20Voice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+ IXAudio20Voice* This,
+ const XAUDIO23_VOICE_SENDS *pSendList);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+ IXAudio20Voice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+ IXAudio20Voice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+ IXAudio20Voice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetEffectState)(
+ IXAudio20Voice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+ IXAudio20Voice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+ IXAudio20Voice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+
+ HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+ IXAudio20Voice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFilterParameters)(
+ IXAudio20Voice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetVolume)(
+ IXAudio20Voice* This,
+ float Volume,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetVolume)(
+ IXAudio20Voice* This,
+ float *pVolume);
+
+ HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+ IXAudio20Voice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetChannelVolumes)(
+ IXAudio20Voice* This,
+ UINT32 Channels,
+ float *pVolumes);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+ IXAudio20Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetOutputMatrix)(
+ IXAudio20Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+
+ void (STDMETHODCALLTYPE *DestroyVoice)(
+ IXAudio20Voice* This);
+
+ END_INTERFACE
+} IXAudio20VoiceVtbl;
+interface IXAudio20Voice {
+ CONST_VTBL IXAudio20VoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio20Voice methods ***/
+#define IXAudio20Voice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio20Voice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio20Voice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio20Voice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20Voice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20Voice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio20Voice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio20Voice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio20Voice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio20Voice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio20Voice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio20Voice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio20Voice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio20Voice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio20Voice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio20Voice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio20Voice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio20Voice methods ***/
+static FORCEINLINE void IXAudio20Voice_GetVoiceDetails(IXAudio20Voice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+ This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_SetOutputVoices(IXAudio20Voice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+ return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_SetEffectChain(IXAudio20Voice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_EnableEffect(IXAudio20Voice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_DisableEffect(IXAudio20Voice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio20Voice_GetEffectState(IXAudio20Voice* This,UINT32 EffectIndex,BOOL *pEnabled) {
+ This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_SetEffectParameters(IXAudio20Voice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+ return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_GetEffectParameters(IXAudio20Voice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+ return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_SetFilterParameters(IXAudio20Voice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio20Voice_GetFilterParameters(IXAudio20Voice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_SetVolume(IXAudio20Voice* This,float Volume,UINT32 OperationSet) {
+ return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio20Voice_GetVolume(IXAudio20Voice* This,float *pVolume) {
+ This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_SetChannelVolumes(IXAudio20Voice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+ return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio20Voice_GetChannelVolumes(IXAudio20Voice* This,UINT32 Channels,float *pVolumes) {
+ This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_SetOutputMatrix(IXAudio20Voice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20Voice_GetOutputMatrix(IXAudio20Voice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+ return This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio20Voice_DestroyVoice(IXAudio20Voice* This) {
+ This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IXAudio20Voice_GetVoiceDetails_Proxy(
+ IXAudio20Voice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+void __RPC_STUB IXAudio20Voice_GetVoiceDetails_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20Voice_SetOutputVoices_Proxy(
+ IXAudio20Voice* This,
+ const XAUDIO23_VOICE_SENDS *pSendList);
+void __RPC_STUB IXAudio20Voice_SetOutputVoices_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20Voice_SetEffectChain_Proxy(
+ IXAudio20Voice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+void __RPC_STUB IXAudio20Voice_SetEffectChain_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20Voice_EnableEffect_Proxy(
+ IXAudio20Voice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio20Voice_EnableEffect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20Voice_DisableEffect_Proxy(
+ IXAudio20Voice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio20Voice_DisableEffect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20Voice_GetEffectState_Proxy(
+ IXAudio20Voice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+void __RPC_STUB IXAudio20Voice_GetEffectState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20Voice_SetEffectParameters_Proxy(
+ IXAudio20Voice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio20Voice_SetEffectParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20Voice_GetEffectParameters_Proxy(
+ IXAudio20Voice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+void __RPC_STUB IXAudio20Voice_GetEffectParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20Voice_SetFilterParameters_Proxy(
+ IXAudio20Voice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio20Voice_SetFilterParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20Voice_GetFilterParameters_Proxy(
+ IXAudio20Voice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+void __RPC_STUB IXAudio20Voice_GetFilterParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20Voice_SetVolume_Proxy(
+ IXAudio20Voice* This,
+ float Volume,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio20Voice_SetVolume_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20Voice_GetVolume_Proxy(
+ IXAudio20Voice* This,
+ float *pVolume);
+void __RPC_STUB IXAudio20Voice_GetVolume_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20Voice_SetChannelVolumes_Proxy(
+ IXAudio20Voice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio20Voice_SetChannelVolumes_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20Voice_GetChannelVolumes_Proxy(
+ IXAudio20Voice* This,
+ UINT32 Channels,
+ float *pVolumes);
+void __RPC_STUB IXAudio20Voice_GetChannelVolumes_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20Voice_SetOutputMatrix_Proxy(
+ IXAudio20Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio20Voice_SetOutputMatrix_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20Voice_GetOutputMatrix_Proxy(
+ IXAudio20Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+void __RPC_STUB IXAudio20Voice_GetOutputMatrix_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20Voice_DestroyVoice_Proxy(
+ IXAudio20Voice* This);
+void __RPC_STUB IXAudio20Voice_DestroyVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio20Voice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio23Voice interface
+ */
+#ifndef __IXAudio23Voice_INTERFACE_DEFINED__
+#define __IXAudio23Voice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio23Voice
+{
+ BEGIN_INTERFACE
+
+ virtual void STDMETHODCALLTYPE GetVoiceDetails(
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetOutputVoices(
+ const XAUDIO23_VOICE_SENDS *pSendList) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetEffectChain(
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnableEffect(
+ UINT32 EffectIndex,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DisableEffect(
+ UINT32 EffectIndex,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetEffectState(
+ UINT32 EffectIndex,
+ BOOL *pEnabled) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetEffectParameters(
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetEffectParameters(
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFilterParameters(
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetFilterParameters(
+ XAUDIO2_FILTER_PARAMETERS *pParameters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVolume(
+ float Volume,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetVolume(
+ float *pVolume) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetChannelVolumes(
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetChannelVolumes(
+ UINT32 Channels,
+ float *pVolumes) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetOutputMatrix(
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetOutputMatrix(
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix) = 0;
+
+ virtual void STDMETHODCALLTYPE DestroyVoice(
+ ) = 0;
+
+ END_INTERFACE
+};
+#else
+typedef struct IXAudio23VoiceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio23Voice methods ***/
+ void (STDMETHODCALLTYPE *GetVoiceDetails)(
+ IXAudio23Voice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+ IXAudio23Voice* This,
+ const XAUDIO23_VOICE_SENDS *pSendList);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+ IXAudio23Voice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+ IXAudio23Voice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+ IXAudio23Voice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetEffectState)(
+ IXAudio23Voice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+ IXAudio23Voice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+ IXAudio23Voice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+
+ HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+ IXAudio23Voice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFilterParameters)(
+ IXAudio23Voice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetVolume)(
+ IXAudio23Voice* This,
+ float Volume,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetVolume)(
+ IXAudio23Voice* This,
+ float *pVolume);
+
+ HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+ IXAudio23Voice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetChannelVolumes)(
+ IXAudio23Voice* This,
+ UINT32 Channels,
+ float *pVolumes);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+ IXAudio23Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetOutputMatrix)(
+ IXAudio23Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+
+ void (STDMETHODCALLTYPE *DestroyVoice)(
+ IXAudio23Voice* This);
+
+ END_INTERFACE
+} IXAudio23VoiceVtbl;
+interface IXAudio23Voice {
+ CONST_VTBL IXAudio23VoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio23Voice methods ***/
+#define IXAudio23Voice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio23Voice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio23Voice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio23Voice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23Voice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23Voice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio23Voice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio23Voice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio23Voice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio23Voice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio23Voice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio23Voice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio23Voice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio23Voice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio23Voice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio23Voice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio23Voice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio23Voice methods ***/
+static FORCEINLINE void IXAudio23Voice_GetVoiceDetails(IXAudio23Voice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+ This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_SetOutputVoices(IXAudio23Voice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+ return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_SetEffectChain(IXAudio23Voice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_EnableEffect(IXAudio23Voice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_DisableEffect(IXAudio23Voice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio23Voice_GetEffectState(IXAudio23Voice* This,UINT32 EffectIndex,BOOL *pEnabled) {
+ This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_SetEffectParameters(IXAudio23Voice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+ return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_GetEffectParameters(IXAudio23Voice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+ return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_SetFilterParameters(IXAudio23Voice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio23Voice_GetFilterParameters(IXAudio23Voice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_SetVolume(IXAudio23Voice* This,float Volume,UINT32 OperationSet) {
+ return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio23Voice_GetVolume(IXAudio23Voice* This,float *pVolume) {
+ This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_SetChannelVolumes(IXAudio23Voice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+ return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio23Voice_GetChannelVolumes(IXAudio23Voice* This,UINT32 Channels,float *pVolumes) {
+ This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio23Voice_SetOutputMatrix(IXAudio23Voice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio23Voice_GetOutputMatrix(IXAudio23Voice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+ This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio23Voice_DestroyVoice(IXAudio23Voice* This) {
+ This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IXAudio23Voice_GetVoiceDetails_Proxy(
+ IXAudio23Voice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+void __RPC_STUB IXAudio23Voice_GetVoiceDetails_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23Voice_SetOutputVoices_Proxy(
+ IXAudio23Voice* This,
+ const XAUDIO23_VOICE_SENDS *pSendList);
+void __RPC_STUB IXAudio23Voice_SetOutputVoices_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23Voice_SetEffectChain_Proxy(
+ IXAudio23Voice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+void __RPC_STUB IXAudio23Voice_SetEffectChain_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23Voice_EnableEffect_Proxy(
+ IXAudio23Voice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio23Voice_EnableEffect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23Voice_DisableEffect_Proxy(
+ IXAudio23Voice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio23Voice_DisableEffect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio23Voice_GetEffectState_Proxy(
+ IXAudio23Voice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+void __RPC_STUB IXAudio23Voice_GetEffectState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23Voice_SetEffectParameters_Proxy(
+ IXAudio23Voice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio23Voice_SetEffectParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23Voice_GetEffectParameters_Proxy(
+ IXAudio23Voice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+void __RPC_STUB IXAudio23Voice_GetEffectParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23Voice_SetFilterParameters_Proxy(
+ IXAudio23Voice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio23Voice_SetFilterParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio23Voice_GetFilterParameters_Proxy(
+ IXAudio23Voice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+void __RPC_STUB IXAudio23Voice_GetFilterParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23Voice_SetVolume_Proxy(
+ IXAudio23Voice* This,
+ float Volume,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio23Voice_SetVolume_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio23Voice_GetVolume_Proxy(
+ IXAudio23Voice* This,
+ float *pVolume);
+void __RPC_STUB IXAudio23Voice_GetVolume_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23Voice_SetChannelVolumes_Proxy(
+ IXAudio23Voice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio23Voice_SetChannelVolumes_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio23Voice_GetChannelVolumes_Proxy(
+ IXAudio23Voice* This,
+ UINT32 Channels,
+ float *pVolumes);
+void __RPC_STUB IXAudio23Voice_GetChannelVolumes_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23Voice_SetOutputMatrix_Proxy(
+ IXAudio23Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio23Voice_SetOutputMatrix_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio23Voice_GetOutputMatrix_Proxy(
+ IXAudio23Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+void __RPC_STUB IXAudio23Voice_GetOutputMatrix_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio23Voice_DestroyVoice_Proxy(
+ IXAudio23Voice* This);
+void __RPC_STUB IXAudio23Voice_DestroyVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio23Voice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio2Voice interface
+ */
+#ifndef __IXAudio2Voice_INTERFACE_DEFINED__
+#define __IXAudio2Voice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio2Voice
+{
+ BEGIN_INTERFACE
+
+ virtual void STDMETHODCALLTYPE GetVoiceDetails(
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetOutputVoices(
+ const XAUDIO2_VOICE_SENDS *pSendList) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetEffectChain(
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnableEffect(
+ UINT32 EffectIndex,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DisableEffect(
+ UINT32 EffectIndex,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetEffectState(
+ UINT32 EffectIndex,
+ BOOL *pEnabled) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetEffectParameters(
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetEffectParameters(
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFilterParameters(
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetFilterParameters(
+ XAUDIO2_FILTER_PARAMETERS *pParameters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetOutputFilterParameters(
+ IXAudio2Voice *pDestinationVoice,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetOutputFilterParameters(
+ IXAudio2Voice *pDestinationVoice,
+ XAUDIO2_FILTER_PARAMETERS *pParameters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVolume(
+ float Volume,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetVolume(
+ float *pVolume) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetChannelVolumes(
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetChannelVolumes(
+ UINT32 Channels,
+ float *pVolumes) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetOutputMatrix(
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetOutputMatrix(
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix) = 0;
+
+ virtual void STDMETHODCALLTYPE DestroyVoice(
+ ) = 0;
+
+ END_INTERFACE
+};
+#else
+typedef struct IXAudio2VoiceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio2Voice methods ***/
+ void (STDMETHODCALLTYPE *GetVoiceDetails)(
+ IXAudio2Voice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+ IXAudio2Voice* This,
+ const XAUDIO2_VOICE_SENDS *pSendList);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+ IXAudio2Voice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+ IXAudio2Voice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+ IXAudio2Voice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetEffectState)(
+ IXAudio2Voice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+ IXAudio2Voice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+ IXAudio2Voice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+
+ HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+ IXAudio2Voice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFilterParameters)(
+ IXAudio2Voice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputFilterParameters)(
+ IXAudio2Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetOutputFilterParameters)(
+ IXAudio2Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetVolume)(
+ IXAudio2Voice* This,
+ float Volume,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetVolume)(
+ IXAudio2Voice* This,
+ float *pVolume);
+
+ HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+ IXAudio2Voice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetChannelVolumes)(
+ IXAudio2Voice* This,
+ UINT32 Channels,
+ float *pVolumes);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+ IXAudio2Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetOutputMatrix)(
+ IXAudio2Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+
+ void (STDMETHODCALLTYPE *DestroyVoice)(
+ IXAudio2Voice* This);
+
+ END_INTERFACE
+} IXAudio2VoiceVtbl;
+interface IXAudio2Voice {
+ CONST_VTBL IXAudio2VoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio2Voice methods ***/
+#define IXAudio2Voice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio2Voice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio2Voice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio2Voice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2Voice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2Voice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio2Voice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio2Voice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio2Voice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio2Voice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio2Voice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) (This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)
+#define IXAudio2Voice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) (This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)
+#define IXAudio2Voice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio2Voice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio2Voice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio2Voice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio2Voice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio2Voice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio2Voice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio2Voice methods ***/
+static FORCEINLINE void IXAudio2Voice_GetVoiceDetails(IXAudio2Voice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+ This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetOutputVoices(IXAudio2Voice* This,const XAUDIO2_VOICE_SENDS *pSendList) {
+ return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetEffectChain(IXAudio2Voice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_EnableEffect(IXAudio2Voice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_DisableEffect(IXAudio2Voice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio2Voice_GetEffectState(IXAudio2Voice* This,UINT32 EffectIndex,BOOL *pEnabled) {
+ This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetEffectParameters(IXAudio2Voice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+ return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_GetEffectParameters(IXAudio2Voice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+ return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetFilterParameters(IXAudio2Voice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2Voice_GetFilterParameters(IXAudio2Voice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetOutputFilterParameters(IXAudio2Voice* This,IXAudio2Voice *pDestinationVoice,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2Voice_GetOutputFilterParameters(IXAudio2Voice* This,IXAudio2Voice *pDestinationVoice,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetVolume(IXAudio2Voice* This,float Volume,UINT32 OperationSet) {
+ return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio2Voice_GetVolume(IXAudio2Voice* This,float *pVolume) {
+ This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetChannelVolumes(IXAudio2Voice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+ return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio2Voice_GetChannelVolumes(IXAudio2Voice* This,UINT32 Channels,float *pVolumes) {
+ This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio2Voice_SetOutputMatrix(IXAudio2Voice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio2Voice_GetOutputMatrix(IXAudio2Voice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+ This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio2Voice_DestroyVoice(IXAudio2Voice* This) {
+ This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IXAudio2Voice_GetVoiceDetails_Proxy(
+ IXAudio2Voice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+void __RPC_STUB IXAudio2Voice_GetVoiceDetails_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2Voice_SetOutputVoices_Proxy(
+ IXAudio2Voice* This,
+ const XAUDIO2_VOICE_SENDS *pSendList);
+void __RPC_STUB IXAudio2Voice_SetOutputVoices_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2Voice_SetEffectChain_Proxy(
+ IXAudio2Voice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+void __RPC_STUB IXAudio2Voice_SetEffectChain_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2Voice_EnableEffect_Proxy(
+ IXAudio2Voice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio2Voice_EnableEffect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2Voice_DisableEffect_Proxy(
+ IXAudio2Voice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio2Voice_DisableEffect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2Voice_GetEffectState_Proxy(
+ IXAudio2Voice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+void __RPC_STUB IXAudio2Voice_GetEffectState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2Voice_SetEffectParameters_Proxy(
+ IXAudio2Voice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio2Voice_SetEffectParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2Voice_GetEffectParameters_Proxy(
+ IXAudio2Voice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+void __RPC_STUB IXAudio2Voice_GetEffectParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2Voice_SetFilterParameters_Proxy(
+ IXAudio2Voice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio2Voice_SetFilterParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2Voice_GetFilterParameters_Proxy(
+ IXAudio2Voice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+void __RPC_STUB IXAudio2Voice_GetFilterParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2Voice_SetOutputFilterParameters_Proxy(
+ IXAudio2Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio2Voice_SetOutputFilterParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2Voice_GetOutputFilterParameters_Proxy(
+ IXAudio2Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+void __RPC_STUB IXAudio2Voice_GetOutputFilterParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2Voice_SetVolume_Proxy(
+ IXAudio2Voice* This,
+ float Volume,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio2Voice_SetVolume_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2Voice_GetVolume_Proxy(
+ IXAudio2Voice* This,
+ float *pVolume);
+void __RPC_STUB IXAudio2Voice_GetVolume_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2Voice_SetChannelVolumes_Proxy(
+ IXAudio2Voice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio2Voice_SetChannelVolumes_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2Voice_GetChannelVolumes_Proxy(
+ IXAudio2Voice* This,
+ UINT32 Channels,
+ float *pVolumes);
+void __RPC_STUB IXAudio2Voice_GetChannelVolumes_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2Voice_SetOutputMatrix_Proxy(
+ IXAudio2Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio2Voice_SetOutputMatrix_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2Voice_GetOutputMatrix_Proxy(
+ IXAudio2Voice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+void __RPC_STUB IXAudio2Voice_GetOutputMatrix_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2Voice_DestroyVoice_Proxy(
+ IXAudio2Voice* This);
+void __RPC_STUB IXAudio2Voice_DestroyVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio2Voice_INTERFACE_DEFINED__ */
+
+typedef struct XAUDIO2_BUFFER {
+ UINT32 Flags;
+ UINT32 AudioBytes;
+ const BYTE *pAudioData;
+ UINT32 PlayBegin;
+ UINT32 PlayLength;
+ UINT32 LoopBegin;
+ UINT32 LoopLength;
+ UINT32 LoopCount;
+ void *pContext;
+} XAUDIO2_BUFFER;
+typedef struct XAUDIO2_BUFFER_WMA {
+ const UINT32 *pDecodedPacketCumulativeBytes;
+ UINT32 PacketCount;
+} XAUDIO2_BUFFER_WMA;
+typedef struct XAUDIO2_VOICE_STATE {
+ void *pCurrentBufferContext;
+ UINT32 BuffersQueued;
+ UINT64 SamplesPlayed;
+} XAUDIO2_VOICE_STATE;
+/*****************************************************************************
+ * IXAudio20SourceVoice interface
+ */
+#ifndef __IXAudio20SourceVoice_INTERFACE_DEFINED__
+#define __IXAudio20SourceVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio20SourceVoice : public IXAudio20Voice
+{
+ virtual HRESULT STDMETHODCALLTYPE Start(
+ UINT32 Flags = 0,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Stop(
+ UINT32 Flags = 0,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SubmitSourceBuffer(
+ const XAUDIO2_BUFFER *pBuffer,
+ const XAUDIO2_BUFFER_WMA *pBufferWMA = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE FlushSourceBuffers(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Discontinuity(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ExitLoop(
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetState(
+ XAUDIO2_VOICE_STATE *pVoiceState) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFrequencyRatio(
+ float Ratio,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetFrequencyRatio(
+ float *pRatio) = 0;
+
+};
+#else
+typedef struct IXAudio20SourceVoiceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio20Voice methods ***/
+ void (STDMETHODCALLTYPE *GetVoiceDetails)(
+ IXAudio20SourceVoice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+ IXAudio20SourceVoice* This,
+ const XAUDIO23_VOICE_SENDS *pSendList);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+ IXAudio20SourceVoice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+ IXAudio20SourceVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+ IXAudio20SourceVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetEffectState)(
+ IXAudio20SourceVoice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+ IXAudio20SourceVoice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+ IXAudio20SourceVoice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+
+ HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+ IXAudio20SourceVoice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFilterParameters)(
+ IXAudio20SourceVoice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetVolume)(
+ IXAudio20SourceVoice* This,
+ float Volume,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetVolume)(
+ IXAudio20SourceVoice* This,
+ float *pVolume);
+
+ HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+ IXAudio20SourceVoice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetChannelVolumes)(
+ IXAudio20SourceVoice* This,
+ UINT32 Channels,
+ float *pVolumes);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+ IXAudio20SourceVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetOutputMatrix)(
+ IXAudio20SourceVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+
+ void (STDMETHODCALLTYPE *DestroyVoice)(
+ IXAudio20SourceVoice* This);
+
+ /*** IXAudio20SourceVoice methods ***/
+ HRESULT (STDMETHODCALLTYPE *Start)(
+ IXAudio20SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *Stop)(
+ IXAudio20SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *SubmitSourceBuffer)(
+ IXAudio20SourceVoice* This,
+ const XAUDIO2_BUFFER *pBuffer,
+ const XAUDIO2_BUFFER_WMA *pBufferWMA);
+
+ HRESULT (STDMETHODCALLTYPE *FlushSourceBuffers)(
+ IXAudio20SourceVoice* This);
+
+ HRESULT (STDMETHODCALLTYPE *Discontinuity)(
+ IXAudio20SourceVoice* This);
+
+ HRESULT (STDMETHODCALLTYPE *ExitLoop)(
+ IXAudio20SourceVoice* This,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetState)(
+ IXAudio20SourceVoice* This,
+ XAUDIO2_VOICE_STATE *pVoiceState);
+
+ HRESULT (STDMETHODCALLTYPE *SetFrequencyRatio)(
+ IXAudio20SourceVoice* This,
+ float Ratio,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFrequencyRatio)(
+ IXAudio20SourceVoice* This,
+ float *pRatio);
+
+ END_INTERFACE
+} IXAudio20SourceVoiceVtbl;
+interface IXAudio20SourceVoice {
+ CONST_VTBL IXAudio20SourceVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio20Voice methods ***/
+#define IXAudio20SourceVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio20SourceVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio20SourceVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio20SourceVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20SourceVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20SourceVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio20SourceVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio20SourceVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio20SourceVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio20SourceVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio20SourceVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio20SourceVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio20SourceVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio20SourceVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio20SourceVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio20SourceVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio20SourceVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+/*** IXAudio20SourceVoice methods ***/
+#define IXAudio20SourceVoice_Start(This,Flags,OperationSet) (This)->lpVtbl->Start(This,Flags,OperationSet)
+#define IXAudio20SourceVoice_Stop(This,Flags,OperationSet) (This)->lpVtbl->Stop(This,Flags,OperationSet)
+#define IXAudio20SourceVoice_SubmitSourceBuffer(This,pBuffer,pBufferWMA) (This)->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA)
+#define IXAudio20SourceVoice_FlushSourceBuffers(This) (This)->lpVtbl->FlushSourceBuffers(This)
+#define IXAudio20SourceVoice_Discontinuity(This) (This)->lpVtbl->Discontinuity(This)
+#define IXAudio20SourceVoice_ExitLoop(This,OperationSet) (This)->lpVtbl->ExitLoop(This,OperationSet)
+#define IXAudio20SourceVoice_GetState(This,pVoiceState) (This)->lpVtbl->GetState(This,pVoiceState)
+#define IXAudio20SourceVoice_SetFrequencyRatio(This,Ratio,OperationSet) (This)->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet)
+#define IXAudio20SourceVoice_GetFrequencyRatio(This,pRatio) (This)->lpVtbl->GetFrequencyRatio(This,pRatio)
+#else
+/*** IXAudio20Voice methods ***/
+static FORCEINLINE void IXAudio20SourceVoice_GetVoiceDetails(IXAudio20SourceVoice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+ This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetOutputVoices(IXAudio20SourceVoice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+ return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetEffectChain(IXAudio20SourceVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_EnableEffect(IXAudio20SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_DisableEffect(IXAudio20SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio20SourceVoice_GetEffectState(IXAudio20SourceVoice* This,UINT32 EffectIndex,BOOL *pEnabled) {
+ This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetEffectParameters(IXAudio20SourceVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+ return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_GetEffectParameters(IXAudio20SourceVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+ return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetFilterParameters(IXAudio20SourceVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio20SourceVoice_GetFilterParameters(IXAudio20SourceVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetVolume(IXAudio20SourceVoice* This,float Volume,UINT32 OperationSet) {
+ return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio20SourceVoice_GetVolume(IXAudio20SourceVoice* This,float *pVolume) {
+ This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetChannelVolumes(IXAudio20SourceVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+ return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio20SourceVoice_GetChannelVolumes(IXAudio20SourceVoice* This,UINT32 Channels,float *pVolumes) {
+ This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetOutputMatrix(IXAudio20SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_GetOutputMatrix(IXAudio20SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+ return This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio20SourceVoice_DestroyVoice(IXAudio20SourceVoice* This) {
+ This->lpVtbl->DestroyVoice(This);
+}
+/*** IXAudio20SourceVoice methods ***/
+static FORCEINLINE HRESULT IXAudio20SourceVoice_Start(IXAudio20SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+ return This->lpVtbl->Start(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_Stop(IXAudio20SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+ return This->lpVtbl->Stop(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SubmitSourceBuffer(IXAudio20SourceVoice* This,const XAUDIO2_BUFFER *pBuffer,const XAUDIO2_BUFFER_WMA *pBufferWMA) {
+ return This->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_FlushSourceBuffers(IXAudio20SourceVoice* This) {
+ return This->lpVtbl->FlushSourceBuffers(This);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_Discontinuity(IXAudio20SourceVoice* This) {
+ return This->lpVtbl->Discontinuity(This);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_ExitLoop(IXAudio20SourceVoice* This,UINT32 OperationSet) {
+ return This->lpVtbl->ExitLoop(This,OperationSet);
+}
+static FORCEINLINE void IXAudio20SourceVoice_GetState(IXAudio20SourceVoice* This,XAUDIO2_VOICE_STATE *pVoiceState) {
+ This->lpVtbl->GetState(This,pVoiceState);
+}
+static FORCEINLINE HRESULT IXAudio20SourceVoice_SetFrequencyRatio(IXAudio20SourceVoice* This,float Ratio,UINT32 OperationSet) {
+ return This->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet);
+}
+static FORCEINLINE void IXAudio20SourceVoice_GetFrequencyRatio(IXAudio20SourceVoice* This,float *pRatio) {
+ This->lpVtbl->GetFrequencyRatio(This,pRatio);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXAudio20SourceVoice_Start_Proxy(
+ IXAudio20SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio20SourceVoice_Start_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20SourceVoice_Stop_Proxy(
+ IXAudio20SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio20SourceVoice_Stop_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20SourceVoice_SubmitSourceBuffer_Proxy(
+ IXAudio20SourceVoice* This,
+ const XAUDIO2_BUFFER *pBuffer,
+ const XAUDIO2_BUFFER_WMA *pBufferWMA);
+void __RPC_STUB IXAudio20SourceVoice_SubmitSourceBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20SourceVoice_FlushSourceBuffers_Proxy(
+ IXAudio20SourceVoice* This);
+void __RPC_STUB IXAudio20SourceVoice_FlushSourceBuffers_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20SourceVoice_Discontinuity_Proxy(
+ IXAudio20SourceVoice* This);
+void __RPC_STUB IXAudio20SourceVoice_Discontinuity_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20SourceVoice_ExitLoop_Proxy(
+ IXAudio20SourceVoice* This,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio20SourceVoice_ExitLoop_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20SourceVoice_GetState_Proxy(
+ IXAudio20SourceVoice* This,
+ XAUDIO2_VOICE_STATE *pVoiceState);
+void __RPC_STUB IXAudio20SourceVoice_GetState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20SourceVoice_SetFrequencyRatio_Proxy(
+ IXAudio20SourceVoice* This,
+ float Ratio,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio20SourceVoice_SetFrequencyRatio_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20SourceVoice_GetFrequencyRatio_Proxy(
+ IXAudio20SourceVoice* This,
+ float *pRatio);
+void __RPC_STUB IXAudio20SourceVoice_GetFrequencyRatio_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio20SourceVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio23SourceVoice interface
+ */
+#ifndef __IXAudio23SourceVoice_INTERFACE_DEFINED__
+#define __IXAudio23SourceVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio23SourceVoice : public IXAudio23Voice
+{
+ virtual HRESULT STDMETHODCALLTYPE Start(
+ UINT32 Flags = 0,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Stop(
+ UINT32 Flags = 0,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SubmitSourceBuffer(
+ const XAUDIO2_BUFFER *pBuffer,
+ const XAUDIO2_BUFFER_WMA *pBufferWMA = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE FlushSourceBuffers(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Discontinuity(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ExitLoop(
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetState(
+ XAUDIO2_VOICE_STATE *pVoiceState) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFrequencyRatio(
+ float Ratio,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetFrequencyRatio(
+ float *pRatio) = 0;
+
+};
+#else
+typedef struct IXAudio23SourceVoiceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio23Voice methods ***/
+ void (STDMETHODCALLTYPE *GetVoiceDetails)(
+ IXAudio23SourceVoice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+ IXAudio23SourceVoice* This,
+ const XAUDIO23_VOICE_SENDS *pSendList);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+ IXAudio23SourceVoice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+ IXAudio23SourceVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+ IXAudio23SourceVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetEffectState)(
+ IXAudio23SourceVoice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+ IXAudio23SourceVoice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+ IXAudio23SourceVoice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+
+ HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+ IXAudio23SourceVoice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFilterParameters)(
+ IXAudio23SourceVoice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetVolume)(
+ IXAudio23SourceVoice* This,
+ float Volume,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetVolume)(
+ IXAudio23SourceVoice* This,
+ float *pVolume);
+
+ HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+ IXAudio23SourceVoice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetChannelVolumes)(
+ IXAudio23SourceVoice* This,
+ UINT32 Channels,
+ float *pVolumes);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+ IXAudio23SourceVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetOutputMatrix)(
+ IXAudio23SourceVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+
+ void (STDMETHODCALLTYPE *DestroyVoice)(
+ IXAudio23SourceVoice* This);
+
+ /*** IXAudio23SourceVoice methods ***/
+ HRESULT (STDMETHODCALLTYPE *Start)(
+ IXAudio23SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *Stop)(
+ IXAudio23SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *SubmitSourceBuffer)(
+ IXAudio23SourceVoice* This,
+ const XAUDIO2_BUFFER *pBuffer,
+ const XAUDIO2_BUFFER_WMA *pBufferWMA);
+
+ HRESULT (STDMETHODCALLTYPE *FlushSourceBuffers)(
+ IXAudio23SourceVoice* This);
+
+ HRESULT (STDMETHODCALLTYPE *Discontinuity)(
+ IXAudio23SourceVoice* This);
+
+ HRESULT (STDMETHODCALLTYPE *ExitLoop)(
+ IXAudio23SourceVoice* This,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetState)(
+ IXAudio23SourceVoice* This,
+ XAUDIO2_VOICE_STATE *pVoiceState);
+
+ HRESULT (STDMETHODCALLTYPE *SetFrequencyRatio)(
+ IXAudio23SourceVoice* This,
+ float Ratio,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFrequencyRatio)(
+ IXAudio23SourceVoice* This,
+ float *pRatio);
+
+ END_INTERFACE
+} IXAudio23SourceVoiceVtbl;
+interface IXAudio23SourceVoice {
+ CONST_VTBL IXAudio23SourceVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio23Voice methods ***/
+#define IXAudio23SourceVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio23SourceVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio23SourceVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio23SourceVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23SourceVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23SourceVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio23SourceVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio23SourceVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio23SourceVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio23SourceVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio23SourceVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio23SourceVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio23SourceVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio23SourceVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio23SourceVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio23SourceVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio23SourceVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+/*** IXAudio23SourceVoice methods ***/
+#define IXAudio23SourceVoice_Start(This,Flags,OperationSet) (This)->lpVtbl->Start(This,Flags,OperationSet)
+#define IXAudio23SourceVoice_Stop(This,Flags,OperationSet) (This)->lpVtbl->Stop(This,Flags,OperationSet)
+#define IXAudio23SourceVoice_SubmitSourceBuffer(This,pBuffer,pBufferWMA) (This)->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA)
+#define IXAudio23SourceVoice_FlushSourceBuffers(This) (This)->lpVtbl->FlushSourceBuffers(This)
+#define IXAudio23SourceVoice_Discontinuity(This) (This)->lpVtbl->Discontinuity(This)
+#define IXAudio23SourceVoice_ExitLoop(This,OperationSet) (This)->lpVtbl->ExitLoop(This,OperationSet)
+#define IXAudio23SourceVoice_GetState(This,pVoiceState) (This)->lpVtbl->GetState(This,pVoiceState)
+#define IXAudio23SourceVoice_SetFrequencyRatio(This,Ratio,OperationSet) (This)->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet)
+#define IXAudio23SourceVoice_GetFrequencyRatio(This,pRatio) (This)->lpVtbl->GetFrequencyRatio(This,pRatio)
+#else
+/*** IXAudio23Voice methods ***/
+static FORCEINLINE void IXAudio23SourceVoice_GetVoiceDetails(IXAudio23SourceVoice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+ This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetOutputVoices(IXAudio23SourceVoice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+ return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetEffectChain(IXAudio23SourceVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_EnableEffect(IXAudio23SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_DisableEffect(IXAudio23SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio23SourceVoice_GetEffectState(IXAudio23SourceVoice* This,UINT32 EffectIndex,BOOL *pEnabled) {
+ This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetEffectParameters(IXAudio23SourceVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+ return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_GetEffectParameters(IXAudio23SourceVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+ return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetFilterParameters(IXAudio23SourceVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio23SourceVoice_GetFilterParameters(IXAudio23SourceVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetVolume(IXAudio23SourceVoice* This,float Volume,UINT32 OperationSet) {
+ return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio23SourceVoice_GetVolume(IXAudio23SourceVoice* This,float *pVolume) {
+ This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetChannelVolumes(IXAudio23SourceVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+ return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio23SourceVoice_GetChannelVolumes(IXAudio23SourceVoice* This,UINT32 Channels,float *pVolumes) {
+ This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetOutputMatrix(IXAudio23SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio23SourceVoice_GetOutputMatrix(IXAudio23SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+ This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio23SourceVoice_DestroyVoice(IXAudio23SourceVoice* This) {
+ This->lpVtbl->DestroyVoice(This);
+}
+/*** IXAudio23SourceVoice methods ***/
+static FORCEINLINE HRESULT IXAudio23SourceVoice_Start(IXAudio23SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+ return This->lpVtbl->Start(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_Stop(IXAudio23SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+ return This->lpVtbl->Stop(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SubmitSourceBuffer(IXAudio23SourceVoice* This,const XAUDIO2_BUFFER *pBuffer,const XAUDIO2_BUFFER_WMA *pBufferWMA) {
+ return This->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_FlushSourceBuffers(IXAudio23SourceVoice* This) {
+ return This->lpVtbl->FlushSourceBuffers(This);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_Discontinuity(IXAudio23SourceVoice* This) {
+ return This->lpVtbl->Discontinuity(This);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_ExitLoop(IXAudio23SourceVoice* This,UINT32 OperationSet) {
+ return This->lpVtbl->ExitLoop(This,OperationSet);
+}
+static FORCEINLINE void IXAudio23SourceVoice_GetState(IXAudio23SourceVoice* This,XAUDIO2_VOICE_STATE *pVoiceState) {
+ This->lpVtbl->GetState(This,pVoiceState);
+}
+static FORCEINLINE HRESULT IXAudio23SourceVoice_SetFrequencyRatio(IXAudio23SourceVoice* This,float Ratio,UINT32 OperationSet) {
+ return This->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet);
+}
+static FORCEINLINE void IXAudio23SourceVoice_GetFrequencyRatio(IXAudio23SourceVoice* This,float *pRatio) {
+ This->lpVtbl->GetFrequencyRatio(This,pRatio);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXAudio23SourceVoice_Start_Proxy(
+ IXAudio23SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio23SourceVoice_Start_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23SourceVoice_Stop_Proxy(
+ IXAudio23SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio23SourceVoice_Stop_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23SourceVoice_SubmitSourceBuffer_Proxy(
+ IXAudio23SourceVoice* This,
+ const XAUDIO2_BUFFER *pBuffer,
+ const XAUDIO2_BUFFER_WMA *pBufferWMA);
+void __RPC_STUB IXAudio23SourceVoice_SubmitSourceBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23SourceVoice_FlushSourceBuffers_Proxy(
+ IXAudio23SourceVoice* This);
+void __RPC_STUB IXAudio23SourceVoice_FlushSourceBuffers_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23SourceVoice_Discontinuity_Proxy(
+ IXAudio23SourceVoice* This);
+void __RPC_STUB IXAudio23SourceVoice_Discontinuity_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23SourceVoice_ExitLoop_Proxy(
+ IXAudio23SourceVoice* This,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio23SourceVoice_ExitLoop_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio23SourceVoice_GetState_Proxy(
+ IXAudio23SourceVoice* This,
+ XAUDIO2_VOICE_STATE *pVoiceState);
+void __RPC_STUB IXAudio23SourceVoice_GetState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio23SourceVoice_SetFrequencyRatio_Proxy(
+ IXAudio23SourceVoice* This,
+ float Ratio,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio23SourceVoice_SetFrequencyRatio_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio23SourceVoice_GetFrequencyRatio_Proxy(
+ IXAudio23SourceVoice* This,
+ float *pRatio);
+void __RPC_STUB IXAudio23SourceVoice_GetFrequencyRatio_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio23SourceVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio27SourceVoice interface
+ */
+#ifndef __IXAudio27SourceVoice_INTERFACE_DEFINED__
+#define __IXAudio27SourceVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio27SourceVoice : public IXAudio2Voice
+{
+ virtual HRESULT STDMETHODCALLTYPE Start(
+ UINT32 Flags = 0,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Stop(
+ UINT32 Flags = 0,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SubmitSourceBuffer(
+ const XAUDIO2_BUFFER *pBuffer,
+ const XAUDIO2_BUFFER_WMA *pBufferWMA = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE FlushSourceBuffers(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Discontinuity(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ExitLoop(
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetState(
+ XAUDIO2_VOICE_STATE *pVoiceState) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFrequencyRatio(
+ float Ratio,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetFrequencyRatio(
+ float *pRatio) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetSourceSampleRate(
+ UINT32 NewSourceSampleRate) = 0;
+
+};
+#else
+typedef struct IXAudio27SourceVoiceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio2Voice methods ***/
+ void (STDMETHODCALLTYPE *GetVoiceDetails)(
+ IXAudio27SourceVoice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+ IXAudio27SourceVoice* This,
+ const XAUDIO2_VOICE_SENDS *pSendList);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+ IXAudio27SourceVoice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+ IXAudio27SourceVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+ IXAudio27SourceVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetEffectState)(
+ IXAudio27SourceVoice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+ IXAudio27SourceVoice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+ IXAudio27SourceVoice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+
+ HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+ IXAudio27SourceVoice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFilterParameters)(
+ IXAudio27SourceVoice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputFilterParameters)(
+ IXAudio27SourceVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetOutputFilterParameters)(
+ IXAudio27SourceVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetVolume)(
+ IXAudio27SourceVoice* This,
+ float Volume,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetVolume)(
+ IXAudio27SourceVoice* This,
+ float *pVolume);
+
+ HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+ IXAudio27SourceVoice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetChannelVolumes)(
+ IXAudio27SourceVoice* This,
+ UINT32 Channels,
+ float *pVolumes);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+ IXAudio27SourceVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetOutputMatrix)(
+ IXAudio27SourceVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+
+ void (STDMETHODCALLTYPE *DestroyVoice)(
+ IXAudio27SourceVoice* This);
+
+ /*** IXAudio27SourceVoice methods ***/
+ HRESULT (STDMETHODCALLTYPE *Start)(
+ IXAudio27SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *Stop)(
+ IXAudio27SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *SubmitSourceBuffer)(
+ IXAudio27SourceVoice* This,
+ const XAUDIO2_BUFFER *pBuffer,
+ const XAUDIO2_BUFFER_WMA *pBufferWMA);
+
+ HRESULT (STDMETHODCALLTYPE *FlushSourceBuffers)(
+ IXAudio27SourceVoice* This);
+
+ HRESULT (STDMETHODCALLTYPE *Discontinuity)(
+ IXAudio27SourceVoice* This);
+
+ HRESULT (STDMETHODCALLTYPE *ExitLoop)(
+ IXAudio27SourceVoice* This,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetState)(
+ IXAudio27SourceVoice* This,
+ XAUDIO2_VOICE_STATE *pVoiceState);
+
+ HRESULT (STDMETHODCALLTYPE *SetFrequencyRatio)(
+ IXAudio27SourceVoice* This,
+ float Ratio,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFrequencyRatio)(
+ IXAudio27SourceVoice* This,
+ float *pRatio);
+
+ HRESULT (STDMETHODCALLTYPE *SetSourceSampleRate)(
+ IXAudio27SourceVoice* This,
+ UINT32 NewSourceSampleRate);
+
+ END_INTERFACE
+} IXAudio27SourceVoiceVtbl;
+interface IXAudio27SourceVoice {
+ CONST_VTBL IXAudio27SourceVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio2Voice methods ***/
+#define IXAudio27SourceVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio27SourceVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio27SourceVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio27SourceVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio27SourceVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio27SourceVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio27SourceVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio27SourceVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio27SourceVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio27SourceVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio27SourceVoice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) (This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)
+#define IXAudio27SourceVoice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) (This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)
+#define IXAudio27SourceVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio27SourceVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio27SourceVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio27SourceVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio27SourceVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio27SourceVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio27SourceVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+/*** IXAudio27SourceVoice methods ***/
+#define IXAudio27SourceVoice_Start(This,Flags,OperationSet) (This)->lpVtbl->Start(This,Flags,OperationSet)
+#define IXAudio27SourceVoice_Stop(This,Flags,OperationSet) (This)->lpVtbl->Stop(This,Flags,OperationSet)
+#define IXAudio27SourceVoice_SubmitSourceBuffer(This,pBuffer,pBufferWMA) (This)->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA)
+#define IXAudio27SourceVoice_FlushSourceBuffers(This) (This)->lpVtbl->FlushSourceBuffers(This)
+#define IXAudio27SourceVoice_Discontinuity(This) (This)->lpVtbl->Discontinuity(This)
+#define IXAudio27SourceVoice_ExitLoop(This,OperationSet) (This)->lpVtbl->ExitLoop(This,OperationSet)
+#define IXAudio27SourceVoice_GetState(This,pVoiceState) (This)->lpVtbl->GetState(This,pVoiceState)
+#define IXAudio27SourceVoice_SetFrequencyRatio(This,Ratio,OperationSet) (This)->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet)
+#define IXAudio27SourceVoice_GetFrequencyRatio(This,pRatio) (This)->lpVtbl->GetFrequencyRatio(This,pRatio)
+#define IXAudio27SourceVoice_SetSourceSampleRate(This,NewSourceSampleRate) (This)->lpVtbl->SetSourceSampleRate(This,NewSourceSampleRate)
+#else
+/*** IXAudio2Voice methods ***/
+static FORCEINLINE void IXAudio27SourceVoice_GetVoiceDetails(IXAudio27SourceVoice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+ This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetOutputVoices(IXAudio27SourceVoice* This,const XAUDIO2_VOICE_SENDS *pSendList) {
+ return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetEffectChain(IXAudio27SourceVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_EnableEffect(IXAudio27SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_DisableEffect(IXAudio27SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetEffectState(IXAudio27SourceVoice* This,UINT32 EffectIndex,BOOL *pEnabled) {
+ This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetEffectParameters(IXAudio27SourceVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+ return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_GetEffectParameters(IXAudio27SourceVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+ return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetFilterParameters(IXAudio27SourceVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetFilterParameters(IXAudio27SourceVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetOutputFilterParameters(IXAudio27SourceVoice* This,IXAudio2Voice *pDestinationVoice,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetOutputFilterParameters(IXAudio27SourceVoice* This,IXAudio2Voice *pDestinationVoice,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetVolume(IXAudio27SourceVoice* This,float Volume,UINT32 OperationSet) {
+ return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetVolume(IXAudio27SourceVoice* This,float *pVolume) {
+ This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetChannelVolumes(IXAudio27SourceVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+ return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetChannelVolumes(IXAudio27SourceVoice* This,UINT32 Channels,float *pVolumes) {
+ This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetOutputMatrix(IXAudio27SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetOutputMatrix(IXAudio27SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+ This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio27SourceVoice_DestroyVoice(IXAudio27SourceVoice* This) {
+ This->lpVtbl->DestroyVoice(This);
+}
+/*** IXAudio27SourceVoice methods ***/
+static FORCEINLINE HRESULT IXAudio27SourceVoice_Start(IXAudio27SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+ return This->lpVtbl->Start(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_Stop(IXAudio27SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+ return This->lpVtbl->Stop(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SubmitSourceBuffer(IXAudio27SourceVoice* This,const XAUDIO2_BUFFER *pBuffer,const XAUDIO2_BUFFER_WMA *pBufferWMA) {
+ return This->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_FlushSourceBuffers(IXAudio27SourceVoice* This) {
+ return This->lpVtbl->FlushSourceBuffers(This);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_Discontinuity(IXAudio27SourceVoice* This) {
+ return This->lpVtbl->Discontinuity(This);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_ExitLoop(IXAudio27SourceVoice* This,UINT32 OperationSet) {
+ return This->lpVtbl->ExitLoop(This,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetState(IXAudio27SourceVoice* This,XAUDIO2_VOICE_STATE *pVoiceState) {
+ This->lpVtbl->GetState(This,pVoiceState);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetFrequencyRatio(IXAudio27SourceVoice* This,float Ratio,UINT32 OperationSet) {
+ return This->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet);
+}
+static FORCEINLINE void IXAudio27SourceVoice_GetFrequencyRatio(IXAudio27SourceVoice* This,float *pRatio) {
+ This->lpVtbl->GetFrequencyRatio(This,pRatio);
+}
+static FORCEINLINE HRESULT IXAudio27SourceVoice_SetSourceSampleRate(IXAudio27SourceVoice* This,UINT32 NewSourceSampleRate) {
+ return This->lpVtbl->SetSourceSampleRate(This,NewSourceSampleRate);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXAudio27SourceVoice_Start_Proxy(
+ IXAudio27SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio27SourceVoice_Start_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27SourceVoice_Stop_Proxy(
+ IXAudio27SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio27SourceVoice_Stop_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27SourceVoice_SubmitSourceBuffer_Proxy(
+ IXAudio27SourceVoice* This,
+ const XAUDIO2_BUFFER *pBuffer,
+ const XAUDIO2_BUFFER_WMA *pBufferWMA);
+void __RPC_STUB IXAudio27SourceVoice_SubmitSourceBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27SourceVoice_FlushSourceBuffers_Proxy(
+ IXAudio27SourceVoice* This);
+void __RPC_STUB IXAudio27SourceVoice_FlushSourceBuffers_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27SourceVoice_Discontinuity_Proxy(
+ IXAudio27SourceVoice* This);
+void __RPC_STUB IXAudio27SourceVoice_Discontinuity_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27SourceVoice_ExitLoop_Proxy(
+ IXAudio27SourceVoice* This,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio27SourceVoice_ExitLoop_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio27SourceVoice_GetState_Proxy(
+ IXAudio27SourceVoice* This,
+ XAUDIO2_VOICE_STATE *pVoiceState);
+void __RPC_STUB IXAudio27SourceVoice_GetState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27SourceVoice_SetFrequencyRatio_Proxy(
+ IXAudio27SourceVoice* This,
+ float Ratio,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio27SourceVoice_SetFrequencyRatio_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio27SourceVoice_GetFrequencyRatio_Proxy(
+ IXAudio27SourceVoice* This,
+ float *pRatio);
+void __RPC_STUB IXAudio27SourceVoice_GetFrequencyRatio_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27SourceVoice_SetSourceSampleRate_Proxy(
+ IXAudio27SourceVoice* This,
+ UINT32 NewSourceSampleRate);
+void __RPC_STUB IXAudio27SourceVoice_SetSourceSampleRate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio27SourceVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio2SourceVoice interface
+ */
+#ifndef __IXAudio2SourceVoice_INTERFACE_DEFINED__
+#define __IXAudio2SourceVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio2SourceVoice : public IXAudio2Voice
+{
+ virtual HRESULT STDMETHODCALLTYPE Start(
+ UINT32 Flags = 0,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Stop(
+ UINT32 Flags = 0,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SubmitSourceBuffer(
+ const XAUDIO2_BUFFER *pBuffer,
+ const XAUDIO2_BUFFER_WMA *pBufferWMA = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE FlushSourceBuffers(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Discontinuity(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ExitLoop(
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetState(
+ XAUDIO2_VOICE_STATE *pVoiceState,
+ UINT32 Flags = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFrequencyRatio(
+ float Ratio,
+ UINT32 OperationSet = XAUDIO2_COMMIT_NOW) = 0;
+
+ virtual void STDMETHODCALLTYPE GetFrequencyRatio(
+ float *pRatio) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetSourceSampleRate(
+ UINT32 NewSourceSampleRate) = 0;
+
+};
+#else
+typedef struct IXAudio2SourceVoiceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio2Voice methods ***/
+ void (STDMETHODCALLTYPE *GetVoiceDetails)(
+ IXAudio2SourceVoice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+ IXAudio2SourceVoice* This,
+ const XAUDIO2_VOICE_SENDS *pSendList);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+ IXAudio2SourceVoice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+ IXAudio2SourceVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+ IXAudio2SourceVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetEffectState)(
+ IXAudio2SourceVoice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+ IXAudio2SourceVoice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+ IXAudio2SourceVoice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+
+ HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+ IXAudio2SourceVoice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFilterParameters)(
+ IXAudio2SourceVoice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputFilterParameters)(
+ IXAudio2SourceVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetOutputFilterParameters)(
+ IXAudio2SourceVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetVolume)(
+ IXAudio2SourceVoice* This,
+ float Volume,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetVolume)(
+ IXAudio2SourceVoice* This,
+ float *pVolume);
+
+ HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+ IXAudio2SourceVoice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetChannelVolumes)(
+ IXAudio2SourceVoice* This,
+ UINT32 Channels,
+ float *pVolumes);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+ IXAudio2SourceVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetOutputMatrix)(
+ IXAudio2SourceVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+
+ void (STDMETHODCALLTYPE *DestroyVoice)(
+ IXAudio2SourceVoice* This);
+
+ /*** IXAudio2SourceVoice methods ***/
+ HRESULT (STDMETHODCALLTYPE *Start)(
+ IXAudio2SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *Stop)(
+ IXAudio2SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *SubmitSourceBuffer)(
+ IXAudio2SourceVoice* This,
+ const XAUDIO2_BUFFER *pBuffer,
+ const XAUDIO2_BUFFER_WMA *pBufferWMA);
+
+ HRESULT (STDMETHODCALLTYPE *FlushSourceBuffers)(
+ IXAudio2SourceVoice* This);
+
+ HRESULT (STDMETHODCALLTYPE *Discontinuity)(
+ IXAudio2SourceVoice* This);
+
+ HRESULT (STDMETHODCALLTYPE *ExitLoop)(
+ IXAudio2SourceVoice* This,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetState)(
+ IXAudio2SourceVoice* This,
+ XAUDIO2_VOICE_STATE *pVoiceState,
+ UINT32 Flags);
+
+ HRESULT (STDMETHODCALLTYPE *SetFrequencyRatio)(
+ IXAudio2SourceVoice* This,
+ float Ratio,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFrequencyRatio)(
+ IXAudio2SourceVoice* This,
+ float *pRatio);
+
+ HRESULT (STDMETHODCALLTYPE *SetSourceSampleRate)(
+ IXAudio2SourceVoice* This,
+ UINT32 NewSourceSampleRate);
+
+ END_INTERFACE
+} IXAudio2SourceVoiceVtbl;
+interface IXAudio2SourceVoice {
+ CONST_VTBL IXAudio2SourceVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio2Voice methods ***/
+#define IXAudio2SourceVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio2SourceVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio2SourceVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio2SourceVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2SourceVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2SourceVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio2SourceVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio2SourceVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio2SourceVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio2SourceVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio2SourceVoice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) (This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)
+#define IXAudio2SourceVoice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) (This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)
+#define IXAudio2SourceVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio2SourceVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio2SourceVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio2SourceVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio2SourceVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio2SourceVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio2SourceVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+/*** IXAudio2SourceVoice methods ***/
+#define IXAudio2SourceVoice_Start(This,Flags,OperationSet) (This)->lpVtbl->Start(This,Flags,OperationSet)
+#define IXAudio2SourceVoice_Stop(This,Flags,OperationSet) (This)->lpVtbl->Stop(This,Flags,OperationSet)
+#define IXAudio2SourceVoice_SubmitSourceBuffer(This,pBuffer,pBufferWMA) (This)->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA)
+#define IXAudio2SourceVoice_FlushSourceBuffers(This) (This)->lpVtbl->FlushSourceBuffers(This)
+#define IXAudio2SourceVoice_Discontinuity(This) (This)->lpVtbl->Discontinuity(This)
+#define IXAudio2SourceVoice_ExitLoop(This,OperationSet) (This)->lpVtbl->ExitLoop(This,OperationSet)
+#define IXAudio2SourceVoice_GetState(This,pVoiceState,Flags) (This)->lpVtbl->GetState(This,pVoiceState,Flags)
+#define IXAudio2SourceVoice_SetFrequencyRatio(This,Ratio,OperationSet) (This)->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet)
+#define IXAudio2SourceVoice_GetFrequencyRatio(This,pRatio) (This)->lpVtbl->GetFrequencyRatio(This,pRatio)
+#define IXAudio2SourceVoice_SetSourceSampleRate(This,NewSourceSampleRate) (This)->lpVtbl->SetSourceSampleRate(This,NewSourceSampleRate)
+#else
+/*** IXAudio2Voice methods ***/
+static FORCEINLINE void IXAudio2SourceVoice_GetVoiceDetails(IXAudio2SourceVoice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+ This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetOutputVoices(IXAudio2SourceVoice* This,const XAUDIO2_VOICE_SENDS *pSendList) {
+ return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetEffectChain(IXAudio2SourceVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_EnableEffect(IXAudio2SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_DisableEffect(IXAudio2SourceVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetEffectState(IXAudio2SourceVoice* This,UINT32 EffectIndex,BOOL *pEnabled) {
+ This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetEffectParameters(IXAudio2SourceVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+ return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_GetEffectParameters(IXAudio2SourceVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+ return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetFilterParameters(IXAudio2SourceVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetFilterParameters(IXAudio2SourceVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetOutputFilterParameters(IXAudio2SourceVoice* This,IXAudio2Voice *pDestinationVoice,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetOutputFilterParameters(IXAudio2SourceVoice* This,IXAudio2Voice *pDestinationVoice,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetVolume(IXAudio2SourceVoice* This,float Volume,UINT32 OperationSet) {
+ return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetVolume(IXAudio2SourceVoice* This,float *pVolume) {
+ This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetChannelVolumes(IXAudio2SourceVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+ return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetChannelVolumes(IXAudio2SourceVoice* This,UINT32 Channels,float *pVolumes) {
+ This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetOutputMatrix(IXAudio2SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetOutputMatrix(IXAudio2SourceVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+ This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio2SourceVoice_DestroyVoice(IXAudio2SourceVoice* This) {
+ This->lpVtbl->DestroyVoice(This);
+}
+/*** IXAudio2SourceVoice methods ***/
+static FORCEINLINE HRESULT IXAudio2SourceVoice_Start(IXAudio2SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+ return This->lpVtbl->Start(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_Stop(IXAudio2SourceVoice* This,UINT32 Flags,UINT32 OperationSet) {
+ return This->lpVtbl->Stop(This,Flags,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SubmitSourceBuffer(IXAudio2SourceVoice* This,const XAUDIO2_BUFFER *pBuffer,const XAUDIO2_BUFFER_WMA *pBufferWMA) {
+ return This->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_FlushSourceBuffers(IXAudio2SourceVoice* This) {
+ return This->lpVtbl->FlushSourceBuffers(This);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_Discontinuity(IXAudio2SourceVoice* This) {
+ return This->lpVtbl->Discontinuity(This);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_ExitLoop(IXAudio2SourceVoice* This,UINT32 OperationSet) {
+ return This->lpVtbl->ExitLoop(This,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetState(IXAudio2SourceVoice* This,XAUDIO2_VOICE_STATE *pVoiceState,UINT32 Flags) {
+ This->lpVtbl->GetState(This,pVoiceState,Flags);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetFrequencyRatio(IXAudio2SourceVoice* This,float Ratio,UINT32 OperationSet) {
+ return This->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet);
+}
+static FORCEINLINE void IXAudio2SourceVoice_GetFrequencyRatio(IXAudio2SourceVoice* This,float *pRatio) {
+ This->lpVtbl->GetFrequencyRatio(This,pRatio);
+}
+static FORCEINLINE HRESULT IXAudio2SourceVoice_SetSourceSampleRate(IXAudio2SourceVoice* This,UINT32 NewSourceSampleRate) {
+ return This->lpVtbl->SetSourceSampleRate(This,NewSourceSampleRate);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXAudio2SourceVoice_Start_Proxy(
+ IXAudio2SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio2SourceVoice_Start_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2SourceVoice_Stop_Proxy(
+ IXAudio2SourceVoice* This,
+ UINT32 Flags,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio2SourceVoice_Stop_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2SourceVoice_SubmitSourceBuffer_Proxy(
+ IXAudio2SourceVoice* This,
+ const XAUDIO2_BUFFER *pBuffer,
+ const XAUDIO2_BUFFER_WMA *pBufferWMA);
+void __RPC_STUB IXAudio2SourceVoice_SubmitSourceBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2SourceVoice_FlushSourceBuffers_Proxy(
+ IXAudio2SourceVoice* This);
+void __RPC_STUB IXAudio2SourceVoice_FlushSourceBuffers_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2SourceVoice_Discontinuity_Proxy(
+ IXAudio2SourceVoice* This);
+void __RPC_STUB IXAudio2SourceVoice_Discontinuity_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2SourceVoice_ExitLoop_Proxy(
+ IXAudio2SourceVoice* This,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio2SourceVoice_ExitLoop_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2SourceVoice_GetState_Proxy(
+ IXAudio2SourceVoice* This,
+ XAUDIO2_VOICE_STATE *pVoiceState,
+ UINT32 Flags);
+void __RPC_STUB IXAudio2SourceVoice_GetState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2SourceVoice_SetFrequencyRatio_Proxy(
+ IXAudio2SourceVoice* This,
+ float Ratio,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio2SourceVoice_SetFrequencyRatio_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2SourceVoice_GetFrequencyRatio_Proxy(
+ IXAudio2SourceVoice* This,
+ float *pRatio);
+void __RPC_STUB IXAudio2SourceVoice_GetFrequencyRatio_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2SourceVoice_SetSourceSampleRate_Proxy(
+ IXAudio2SourceVoice* This,
+ UINT32 NewSourceSampleRate);
+void __RPC_STUB IXAudio2SourceVoice_SetSourceSampleRate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio2SourceVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio20SubmixVoice interface
+ */
+#ifndef __IXAudio20SubmixVoice_INTERFACE_DEFINED__
+#define __IXAudio20SubmixVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio20SubmixVoice : public IXAudio20Voice
+{
+};
+#else
+typedef struct IXAudio20SubmixVoiceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio20Voice methods ***/
+ void (STDMETHODCALLTYPE *GetVoiceDetails)(
+ IXAudio20SubmixVoice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+ IXAudio20SubmixVoice* This,
+ const XAUDIO23_VOICE_SENDS *pSendList);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+ IXAudio20SubmixVoice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+ IXAudio20SubmixVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+ IXAudio20SubmixVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetEffectState)(
+ IXAudio20SubmixVoice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+ IXAudio20SubmixVoice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+ IXAudio20SubmixVoice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+
+ HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+ IXAudio20SubmixVoice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFilterParameters)(
+ IXAudio20SubmixVoice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetVolume)(
+ IXAudio20SubmixVoice* This,
+ float Volume,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetVolume)(
+ IXAudio20SubmixVoice* This,
+ float *pVolume);
+
+ HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+ IXAudio20SubmixVoice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetChannelVolumes)(
+ IXAudio20SubmixVoice* This,
+ UINT32 Channels,
+ float *pVolumes);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+ IXAudio20SubmixVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetOutputMatrix)(
+ IXAudio20SubmixVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+
+ void (STDMETHODCALLTYPE *DestroyVoice)(
+ IXAudio20SubmixVoice* This);
+
+ END_INTERFACE
+} IXAudio20SubmixVoiceVtbl;
+interface IXAudio20SubmixVoice {
+ CONST_VTBL IXAudio20SubmixVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio20Voice methods ***/
+#define IXAudio20SubmixVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio20SubmixVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio20SubmixVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio20SubmixVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20SubmixVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20SubmixVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio20SubmixVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio20SubmixVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio20SubmixVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio20SubmixVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio20SubmixVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio20SubmixVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio20SubmixVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio20SubmixVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio20SubmixVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio20SubmixVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio20SubmixVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio20Voice methods ***/
+static FORCEINLINE void IXAudio20SubmixVoice_GetVoiceDetails(IXAudio20SubmixVoice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+ This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_SetOutputVoices(IXAudio20SubmixVoice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+ return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_SetEffectChain(IXAudio20SubmixVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_EnableEffect(IXAudio20SubmixVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_DisableEffect(IXAudio20SubmixVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio20SubmixVoice_GetEffectState(IXAudio20SubmixVoice* This,UINT32 EffectIndex,BOOL *pEnabled) {
+ This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_SetEffectParameters(IXAudio20SubmixVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+ return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_GetEffectParameters(IXAudio20SubmixVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+ return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_SetFilterParameters(IXAudio20SubmixVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio20SubmixVoice_GetFilterParameters(IXAudio20SubmixVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_SetVolume(IXAudio20SubmixVoice* This,float Volume,UINT32 OperationSet) {
+ return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio20SubmixVoice_GetVolume(IXAudio20SubmixVoice* This,float *pVolume) {
+ This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_SetChannelVolumes(IXAudio20SubmixVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+ return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio20SubmixVoice_GetChannelVolumes(IXAudio20SubmixVoice* This,UINT32 Channels,float *pVolumes) {
+ This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_SetOutputMatrix(IXAudio20SubmixVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20SubmixVoice_GetOutputMatrix(IXAudio20SubmixVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+ return This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio20SubmixVoice_DestroyVoice(IXAudio20SubmixVoice* This) {
+ This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif /* __IXAudio20SubmixVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio23SubmixVoice interface
+ */
+#ifndef __IXAudio23SubmixVoice_INTERFACE_DEFINED__
+#define __IXAudio23SubmixVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio23SubmixVoice : public IXAudio23Voice
+{
+};
+#else
+typedef struct IXAudio23SubmixVoiceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio23Voice methods ***/
+ void (STDMETHODCALLTYPE *GetVoiceDetails)(
+ IXAudio23SubmixVoice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+ IXAudio23SubmixVoice* This,
+ const XAUDIO23_VOICE_SENDS *pSendList);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+ IXAudio23SubmixVoice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+ IXAudio23SubmixVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+ IXAudio23SubmixVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetEffectState)(
+ IXAudio23SubmixVoice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+ IXAudio23SubmixVoice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+ IXAudio23SubmixVoice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+
+ HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+ IXAudio23SubmixVoice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFilterParameters)(
+ IXAudio23SubmixVoice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetVolume)(
+ IXAudio23SubmixVoice* This,
+ float Volume,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetVolume)(
+ IXAudio23SubmixVoice* This,
+ float *pVolume);
+
+ HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+ IXAudio23SubmixVoice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetChannelVolumes)(
+ IXAudio23SubmixVoice* This,
+ UINT32 Channels,
+ float *pVolumes);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+ IXAudio23SubmixVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetOutputMatrix)(
+ IXAudio23SubmixVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+
+ void (STDMETHODCALLTYPE *DestroyVoice)(
+ IXAudio23SubmixVoice* This);
+
+ END_INTERFACE
+} IXAudio23SubmixVoiceVtbl;
+interface IXAudio23SubmixVoice {
+ CONST_VTBL IXAudio23SubmixVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio23Voice methods ***/
+#define IXAudio23SubmixVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio23SubmixVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio23SubmixVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio23SubmixVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23SubmixVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23SubmixVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio23SubmixVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio23SubmixVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio23SubmixVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio23SubmixVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio23SubmixVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio23SubmixVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio23SubmixVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio23SubmixVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio23SubmixVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio23SubmixVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio23SubmixVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio23Voice methods ***/
+static FORCEINLINE void IXAudio23SubmixVoice_GetVoiceDetails(IXAudio23SubmixVoice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+ This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_SetOutputVoices(IXAudio23SubmixVoice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+ return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_SetEffectChain(IXAudio23SubmixVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_EnableEffect(IXAudio23SubmixVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_DisableEffect(IXAudio23SubmixVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio23SubmixVoice_GetEffectState(IXAudio23SubmixVoice* This,UINT32 EffectIndex,BOOL *pEnabled) {
+ This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_SetEffectParameters(IXAudio23SubmixVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+ return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_GetEffectParameters(IXAudio23SubmixVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+ return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_SetFilterParameters(IXAudio23SubmixVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio23SubmixVoice_GetFilterParameters(IXAudio23SubmixVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_SetVolume(IXAudio23SubmixVoice* This,float Volume,UINT32 OperationSet) {
+ return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio23SubmixVoice_GetVolume(IXAudio23SubmixVoice* This,float *pVolume) {
+ This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_SetChannelVolumes(IXAudio23SubmixVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+ return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio23SubmixVoice_GetChannelVolumes(IXAudio23SubmixVoice* This,UINT32 Channels,float *pVolumes) {
+ This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio23SubmixVoice_SetOutputMatrix(IXAudio23SubmixVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio23SubmixVoice_GetOutputMatrix(IXAudio23SubmixVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+ This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio23SubmixVoice_DestroyVoice(IXAudio23SubmixVoice* This) {
+ This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif /* __IXAudio23SubmixVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio2SubmixVoice interface
+ */
+#ifndef __IXAudio2SubmixVoice_INTERFACE_DEFINED__
+#define __IXAudio2SubmixVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio2SubmixVoice : public IXAudio2Voice
+{
+};
+#else
+typedef struct IXAudio2SubmixVoiceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio2Voice methods ***/
+ void (STDMETHODCALLTYPE *GetVoiceDetails)(
+ IXAudio2SubmixVoice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+ IXAudio2SubmixVoice* This,
+ const XAUDIO2_VOICE_SENDS *pSendList);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+ IXAudio2SubmixVoice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+ IXAudio2SubmixVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+ IXAudio2SubmixVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetEffectState)(
+ IXAudio2SubmixVoice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+ IXAudio2SubmixVoice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+ IXAudio2SubmixVoice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+
+ HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+ IXAudio2SubmixVoice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFilterParameters)(
+ IXAudio2SubmixVoice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputFilterParameters)(
+ IXAudio2SubmixVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetOutputFilterParameters)(
+ IXAudio2SubmixVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetVolume)(
+ IXAudio2SubmixVoice* This,
+ float Volume,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetVolume)(
+ IXAudio2SubmixVoice* This,
+ float *pVolume);
+
+ HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+ IXAudio2SubmixVoice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetChannelVolumes)(
+ IXAudio2SubmixVoice* This,
+ UINT32 Channels,
+ float *pVolumes);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+ IXAudio2SubmixVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetOutputMatrix)(
+ IXAudio2SubmixVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+
+ void (STDMETHODCALLTYPE *DestroyVoice)(
+ IXAudio2SubmixVoice* This);
+
+ END_INTERFACE
+} IXAudio2SubmixVoiceVtbl;
+interface IXAudio2SubmixVoice {
+ CONST_VTBL IXAudio2SubmixVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio2Voice methods ***/
+#define IXAudio2SubmixVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio2SubmixVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio2SubmixVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio2SubmixVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2SubmixVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2SubmixVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio2SubmixVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio2SubmixVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio2SubmixVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio2SubmixVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio2SubmixVoice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) (This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)
+#define IXAudio2SubmixVoice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) (This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)
+#define IXAudio2SubmixVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio2SubmixVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio2SubmixVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio2SubmixVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio2SubmixVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio2SubmixVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio2SubmixVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio2Voice methods ***/
+static FORCEINLINE void IXAudio2SubmixVoice_GetVoiceDetails(IXAudio2SubmixVoice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+ This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetOutputVoices(IXAudio2SubmixVoice* This,const XAUDIO2_VOICE_SENDS *pSendList) {
+ return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetEffectChain(IXAudio2SubmixVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_EnableEffect(IXAudio2SubmixVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_DisableEffect(IXAudio2SubmixVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio2SubmixVoice_GetEffectState(IXAudio2SubmixVoice* This,UINT32 EffectIndex,BOOL *pEnabled) {
+ This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetEffectParameters(IXAudio2SubmixVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+ return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_GetEffectParameters(IXAudio2SubmixVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+ return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetFilterParameters(IXAudio2SubmixVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2SubmixVoice_GetFilterParameters(IXAudio2SubmixVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetOutputFilterParameters(IXAudio2SubmixVoice* This,IXAudio2Voice *pDestinationVoice,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2SubmixVoice_GetOutputFilterParameters(IXAudio2SubmixVoice* This,IXAudio2Voice *pDestinationVoice,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetVolume(IXAudio2SubmixVoice* This,float Volume,UINT32 OperationSet) {
+ return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio2SubmixVoice_GetVolume(IXAudio2SubmixVoice* This,float *pVolume) {
+ This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetChannelVolumes(IXAudio2SubmixVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+ return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio2SubmixVoice_GetChannelVolumes(IXAudio2SubmixVoice* This,UINT32 Channels,float *pVolumes) {
+ This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio2SubmixVoice_SetOutputMatrix(IXAudio2SubmixVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio2SubmixVoice_GetOutputMatrix(IXAudio2SubmixVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+ This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio2SubmixVoice_DestroyVoice(IXAudio2SubmixVoice* This) {
+ This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif /* __IXAudio2SubmixVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio20MasteringVoice interface
+ */
+#ifndef __IXAudio20MasteringVoice_INTERFACE_DEFINED__
+#define __IXAudio20MasteringVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio20MasteringVoice : public IXAudio20Voice
+{
+};
+#else
+typedef struct IXAudio20MasteringVoiceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio20Voice methods ***/
+ void (STDMETHODCALLTYPE *GetVoiceDetails)(
+ IXAudio20MasteringVoice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+ IXAudio20MasteringVoice* This,
+ const XAUDIO23_VOICE_SENDS *pSendList);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+ IXAudio20MasteringVoice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+ IXAudio20MasteringVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+ IXAudio20MasteringVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetEffectState)(
+ IXAudio20MasteringVoice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+ IXAudio20MasteringVoice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+ IXAudio20MasteringVoice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+
+ HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+ IXAudio20MasteringVoice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFilterParameters)(
+ IXAudio20MasteringVoice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetVolume)(
+ IXAudio20MasteringVoice* This,
+ float Volume,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetVolume)(
+ IXAudio20MasteringVoice* This,
+ float *pVolume);
+
+ HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+ IXAudio20MasteringVoice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetChannelVolumes)(
+ IXAudio20MasteringVoice* This,
+ UINT32 Channels,
+ float *pVolumes);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+ IXAudio20MasteringVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetOutputMatrix)(
+ IXAudio20MasteringVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+
+ void (STDMETHODCALLTYPE *DestroyVoice)(
+ IXAudio20MasteringVoice* This);
+
+ END_INTERFACE
+} IXAudio20MasteringVoiceVtbl;
+interface IXAudio20MasteringVoice {
+ CONST_VTBL IXAudio20MasteringVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio20Voice methods ***/
+#define IXAudio20MasteringVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio20MasteringVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio20MasteringVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio20MasteringVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20MasteringVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio20MasteringVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio20MasteringVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio20MasteringVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio20MasteringVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio20MasteringVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio20MasteringVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio20MasteringVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio20MasteringVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio20MasteringVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio20MasteringVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio20MasteringVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio20MasteringVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio20Voice methods ***/
+static FORCEINLINE void IXAudio20MasteringVoice_GetVoiceDetails(IXAudio20MasteringVoice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+ This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_SetOutputVoices(IXAudio20MasteringVoice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+ return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_SetEffectChain(IXAudio20MasteringVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_EnableEffect(IXAudio20MasteringVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_DisableEffect(IXAudio20MasteringVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio20MasteringVoice_GetEffectState(IXAudio20MasteringVoice* This,UINT32 EffectIndex,BOOL *pEnabled) {
+ This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_SetEffectParameters(IXAudio20MasteringVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+ return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_GetEffectParameters(IXAudio20MasteringVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+ return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_SetFilterParameters(IXAudio20MasteringVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio20MasteringVoice_GetFilterParameters(IXAudio20MasteringVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_SetVolume(IXAudio20MasteringVoice* This,float Volume,UINT32 OperationSet) {
+ return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio20MasteringVoice_GetVolume(IXAudio20MasteringVoice* This,float *pVolume) {
+ This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_SetChannelVolumes(IXAudio20MasteringVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+ return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio20MasteringVoice_GetChannelVolumes(IXAudio20MasteringVoice* This,UINT32 Channels,float *pVolumes) {
+ This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_SetOutputMatrix(IXAudio20MasteringVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio20MasteringVoice_GetOutputMatrix(IXAudio20MasteringVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+ return This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio20MasteringVoice_DestroyVoice(IXAudio20MasteringVoice* This) {
+ This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif /* __IXAudio20MasteringVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio23MasteringVoice interface
+ */
+#ifndef __IXAudio23MasteringVoice_INTERFACE_DEFINED__
+#define __IXAudio23MasteringVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio23MasteringVoice : public IXAudio23Voice
+{
+};
+#else
+typedef struct IXAudio23MasteringVoiceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio23Voice methods ***/
+ void (STDMETHODCALLTYPE *GetVoiceDetails)(
+ IXAudio23MasteringVoice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+ IXAudio23MasteringVoice* This,
+ const XAUDIO23_VOICE_SENDS *pSendList);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+ IXAudio23MasteringVoice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+ IXAudio23MasteringVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+ IXAudio23MasteringVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetEffectState)(
+ IXAudio23MasteringVoice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+ IXAudio23MasteringVoice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+ IXAudio23MasteringVoice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+
+ HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+ IXAudio23MasteringVoice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFilterParameters)(
+ IXAudio23MasteringVoice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetVolume)(
+ IXAudio23MasteringVoice* This,
+ float Volume,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetVolume)(
+ IXAudio23MasteringVoice* This,
+ float *pVolume);
+
+ HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+ IXAudio23MasteringVoice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetChannelVolumes)(
+ IXAudio23MasteringVoice* This,
+ UINT32 Channels,
+ float *pVolumes);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+ IXAudio23MasteringVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetOutputMatrix)(
+ IXAudio23MasteringVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+
+ void (STDMETHODCALLTYPE *DestroyVoice)(
+ IXAudio23MasteringVoice* This);
+
+ END_INTERFACE
+} IXAudio23MasteringVoiceVtbl;
+interface IXAudio23MasteringVoice {
+ CONST_VTBL IXAudio23MasteringVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio23Voice methods ***/
+#define IXAudio23MasteringVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio23MasteringVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio23MasteringVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio23MasteringVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23MasteringVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio23MasteringVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio23MasteringVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio23MasteringVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio23MasteringVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio23MasteringVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio23MasteringVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio23MasteringVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio23MasteringVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio23MasteringVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio23MasteringVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio23MasteringVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio23MasteringVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+#else
+/*** IXAudio23Voice methods ***/
+static FORCEINLINE void IXAudio23MasteringVoice_GetVoiceDetails(IXAudio23MasteringVoice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+ This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_SetOutputVoices(IXAudio23MasteringVoice* This,const XAUDIO23_VOICE_SENDS *pSendList) {
+ return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_SetEffectChain(IXAudio23MasteringVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_EnableEffect(IXAudio23MasteringVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_DisableEffect(IXAudio23MasteringVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio23MasteringVoice_GetEffectState(IXAudio23MasteringVoice* This,UINT32 EffectIndex,BOOL *pEnabled) {
+ This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_SetEffectParameters(IXAudio23MasteringVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+ return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_GetEffectParameters(IXAudio23MasteringVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+ return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_SetFilterParameters(IXAudio23MasteringVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio23MasteringVoice_GetFilterParameters(IXAudio23MasteringVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_SetVolume(IXAudio23MasteringVoice* This,float Volume,UINT32 OperationSet) {
+ return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio23MasteringVoice_GetVolume(IXAudio23MasteringVoice* This,float *pVolume) {
+ This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_SetChannelVolumes(IXAudio23MasteringVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+ return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio23MasteringVoice_GetChannelVolumes(IXAudio23MasteringVoice* This,UINT32 Channels,float *pVolumes) {
+ This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio23MasteringVoice_SetOutputMatrix(IXAudio23MasteringVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio23MasteringVoice_GetOutputMatrix(IXAudio23MasteringVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+ This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio23MasteringVoice_DestroyVoice(IXAudio23MasteringVoice* This) {
+ This->lpVtbl->DestroyVoice(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif /* __IXAudio23MasteringVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio2MasteringVoice interface
+ */
+#ifndef __IXAudio2MasteringVoice_INTERFACE_DEFINED__
+#define __IXAudio2MasteringVoice_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio2MasteringVoice : public IXAudio2Voice
+{
+ virtual void STDMETHODCALLTYPE GetChannelMask(
+ DWORD *pChannelMask) = 0;
+
+};
+#else
+typedef struct IXAudio2MasteringVoiceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio2Voice methods ***/
+ void (STDMETHODCALLTYPE *GetVoiceDetails)(
+ IXAudio2MasteringVoice* This,
+ XAUDIO2_VOICE_DETAILS *pVoiceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputVoices)(
+ IXAudio2MasteringVoice* This,
+ const XAUDIO2_VOICE_SENDS *pSendList);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectChain)(
+ IXAudio2MasteringVoice* This,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *EnableEffect)(
+ IXAudio2MasteringVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *DisableEffect)(
+ IXAudio2MasteringVoice* This,
+ UINT32 EffectIndex,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetEffectState)(
+ IXAudio2MasteringVoice* This,
+ UINT32 EffectIndex,
+ BOOL *pEnabled);
+
+ HRESULT (STDMETHODCALLTYPE *SetEffectParameters)(
+ IXAudio2MasteringVoice* This,
+ UINT32 EffectIndex,
+ const void *pParameters,
+ UINT32 ParametersByteSize,
+ UINT32 OperationSet);
+
+ HRESULT (STDMETHODCALLTYPE *GetEffectParameters)(
+ IXAudio2MasteringVoice* This,
+ UINT32 EffectIndex,
+ void *pParameters,
+ UINT32 ParametersByteSize);
+
+ HRESULT (STDMETHODCALLTYPE *SetFilterParameters)(
+ IXAudio2MasteringVoice* This,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetFilterParameters)(
+ IXAudio2MasteringVoice* This,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputFilterParameters)(
+ IXAudio2MasteringVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ const XAUDIO2_FILTER_PARAMETERS *pParameters,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetOutputFilterParameters)(
+ IXAudio2MasteringVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ XAUDIO2_FILTER_PARAMETERS *pParameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetVolume)(
+ IXAudio2MasteringVoice* This,
+ float Volume,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetVolume)(
+ IXAudio2MasteringVoice* This,
+ float *pVolume);
+
+ HRESULT (STDMETHODCALLTYPE *SetChannelVolumes)(
+ IXAudio2MasteringVoice* This,
+ UINT32 Channels,
+ const float *pVolumes,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetChannelVolumes)(
+ IXAudio2MasteringVoice* This,
+ UINT32 Channels,
+ float *pVolumes);
+
+ HRESULT (STDMETHODCALLTYPE *SetOutputMatrix)(
+ IXAudio2MasteringVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetOutputMatrix)(
+ IXAudio2MasteringVoice* This,
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ float *pLevelMatrix);
+
+ void (STDMETHODCALLTYPE *DestroyVoice)(
+ IXAudio2MasteringVoice* This);
+
+ /*** IXAudio2MasteringVoice methods ***/
+ void (STDMETHODCALLTYPE *GetChannelMask)(
+ IXAudio2MasteringVoice* This,
+ DWORD *pChannelMask);
+
+ END_INTERFACE
+} IXAudio2MasteringVoiceVtbl;
+interface IXAudio2MasteringVoice {
+ CONST_VTBL IXAudio2MasteringVoiceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio2Voice methods ***/
+#define IXAudio2MasteringVoice_GetVoiceDetails(This,pVoiceDetails) (This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)
+#define IXAudio2MasteringVoice_SetOutputVoices(This,pSendList) (This)->lpVtbl->SetOutputVoices(This,pSendList)
+#define IXAudio2MasteringVoice_SetEffectChain(This,pEffectChain) (This)->lpVtbl->SetEffectChain(This,pEffectChain)
+#define IXAudio2MasteringVoice_EnableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2MasteringVoice_DisableEffect(This,EffectIndex,OperationSet) (This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)
+#define IXAudio2MasteringVoice_GetEffectState(This,EffectIndex,pEnabled) (This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)
+#define IXAudio2MasteringVoice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet) (This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)
+#define IXAudio2MasteringVoice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) (This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)
+#define IXAudio2MasteringVoice_SetFilterParameters(This,pParameters,OperationSet) (This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)
+#define IXAudio2MasteringVoice_GetFilterParameters(This,pParameters) (This)->lpVtbl->GetFilterParameters(This,pParameters)
+#define IXAudio2MasteringVoice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) (This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)
+#define IXAudio2MasteringVoice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) (This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)
+#define IXAudio2MasteringVoice_SetVolume(This,Volume,OperationSet) (This)->lpVtbl->SetVolume(This,Volume,OperationSet)
+#define IXAudio2MasteringVoice_GetVolume(This,pVolume) (This)->lpVtbl->GetVolume(This,pVolume)
+#define IXAudio2MasteringVoice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) (This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)
+#define IXAudio2MasteringVoice_GetChannelVolumes(This,Channels,pVolumes) (This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)
+#define IXAudio2MasteringVoice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) (This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)
+#define IXAudio2MasteringVoice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) (This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)
+#define IXAudio2MasteringVoice_DestroyVoice(This) (This)->lpVtbl->DestroyVoice(This)
+/*** IXAudio2MasteringVoice methods ***/
+#define IXAudio2MasteringVoice_GetChannelMask(This,pChannelMask) (This)->lpVtbl->GetChannelMask(This,pChannelMask)
+#else
+/*** IXAudio2Voice methods ***/
+static FORCEINLINE void IXAudio2MasteringVoice_GetVoiceDetails(IXAudio2MasteringVoice* This,XAUDIO2_VOICE_DETAILS *pVoiceDetails) {
+ This->lpVtbl->GetVoiceDetails(This,pVoiceDetails);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetOutputVoices(IXAudio2MasteringVoice* This,const XAUDIO2_VOICE_SENDS *pSendList) {
+ return This->lpVtbl->SetOutputVoices(This,pSendList);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetEffectChain(IXAudio2MasteringVoice* This,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->SetEffectChain(This,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_EnableEffect(IXAudio2MasteringVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->EnableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_DisableEffect(IXAudio2MasteringVoice* This,UINT32 EffectIndex,UINT32 OperationSet) {
+ return This->lpVtbl->DisableEffect(This,EffectIndex,OperationSet);
+}
+static FORCEINLINE void IXAudio2MasteringVoice_GetEffectState(IXAudio2MasteringVoice* This,UINT32 EffectIndex,BOOL *pEnabled) {
+ This->lpVtbl->GetEffectState(This,EffectIndex,pEnabled);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetEffectParameters(IXAudio2MasteringVoice* This,UINT32 EffectIndex,const void *pParameters,UINT32 ParametersByteSize,UINT32 OperationSet) {
+ return This->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_GetEffectParameters(IXAudio2MasteringVoice* This,UINT32 EffectIndex,void *pParameters,UINT32 ParametersByteSize) {
+ return This->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetFilterParameters(IXAudio2MasteringVoice* This,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetFilterParameters(This,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2MasteringVoice_GetFilterParameters(IXAudio2MasteringVoice* This,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetFilterParameters(This,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetOutputFilterParameters(IXAudio2MasteringVoice* This,IXAudio2Voice *pDestinationVoice,const XAUDIO2_FILTER_PARAMETERS *pParameters,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet);
+}
+static FORCEINLINE void IXAudio2MasteringVoice_GetOutputFilterParameters(IXAudio2MasteringVoice* This,IXAudio2Voice *pDestinationVoice,XAUDIO2_FILTER_PARAMETERS *pParameters) {
+ This->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetVolume(IXAudio2MasteringVoice* This,float Volume,UINT32 OperationSet) {
+ return This->lpVtbl->SetVolume(This,Volume,OperationSet);
+}
+static FORCEINLINE void IXAudio2MasteringVoice_GetVolume(IXAudio2MasteringVoice* This,float *pVolume) {
+ This->lpVtbl->GetVolume(This,pVolume);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetChannelVolumes(IXAudio2MasteringVoice* This,UINT32 Channels,const float *pVolumes,UINT32 OperationSet) {
+ return This->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet);
+}
+static FORCEINLINE void IXAudio2MasteringVoice_GetChannelVolumes(IXAudio2MasteringVoice* This,UINT32 Channels,float *pVolumes) {
+ This->lpVtbl->GetChannelVolumes(This,Channels,pVolumes);
+}
+static FORCEINLINE HRESULT IXAudio2MasteringVoice_SetOutputMatrix(IXAudio2MasteringVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,const float *pLevelMatrix,UINT32 OperationSet) {
+ return This->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet);
+}
+static FORCEINLINE void IXAudio2MasteringVoice_GetOutputMatrix(IXAudio2MasteringVoice* This,IXAudio2Voice *pDestinationVoice,UINT32 SourceChannels,UINT32 DestinationChannels,float *pLevelMatrix) {
+ This->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix);
+}
+static FORCEINLINE void IXAudio2MasteringVoice_DestroyVoice(IXAudio2MasteringVoice* This) {
+ This->lpVtbl->DestroyVoice(This);
+}
+/*** IXAudio2MasteringVoice methods ***/
+static FORCEINLINE void IXAudio2MasteringVoice_GetChannelMask(IXAudio2MasteringVoice* This,DWORD *pChannelMask) {
+ This->lpVtbl->GetChannelMask(This,pChannelMask);
+}
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IXAudio2MasteringVoice_GetChannelMask_Proxy(
+ IXAudio2MasteringVoice* This,
+ DWORD *pChannelMask);
+void __RPC_STUB IXAudio2MasteringVoice_GetChannelMask_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio2MasteringVoice_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio20VoiceCallback interface
+ */
+#ifndef __IXAudio20VoiceCallback_INTERFACE_DEFINED__
+#define __IXAudio20VoiceCallback_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio20VoiceCallback
+{
+ BEGIN_INTERFACE
+
+ virtual void STDMETHODCALLTYPE OnVoiceProcessingPassStart(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE OnVoiceProcessingPassEnd(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE OnStreamEnd(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE OnBufferStart(
+ void *pBufferContext) = 0;
+
+ virtual void STDMETHODCALLTYPE OnBufferEnd(
+ void *pBufferContext) = 0;
+
+ virtual void STDMETHODCALLTYPE OnLoopEnd(
+ void *pBufferContext) = 0;
+
+ virtual void STDMETHODCALLTYPE OnVoiceError(
+ void *pBuffercontext,
+ HRESULT Error) = 0;
+
+ END_INTERFACE
+};
+#else
+typedef struct IXAudio20VoiceCallbackVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio20VoiceCallback methods ***/
+ void (STDMETHODCALLTYPE *OnVoiceProcessingPassStart)(
+ IXAudio20VoiceCallback* This);
+
+ void (STDMETHODCALLTYPE *OnVoiceProcessingPassEnd)(
+ IXAudio20VoiceCallback* This);
+
+ void (STDMETHODCALLTYPE *OnStreamEnd)(
+ IXAudio20VoiceCallback* This);
+
+ void (STDMETHODCALLTYPE *OnBufferStart)(
+ IXAudio20VoiceCallback* This,
+ void *pBufferContext);
+
+ void (STDMETHODCALLTYPE *OnBufferEnd)(
+ IXAudio20VoiceCallback* This,
+ void *pBufferContext);
+
+ void (STDMETHODCALLTYPE *OnLoopEnd)(
+ IXAudio20VoiceCallback* This,
+ void *pBufferContext);
+
+ void (STDMETHODCALLTYPE *OnVoiceError)(
+ IXAudio20VoiceCallback* This,
+ void *pBuffercontext,
+ HRESULT Error);
+
+ END_INTERFACE
+} IXAudio20VoiceCallbackVtbl;
+interface IXAudio20VoiceCallback {
+ CONST_VTBL IXAudio20VoiceCallbackVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio20VoiceCallback methods ***/
+#define IXAudio20VoiceCallback_OnVoiceProcessingPassStart(This) (This)->lpVtbl->OnVoiceProcessingPassStart(This)
+#define IXAudio20VoiceCallback_OnVoiceProcessingPassEnd(This) (This)->lpVtbl->OnVoiceProcessingPassEnd(This)
+#define IXAudio20VoiceCallback_OnStreamEnd(This) (This)->lpVtbl->OnStreamEnd(This)
+#define IXAudio20VoiceCallback_OnBufferStart(This,pBufferContext) (This)->lpVtbl->OnBufferStart(This,pBufferContext)
+#define IXAudio20VoiceCallback_OnBufferEnd(This,pBufferContext) (This)->lpVtbl->OnBufferEnd(This,pBufferContext)
+#define IXAudio20VoiceCallback_OnLoopEnd(This,pBufferContext) (This)->lpVtbl->OnLoopEnd(This,pBufferContext)
+#define IXAudio20VoiceCallback_OnVoiceError(This,pBuffercontext,Error) (This)->lpVtbl->OnVoiceError(This,pBuffercontext,Error)
+#else
+/*** IXAudio20VoiceCallback methods ***/
+static FORCEINLINE void IXAudio20VoiceCallback_OnVoiceProcessingPassStart(IXAudio20VoiceCallback* This) {
+ This->lpVtbl->OnVoiceProcessingPassStart(This);
+}
+static FORCEINLINE void IXAudio20VoiceCallback_OnVoiceProcessingPassEnd(IXAudio20VoiceCallback* This) {
+ This->lpVtbl->OnVoiceProcessingPassEnd(This);
+}
+static FORCEINLINE void IXAudio20VoiceCallback_OnStreamEnd(IXAudio20VoiceCallback* This) {
+ This->lpVtbl->OnStreamEnd(This);
+}
+static FORCEINLINE void IXAudio20VoiceCallback_OnBufferStart(IXAudio20VoiceCallback* This,void *pBufferContext) {
+ This->lpVtbl->OnBufferStart(This,pBufferContext);
+}
+static FORCEINLINE void IXAudio20VoiceCallback_OnBufferEnd(IXAudio20VoiceCallback* This,void *pBufferContext) {
+ This->lpVtbl->OnBufferEnd(This,pBufferContext);
+}
+static FORCEINLINE void IXAudio20VoiceCallback_OnLoopEnd(IXAudio20VoiceCallback* This,void *pBufferContext) {
+ This->lpVtbl->OnLoopEnd(This,pBufferContext);
+}
+static FORCEINLINE void IXAudio20VoiceCallback_OnVoiceError(IXAudio20VoiceCallback* This,void *pBuffercontext,HRESULT Error) {
+ This->lpVtbl->OnVoiceError(This,pBuffercontext,Error);
+}
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IXAudio20VoiceCallback_OnVoiceProcessingPassStart_Proxy(
+ IXAudio20VoiceCallback* This);
+void __RPC_STUB IXAudio20VoiceCallback_OnVoiceProcessingPassStart_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20VoiceCallback_OnVoiceProcessingPassEnd_Proxy(
+ IXAudio20VoiceCallback* This);
+void __RPC_STUB IXAudio20VoiceCallback_OnVoiceProcessingPassEnd_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20VoiceCallback_OnStreamEnd_Proxy(
+ IXAudio20VoiceCallback* This);
+void __RPC_STUB IXAudio20VoiceCallback_OnStreamEnd_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20VoiceCallback_OnBufferStart_Proxy(
+ IXAudio20VoiceCallback* This,
+ void *pBufferContext);
+void __RPC_STUB IXAudio20VoiceCallback_OnBufferStart_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20VoiceCallback_OnBufferEnd_Proxy(
+ IXAudio20VoiceCallback* This,
+ void *pBufferContext);
+void __RPC_STUB IXAudio20VoiceCallback_OnBufferEnd_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20VoiceCallback_OnLoopEnd_Proxy(
+ IXAudio20VoiceCallback* This,
+ void *pBufferContext);
+void __RPC_STUB IXAudio20VoiceCallback_OnLoopEnd_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20VoiceCallback_OnVoiceError_Proxy(
+ IXAudio20VoiceCallback* This,
+ void *pBuffercontext,
+ HRESULT Error);
+void __RPC_STUB IXAudio20VoiceCallback_OnVoiceError_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio20VoiceCallback_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio2VoiceCallback interface
+ */
+#ifndef __IXAudio2VoiceCallback_INTERFACE_DEFINED__
+#define __IXAudio2VoiceCallback_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXAudio2VoiceCallback
+{
+ BEGIN_INTERFACE
+
+ virtual void STDMETHODCALLTYPE OnVoiceProcessingPassStart(
+ UINT32 BytesRequired) = 0;
+
+ virtual void STDMETHODCALLTYPE OnVoiceProcessingPassEnd(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE OnStreamEnd(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE OnBufferStart(
+ void *pBufferContext) = 0;
+
+ virtual void STDMETHODCALLTYPE OnBufferEnd(
+ void *pBufferContext) = 0;
+
+ virtual void STDMETHODCALLTYPE OnLoopEnd(
+ void *pBufferContext) = 0;
+
+ virtual void STDMETHODCALLTYPE OnVoiceError(
+ void *pBuffercontext,
+ HRESULT Error) = 0;
+
+ END_INTERFACE
+};
+#else
+typedef struct IXAudio2VoiceCallbackVtbl {
+ BEGIN_INTERFACE
+
+ /*** IXAudio2VoiceCallback methods ***/
+ void (STDMETHODCALLTYPE *OnVoiceProcessingPassStart)(
+ IXAudio2VoiceCallback* This,
+ UINT32 BytesRequired);
+
+ void (STDMETHODCALLTYPE *OnVoiceProcessingPassEnd)(
+ IXAudio2VoiceCallback* This);
+
+ void (STDMETHODCALLTYPE *OnStreamEnd)(
+ IXAudio2VoiceCallback* This);
+
+ void (STDMETHODCALLTYPE *OnBufferStart)(
+ IXAudio2VoiceCallback* This,
+ void *pBufferContext);
+
+ void (STDMETHODCALLTYPE *OnBufferEnd)(
+ IXAudio2VoiceCallback* This,
+ void *pBufferContext);
+
+ void (STDMETHODCALLTYPE *OnLoopEnd)(
+ IXAudio2VoiceCallback* This,
+ void *pBufferContext);
+
+ void (STDMETHODCALLTYPE *OnVoiceError)(
+ IXAudio2VoiceCallback* This,
+ void *pBuffercontext,
+ HRESULT Error);
+
+ END_INTERFACE
+} IXAudio2VoiceCallbackVtbl;
+interface IXAudio2VoiceCallback {
+ CONST_VTBL IXAudio2VoiceCallbackVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IXAudio2VoiceCallback methods ***/
+#define IXAudio2VoiceCallback_OnVoiceProcessingPassStart(This,BytesRequired) (This)->lpVtbl->OnVoiceProcessingPassStart(This,BytesRequired)
+#define IXAudio2VoiceCallback_OnVoiceProcessingPassEnd(This) (This)->lpVtbl->OnVoiceProcessingPassEnd(This)
+#define IXAudio2VoiceCallback_OnStreamEnd(This) (This)->lpVtbl->OnStreamEnd(This)
+#define IXAudio2VoiceCallback_OnBufferStart(This,pBufferContext) (This)->lpVtbl->OnBufferStart(This,pBufferContext)
+#define IXAudio2VoiceCallback_OnBufferEnd(This,pBufferContext) (This)->lpVtbl->OnBufferEnd(This,pBufferContext)
+#define IXAudio2VoiceCallback_OnLoopEnd(This,pBufferContext) (This)->lpVtbl->OnLoopEnd(This,pBufferContext)
+#define IXAudio2VoiceCallback_OnVoiceError(This,pBuffercontext,Error) (This)->lpVtbl->OnVoiceError(This,pBuffercontext,Error)
+#else
+/*** IXAudio2VoiceCallback methods ***/
+static FORCEINLINE void IXAudio2VoiceCallback_OnVoiceProcessingPassStart(IXAudio2VoiceCallback* This,UINT32 BytesRequired) {
+ This->lpVtbl->OnVoiceProcessingPassStart(This,BytesRequired);
+}
+static FORCEINLINE void IXAudio2VoiceCallback_OnVoiceProcessingPassEnd(IXAudio2VoiceCallback* This) {
+ This->lpVtbl->OnVoiceProcessingPassEnd(This);
+}
+static FORCEINLINE void IXAudio2VoiceCallback_OnStreamEnd(IXAudio2VoiceCallback* This) {
+ This->lpVtbl->OnStreamEnd(This);
+}
+static FORCEINLINE void IXAudio2VoiceCallback_OnBufferStart(IXAudio2VoiceCallback* This,void *pBufferContext) {
+ This->lpVtbl->OnBufferStart(This,pBufferContext);
+}
+static FORCEINLINE void IXAudio2VoiceCallback_OnBufferEnd(IXAudio2VoiceCallback* This,void *pBufferContext) {
+ This->lpVtbl->OnBufferEnd(This,pBufferContext);
+}
+static FORCEINLINE void IXAudio2VoiceCallback_OnLoopEnd(IXAudio2VoiceCallback* This,void *pBufferContext) {
+ This->lpVtbl->OnLoopEnd(This,pBufferContext);
+}
+static FORCEINLINE void IXAudio2VoiceCallback_OnVoiceError(IXAudio2VoiceCallback* This,void *pBuffercontext,HRESULT Error) {
+ This->lpVtbl->OnVoiceError(This,pBuffercontext,Error);
+}
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IXAudio2VoiceCallback_OnVoiceProcessingPassStart_Proxy(
+ IXAudio2VoiceCallback* This,
+ UINT32 BytesRequired);
+void __RPC_STUB IXAudio2VoiceCallback_OnVoiceProcessingPassStart_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2VoiceCallback_OnVoiceProcessingPassEnd_Proxy(
+ IXAudio2VoiceCallback* This);
+void __RPC_STUB IXAudio2VoiceCallback_OnVoiceProcessingPassEnd_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2VoiceCallback_OnStreamEnd_Proxy(
+ IXAudio2VoiceCallback* This);
+void __RPC_STUB IXAudio2VoiceCallback_OnStreamEnd_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2VoiceCallback_OnBufferStart_Proxy(
+ IXAudio2VoiceCallback* This,
+ void *pBufferContext);
+void __RPC_STUB IXAudio2VoiceCallback_OnBufferStart_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2VoiceCallback_OnBufferEnd_Proxy(
+ IXAudio2VoiceCallback* This,
+ void *pBufferContext);
+void __RPC_STUB IXAudio2VoiceCallback_OnBufferEnd_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2VoiceCallback_OnLoopEnd_Proxy(
+ IXAudio2VoiceCallback* This,
+ void *pBufferContext);
+void __RPC_STUB IXAudio2VoiceCallback_OnLoopEnd_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2VoiceCallback_OnVoiceError_Proxy(
+ IXAudio2VoiceCallback* This,
+ void *pBuffercontext,
+ HRESULT Error);
+void __RPC_STUB IXAudio2VoiceCallback_OnVoiceError_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio2VoiceCallback_INTERFACE_DEFINED__ */
+
+typedef struct XAUDIO2_DEBUG_CONFIGURATION {
+ UINT32 TraceMask;
+ UINT32 BreakMask;
+ BOOL LogThreadID;
+ BOOL LogFileline;
+ BOOL LogFunctionName;
+ BOOL LogTiming;
+} XAUDIO2_DEBUG_CONFIGURATION;
+/*****************************************************************************
+ * IXAudio20 interface
+ */
+#ifndef __IXAudio20_INTERFACE_DEFINED__
+#define __IXAudio20_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXAudio20, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a,0xc6, 0xe2,0xad,0xc4,0x65,0xc8,0xbb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb")
+IXAudio20 : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetDeviceCount(
+ UINT32 *pCount) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDeviceDetails(
+ UINT32 Index,
+ XAUDIO2_DEVICE_DETAILS *pDeviceDetails) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Initialize(
+ UINT32 Flags = 0,
+ XAUDIO2_PROCESSOR XAudio2Processor = XAUDIO2_DEFAULT_PROCESSOR) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RegisterForCallbacks(
+ IXAudio2EngineCallback *pCallback) = 0;
+
+ virtual void STDMETHODCALLTYPE UnregisterForCallbacks(
+ IXAudio2EngineCallback *pCallback) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSourceVoice(
+ IXAudio2SourceVoice **ppSourceVoice,
+ const WAVEFORMATEX *pSourceFormat,
+ UINT32 Flags = 0,
+ float MaxFrequencyRatio = XAUDIO2_DEFAULT_FREQ_RATIO,
+ IXAudio2VoiceCallback *pCallback = 0,
+ const XAUDIO2_VOICE_SENDS *pSendList = 0,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSubmixVoice(
+ IXAudio2SubmixVoice **ppSubmixVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags = 0,
+ UINT32 ProcessingStage = 0,
+ const XAUDIO2_VOICE_SENDS *pSendList = 0,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateMasteringVoice(
+ IXAudio2MasteringVoice **ppMasteringVoice,
+ UINT32 InputChannels = XAUDIO2_DEFAULT_CHANNELS,
+ UINT32 InputSampleRate = XAUDIO2_DEFAULT_SAMPLERATE,
+ UINT32 Flags = 0,
+ UINT32 DeviceIndex = 0,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE StartEngine(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE StopEngine(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CommitChanges(
+ UINT32 OperationSet) = 0;
+
+ virtual void STDMETHODCALLTYPE GetPerformanceData(
+ XAUDIO20_PERFORMANCE_DATA *pPerfData) = 0;
+
+ virtual void STDMETHODCALLTYPE SetDebugConfiguration(
+ const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+ void *pReserved = 0) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IXAudio20, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a,0xc6, 0xe2,0xad,0xc4,0x65,0xc8,0xbb)
+#endif
+#else
+typedef struct IXAudio20Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IXAudio20* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IXAudio20* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IXAudio20* This);
+
+ /*** IXAudio20 methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetDeviceCount)(
+ IXAudio20* This,
+ UINT32 *pCount);
+
+ HRESULT (STDMETHODCALLTYPE *GetDeviceDetails)(
+ IXAudio20* This,
+ UINT32 Index,
+ XAUDIO2_DEVICE_DETAILS *pDeviceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *Initialize)(
+ IXAudio20* This,
+ UINT32 Flags,
+ XAUDIO2_PROCESSOR XAudio2Processor);
+
+ HRESULT (STDMETHODCALLTYPE *RegisterForCallbacks)(
+ IXAudio20* This,
+ IXAudio2EngineCallback *pCallback);
+
+ void (STDMETHODCALLTYPE *UnregisterForCallbacks)(
+ IXAudio20* This,
+ IXAudio2EngineCallback *pCallback);
+
+ HRESULT (STDMETHODCALLTYPE *CreateSourceVoice)(
+ IXAudio20* This,
+ IXAudio2SourceVoice **ppSourceVoice,
+ const WAVEFORMATEX *pSourceFormat,
+ UINT32 Flags,
+ float MaxFrequencyRatio,
+ IXAudio2VoiceCallback *pCallback,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *CreateSubmixVoice)(
+ IXAudio20* This,
+ IXAudio2SubmixVoice **ppSubmixVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ UINT32 ProcessingStage,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *CreateMasteringVoice)(
+ IXAudio20* This,
+ IXAudio2MasteringVoice **ppMasteringVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ UINT32 DeviceIndex,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *StartEngine)(
+ IXAudio20* This);
+
+ void (STDMETHODCALLTYPE *StopEngine)(
+ IXAudio20* This);
+
+ HRESULT (STDMETHODCALLTYPE *CommitChanges)(
+ IXAudio20* This,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetPerformanceData)(
+ IXAudio20* This,
+ XAUDIO20_PERFORMANCE_DATA *pPerfData);
+
+ void (STDMETHODCALLTYPE *SetDebugConfiguration)(
+ IXAudio20* This,
+ const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+ void *pReserved);
+
+ END_INTERFACE
+} IXAudio20Vtbl;
+interface IXAudio20 {
+ CONST_VTBL IXAudio20Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IXAudio20_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXAudio20_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXAudio20_Release(This) (This)->lpVtbl->Release(This)
+/*** IXAudio20 methods ***/
+#define IXAudio20_GetDeviceCount(This,pCount) (This)->lpVtbl->GetDeviceCount(This,pCount)
+#define IXAudio20_GetDeviceDetails(This,Index,pDeviceDetails) (This)->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails)
+#define IXAudio20_Initialize(This,Flags,XAudio2Processor) (This)->lpVtbl->Initialize(This,Flags,XAudio2Processor)
+#define IXAudio20_RegisterForCallbacks(This,pCallback) (This)->lpVtbl->RegisterForCallbacks(This,pCallback)
+#define IXAudio20_UnregisterForCallbacks(This,pCallback) (This)->lpVtbl->UnregisterForCallbacks(This,pCallback)
+#define IXAudio20_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) (This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain)
+#define IXAudio20_CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain) (This)->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain)
+#define IXAudio20_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain) (This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain)
+#define IXAudio20_StartEngine(This) (This)->lpVtbl->StartEngine(This)
+#define IXAudio20_StopEngine(This) (This)->lpVtbl->StopEngine(This)
+#define IXAudio20_CommitChanges(This,OperationSet) (This)->lpVtbl->CommitChanges(This,OperationSet)
+#define IXAudio20_GetPerformanceData(This,pPerfData) (This)->lpVtbl->GetPerformanceData(This,pPerfData)
+#define IXAudio20_SetDebugConfiguration(This,pDebugConfiguration,pReserved) (This)->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IXAudio20_QueryInterface(IXAudio20* This,REFIID riid,void **ppvObject) {
+ return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IXAudio20_AddRef(IXAudio20* This) {
+ return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IXAudio20_Release(IXAudio20* This) {
+ return This->lpVtbl->Release(This);
+}
+/*** IXAudio20 methods ***/
+static FORCEINLINE HRESULT IXAudio20_GetDeviceCount(IXAudio20* This,UINT32 *pCount) {
+ return This->lpVtbl->GetDeviceCount(This,pCount);
+}
+static FORCEINLINE HRESULT IXAudio20_GetDeviceDetails(IXAudio20* This,UINT32 Index,XAUDIO2_DEVICE_DETAILS *pDeviceDetails) {
+ return This->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails);
+}
+static FORCEINLINE HRESULT IXAudio20_Initialize(IXAudio20* This,UINT32 Flags,XAUDIO2_PROCESSOR XAudio2Processor) {
+ return This->lpVtbl->Initialize(This,Flags,XAudio2Processor);
+}
+static FORCEINLINE HRESULT IXAudio20_RegisterForCallbacks(IXAudio20* This,IXAudio2EngineCallback *pCallback) {
+ return This->lpVtbl->RegisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE void IXAudio20_UnregisterForCallbacks(IXAudio20* This,IXAudio2EngineCallback *pCallback) {
+ This->lpVtbl->UnregisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE HRESULT IXAudio20_CreateSourceVoice(IXAudio20* This,IXAudio2SourceVoice **ppSourceVoice,const WAVEFORMATEX *pSourceFormat,UINT32 Flags,float MaxFrequencyRatio,IXAudio2VoiceCallback *pCallback,const XAUDIO2_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio20_CreateSubmixVoice(IXAudio20* This,IXAudio2SubmixVoice **ppSubmixVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 ProcessingStage,const XAUDIO2_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio20_CreateMasteringVoice(IXAudio20* This,IXAudio2MasteringVoice **ppMasteringVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 DeviceIndex,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio20_StartEngine(IXAudio20* This) {
+ return This->lpVtbl->StartEngine(This);
+}
+static FORCEINLINE void IXAudio20_StopEngine(IXAudio20* This) {
+ This->lpVtbl->StopEngine(This);
+}
+static FORCEINLINE HRESULT IXAudio20_CommitChanges(IXAudio20* This,UINT32 OperationSet) {
+ return This->lpVtbl->CommitChanges(This,OperationSet);
+}
+static FORCEINLINE void IXAudio20_GetPerformanceData(IXAudio20* This,XAUDIO20_PERFORMANCE_DATA *pPerfData) {
+ This->lpVtbl->GetPerformanceData(This,pPerfData);
+}
+static FORCEINLINE void IXAudio20_SetDebugConfiguration(IXAudio20* This,const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,void *pReserved) {
+ This->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXAudio20_GetDeviceCount_Proxy(
+ IXAudio20* This,
+ UINT32 *pCount);
+void __RPC_STUB IXAudio20_GetDeviceCount_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20_GetDeviceDetails_Proxy(
+ IXAudio20* This,
+ UINT32 Index,
+ XAUDIO2_DEVICE_DETAILS *pDeviceDetails);
+void __RPC_STUB IXAudio20_GetDeviceDetails_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20_Initialize_Proxy(
+ IXAudio20* This,
+ UINT32 Flags,
+ XAUDIO2_PROCESSOR XAudio2Processor);
+void __RPC_STUB IXAudio20_Initialize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20_RegisterForCallbacks_Proxy(
+ IXAudio20* This,
+ IXAudio2EngineCallback *pCallback);
+void __RPC_STUB IXAudio20_RegisterForCallbacks_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20_UnregisterForCallbacks_Proxy(
+ IXAudio20* This,
+ IXAudio2EngineCallback *pCallback);
+void __RPC_STUB IXAudio20_UnregisterForCallbacks_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20_CreateSourceVoice_Proxy(
+ IXAudio20* This,
+ IXAudio2SourceVoice **ppSourceVoice,
+ const WAVEFORMATEX *pSourceFormat,
+ UINT32 Flags,
+ float MaxFrequencyRatio,
+ IXAudio2VoiceCallback *pCallback,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+void __RPC_STUB IXAudio20_CreateSourceVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20_CreateSubmixVoice_Proxy(
+ IXAudio20* This,
+ IXAudio2SubmixVoice **ppSubmixVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ UINT32 ProcessingStage,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+void __RPC_STUB IXAudio20_CreateSubmixVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20_CreateMasteringVoice_Proxy(
+ IXAudio20* This,
+ IXAudio2MasteringVoice **ppMasteringVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ UINT32 DeviceIndex,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+void __RPC_STUB IXAudio20_CreateMasteringVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20_StartEngine_Proxy(
+ IXAudio20* This);
+void __RPC_STUB IXAudio20_StartEngine_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20_StopEngine_Proxy(
+ IXAudio20* This);
+void __RPC_STUB IXAudio20_StopEngine_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio20_CommitChanges_Proxy(
+ IXAudio20* This,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio20_CommitChanges_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio20_GetPerformanceData_Proxy(
+ IXAudio20* This,
+ XAUDIO20_PERFORMANCE_DATA *pPerfData);
+void __RPC_STUB IXAudio20_GetPerformanceData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio20_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio22 interface
+ */
+#ifndef __IXAudio22_INTERFACE_DEFINED__
+#define __IXAudio22_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXAudio22, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a,0xc6, 0xe2,0xad,0xc4,0x65,0xc8,0xbb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb")
+IXAudio22 : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetDeviceCount(
+ UINT32 *pCount) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDeviceDetails(
+ UINT32 Index,
+ XAUDIO2_DEVICE_DETAILS *pDeviceDetails) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Initialize(
+ UINT32 Flags = 0,
+ XAUDIO2_PROCESSOR XAudio2Processor = XAUDIO2_DEFAULT_PROCESSOR) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RegisterForCallbacks(
+ IXAudio2EngineCallback *pCallback) = 0;
+
+ virtual void STDMETHODCALLTYPE UnregisterForCallbacks(
+ IXAudio2EngineCallback *pCallback) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSourceVoice(
+ IXAudio2SourceVoice **ppSourceVoice,
+ const WAVEFORMATEX *pSourceFormat,
+ UINT32 Flags = 0,
+ float MaxFrequencyRatio = XAUDIO2_DEFAULT_FREQ_RATIO,
+ IXAudio2VoiceCallback *pCallback = 0,
+ const XAUDIO2_VOICE_SENDS *pSendList = 0,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSubmixVoice(
+ IXAudio2SubmixVoice **ppSubmixVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags = 0,
+ UINT32 ProcessingStage = 0,
+ const XAUDIO2_VOICE_SENDS *pSendList = 0,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateMasteringVoice(
+ IXAudio2MasteringVoice **ppMasteringVoice,
+ UINT32 InputChannels = XAUDIO2_DEFAULT_CHANNELS,
+ UINT32 InputSampleRate = XAUDIO2_DEFAULT_SAMPLERATE,
+ UINT32 Flags = 0,
+ UINT32 DeviceIndex = 0,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE StartEngine(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE StopEngine(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CommitChanges(
+ UINT32 OperationSet) = 0;
+
+ virtual void STDMETHODCALLTYPE GetPerformanceData(
+ XAUDIO22_PERFORMANCE_DATA *pPerfData) = 0;
+
+ virtual void STDMETHODCALLTYPE SetDebugConfiguration(
+ const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+ void *pReserved = 0) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IXAudio22, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a,0xc6, 0xe2,0xad,0xc4,0x65,0xc8,0xbb)
+#endif
+#else
+typedef struct IXAudio22Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IXAudio22* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IXAudio22* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IXAudio22* This);
+
+ /*** IXAudio22 methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetDeviceCount)(
+ IXAudio22* This,
+ UINT32 *pCount);
+
+ HRESULT (STDMETHODCALLTYPE *GetDeviceDetails)(
+ IXAudio22* This,
+ UINT32 Index,
+ XAUDIO2_DEVICE_DETAILS *pDeviceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *Initialize)(
+ IXAudio22* This,
+ UINT32 Flags,
+ XAUDIO2_PROCESSOR XAudio2Processor);
+
+ HRESULT (STDMETHODCALLTYPE *RegisterForCallbacks)(
+ IXAudio22* This,
+ IXAudio2EngineCallback *pCallback);
+
+ void (STDMETHODCALLTYPE *UnregisterForCallbacks)(
+ IXAudio22* This,
+ IXAudio2EngineCallback *pCallback);
+
+ HRESULT (STDMETHODCALLTYPE *CreateSourceVoice)(
+ IXAudio22* This,
+ IXAudio2SourceVoice **ppSourceVoice,
+ const WAVEFORMATEX *pSourceFormat,
+ UINT32 Flags,
+ float MaxFrequencyRatio,
+ IXAudio2VoiceCallback *pCallback,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *CreateSubmixVoice)(
+ IXAudio22* This,
+ IXAudio2SubmixVoice **ppSubmixVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ UINT32 ProcessingStage,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *CreateMasteringVoice)(
+ IXAudio22* This,
+ IXAudio2MasteringVoice **ppMasteringVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ UINT32 DeviceIndex,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *StartEngine)(
+ IXAudio22* This);
+
+ void (STDMETHODCALLTYPE *StopEngine)(
+ IXAudio22* This);
+
+ HRESULT (STDMETHODCALLTYPE *CommitChanges)(
+ IXAudio22* This,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetPerformanceData)(
+ IXAudio22* This,
+ XAUDIO22_PERFORMANCE_DATA *pPerfData);
+
+ void (STDMETHODCALLTYPE *SetDebugConfiguration)(
+ IXAudio22* This,
+ const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+ void *pReserved);
+
+ END_INTERFACE
+} IXAudio22Vtbl;
+interface IXAudio22 {
+ CONST_VTBL IXAudio22Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IXAudio22_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXAudio22_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXAudio22_Release(This) (This)->lpVtbl->Release(This)
+/*** IXAudio22 methods ***/
+#define IXAudio22_GetDeviceCount(This,pCount) (This)->lpVtbl->GetDeviceCount(This,pCount)
+#define IXAudio22_GetDeviceDetails(This,Index,pDeviceDetails) (This)->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails)
+#define IXAudio22_Initialize(This,Flags,XAudio2Processor) (This)->lpVtbl->Initialize(This,Flags,XAudio2Processor)
+#define IXAudio22_RegisterForCallbacks(This,pCallback) (This)->lpVtbl->RegisterForCallbacks(This,pCallback)
+#define IXAudio22_UnregisterForCallbacks(This,pCallback) (This)->lpVtbl->UnregisterForCallbacks(This,pCallback)
+#define IXAudio22_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) (This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain)
+#define IXAudio22_CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain) (This)->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain)
+#define IXAudio22_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain) (This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain)
+#define IXAudio22_StartEngine(This) (This)->lpVtbl->StartEngine(This)
+#define IXAudio22_StopEngine(This) (This)->lpVtbl->StopEngine(This)
+#define IXAudio22_CommitChanges(This,OperationSet) (This)->lpVtbl->CommitChanges(This,OperationSet)
+#define IXAudio22_GetPerformanceData(This,pPerfData) (This)->lpVtbl->GetPerformanceData(This,pPerfData)
+#define IXAudio22_SetDebugConfiguration(This,pDebugConfiguration,pReserved) (This)->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IXAudio22_QueryInterface(IXAudio22* This,REFIID riid,void **ppvObject) {
+ return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IXAudio22_AddRef(IXAudio22* This) {
+ return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IXAudio22_Release(IXAudio22* This) {
+ return This->lpVtbl->Release(This);
+}
+/*** IXAudio22 methods ***/
+static FORCEINLINE HRESULT IXAudio22_GetDeviceCount(IXAudio22* This,UINT32 *pCount) {
+ return This->lpVtbl->GetDeviceCount(This,pCount);
+}
+static FORCEINLINE HRESULT IXAudio22_GetDeviceDetails(IXAudio22* This,UINT32 Index,XAUDIO2_DEVICE_DETAILS *pDeviceDetails) {
+ return This->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails);
+}
+static FORCEINLINE HRESULT IXAudio22_Initialize(IXAudio22* This,UINT32 Flags,XAUDIO2_PROCESSOR XAudio2Processor) {
+ return This->lpVtbl->Initialize(This,Flags,XAudio2Processor);
+}
+static FORCEINLINE HRESULT IXAudio22_RegisterForCallbacks(IXAudio22* This,IXAudio2EngineCallback *pCallback) {
+ return This->lpVtbl->RegisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE void IXAudio22_UnregisterForCallbacks(IXAudio22* This,IXAudio2EngineCallback *pCallback) {
+ This->lpVtbl->UnregisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE HRESULT IXAudio22_CreateSourceVoice(IXAudio22* This,IXAudio2SourceVoice **ppSourceVoice,const WAVEFORMATEX *pSourceFormat,UINT32 Flags,float MaxFrequencyRatio,IXAudio2VoiceCallback *pCallback,const XAUDIO2_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio22_CreateSubmixVoice(IXAudio22* This,IXAudio2SubmixVoice **ppSubmixVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 ProcessingStage,const XAUDIO2_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio22_CreateMasteringVoice(IXAudio22* This,IXAudio2MasteringVoice **ppMasteringVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 DeviceIndex,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio22_StartEngine(IXAudio22* This) {
+ return This->lpVtbl->StartEngine(This);
+}
+static FORCEINLINE void IXAudio22_StopEngine(IXAudio22* This) {
+ This->lpVtbl->StopEngine(This);
+}
+static FORCEINLINE HRESULT IXAudio22_CommitChanges(IXAudio22* This,UINT32 OperationSet) {
+ return This->lpVtbl->CommitChanges(This,OperationSet);
+}
+static FORCEINLINE void IXAudio22_GetPerformanceData(IXAudio22* This,XAUDIO22_PERFORMANCE_DATA *pPerfData) {
+ This->lpVtbl->GetPerformanceData(This,pPerfData);
+}
+static FORCEINLINE void IXAudio22_SetDebugConfiguration(IXAudio22* This,const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,void *pReserved) {
+ This->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXAudio22_GetDeviceCount_Proxy(
+ IXAudio22* This,
+ UINT32 *pCount);
+void __RPC_STUB IXAudio22_GetDeviceCount_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio22_GetDeviceDetails_Proxy(
+ IXAudio22* This,
+ UINT32 Index,
+ XAUDIO2_DEVICE_DETAILS *pDeviceDetails);
+void __RPC_STUB IXAudio22_GetDeviceDetails_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio22_Initialize_Proxy(
+ IXAudio22* This,
+ UINT32 Flags,
+ XAUDIO2_PROCESSOR XAudio2Processor);
+void __RPC_STUB IXAudio22_Initialize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio22_RegisterForCallbacks_Proxy(
+ IXAudio22* This,
+ IXAudio2EngineCallback *pCallback);
+void __RPC_STUB IXAudio22_RegisterForCallbacks_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio22_UnregisterForCallbacks_Proxy(
+ IXAudio22* This,
+ IXAudio2EngineCallback *pCallback);
+void __RPC_STUB IXAudio22_UnregisterForCallbacks_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio22_CreateSourceVoice_Proxy(
+ IXAudio22* This,
+ IXAudio2SourceVoice **ppSourceVoice,
+ const WAVEFORMATEX *pSourceFormat,
+ UINT32 Flags,
+ float MaxFrequencyRatio,
+ IXAudio2VoiceCallback *pCallback,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+void __RPC_STUB IXAudio22_CreateSourceVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio22_CreateSubmixVoice_Proxy(
+ IXAudio22* This,
+ IXAudio2SubmixVoice **ppSubmixVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ UINT32 ProcessingStage,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+void __RPC_STUB IXAudio22_CreateSubmixVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio22_CreateMasteringVoice_Proxy(
+ IXAudio22* This,
+ IXAudio2MasteringVoice **ppMasteringVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ UINT32 DeviceIndex,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+void __RPC_STUB IXAudio22_CreateMasteringVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio22_StartEngine_Proxy(
+ IXAudio22* This);
+void __RPC_STUB IXAudio22_StartEngine_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio22_StopEngine_Proxy(
+ IXAudio22* This);
+void __RPC_STUB IXAudio22_StopEngine_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio22_CommitChanges_Proxy(
+ IXAudio22* This,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio22_CommitChanges_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio22_GetPerformanceData_Proxy(
+ IXAudio22* This,
+ XAUDIO22_PERFORMANCE_DATA *pPerfData);
+void __RPC_STUB IXAudio22_GetPerformanceData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio22_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXAudio27 interface
+ */
+#ifndef __IXAudio27_INTERFACE_DEFINED__
+#define __IXAudio27_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXAudio27, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a,0xc6, 0xe2,0xad,0xc4,0x65,0xc8,0xbb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb")
+IXAudio27 : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetDeviceCount(
+ UINT32 *pCount) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDeviceDetails(
+ UINT32 Index,
+ XAUDIO2_DEVICE_DETAILS *pDeviceDetails) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Initialize(
+ UINT32 Flags = 0,
+ XAUDIO2_PROCESSOR XAudio2Processor = XAUDIO2_DEFAULT_PROCESSOR) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RegisterForCallbacks(
+ IXAudio2EngineCallback *pCallback) = 0;
+
+ virtual void STDMETHODCALLTYPE UnregisterForCallbacks(
+ IXAudio2EngineCallback *pCallback) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSourceVoice(
+ IXAudio2SourceVoice **ppSourceVoice,
+ const WAVEFORMATEX *pSourceFormat,
+ UINT32 Flags = 0,
+ float MaxFrequencyRatio = XAUDIO2_DEFAULT_FREQ_RATIO,
+ IXAudio2VoiceCallback *pCallback = 0,
+ const XAUDIO2_VOICE_SENDS *pSendList = 0,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSubmixVoice(
+ IXAudio2SubmixVoice **ppSubmixVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags = 0,
+ UINT32 ProcessingStage = 0,
+ const XAUDIO2_VOICE_SENDS *pSendList = 0,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateMasteringVoice(
+ IXAudio2MasteringVoice **ppMasteringVoice,
+ UINT32 InputChannels = XAUDIO2_DEFAULT_CHANNELS,
+ UINT32 InputSampleRate = XAUDIO2_DEFAULT_SAMPLERATE,
+ UINT32 Flags = 0,
+ UINT32 DeviceIndex = 0,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE StartEngine(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE StopEngine(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CommitChanges(
+ UINT32 OperationSet) = 0;
+
+ virtual void STDMETHODCALLTYPE GetPerformanceData(
+ XAUDIO2_PERFORMANCE_DATA *pPerfData) = 0;
+
+ virtual void STDMETHODCALLTYPE SetDebugConfiguration(
+ const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+ void *pReserved = 0) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IXAudio27, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a,0xc6, 0xe2,0xad,0xc4,0x65,0xc8,0xbb)
+#endif
+#else
+typedef struct IXAudio27Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IXAudio27* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IXAudio27* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IXAudio27* This);
+
+ /*** IXAudio27 methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetDeviceCount)(
+ IXAudio27* This,
+ UINT32 *pCount);
+
+ HRESULT (STDMETHODCALLTYPE *GetDeviceDetails)(
+ IXAudio27* This,
+ UINT32 Index,
+ XAUDIO2_DEVICE_DETAILS *pDeviceDetails);
+
+ HRESULT (STDMETHODCALLTYPE *Initialize)(
+ IXAudio27* This,
+ UINT32 Flags,
+ XAUDIO2_PROCESSOR XAudio2Processor);
+
+ HRESULT (STDMETHODCALLTYPE *RegisterForCallbacks)(
+ IXAudio27* This,
+ IXAudio2EngineCallback *pCallback);
+
+ void (STDMETHODCALLTYPE *UnregisterForCallbacks)(
+ IXAudio27* This,
+ IXAudio2EngineCallback *pCallback);
+
+ HRESULT (STDMETHODCALLTYPE *CreateSourceVoice)(
+ IXAudio27* This,
+ IXAudio2SourceVoice **ppSourceVoice,
+ const WAVEFORMATEX *pSourceFormat,
+ UINT32 Flags,
+ float MaxFrequencyRatio,
+ IXAudio2VoiceCallback *pCallback,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *CreateSubmixVoice)(
+ IXAudio27* This,
+ IXAudio2SubmixVoice **ppSubmixVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ UINT32 ProcessingStage,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *CreateMasteringVoice)(
+ IXAudio27* This,
+ IXAudio2MasteringVoice **ppMasteringVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ UINT32 DeviceIndex,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *StartEngine)(
+ IXAudio27* This);
+
+ void (STDMETHODCALLTYPE *StopEngine)(
+ IXAudio27* This);
+
+ HRESULT (STDMETHODCALLTYPE *CommitChanges)(
+ IXAudio27* This,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetPerformanceData)(
+ IXAudio27* This,
+ XAUDIO2_PERFORMANCE_DATA *pPerfData);
+
+ void (STDMETHODCALLTYPE *SetDebugConfiguration)(
+ IXAudio27* This,
+ const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+ void *pReserved);
+
+ END_INTERFACE
+} IXAudio27Vtbl;
+interface IXAudio27 {
+ CONST_VTBL IXAudio27Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IXAudio27_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXAudio27_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXAudio27_Release(This) (This)->lpVtbl->Release(This)
+/*** IXAudio27 methods ***/
+#define IXAudio27_GetDeviceCount(This,pCount) (This)->lpVtbl->GetDeviceCount(This,pCount)
+#define IXAudio27_GetDeviceDetails(This,Index,pDeviceDetails) (This)->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails)
+#define IXAudio27_Initialize(This,Flags,XAudio2Processor) (This)->lpVtbl->Initialize(This,Flags,XAudio2Processor)
+#define IXAudio27_RegisterForCallbacks(This,pCallback) (This)->lpVtbl->RegisterForCallbacks(This,pCallback)
+#define IXAudio27_UnregisterForCallbacks(This,pCallback) (This)->lpVtbl->UnregisterForCallbacks(This,pCallback)
+#define IXAudio27_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) (This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain)
+#define IXAudio27_CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain) (This)->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain)
+#define IXAudio27_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain) (This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain)
+#define IXAudio27_StartEngine(This) (This)->lpVtbl->StartEngine(This)
+#define IXAudio27_StopEngine(This) (This)->lpVtbl->StopEngine(This)
+#define IXAudio27_CommitChanges(This,OperationSet) (This)->lpVtbl->CommitChanges(This,OperationSet)
+#define IXAudio27_GetPerformanceData(This,pPerfData) (This)->lpVtbl->GetPerformanceData(This,pPerfData)
+#define IXAudio27_SetDebugConfiguration(This,pDebugConfiguration,pReserved) (This)->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IXAudio27_QueryInterface(IXAudio27* This,REFIID riid,void **ppvObject) {
+ return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IXAudio27_AddRef(IXAudio27* This) {
+ return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IXAudio27_Release(IXAudio27* This) {
+ return This->lpVtbl->Release(This);
+}
+/*** IXAudio27 methods ***/
+static FORCEINLINE HRESULT IXAudio27_GetDeviceCount(IXAudio27* This,UINT32 *pCount) {
+ return This->lpVtbl->GetDeviceCount(This,pCount);
+}
+static FORCEINLINE HRESULT IXAudio27_GetDeviceDetails(IXAudio27* This,UINT32 Index,XAUDIO2_DEVICE_DETAILS *pDeviceDetails) {
+ return This->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails);
+}
+static FORCEINLINE HRESULT IXAudio27_Initialize(IXAudio27* This,UINT32 Flags,XAUDIO2_PROCESSOR XAudio2Processor) {
+ return This->lpVtbl->Initialize(This,Flags,XAudio2Processor);
+}
+static FORCEINLINE HRESULT IXAudio27_RegisterForCallbacks(IXAudio27* This,IXAudio2EngineCallback *pCallback) {
+ return This->lpVtbl->RegisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE void IXAudio27_UnregisterForCallbacks(IXAudio27* This,IXAudio2EngineCallback *pCallback) {
+ This->lpVtbl->UnregisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE HRESULT IXAudio27_CreateSourceVoice(IXAudio27* This,IXAudio2SourceVoice **ppSourceVoice,const WAVEFORMATEX *pSourceFormat,UINT32 Flags,float MaxFrequencyRatio,IXAudio2VoiceCallback *pCallback,const XAUDIO2_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio27_CreateSubmixVoice(IXAudio27* This,IXAudio2SubmixVoice **ppSubmixVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 ProcessingStage,const XAUDIO2_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio27_CreateMasteringVoice(IXAudio27* This,IXAudio2MasteringVoice **ppMasteringVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 DeviceIndex,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio27_StartEngine(IXAudio27* This) {
+ return This->lpVtbl->StartEngine(This);
+}
+static FORCEINLINE void IXAudio27_StopEngine(IXAudio27* This) {
+ This->lpVtbl->StopEngine(This);
+}
+static FORCEINLINE HRESULT IXAudio27_CommitChanges(IXAudio27* This,UINT32 OperationSet) {
+ return This->lpVtbl->CommitChanges(This,OperationSet);
+}
+static FORCEINLINE void IXAudio27_GetPerformanceData(IXAudio27* This,XAUDIO2_PERFORMANCE_DATA *pPerfData) {
+ This->lpVtbl->GetPerformanceData(This,pPerfData);
+}
+static FORCEINLINE void IXAudio27_SetDebugConfiguration(IXAudio27* This,const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,void *pReserved) {
+ This->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXAudio27_GetDeviceCount_Proxy(
+ IXAudio27* This,
+ UINT32 *pCount);
+void __RPC_STUB IXAudio27_GetDeviceCount_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27_GetDeviceDetails_Proxy(
+ IXAudio27* This,
+ UINT32 Index,
+ XAUDIO2_DEVICE_DETAILS *pDeviceDetails);
+void __RPC_STUB IXAudio27_GetDeviceDetails_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27_Initialize_Proxy(
+ IXAudio27* This,
+ UINT32 Flags,
+ XAUDIO2_PROCESSOR XAudio2Processor);
+void __RPC_STUB IXAudio27_Initialize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27_RegisterForCallbacks_Proxy(
+ IXAudio27* This,
+ IXAudio2EngineCallback *pCallback);
+void __RPC_STUB IXAudio27_RegisterForCallbacks_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio27_UnregisterForCallbacks_Proxy(
+ IXAudio27* This,
+ IXAudio2EngineCallback *pCallback);
+void __RPC_STUB IXAudio27_UnregisterForCallbacks_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27_CreateSourceVoice_Proxy(
+ IXAudio27* This,
+ IXAudio2SourceVoice **ppSourceVoice,
+ const WAVEFORMATEX *pSourceFormat,
+ UINT32 Flags,
+ float MaxFrequencyRatio,
+ IXAudio2VoiceCallback *pCallback,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+void __RPC_STUB IXAudio27_CreateSourceVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27_CreateSubmixVoice_Proxy(
+ IXAudio27* This,
+ IXAudio2SubmixVoice **ppSubmixVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ UINT32 ProcessingStage,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+void __RPC_STUB IXAudio27_CreateSubmixVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27_CreateMasteringVoice_Proxy(
+ IXAudio27* This,
+ IXAudio2MasteringVoice **ppMasteringVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ UINT32 DeviceIndex,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+void __RPC_STUB IXAudio27_CreateMasteringVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27_StartEngine_Proxy(
+ IXAudio27* This);
+void __RPC_STUB IXAudio27_StartEngine_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio27_StopEngine_Proxy(
+ IXAudio27* This);
+void __RPC_STUB IXAudio27_StopEngine_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio27_CommitChanges_Proxy(
+ IXAudio27* This,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio27_CommitChanges_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio27_GetPerformanceData_Proxy(
+ IXAudio27* This,
+ XAUDIO2_PERFORMANCE_DATA *pPerfData);
+void __RPC_STUB IXAudio27_GetPerformanceData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio27_INTERFACE_DEFINED__ */
+
+DEFINE_GUID(IID_IXAudio28, 0x60d8dac8, 0x5aa1, 0x4e8e, 0xb5, 0x97, 0x2f, 0x5e, 0x28, 0x83, 0xd4, 0x84);
+/*****************************************************************************
+ * IXAudio2 interface
+ */
+#ifndef __IXAudio2_INTERFACE_DEFINED__
+#define __IXAudio2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXAudio2, 0x2b02e3cf, 0x2e0b, 0x4ec3, 0xbe,0x45, 0x1b,0x2a,0x3f,0xe7,0x21,0x0d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("2b02e3cf-2e0b-4ec3-be45-1b2a3fe7210d")
+IXAudio2 : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE RegisterForCallbacks(
+ IXAudio2EngineCallback *pCallback) = 0;
+
+ virtual void STDMETHODCALLTYPE UnregisterForCallbacks(
+ IXAudio2EngineCallback *pCallback) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSourceVoice(
+ IXAudio2SourceVoice **ppSourceVoice,
+ const WAVEFORMATEX *pSourceFormat,
+ UINT32 Flags = 0,
+ float MaxFrequencyRatio = XAUDIO2_DEFAULT_FREQ_RATIO,
+ IXAudio2VoiceCallback *pCallback = 0,
+ const XAUDIO2_VOICE_SENDS *pSendList = 0,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSubmixVoice(
+ IXAudio2SubmixVoice **ppSubmixVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags = 0,
+ UINT32 ProcessingStage = 0,
+ const XAUDIO2_VOICE_SENDS *pSendList = 0,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateMasteringVoice(
+ IXAudio2MasteringVoice **ppMasteringVoice,
+ UINT32 InputChannels = XAUDIO2_DEFAULT_CHANNELS,
+ UINT32 InputSampleRate = XAUDIO2_DEFAULT_SAMPLERATE,
+ UINT32 Flags = 0,
+ LPCWSTR DeviceId = 0,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain = 0,
+ AUDIO_STREAM_CATEGORY StreamCategory = AudioCategory_GameEffects) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE StartEngine(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE StopEngine(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CommitChanges(
+ UINT32 OperationSet) = 0;
+
+ virtual void STDMETHODCALLTYPE GetPerformanceData(
+ XAUDIO2_PERFORMANCE_DATA *pPerfData) = 0;
+
+ virtual void STDMETHODCALLTYPE SetDebugConfiguration(
+ const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+ void *pReserved = 0) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IXAudio2, 0x2b02e3cf, 0x2e0b, 0x4ec3, 0xbe,0x45, 0x1b,0x2a,0x3f,0xe7,0x21,0x0d)
+#endif
+#else
+typedef struct IXAudio2Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IXAudio2* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IXAudio2* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IXAudio2* This);
+
+ /*** IXAudio2 methods ***/
+ HRESULT (STDMETHODCALLTYPE *RegisterForCallbacks)(
+ IXAudio2* This,
+ IXAudio2EngineCallback *pCallback);
+
+ void (STDMETHODCALLTYPE *UnregisterForCallbacks)(
+ IXAudio2* This,
+ IXAudio2EngineCallback *pCallback);
+
+ HRESULT (STDMETHODCALLTYPE *CreateSourceVoice)(
+ IXAudio2* This,
+ IXAudio2SourceVoice **ppSourceVoice,
+ const WAVEFORMATEX *pSourceFormat,
+ UINT32 Flags,
+ float MaxFrequencyRatio,
+ IXAudio2VoiceCallback *pCallback,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *CreateSubmixVoice)(
+ IXAudio2* This,
+ IXAudio2SubmixVoice **ppSubmixVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ UINT32 ProcessingStage,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+
+ HRESULT (STDMETHODCALLTYPE *CreateMasteringVoice)(
+ IXAudio2* This,
+ IXAudio2MasteringVoice **ppMasteringVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ LPCWSTR DeviceId,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain,
+ AUDIO_STREAM_CATEGORY StreamCategory);
+
+ HRESULT (STDMETHODCALLTYPE *StartEngine)(
+ IXAudio2* This);
+
+ void (STDMETHODCALLTYPE *StopEngine)(
+ IXAudio2* This);
+
+ HRESULT (STDMETHODCALLTYPE *CommitChanges)(
+ IXAudio2* This,
+ UINT32 OperationSet);
+
+ void (STDMETHODCALLTYPE *GetPerformanceData)(
+ IXAudio2* This,
+ XAUDIO2_PERFORMANCE_DATA *pPerfData);
+
+ void (STDMETHODCALLTYPE *SetDebugConfiguration)(
+ IXAudio2* This,
+ const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+ void *pReserved);
+
+ END_INTERFACE
+} IXAudio2Vtbl;
+interface IXAudio2 {
+ CONST_VTBL IXAudio2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IXAudio2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXAudio2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXAudio2_Release(This) (This)->lpVtbl->Release(This)
+/*** IXAudio2 methods ***/
+#define IXAudio2_RegisterForCallbacks(This,pCallback) (This)->lpVtbl->RegisterForCallbacks(This,pCallback)
+#define IXAudio2_UnregisterForCallbacks(This,pCallback) (This)->lpVtbl->UnregisterForCallbacks(This,pCallback)
+#define IXAudio2_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) (This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain)
+#define IXAudio2_CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain) (This)->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain)
+#define IXAudio2_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceId,pEffectChain,StreamCategory) (This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceId,pEffectChain,StreamCategory)
+#define IXAudio2_StartEngine(This) (This)->lpVtbl->StartEngine(This)
+#define IXAudio2_StopEngine(This) (This)->lpVtbl->StopEngine(This)
+#define IXAudio2_CommitChanges(This,OperationSet) (This)->lpVtbl->CommitChanges(This,OperationSet)
+#define IXAudio2_GetPerformanceData(This,pPerfData) (This)->lpVtbl->GetPerformanceData(This,pPerfData)
+#define IXAudio2_SetDebugConfiguration(This,pDebugConfiguration,pReserved) (This)->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IXAudio2_QueryInterface(IXAudio2* This,REFIID riid,void **ppvObject) {
+ return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IXAudio2_AddRef(IXAudio2* This) {
+ return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IXAudio2_Release(IXAudio2* This) {
+ return This->lpVtbl->Release(This);
+}
+/*** IXAudio2 methods ***/
+static FORCEINLINE HRESULT IXAudio2_RegisterForCallbacks(IXAudio2* This,IXAudio2EngineCallback *pCallback) {
+ return This->lpVtbl->RegisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE void IXAudio2_UnregisterForCallbacks(IXAudio2* This,IXAudio2EngineCallback *pCallback) {
+ This->lpVtbl->UnregisterForCallbacks(This,pCallback);
+}
+static FORCEINLINE HRESULT IXAudio2_CreateSourceVoice(IXAudio2* This,IXAudio2SourceVoice **ppSourceVoice,const WAVEFORMATEX *pSourceFormat,UINT32 Flags,float MaxFrequencyRatio,IXAudio2VoiceCallback *pCallback,const XAUDIO2_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio2_CreateSubmixVoice(IXAudio2* This,IXAudio2SubmixVoice **ppSubmixVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,UINT32 ProcessingStage,const XAUDIO2_VOICE_SENDS *pSendList,const XAUDIO2_EFFECT_CHAIN *pEffectChain) {
+ return This->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain);
+}
+static FORCEINLINE HRESULT IXAudio2_CreateMasteringVoice(IXAudio2* This,IXAudio2MasteringVoice **ppMasteringVoice,UINT32 InputChannels,UINT32 InputSampleRate,UINT32 Flags,LPCWSTR DeviceId,const XAUDIO2_EFFECT_CHAIN *pEffectChain,AUDIO_STREAM_CATEGORY StreamCategory) {
+ return This->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceId,pEffectChain,StreamCategory);
+}
+static FORCEINLINE HRESULT IXAudio2_StartEngine(IXAudio2* This) {
+ return This->lpVtbl->StartEngine(This);
+}
+static FORCEINLINE void IXAudio2_StopEngine(IXAudio2* This) {
+ This->lpVtbl->StopEngine(This);
+}
+static FORCEINLINE HRESULT IXAudio2_CommitChanges(IXAudio2* This,UINT32 OperationSet) {
+ return This->lpVtbl->CommitChanges(This,OperationSet);
+}
+static FORCEINLINE void IXAudio2_GetPerformanceData(IXAudio2* This,XAUDIO2_PERFORMANCE_DATA *pPerfData) {
+ This->lpVtbl->GetPerformanceData(This,pPerfData);
+}
+static FORCEINLINE void IXAudio2_SetDebugConfiguration(IXAudio2* This,const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,void *pReserved) {
+ This->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXAudio2_RegisterForCallbacks_Proxy(
+ IXAudio2* This,
+ IXAudio2EngineCallback *pCallback);
+void __RPC_STUB IXAudio2_RegisterForCallbacks_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2_UnregisterForCallbacks_Proxy(
+ IXAudio2* This,
+ IXAudio2EngineCallback *pCallback);
+void __RPC_STUB IXAudio2_UnregisterForCallbacks_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2_CreateSourceVoice_Proxy(
+ IXAudio2* This,
+ IXAudio2SourceVoice **ppSourceVoice,
+ const WAVEFORMATEX *pSourceFormat,
+ UINT32 Flags,
+ float MaxFrequencyRatio,
+ IXAudio2VoiceCallback *pCallback,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+void __RPC_STUB IXAudio2_CreateSourceVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2_CreateSubmixVoice_Proxy(
+ IXAudio2* This,
+ IXAudio2SubmixVoice **ppSubmixVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ UINT32 ProcessingStage,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain);
+void __RPC_STUB IXAudio2_CreateSubmixVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2_CreateMasteringVoice_Proxy(
+ IXAudio2* This,
+ IXAudio2MasteringVoice **ppMasteringVoice,
+ UINT32 InputChannels,
+ UINT32 InputSampleRate,
+ UINT32 Flags,
+ LPCWSTR DeviceId,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain,
+ AUDIO_STREAM_CATEGORY StreamCategory);
+void __RPC_STUB IXAudio2_CreateMasteringVoice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2_StartEngine_Proxy(
+ IXAudio2* This);
+void __RPC_STUB IXAudio2_StartEngine_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2_StopEngine_Proxy(
+ IXAudio2* This);
+void __RPC_STUB IXAudio2_StopEngine_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXAudio2_CommitChanges_Proxy(
+ IXAudio2* This,
+ UINT32 OperationSet);
+void __RPC_STUB IXAudio2_CommitChanges_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IXAudio2_GetPerformanceData_Proxy(
+ IXAudio2* This,
+ XAUDIO2_PERFORMANCE_DATA *pPerfData);
+void __RPC_STUB IXAudio2_GetPerformanceData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXAudio2_INTERFACE_DEFINED__ */
+
+#define XAUDIO2_DEBUG_ENGINE (1)
+
+#define XAUDIO2_VOICE_NOPITCH (2)
+
+#define XAUDIO2_VOICE_NOSRC (4)
+
+#define XAUDIO2_VOICE_USEFILTER (8)
+
+#define XAUDIO2_VOICE_MUSIC (16)
+
+#define XAUDIO2_PLAY_TAILS (32)
+
+#define XAUDIO2_END_OF_STREAM (64)
+
+#define XAUDIO2_SEND_USEFILTER (128)
+
+#define XAUDIO2_VOICE_NOSAMPLESPLAYED (256)
+
+#define XAUDIO2_DEFAULT_FILTER_TYPE (LowPassFilter)
+
+#define XAUDIO2_DEFAULT_FILTER_FREQUENCY (XAUDIO2_MAX_FILTER_FREQUENCY)
+
+#define XAUDIO2_DEFAULT_FILTER_ONEOVERQ (1.00000000000000)
+
+#define XAUDIO2_QUANTUM_NUMERATOR (1)
+
+#define XAUDIO2_QUANTUM_DENOMINATOR (100)
+
+#define XAUDIO2_QUANTUM_MS ((1000.00000000000 * XAUDIO2_QUANTUM_NUMERATOR) / XAUDIO2_QUANTUM_DENOMINATOR)
+
+#define XAUDIO2_E_INVALID_CALL (0x88960001)
+
+#define XAUDIO2_E_XMA_DECODER_ERROR (0x88960002)
+
+#define XAUDIO2_E_XAPO_CREATION_FAILED (0x88960003)
+
+#define XAUDIO2_E_DEVICE_INVALIDATED (0x88960004)
+
+#define XAUDIO20_E_XMA_DECODER_ERROR (0x88960001)
+
+#define XAUDIO20_E_XAPO_CREATION_FAILED (0x88960002)
+
+#define XAUDIO20_E_DEVICE_INVALIDATED (0x88960003)
+
+#ifdef XAUDIO2_HELPER_FUNCTIONS
+#define _USE_MATH_DEFINES
+#include <math.h>
+inline static float XAudio2DecibelsToAmplitudeRatio(float decibels) { return powf(10.0f, decibels/20.0f); }
+inline static float XAudio2AmplitudeRatioToDecibels(float volume) { if (volume == 0) { return -3.402823466e+38f; } return 20.0f * log10f(volume); }
+inline static float XAudio2SemitonesToFrequencyRatio(float semitones) { return powf(2.0f, semitones/12.0f); }
+inline static float XAudio2FrequencyRatioToSemitones(float freqratio) { return 39.86313713864835f * log10f(freqratio); }
+inline static float XAudio2CutoffFrequencyToRadians(float cutofffreq, UINT32 samplerate) { if ((UINT32)(cutofffreq * 6.0f) >= samplerate) { return XAUDIO2_MAX_FILTER_FREQUENCY; } return 2.0f * sinf((float)M_PI * cutofffreq / samplerate); }
+inline static float XAudio2RadiansToCutoffFrequency(float radians, float samplerate) { return samplerate * asinf(radians/2.0f) / (float)M_PI; }
+#endif
+HRESULT WINAPI XAudio2Create(IXAudio2** pxaudio2, UINT32 flags, XAUDIO2_PROCESSOR processor);
+#include <poppack.h>
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __widl_tab__ */
diff --git a/3rdparty/googletest/.gitignore b/3rdparty/googletest/.gitignore
new file mode 100644
index 00000000000..ce310bc3579
--- /dev/null
+++ b/3rdparty/googletest/.gitignore
@@ -0,0 +1,2 @@
+# Ignore CI build directory
+build/
diff --git a/3rdparty/googletest/.travis.yml b/3rdparty/googletest/.travis.yml
index 90002648a5c..3204dfac17d 100644
--- a/3rdparty/googletest/.travis.yml
+++ b/3rdparty/googletest/.travis.yml
@@ -2,29 +2,29 @@
# http://about.travis-ci.org/docs/user/build-configuration/
# This file can be validated on:
# http://lint.travis-ci.org/
-# See also
-# http://stackoverflow.com/questions/22111549/travis-ci-with-clang-3-4-and-c11/30925448#30925448
-# to allow C++11, though we are not yet building with -std=c++11
install:
# /usr/bin/gcc is 4.6 always, but gcc-X.Y is available.
- if [ "$CXX" = "g++" ]; then export CXX="g++-4.9" CC="gcc-4.9"; fi
-# /usr/bin/clang is our version already, and clang-X.Y does not exist.
-#- if [ "$CXX" = "clang++" ]; then export CXX="clang++-3.7" CC="clang-3.7"; fi
+# /usr/bin/clang is 3.4, lets override with modern one.
+- if [ "$CXX" = "clang++" ] && [ "$TRAVIS_OS_NAME" = "linux" ]; then export CXX="clang++-3.7" CC="clang-3.7"; fi
- echo ${PATH}
-- ls /usr/local
-- ls /usr/local/bin
-- export PATH=/usr/local/bin:/usr/bin:${PATH}
- echo ${CXX}
- ${CXX} --version
+- ${CXX} -v
addons:
apt:
+ # List of whitelisted in travis packages for ubuntu-precise can be found here:
+ # https://github.com/travis-ci/apt-package-whitelist/blob/master/ubuntu-precise
+ # List of whitelisted in travis apt-sources:
+ # https://github.com/travis-ci/apt-source-whitelist/blob/master/ubuntu.json
sources:
- ubuntu-toolchain-r-test
+ - llvm-toolchain-precise-3.7
packages:
- gcc-4.9
- g++-4.9
- - clang
+ - clang-3.7
- valgrind
os:
- linux
diff --git a/3rdparty/googletest/CMakeLists.txt b/3rdparty/googletest/CMakeLists.txt
new file mode 100644
index 00000000000..8d2b552ef7a
--- /dev/null
+++ b/3rdparty/googletest/CMakeLists.txt
@@ -0,0 +1,16 @@
+cmake_minimum_required(VERSION 2.6.2)
+
+project( googletest-distribution )
+
+enable_testing()
+
+option(BUILD_GTEST "Builds the googletest subproject" OFF)
+
+#Note that googlemock target already builds googletest
+option(BUILD_GMOCK "Builds the googlemock subproject" ON)
+
+if(BUILD_GMOCK)
+ add_subdirectory( googlemock )
+elseif(BUILD_GTEST)
+ add_subdirectory( googletest )
+endif()
diff --git a/3rdparty/googletest/README.md b/3rdparty/googletest/README.md
index 675a216a4b3..f4b8965a9fd 100644
--- a/3rdparty/googletest/README.md
+++ b/3rdparty/googletest/README.md
@@ -14,6 +14,9 @@ mailing list for questions, discussions, and development. There is
also an IRC channel on OFTC (irc.oftc.net) #gtest available. Please
join us!
+Getting started information for **Google Test** is available in the
+[Google Test Primer](googletest/docs/Primer.md) documentation.
+
**Google Mock** is an extension to Google Test for writing and using C++ mock
classes. See the separate [Google Mock documentation](googlemock/README.md).
@@ -53,7 +56,7 @@ the following notable projects:
* The [Chromium projects](http://www.chromium.org/) (behind the Chrome
browser and Chrome OS).
* The [LLVM](http://llvm.org/) compiler.
- * [Protocol Buffers](http://code.google.com/p/protobuf/), Google's data
+ * [Protocol Buffers](https://github.com/google/protobuf), Google's data
interchange format.
* The [OpenCV](http://opencv.org/) computer vision library.
@@ -66,7 +69,7 @@ Test UI is written in C#.
[GTest TAP Listener](https://github.com/kinow/gtest-tap-listener) is an event
listener for Google Test that implements the
-[TAP protocol](http://en.wikipedia.org/wiki/Test_Anything_Protocol) for test
+[TAP protocol](https://en.wikipedia.org/wiki/Test_Anything_Protocol) for test
result output. If your test runner understands TAP, you may find it useful.
## Requirements ##
@@ -102,7 +105,7 @@ package (as described below):
### Mac OS X Requirements ###
* Mac OS X v10.4 Tiger or newer
- * XCode Developer Tools
+ * Xcode Developer Tools
### Requirements for Contributors ###
@@ -110,9 +113,9 @@ We welcome patches. If you plan to contribute a patch, you need to
build Google Test and its own tests from a git checkout (described
below), which has further requirements:
- * [Python](http://python.org/) v2.3 or newer (for running some of
+ * [Python](https://www.python.org/) v2.3 or newer (for running some of
the tests and re-generating certain source files from templates)
- * [CMake](http://www.cmake.org/) v2.6.4 or newer
+ * [CMake](https://cmake.org/) v2.6.4 or newer
## Regenerating Source Files ##
diff --git a/3rdparty/googletest/googlemock/CMakeLists.txt b/3rdparty/googletest/googlemock/CMakeLists.txt
index cd522776412..beb259a2e9d 100644
--- a/3rdparty/googletest/googlemock/CMakeLists.txt
+++ b/3rdparty/googletest/googlemock/CMakeLists.txt
@@ -92,6 +92,22 @@ cxx_library(gmock_main
src/gmock-all.cc
src/gmock_main.cc)
+# If the CMake version supports it, attach header directory information
+# to the targets for when we are part of a parent build (ie being pulled
+# in via add_subdirectory() rather than being a standalone build).
+if (DEFINED CMAKE_VERSION AND NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11")
+ target_include_directories(gmock INTERFACE "${gmock_SOURCE_DIR}/include")
+ target_include_directories(gmock_main INTERFACE "${gmock_SOURCE_DIR}/include")
+endif()
+
+########################################################################
+#
+# Install rules
+install(TARGETS gmock gmock_main
+ DESTINATION lib)
+install(DIRECTORY ${gmock_SOURCE_DIR}/include/gmock
+ DESTINATION include)
+
########################################################################
#
# Google Mock's own tests.
diff --git a/3rdparty/googletest/googlemock/README.md b/3rdparty/googletest/googlemock/README.md
index 5456df6e165..332beab3881 100644
--- a/3rdparty/googletest/googlemock/README.md
+++ b/3rdparty/googletest/googlemock/README.md
@@ -78,7 +78,7 @@ posting a question on the
Google Mock is not a testing framework itself. Instead, it needs a
testing framework for writing tests. Google Mock works seamlessly
-with [Google Test](http://code.google.com/p/googletest/), butj
+with [Google Test](http://code.google.com/p/googletest/), but
you can also use it with [any C++ testing framework](googlemock/ForDummies.md#Using_Google_Mock_with_Any_Testing_Framework).
### Requirements for End Users ###
diff --git a/3rdparty/googletest/googlemock/docs/CheatSheet.md b/3rdparty/googletest/googlemock/docs/CheatSheet.md
index aef01b1f749..ef4451b8786 100644
--- a/3rdparty/googletest/googlemock/docs/CheatSheet.md
+++ b/3rdparty/googletest/googlemock/docs/CheatSheet.md
@@ -77,7 +77,7 @@ The typical flow is:
1. Create the mock objects.
1. Optionally, set the default actions of the mock objects.
1. Set your expectations on the mock objects (How will they be called? What wil they do?).
- 1. Exercise code that uses the mock objects; if necessary, check the result using [Google Test](http://code.google.com/p/googletest/) assertions.
+ 1. Exercise code that uses the mock objects; if necessary, check the result using [Google Test](../../googletest/) assertions.
1. When a mock objects is destructed, Google Mock automatically verifies that all expectations on it have been satisfied.
Here is an example:
@@ -197,7 +197,7 @@ matcher will be changed.
|`NanSensitiveFloatEq(a_float)`|`argument` is a `float` value approximately equal to `a_float`, treating two NaNs as equal. |
The above matchers use ULP-based comparison (the same as used in
-[Google Test](http://code.google.com/p/googletest/)). They
+[Google Test](../../googletest/)). They
automatically pick a reasonable error bound based on the absolute
value of the expected value. `DoubleEq()` and `FloatEq()` conform to
the IEEE standard, which requires comparing two NaNs for equality to
@@ -227,7 +227,7 @@ The `argument` can be either a C string or a C++ string object:
`ContainsRegex()` and `MatchesRegex()` use the regular expression
syntax defined
-[here](http://code.google.com/p/googletest/wiki/AdvancedGuide#Regular_Expression_Syntax).
+[here](../../googletest/docs/AdvancedGuide.md#regular-expression-syntax).
`StrCaseEq()`, `StrCaseNe()`, `StrEq()`, and `StrNe()` work for wide
strings as well.
@@ -322,7 +322,7 @@ You can make a matcher from one or more other matchers:
|`MatcherCast<T>(m)`|casts matcher `m` to type `Matcher<T>`.|
|:------------------|:--------------------------------------|
-|`SafeMatcherCast<T>(m)`| [safely casts](http://code.google.com/p/googlemock/wiki/CookBook#Casting_Matchers) matcher `m` to type `Matcher<T>`. |
+|`SafeMatcherCast<T>(m)`| [safely casts](CookBook.md#casting-matchers) matcher `m` to type `Matcher<T>`. |
|`Truly(predicate)` |`predicate(argument)` returns something considered by C++ to be true, where `predicate` is a function or functor.|
## Matchers as Predicates ##
@@ -347,7 +347,7 @@ You can make a matcher from one or more other matchers:
## Matchers as Test Assertions ##
-|`ASSERT_THAT(expression, m)`|Generates a [fatal failure](http://code.google.com/p/googletest/wiki/Primer#Assertions) if the value of `expression` doesn't match matcher `m`.|
+|`ASSERT_THAT(expression, m)`|Generates a [fatal failure](../../googletest/docs/Primer.md#assertions) if the value of `expression` doesn't match matcher `m`.|
|:---------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------|
|`EXPECT_THAT(expression, m)`|Generates a non-fatal failure if the value of `expression` doesn't match matcher `m`. |
@@ -553,10 +553,10 @@ class MockFunction<R(A1, ..., An)> {
MOCK_METHODn(Call, R(A1, ..., An));
};
```
-See this [recipe](http://code.google.com/p/googlemock/wiki/CookBook#Using_Check_Points) for one application of it.
+See this [recipe](CookBook.md#using-check-points) for one application of it.
# Flags #
| `--gmock_catch_leaked_mocks=0` | Don't report leaked mock objects as failures. |
|:-------------------------------|:----------------------------------------------|
-| `--gmock_verbose=LEVEL` | Sets the default verbosity level (`info`, `warning`, or `error`) of Google Mock messages. | \ No newline at end of file
+| `--gmock_verbose=LEVEL` | Sets the default verbosity level (`info`, `warning`, or `error`) of Google Mock messages. |
diff --git a/3rdparty/googletest/googlemock/docs/CookBook.md b/3rdparty/googletest/googlemock/docs/CookBook.md
index 8a0d3f70159..c215b55121e 100644
--- a/3rdparty/googletest/googlemock/docs/CookBook.md
+++ b/3rdparty/googletest/googlemock/docs/CookBook.md
@@ -905,7 +905,7 @@ Matches(AllOf(Ge(0), Le(100), Ne(50)))
Since matchers are basically predicates that also know how to describe
themselves, there is a way to take advantage of them in
-[Google Test](http://code.google.com/p/googletest/) assertions. It's
+[Google Test](../../googletest/) assertions. It's
called `ASSERT_THAT` and `EXPECT_THAT`:
```
@@ -948,7 +948,7 @@ Expected: starts with "Hello"
```
**Credit:** The idea of `(ASSERT|EXPECT)_THAT` was stolen from the
-[Hamcrest](http://code.google.com/p/hamcrest/) project, which adds
+[Hamcrest](https://github.com/hamcrest/) project, which adds
`assertThat()` to JUnit.
## Using Predicates as Matchers ##
@@ -1343,7 +1343,7 @@ Remember that `_` is the wildcard matcher that matches anything. With this, if `
Note that the order of the two `EXPECT_CALLs` is important, as a newer `EXPECT_CALL` takes precedence over an older one.
-For more on uninteresting calls, nice mocks, and strict mocks, read ["The Nice, the Strict, and the Naggy"](https://code.google.com/p/googlemock/wiki/CookBook#The_Nice,_the_Strict,_and_the_Naggy).
+For more on uninteresting calls, nice mocks, and strict mocks, read ["The Nice, the Strict, and the Naggy"](#the-nice-the-strict-and-the-naggy).
## Expecting Ordered Calls ##
@@ -1387,7 +1387,7 @@ instead of being overly constraining.
Google Mock allows you to impose an arbitrary DAG (directed acyclic
graph) on the calls. One way to express the DAG is to use the
-[After](http://code.google.com/p/googlemock/wiki/CheatSheet#The_After_Clause) clause of `EXPECT_CALL`.
+[After](CheatSheet.md#the-after-clause) clause of `EXPECT_CALL`.
Another way is via the `InSequence()` clause (not the same as the
`InSequence` class), which we borrowed from jMock 2. It's less
@@ -2484,7 +2484,7 @@ MockFoo::~MockFoo() {}
When it's being destoyed, your friendly mock object will automatically
verify that all expectations on it have been satisfied, and will
-generate [Google Test](http://code.google.com/p/googletest/) failures
+generate [Google Test](../../googletest/) failures
if not. This is convenient as it leaves you with one less thing to
worry about. That is, unless you are not sure if your mock object will
be destoyed.
@@ -2803,7 +2803,7 @@ obvious that the third `EXPECT_CALL` is written wrong. Case solved.
## Running Tests in Emacs ##
If you build and run your tests in Emacs, the source file locations of
-Google Mock and [Google Test](http://code.google.com/p/googletest/)
+Google Mock and [Google Test](../../googletest/)
errors will be highlighted. Just press `<Enter>` on one of them and
you'll be taken to the offending line. Or, you can just type `C-x ``
to jump to the next error.
@@ -2838,7 +2838,7 @@ and you should see an `OUTPUT_DIR` directory being created with files
These three files contain everything you need to use Google Mock (and
Google Test). Just copy them to anywhere you want and you are ready
to write tests and use mocks. You can use the
-[scrpts/test/Makefile](http://code.google.com/p/googlemock/source/browse/trunk/scripts/test/Makefile) file as an example on how to compile your tests
+[scrpts/test/Makefile](../scripts/test/Makefile) file as an example on how to compile your tests
against them.
# Extending Google Mock #
@@ -3670,6 +3670,6 @@ This printer knows how to print built-in C++ types, native arrays, STL
containers, and any type that supports the `<<` operator. For other
types, it prints the raw bytes in the value and hopes that you the
user can figure it out.
-[Google Test's advanced guide](http://code.google.com/p/googletest/wiki/AdvancedGuide#Teaching_Google_Test_How_to_Print_Your_Values)
+[Google Test's advanced guide](../../googletest/docs/AdvancedGuide.md#teaching-google-test-how-to-print-your-values)
explains how to extend the printer to do a better job at
-printing your particular type than to dump the bytes. \ No newline at end of file
+printing your particular type than to dump the bytes.
diff --git a/3rdparty/googletest/googlemock/docs/DevGuide.md b/3rdparty/googletest/googlemock/docs/DevGuide.md
index be9e64d1e48..f4bab75ca7b 100644
--- a/3rdparty/googletest/googlemock/docs/DevGuide.md
+++ b/3rdparty/googletest/googlemock/docs/DevGuide.md
@@ -15,7 +15,7 @@ All Google Mock source and pre-built packages are provided under the [New BSD Li
## The Google Mock Community ##
The Google Mock community exists primarily through the [discussion group](http://groups.google.com/group/googlemock), the
-[issue tracker](http://code.google.com/p/googlemock/issues/list) and, to a lesser extent, the [source control repository](http://code.google.com/p/googlemock/source/checkout). You are definitely encouraged to contribute to the
+[issue tracker](https://github.com/google/googletest/issues) and, to a lesser extent, the [source control repository](../). You are definitely encouraged to contribute to the
discussion and you can also help us to keep the effectiveness of the
group high by following and promoting the guidelines listed here.
@@ -52,12 +52,12 @@ Checking out the Google Mock source is most useful if you plan to
tweak it yourself. You check out the source for Google Mock using a
[Subversion](http://subversion.tigris.org/) client as you would for any
other project hosted on Google Code. Please see the instruction on
-the [source code access page](http://code.google.com/p/googlemock/source/checkout) for how to do it.
+the [source code access page](../) for how to do it.
## Compiling from Source ##
Once you check out the code, you can find instructions on how to
-compile it in the [README](http://code.google.com/p/googlemock/source/browse/trunk/README) file.
+compile it in the [README](../README.md) file.
## Testing ##
@@ -90,8 +90,8 @@ instructions for how to sign and return it.
## Coding Style ##
To keep the source consistent, readable, diffable and easy to merge,
-we use a fairly rigid coding style, as defined by the [google-styleguide](http://code.google.com/p/google-styleguide/) project. All patches will be expected
-to conform to the style outlined [here](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml).
+we use a fairly rigid coding style, as defined by the [google-styleguide](https://github.com/google/styleguide) project. All patches will be expected
+to conform to the style outlined [here](https://github.com/google/styleguide/blob/gh-pages/cppguide.xml).
## Submitting Patches ##
@@ -104,7 +104,7 @@ Please do submit code. Here's what you need to do:
1. Ensure that there are unit tests for your code.
1. Sign a Contributor License Agreement.
1. Create a patch file using `svn diff`.
- 1. We use [Rietveld](http://codereview.appspot.com/) to do web-based code reviews. You can read about the tool [here](http://code.google.com/p/rietveld/wiki/CodeReviewHelp). When you are ready, upload your patch via Rietveld and notify `googlemock@googlegroups.com` to review it. There are several ways to upload the patch. We recommend using the [upload\_gmock.py](http://code.google.com/p/googlemock/source/browse/trunk/scripts/upload_gmock.py) script, which you can find in the `scripts/` folder in the SVN trunk.
+ 1. We use [Rietveld](http://codereview.appspot.com/) to do web-based code reviews. You can read about the tool [here](https://github.com/rietveld-codereview/rietveld/wiki). When you are ready, upload your patch via Rietveld and notify `googlemock@googlegroups.com` to review it. There are several ways to upload the patch. We recommend using the [upload\_gmock.py](../scripts/upload_gmock.py) script, which you can find in the `scripts/` folder in the SVN trunk.
## Google Mock Committers ##
@@ -129,4 +129,4 @@ We follow the typical release process for Subversion-based projects:
---
-This page is based on the [Making GWT Better](http://code.google.com/webtoolkit/makinggwtbetter.html) guide from the [Google Web Toolkit](http://code.google.com/webtoolkit/) project. Except as otherwise [noted](http://code.google.com/policies.html#restrictions), the content of this page is licensed under the [Creative Commons Attribution 2.5 License](http://creativecommons.org/licenses/by/2.5/). \ No newline at end of file
+This page is based on the [Making GWT Better](http://code.google.com/webtoolkit/makinggwtbetter.html) guide from the [Google Web Toolkit](http://code.google.com/webtoolkit/) project. Except as otherwise [noted](http://code.google.com/policies.html#restrictions), the content of this page is licensed under the [Creative Commons Attribution 2.5 License](http://creativecommons.org/licenses/by/2.5/).
diff --git a/3rdparty/googletest/googlemock/docs/Documentation.md b/3rdparty/googletest/googlemock/docs/Documentation.md
index 920ed59d29e..444151ee9ed 100644
--- a/3rdparty/googletest/googlemock/docs/Documentation.md
+++ b/3rdparty/googletest/googlemock/docs/Documentation.md
@@ -9,4 +9,4 @@ This page lists all documentation wiki pages for Google Mock **(the SVN trunk ve
To contribute code to Google Mock, read:
* [DevGuide](DevGuide.md) -- read this _before_ writing your first patch.
- * [Pump Manual](http://code.google.com/p/googletest/wiki/PumpManual) -- how we generate some of Google Mock's source files. \ No newline at end of file
+ * [Pump Manual](../googletest/docs/PumpManual.md) -- how we generate some of Google Mock's source files.
diff --git a/3rdparty/googletest/googlemock/docs/ForDummies.md b/3rdparty/googletest/googlemock/docs/ForDummies.md
index f6c1ba7a5f9..0da4cbe27b8 100644
--- a/3rdparty/googletest/googlemock/docs/ForDummies.md
+++ b/3rdparty/googletest/googlemock/docs/ForDummies.md
@@ -1,6 +1,6 @@
-(**Note:** If you get compiler errors that you don't understand, be sure to consult [Google Mock Doctor](http://code.google.com/p/googlemock/wiki/FrequentlyAskedQuestions#How_am_I_supposed_to_make_sense_of_these_horrible_template_error).)
+(**Note:** If you get compiler errors that you don't understand, be sure to consult [Google Mock Doctor](FrequentlyAskedQuestions.md#how-am-i-supposed-to-make-sense-of-these-horrible-template-errors).)
# What Is Google C++ Mocking Framework? #
When you write a prototype or test, often it's not feasible or wise to rely on real objects entirely. A **mock object** implements the same interface as a real object (so it can be used as one), but lets you specify at run time how it will be used and what it should do (which methods will be called? in which order? how many times? with what arguments? what will they return? etc).
@@ -44,7 +44,7 @@ We encourage you to use Google Mock as:
* a _testing_ tool to cut your tests' outbound dependencies and probe the interaction between your module and its collaborators.
# Getting Started #
-Using Google Mock is easy! Inside your C++ source file, just #include `"gtest/gtest.h"` and `"gmock/gmock.h"`, and you are ready to go.
+Using Google Mock is easy! Inside your C++ source file, just `#include` `"gtest/gtest.h"` and `"gmock/gmock.h"`, and you are ready to go.
# A Case for Mock Turtles #
Let's look at an example. Suppose you are developing a graphics program that relies on a LOGO-like API for drawing. How would you test that it does the right thing? Well, you can run it and compare the screen with a golden screen snapshot, but let's admit it: tests like this are expensive to run and fragile (What if you just upgraded to a shiny new graphics card that has better anti-aliasing? Suddenly you have to update all your golden images.). It would be too painful if all your tests are like this. Fortunately, you learned about Dependency Injection and know the right thing to do: instead of having your application talk to the drawing API directly, wrap the API in an interface (say, `Turtle`) and code to that interface:
@@ -76,7 +76,7 @@ If you are lucky, the mocks you need to use have already been implemented by som
Using the `Turtle` interface as example, here are the simple steps you need to follow:
1. Derive a class `MockTurtle` from `Turtle`.
- 1. Take a _virtual_ function of `Turtle` (while it's possible to [mock non-virtual methods using templates](http://code.google.com/p/googlemock/wiki/CookBook#Mocking_Nonvirtual_Methods), it's much more involved). Count how many arguments it has.
+ 1. Take a _virtual_ function of `Turtle` (while it's possible to [mock non-virtual methods using templates](CookBook.md#mocking-nonvirtual-methods), it's much more involved). Count how many arguments it has.
1. In the `public:` section of the child class, write `MOCK_METHODn();` (or `MOCK_CONST_METHODn();` if you are mocking a `const` method), where `n` is the number of the arguments; if you counted wrong, shame on you, and a compiler error will tell you so.
1. Now comes the fun part: you take the function signature, cut-and-paste the _function name_ as the _first_ argument to the macro, and leave what's left as the _second_ argument (in case you're curious, this is the _type of the function_).
1. Repeat until all virtual functions you want to mock are done.
@@ -105,7 +105,7 @@ You don't need to define these mock methods somewhere else - the `MOCK_METHOD*`
tool requires that you have Python 2.4 installed. You give it a C++ file and the name of an abstract class defined in it,
and it will print the definition of the mock class for you. Due to the
complexity of the C++ language, this script may not always work, but
-it can be quite handy when it does. For more details, read the [user documentation](http://code.google.com/p/googlemock/source/browse/trunk/scripts/generator/README).
+it can be quite handy when it does. For more details, read the [user documentation](../scripts/generator/README).
## Where to Put It ##
When you define a mock class, you need to decide where to put its definition. Some people put it in a `*_test.cc`. This is fine when the interface being mocked (say, `Foo`) is owned by the same person or team. Otherwise, when the owner of `Foo` changes it, your test could break. (You can't really expect `Foo`'s maintainer to fix every test that uses `Foo`, can you?)
@@ -169,7 +169,7 @@ This means `EXPECT_CALL()` should be read as expecting that a call will occur _i
Admittedly, this test is contrived and doesn't do much. You can easily achieve the same effect without using Google Mock. However, as we shall reveal soon, Google Mock allows you to do _much more_ with the mocks.
## Using Google Mock with Any Testing Framework ##
-If you want to use something other than Google Test (e.g. [CppUnit](http://apps.sourceforge.net/mediawiki/cppunit/index.php?title=Main_Page) or
+If you want to use something other than Google Test (e.g. [CppUnit](http://sourceforge.net/projects/cppunit/) or
[CxxTest](http://cxxtest.tigris.org/)) as your testing framework, just change the `main()` function in the previous section to:
```
int main(int argc, char** argv) {
@@ -187,7 +187,7 @@ sometimes causes the test program to crash. You'll still be able to
notice that the test has failed, but it's not a graceful failure.
A better solution is to use Google Test's
-[event listener API](http://code.google.com/p/googletest/wiki/AdvancedGuide#Extending_Google_Test_by_Handling_Test_Events)
+[event listener API](../../googletest/docs/AdvancedGuide.md#extending-google-test-by-handling-test-events)
to report a test failure to your testing framework properly. You'll need to
implement the `OnTestPartResult()` method of the event listener interface, but it
should be straightforward.
@@ -301,7 +301,7 @@ says that `turtle.GetY()` will be called _at least twice_ (Google Mock knows thi
Of course, if you explicitly write a `Times()`, Google Mock will not try to infer the cardinality itself. What if the number you specified is larger than there are `WillOnce()` clauses? Well, after all `WillOnce()`s are used up, Google Mock will do the _default_ action for the function every time (unless, of course, you have a `WillRepeatedly()`.).
-What can we do inside `WillOnce()` besides `Return()`? You can return a reference using `ReturnRef(variable)`, or invoke a pre-defined function, among [others](http://code.google.com/p/googlemock/wiki/CheatSheet#Actions).
+What can we do inside `WillOnce()` besides `Return()`? You can return a reference using `ReturnRef(variable)`, or invoke a pre-defined function, among [others](CheatSheet.md#actions).
**Important note:** The `EXPECT_CALL()` statement evaluates the action clause only once, even though the action may be performed many times. Therefore you must be careful about side effects. The following may not do what you want:
@@ -436,4 +436,4 @@ In Google Mock, if you are not interested in a method, just don't say anything a
# What Now? #
Congratulations! You've learned enough about Google Mock to start using it. Now, you might want to join the [googlemock](http://groups.google.com/group/googlemock) discussion group and actually write some tests using Google Mock - it will be fun. Hey, it may even be addictive - you've been warned.
-Then, if you feel like increasing your mock quotient, you should move on to the [CookBook](CookBook.md). You can learn many advanced features of Google Mock there -- and advance your level of enjoyment and testing bliss. \ No newline at end of file
+Then, if you feel like increasing your mock quotient, you should move on to the [CookBook](CookBook.md). You can learn many advanced features of Google Mock there -- and advance your level of enjoyment and testing bliss.
diff --git a/3rdparty/googletest/googlemock/docs/FrequentlyAskedQuestions.md b/3rdparty/googletest/googlemock/docs/FrequentlyAskedQuestions.md
index 859a71e11e7..5eac83f4b98 100644
--- a/3rdparty/googletest/googlemock/docs/FrequentlyAskedQuestions.md
+++ b/3rdparty/googletest/googlemock/docs/FrequentlyAskedQuestions.md
@@ -7,7 +7,7 @@ tried [Google Mock Doctor](#How_am_I_supposed_to_make_sense_of_these_horrible_te
## When I call a method on my mock object, the method for the real object is invoked instead. What's the problem? ##
-In order for a method to be mocked, it must be _virtual_, unless you use the [high-perf dependency injection technique](http://code.google.com/p/googlemock/wiki/CookBook#Mocking_Nonvirtual_Methods).
+In order for a method to be mocked, it must be _virtual_, unless you use the [high-perf dependency injection technique](CookBook.md#mocking-nonvirtual-methods).
## I wrote some matchers. After I upgraded to a new version of Google Mock, they no longer compile. What's going on? ##
@@ -196,8 +196,8 @@ class MyGreatMatcher {
```
For more information, you can read these
-[two](http://code.google.com/p/googlemock/wiki/CookBook#Writing_New_Monomorphic_Matchers)
-[recipes](http://code.google.com/p/googlemock/wiki/CookBook#Writing_New_Polymorphic_Matchers)
+[two](CookBook.md#writing-new-monomorphic-matchers)
+[recipes](CookBook.md#writing-new-polymorphic-matchers)
from the cookbook. As always, you
are welcome to post questions on `googlemock@googlegroups.com` if you
need any help.
@@ -206,7 +206,7 @@ need any help.
Google Mock works out of the box with Google Test. However, it's easy
to configure it to work with any testing framework of your choice.
-[Here](http://code.google.com/p/googlemock/wiki/ForDummies#Using_Google_Mock_with_Any_Testing_Framework) is how.
+[Here](ForDummies.md#using-google-mock-with-any-testing-framework) is how.
## How am I supposed to make sense of these horrible template errors? ##
@@ -474,10 +474,10 @@ verbose level.
If you find yourself needing to perform some action that's not
supported by Google Mock directly, remember that you can define your own
actions using
-[MakeAction()](http://code.google.com/p/googlemock/wiki/CookBook#Writing_New_Actions) or
-[MakePolymorphicAction()](http://code.google.com/p/googlemock/wiki/CookBook#Writing_New_Polymorphic_Actions),
+[MakeAction()](CookBook.md#writing-new-actions) or
+[MakePolymorphicAction()](CookBook.md#writing_new_polymorphic_actions),
or you can write a stub function and invoke it using
-[Invoke()](http://code.google.com/p/googlemock/wiki/CookBook#Using_Functions_Methods_Functors).
+[Invoke()](CookBook.md#using-functions_methods_functors).
## MOCK\_METHODn()'s second argument looks funny. Why don't you use the MOCK\_METHODn(Method, return\_type, arg\_1, ..., arg\_n) syntax? ##
@@ -599,7 +599,7 @@ when the mock method is called. `SetArgPointee()` says what the
side effect is, but doesn't say what the return value should be. You
need `DoAll()` to chain a `SetArgPointee()` with a `Return()`.
-See this [recipe](http://code.google.com/p/googlemock/wiki/CookBook#Mocking_Side_Effects) for more details and an example.
+See this [recipe](CookBook.md#mocking_side_effects) for more details and an example.
## My question is not in your FAQ! ##
@@ -607,12 +607,12 @@ See this [recipe](http://code.google.com/p/googlemock/wiki/CookBook#Mocking_Side
If you cannot find the answer to your question in this FAQ, there are
some other resources you can use:
- 1. read other [wiki pages](http://code.google.com/p/googlemock/w/list),
+ 1. read other [documentation](Documentation.md),
1. search the mailing list [archive](http://groups.google.com/group/googlemock/topics),
1. ask it on [googlemock@googlegroups.com](mailto:googlemock@googlegroups.com) and someone will answer it (to prevent spam, we require you to join the [discussion group](http://groups.google.com/group/googlemock) before you can post.).
Please note that creating an issue in the
-[issue tracker](http://code.google.com/p/googlemock/issues/list) is _not_
+[issue tracker](https://github.com/google/googletest/issues) is _not_
a good way to get your answer, as it is monitored infrequently by a
very small number of people.
@@ -625,4 +625,4 @@ not enough information in your question):
* the name and version of your compiler,
* the complete command line flags you give to your compiler,
* the complete compiler error messages (if the question is about compilation),
- * the _actual_ code (ideally, a minimal but complete program) that has the problem you encounter. \ No newline at end of file
+ * the _actual_ code (ideally, a minimal but complete program) that has the problem you encounter.
diff --git a/3rdparty/googletest/googlemock/docs/v1_5/ForDummies.md b/3rdparty/googletest/googlemock/docs/v1_5/ForDummies.md
index f389606cbec..fcc3b561747 100644
--- a/3rdparty/googletest/googlemock/docs/v1_5/ForDummies.md
+++ b/3rdparty/googletest/googlemock/docs/v1_5/ForDummies.md
@@ -44,7 +44,7 @@ We encourage you to use Google Mock as:
* a _testing_ tool to cut your tests' outbound dependencies and probe the interaction between your module and its collaborators.
# Getting Started #
-Using Google Mock is easy! Inside your C++ source file, just #include `<gtest/gtest.h>` and `<gmock/gmock.h>`, and you are ready to go.
+Using Google Mock is easy! Inside your C++ source file, just `#include` `<gtest/gtest.h>` and `<gmock/gmock.h>`, and you are ready to go.
# A Case for Mock Turtles #
Let's look at an example. Suppose you are developing a graphics program that relies on a LOGO-like API for drawing. How would you test that it does the right thing? Well, you can run it and compare the screen with a golden screen snapshot, but let's admit it: tests like this are expensive to run and fragile (What if you just upgraded to a shiny new graphics card that has better anti-aliasing? Suddenly you have to update all your golden images.). It would be too painful if all your tests are like this. Fortunately, you learned about Dependency Injection and know the right thing to do: instead of having your application talk to the drawing API directly, wrap the API in an interface (say, `Turtle`) and code to that interface:
diff --git a/3rdparty/googletest/googlemock/docs/v1_6/ForDummies.md b/3rdparty/googletest/googlemock/docs/v1_6/ForDummies.md
index 0891b8c4066..19ee63ab0c2 100644
--- a/3rdparty/googletest/googlemock/docs/v1_6/ForDummies.md
+++ b/3rdparty/googletest/googlemock/docs/v1_6/ForDummies.md
@@ -44,7 +44,7 @@ We encourage you to use Google Mock as:
* a _testing_ tool to cut your tests' outbound dependencies and probe the interaction between your module and its collaborators.
# Getting Started #
-Using Google Mock is easy! Inside your C++ source file, just #include `"gtest/gtest.h"` and `"gmock/gmock.h"`, and you are ready to go.
+Using Google Mock is easy! Inside your C++ source file, just `#include` `"gtest/gtest.h"` and `"gmock/gmock.h"`, and you are ready to go.
# A Case for Mock Turtles #
Let's look at an example. Suppose you are developing a graphics program that relies on a LOGO-like API for drawing. How would you test that it does the right thing? Well, you can run it and compare the screen with a golden screen snapshot, but let's admit it: tests like this are expensive to run and fragile (What if you just upgraded to a shiny new graphics card that has better anti-aliasing? Suddenly you have to update all your golden images.). It would be too painful if all your tests are like this. Fortunately, you learned about Dependency Injection and know the right thing to do: instead of having your application talk to the drawing API directly, wrap the API in an interface (say, `Turtle`) and code to that interface:
diff --git a/3rdparty/googletest/googlemock/docs/v1_7/ForDummies.md b/3rdparty/googletest/googlemock/docs/v1_7/ForDummies.md
index 2ed43007627..ee03c5b9890 100644
--- a/3rdparty/googletest/googlemock/docs/v1_7/ForDummies.md
+++ b/3rdparty/googletest/googlemock/docs/v1_7/ForDummies.md
@@ -44,7 +44,7 @@ We encourage you to use Google Mock as:
* a _testing_ tool to cut your tests' outbound dependencies and probe the interaction between your module and its collaborators.
# Getting Started #
-Using Google Mock is easy! Inside your C++ source file, just #include `"gtest/gtest.h"` and `"gmock/gmock.h"`, and you are ready to go.
+Using Google Mock is easy! Inside your C++ source file, just `#include` `"gtest/gtest.h"` and `"gmock/gmock.h"`, and you are ready to go.
# A Case for Mock Turtles #
Let's look at an example. Suppose you are developing a graphics program that relies on a LOGO-like API for drawing. How would you test that it does the right thing? Well, you can run it and compare the screen with a golden screen snapshot, but let's admit it: tests like this are expensive to run and fragile (What if you just upgraded to a shiny new graphics card that has better anti-aliasing? Suddenly you have to update all your golden images.). It would be too painful if all your tests are like this. Fortunately, you learned about Dependency Injection and know the right thing to do: instead of having your application talk to the drawing API directly, wrap the API in an interface (say, `Turtle`) and code to that interface:
diff --git a/3rdparty/googletest/googlemock/include/gmock/gmock-actions.h b/3rdparty/googletest/googlemock/include/gmock/gmock-actions.h
index c09c4d6ef86..b3f654af348 100644
--- a/3rdparty/googletest/googlemock/include/gmock/gmock-actions.h
+++ b/3rdparty/googletest/googlemock/include/gmock/gmock-actions.h
@@ -46,7 +46,7 @@
#include "gmock/internal/gmock-internal-utils.h"
#include "gmock/internal/gmock-port.h"
-#if GTEST_LANG_CXX11 // Defined by gtest-port.h via gmock-port.h.
+#if GTEST_HAS_STD_TYPE_TRAITS_ // Defined by gtest-port.h via gmock-port.h.
#include <type_traits>
#endif
@@ -96,7 +96,7 @@ struct BuiltInDefaultValueGetter<T, false> {
template <typename T>
class BuiltInDefaultValue {
public:
-#if GTEST_LANG_CXX11
+#if GTEST_HAS_STD_TYPE_TRAITS_
// This function returns true iff type T has a built-in default value.
static bool Exists() {
return ::std::is_default_constructible<T>::value;
@@ -107,7 +107,7 @@ class BuiltInDefaultValue {
T, ::std::is_default_constructible<T>::value>::Get();
}
-#else // GTEST_LANG_CXX11
+#else // GTEST_HAS_STD_TYPE_TRAITS_
// This function returns true iff type T has a built-in default value.
static bool Exists() {
return false;
@@ -117,7 +117,7 @@ class BuiltInDefaultValue {
return BuiltInDefaultValueGetter<T, false>::Get();
}
-#endif // GTEST_LANG_CXX11
+#endif // GTEST_HAS_STD_TYPE_TRAITS_
};
// This partial specialization says that we use the same built-in
diff --git a/3rdparty/googletest/googlemock/make/Makefile b/3rdparty/googletest/googlemock/make/Makefile
index 7c13e05fa96..c1cc0e90f17 100644
--- a/3rdparty/googletest/googlemock/make/Makefile
+++ b/3rdparty/googletest/googlemock/make/Makefile
@@ -17,7 +17,7 @@
# Points to the root of Google Test, relative to where this file is.
# Remember to tweak this if you move this file, or if you want to use
# a copy of Google Test at a different location.
-GTEST_DIR = ../../googletest
+GTEST_DIR = ../gtest
# Points to the root of Google Mock, relative to where this file is.
# Remember to tweak this if you move this file.
diff --git a/3rdparty/googletest/googlemock/src/gmock-spec-builders.cc b/3rdparty/googletest/googlemock/src/gmock-spec-builders.cc
index 2b48af13734..95513420707 100644
--- a/3rdparty/googletest/googlemock/src/gmock-spec-builders.cc
+++ b/3rdparty/googletest/googlemock/src/gmock-spec-builders.cc
@@ -258,8 +258,8 @@ void ReportUninterestingCall(CallReaction reaction, const string& msg) {
"\nNOTE: You can safely ignore the above warning unless this "
"call should not happen. Do not suppress it by blindly adding "
"an EXPECT_CALL() if you don't mean to enforce the call. "
- "See http://code.google.com/p/googlemock/wiki/CookBook#"
- "Knowing_When_to_Expect for details.\n",
+ "See https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#"
+ "knowing-when-to-expect for details.\n",
stack_frames_to_skip);
break;
default: // FAIL
diff --git a/3rdparty/googletest/googlemock/test/gmock-actions_test.cc b/3rdparty/googletest/googlemock/test/gmock-actions_test.cc
index a665fc5fdb0..f470de4c55c 100644
--- a/3rdparty/googletest/googlemock/test/gmock-actions_test.cc
+++ b/3rdparty/googletest/googlemock/test/gmock-actions_test.cc
@@ -214,7 +214,7 @@ class MyNonDefaultConstructible {
int value_;
};
-#if GTEST_LANG_CXX11
+#if GTEST_HAS_STD_TYPE_TRAITS_
TEST(BuiltInDefaultValueTest, ExistsForDefaultConstructibleType) {
EXPECT_TRUE(BuiltInDefaultValue<MyDefaultConstructible>::Exists());
@@ -224,7 +224,7 @@ TEST(BuiltInDefaultValueTest, IsDefaultConstructedForDefaultConstructibleType) {
EXPECT_EQ(42, BuiltInDefaultValue<MyDefaultConstructible>::Get().value());
}
-#endif // GTEST_LANG_CXX11
+#endif // GTEST_HAS_STD_TYPE_TRAITS_
TEST(BuiltInDefaultValueTest, DoesNotExistForNonDefaultConstructibleType) {
EXPECT_FALSE(BuiltInDefaultValue<MyNonDefaultConstructible>::Exists());
diff --git a/3rdparty/googletest/googlemock/test/gmock-matchers_test.cc b/3rdparty/googletest/googlemock/test/gmock-matchers_test.cc
index b09acba9d77..78c4c901bf5 100644
--- a/3rdparty/googletest/googlemock/test/gmock-matchers_test.cc
+++ b/3rdparty/googletest/googlemock/test/gmock-matchers_test.cc
@@ -1042,14 +1042,14 @@ TEST(IsNullTest, ReferenceToConstLinkedPtr) {
EXPECT_FALSE(m.Matches(non_null_p));
}
-#if GTEST_LANG_CXX11
+#if GTEST_HAS_STD_FUNCTION_
TEST(IsNullTest, StdFunction) {
const Matcher<std::function<void()>> m = IsNull();
EXPECT_TRUE(m.Matches(std::function<void()>()));
EXPECT_FALSE(m.Matches([]{}));
}
-#endif // GTEST_LANG_CXX11
+#endif // GTEST_HAS_STD_FUNCTION_
// Tests that IsNull() describes itself properly.
TEST(IsNullTest, CanDescribeSelf) {
@@ -1090,14 +1090,14 @@ TEST(NotNullTest, ReferenceToConstLinkedPtr) {
EXPECT_TRUE(m.Matches(non_null_p));
}
-#if GTEST_LANG_CXX11
+#if GTEST_HAS_STD_FUNCTION_
TEST(NotNullTest, StdFunction) {
const Matcher<std::function<void()>> m = NotNull();
EXPECT_TRUE(m.Matches([]{}));
EXPECT_FALSE(m.Matches(std::function<void()>()));
}
-#endif // GTEST_LANG_CXX11
+#endif // GTEST_HAS_STD_FUNCTION_
// Tests that NotNull() describes itself properly.
TEST(NotNullTest, CanDescribeSelf) {
@@ -2708,22 +2708,18 @@ class FloatingPointTest : public testing::Test {
zero_bits_(Floating(0).bits()),
one_bits_(Floating(1).bits()),
infinity_bits_(Floating(Floating::Infinity()).bits()),
- close_to_positive_zero_(
- Floating::ReinterpretBits(zero_bits_ + max_ulps_/2)),
- close_to_negative_zero_(
- -Floating::ReinterpretBits(zero_bits_ + max_ulps_ - max_ulps_/2)),
- further_from_negative_zero_(-Floating::ReinterpretBits(
+ close_to_positive_zero_(AsBits(zero_bits_ + max_ulps_/2)),
+ close_to_negative_zero_(AsBits(zero_bits_ + max_ulps_ - max_ulps_/2)),
+ further_from_negative_zero_(-AsBits(
zero_bits_ + max_ulps_ + 1 - max_ulps_/2)),
- close_to_one_(Floating::ReinterpretBits(one_bits_ + max_ulps_)),
- further_from_one_(Floating::ReinterpretBits(one_bits_ + max_ulps_ + 1)),
+ close_to_one_(AsBits(one_bits_ + max_ulps_)),
+ further_from_one_(AsBits(one_bits_ + max_ulps_ + 1)),
infinity_(Floating::Infinity()),
- close_to_infinity_(
- Floating::ReinterpretBits(infinity_bits_ - max_ulps_)),
- further_from_infinity_(
- Floating::ReinterpretBits(infinity_bits_ - max_ulps_ - 1)),
+ close_to_infinity_(AsBits(infinity_bits_ - max_ulps_)),
+ further_from_infinity_(AsBits(infinity_bits_ - max_ulps_ - 1)),
max_(Floating::Max()),
- nan1_(Floating::ReinterpretBits(Floating::kExponentBitMask | 1)),
- nan2_(Floating::ReinterpretBits(Floating::kExponentBitMask | 200)) {
+ nan1_(AsBits(Floating::kExponentBitMask | 1)),
+ nan2_(AsBits(Floating::kExponentBitMask | 200)) {
}
void TestSize() {
@@ -2804,6 +2800,12 @@ class FloatingPointTest : public testing::Test {
// Some NaNs.
const RawType nan1_;
const RawType nan2_;
+
+ private:
+ template <typename T>
+ static RawType AsBits(T value) {
+ return Floating::ReinterpretBits(static_cast<Bits>(value));
+ }
};
// Tests floating-point matchers with fixed epsilons.
@@ -3179,6 +3181,8 @@ MATCHER_P(FieldIIs, inner_matcher, "") {
return ExplainMatchResult(inner_matcher, arg.i, result_listener);
}
+#if GTEST_HAS_RTTI
+
TEST(WhenDynamicCastToTest, SameType) {
Derived derived;
derived.i = 4;
@@ -3236,12 +3240,8 @@ TEST(WhenDynamicCastToTest, AmbiguousCast) {
TEST(WhenDynamicCastToTest, Describe) {
Matcher<Base*> matcher = WhenDynamicCastTo<Derived*>(Pointee(_));
-#if GTEST_HAS_RTTI
const string prefix =
"when dynamic_cast to " + internal::GetTypeName<Derived*>() + ", ";
-#else // GTEST_HAS_RTTI
- const string prefix = "when dynamic_cast, ";
-#endif // GTEST_HAS_RTTI
EXPECT_EQ(prefix + "points to a value that is anything", Describe(matcher));
EXPECT_EQ(prefix + "does not point to a value that is anything",
DescribeNegation(matcher));
@@ -3275,6 +3275,8 @@ TEST(WhenDynamicCastToTest, BadReference) {
EXPECT_THAT(as_base_ref, Not(WhenDynamicCastTo<const OtherDerived&>(_)));
}
+#endif // GTEST_HAS_RTTI
+
// Minimal const-propagating pointer.
template <typename T>
class ConstPropagatingPtr {
diff --git a/3rdparty/googletest/googlemock/test/gmock-spec-builders_test.cc b/3rdparty/googletest/googlemock/test/gmock-spec-builders_test.cc
index 342c22f5de2..59ea87c894e 100644
--- a/3rdparty/googletest/googlemock/test/gmock-spec-builders_test.cc
+++ b/3rdparty/googletest/googlemock/test/gmock-spec-builders_test.cc
@@ -2117,8 +2117,8 @@ class GMockVerboseFlagTest : public VerboseFlagPreservingFixture {
"NOTE: You can safely ignore the above warning unless this "
"call should not happen. Do not suppress it by blindly adding "
"an EXPECT_CALL() if you don't mean to enforce the call. "
- "See http://code.google.com/p/googlemock/wiki/CookBook#"
- "Knowing_When_to_Expect for details.";
+ "See https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#"
+ "knowing-when-to-expect for details.";
// A void-returning function.
CaptureStdout();
diff --git a/3rdparty/googletest/googlemock/test/gmock_output_test_golden.txt b/3rdparty/googletest/googlemock/test/gmock_output_test_golden.txt
index 650a8f07c71..689d5eeb037 100644
--- a/3rdparty/googletest/googlemock/test/gmock_output_test_golden.txt
+++ b/3rdparty/googletest/googlemock/test/gmock_output_test_golden.txt
@@ -75,14 +75,14 @@ GMOCK WARNING:
Uninteresting mock function call - returning default value.
Function call: Bar2(0, 1)
Returns: false
-NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See http://code.google.com/p/googlemock/wiki/CookBook#Knowing_When_to_Expect for details.
+NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#knowing-when-to-expect for details.
[ OK ] GMockOutputTest.UninterestingCall
[ RUN ] GMockOutputTest.UninterestingCallToVoidFunction
GMOCK WARNING:
Uninteresting mock function call - returning directly.
Function call: Bar3(0, 1)
-NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See http://code.google.com/p/googlemock/wiki/CookBook#Knowing_When_to_Expect for details.
+NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#knowing-when-to-expect for details.
[ OK ] GMockOutputTest.UninterestingCallToVoidFunction
[ RUN ] GMockOutputTest.RetiredExpectation
unknown file: Failure
@@ -266,14 +266,14 @@ Uninteresting mock function call - taking default action specified at:
FILE:#:
Function call: Bar2(2, 2)
Returns: true
-NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See http://code.google.com/p/googlemock/wiki/CookBook#Knowing_When_to_Expect for details.
+NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#knowing-when-to-expect for details.
GMOCK WARNING:
Uninteresting mock function call - taking default action specified at:
FILE:#:
Function call: Bar2(1, 1)
Returns: false
-NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See http://code.google.com/p/googlemock/wiki/CookBook#Knowing_When_to_Expect for details.
+NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#knowing-when-to-expect for details.
[ OK ] GMockOutputTest.UninterestingCallWithDefaultAction
[ RUN ] GMockOutputTest.ExplicitActionsRunOutWithDefaultAction
diff --git a/3rdparty/googletest/googletest/.gitignore b/3rdparty/googletest/googletest/.gitignore
new file mode 100644
index 00000000000..4b7be4b91b7
--- /dev/null
+++ b/3rdparty/googletest/googletest/.gitignore
@@ -0,0 +1,2 @@
+# python
+*.pyc
diff --git a/3rdparty/googletest/googletest/CMakeLists.txt b/3rdparty/googletest/googletest/CMakeLists.txt
index bd78cfe675b..621d0f04215 100644
--- a/3rdparty/googletest/googletest/CMakeLists.txt
+++ b/3rdparty/googletest/googletest/CMakeLists.txt
@@ -22,6 +22,11 @@ option(gtest_build_samples "Build gtest's sample programs." OFF)
option(gtest_disable_pthreads "Disable uses of pthreads in gtest." OFF)
+option(
+ gtest_hide_internal_symbols
+ "Build gtest with internal symbols hidden in shared libraries."
+ OFF)
+
# Defines pre_project_set_up_hermetic_build() and set_up_hermetic_build().
include(cmake/hermetic_build.cmake OPTIONAL)
@@ -46,6 +51,11 @@ if (COMMAND set_up_hermetic_build)
set_up_hermetic_build()
endif()
+if (gtest_hide_internal_symbols)
+ set(CMAKE_CXX_VISIBILITY_PRESET hidden)
+ set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
+endif()
+
# Define helper functions and macros used by Google Test.
include(cmake/internal_utils.cmake)
@@ -81,6 +91,22 @@ cxx_library(gtest "${cxx_strict}" src/gtest-all.cc)
cxx_library(gtest_main "${cxx_strict}" src/gtest_main.cc)
target_link_libraries(gtest_main gtest)
+# If the CMake version supports it, attach header directory information
+# to the targets for when we are part of a parent build (ie being pulled
+# in via add_subdirectory() rather than being a standalone build).
+if (DEFINED CMAKE_VERSION AND NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11")
+ target_include_directories(gtest INTERFACE "${gtest_SOURCE_DIR}/include")
+ target_include_directories(gtest_main INTERFACE "${gtest_SOURCE_DIR}/include")
+endif()
+
+########################################################################
+#
+# Install rules
+install(TARGETS gtest gtest_main
+ DESTINATION lib)
+install(DIRECTORY ${gtest_SOURCE_DIR}/include/gtest
+ DESTINATION include)
+
########################################################################
#
# Samples on how to link user tests with gtest or gtest_main.
diff --git a/3rdparty/googletest/googletest/README.md b/3rdparty/googletest/googletest/README.md
index 9bd59c8ee7f..edd4408054b 100644
--- a/3rdparty/googletest/googletest/README.md
+++ b/3rdparty/googletest/googletest/README.md
@@ -54,7 +54,7 @@ it.
### Using CMake ###
Google Test comes with a CMake build script (
-[CMakeLists.txt](master/CMakeLists.txt)) that can be used on a wide range of platforms ("C" stands for
+[CMakeLists.txt](CMakeLists.txt)) that can be used on a wide range of platforms ("C" stands for
cross-platform.). If you don't have CMake installed already, you can
download it for free from <http://www.cmake.org/>.
@@ -136,7 +136,7 @@ these macros are named like `GTEST_XYZ` and you define them to either 1
or 0 to enable or disable a certain feature.
We list the most frequently used macros below. For a complete list,
-see file [include/gtest/internal/gtest-port.h](https://github.com/google/googletest/blob/master/include/gtest/internal/gtest-port.h).
+see file [include/gtest/internal/gtest-port.h](include/gtest/internal/gtest-port.h).
### Choosing a TR1 Tuple Library ###
@@ -221,7 +221,7 @@ your build script.
### Avoiding Macro Name Clashes ###
In C++, macros don't obey namespaces. Therefore two libraries that
-both define a macro of the same name will clash if you #include both
+both define a macro of the same name will clash if you `#include` both
definitions. In case a Google Test macro clashes with another
library, you can force Google Test to rename its macro to avoid the
conflict.
diff --git a/3rdparty/googletest/googletest/docs/AdvancedGuide.md b/3rdparty/googletest/googletest/docs/AdvancedGuide.md
index 4d34ba5bcf8..7ba8d1219bd 100644
--- a/3rdparty/googletest/googletest/docs/AdvancedGuide.md
+++ b/3rdparty/googletest/googletest/docs/AdvancedGuide.md
@@ -230,7 +230,7 @@ message is formatted:
| **Fatal assertion** | **Nonfatal assertion** | **Verifies** |
|:--------------------|:-----------------------|:-------------|
-| `ASSERT_PRED_FORMAT1(`_pred\_format1, val1_`);` | `EXPECT_PRED_FORMAT1(`_pred\_format1, val1_`); | _pred\_format1(val1)_ is successful |
+| `ASSERT_PRED_FORMAT1(`_pred\_format1, val1_`);` | `EXPECT_PRED_FORMAT1(`_pred\_format1, val1_`);` | _pred\_format1(val1)_ is successful |
| `ASSERT_PRED_FORMAT2(`_pred\_format2, val1, val2_`);` | `EXPECT_PRED_FORMAT2(`_pred\_format2, val1, val2_`);` | _pred\_format2(val1, val2)_ is successful |
| `...` | `...` | `...` |
@@ -265,7 +265,7 @@ int SmallestPrimeCommonDivisor(int m, int n) { ... }
int n) {
if (MutuallyPrime(m, n))
return ::testing::AssertionSuccess();
-
+
return ::testing::AssertionFailure()
<< m_expr << " and " << n_expr << " (" << m << " and " << n
<< ") are not mutually prime, " << "as they have a common divisor "
@@ -312,8 +312,8 @@ want to learn more, see
| **Fatal assertion** | **Nonfatal assertion** | **Verifies** |
|:--------------------|:-----------------------|:-------------|
-| `ASSERT_FLOAT_EQ(`_expected, actual_`);` | `EXPECT_FLOAT_EQ(`_expected, actual_`);` | the two `float` values are almost equal |
-| `ASSERT_DOUBLE_EQ(`_expected, actual_`);` | `EXPECT_DOUBLE_EQ(`_expected, actual_`);` | the two `double` values are almost equal |
+| `ASSERT_FLOAT_EQ(`_val1, val2_`);` | `EXPECT_FLOAT_EQ(`_val1, val2_`);` | the two `float` values are almost equal |
+| `ASSERT_DOUBLE_EQ(`_val1, val2_`);` | `EXPECT_DOUBLE_EQ(`_val1, val2_`);` | the two `double` values are almost equal |
By "almost equal", we mean the two values are within 4 ULP's from each
other.
@@ -527,9 +527,9 @@ Google Test has the following macros to support death tests:
| **Fatal assertion** | **Nonfatal assertion** | **Verifies** |
|:--------------------|:-----------------------|:-------------|
-| `ASSERT_DEATH(`_statement, regex_`); | `EXPECT_DEATH(`_statement, regex_`); | _statement_ crashes with the given error |
-| `ASSERT_DEATH_IF_SUPPORTED(`_statement, regex_`); | `EXPECT_DEATH_IF_SUPPORTED(`_statement, regex_`); | if death tests are supported, verifies that _statement_ crashes with the given error; otherwise verifies nothing |
-| `ASSERT_EXIT(`_statement, predicate, regex_`); | `EXPECT_EXIT(`_statement, predicate, regex_`); |_statement_ exits with the given error and its exit code matches _predicate_ |
+| `ASSERT_DEATH(`_statement, regex_`);` | `EXPECT_DEATH(`_statement, regex_`);` | _statement_ crashes with the given error |
+| `ASSERT_DEATH_IF_SUPPORTED(`_statement, regex_`);` | `EXPECT_DEATH_IF_SUPPORTED(`_statement, regex_`);` | if death tests are supported, verifies that _statement_ crashes with the given error; otherwise verifies nothing |
+| `ASSERT_EXIT(`_statement, predicate, regex_`);` | `EXPECT_EXIT(`_statement, predicate, regex_`);` |_statement_ exits with the given error and its exit code matches _predicate_ |
where _statement_ is a statement that is expected to cause the process to
die, _predicate_ is a function or function object that evaluates an integer
@@ -804,7 +804,7 @@ For example,
11: EXPECT_EQ(1, Bar(n));
12: EXPECT_EQ(2, Bar(n + 1));
13: }
-14:
+14:
15: TEST(FooTest, Bar) {
16: {
17: SCOPED_TRACE("A"); // This trace point will be included in
@@ -1199,9 +1199,9 @@ which are all in the `testing` namespace:
| `Values(v1, v2, ..., vN)` | Yields values `{v1, v2, ..., vN}`. |
| `ValuesIn(container)` and `ValuesIn(begin, end)` | Yields values from a C-style array, an STL-style container, or an iterator range `[begin, end)`. `container`, `begin`, and `end` can be expressions whose values are determined at run time. |
| `Bool()` | Yields sequence `{false, true}`. |
-| `Combine(g1, g2, ..., gN)` | Yields all combinations (the Cartesian product for the math savvy) of the values generated by the `N` generators. This is only available if your system provides the `<tr1/tuple>` header. If you are sure your system does, and Google Test disagrees, you can override it by defining `GTEST_HAS_TR1_TUPLE=1`. See comments in [include/gtest/internal/gtest-port.h](https://github.com/google/googletest/blob/master/googletest/include/gtest/internal/gtest-port.h) for more information. |
+| `Combine(g1, g2, ..., gN)` | Yields all combinations (the Cartesian product for the math savvy) of the values generated by the `N` generators. This is only available if your system provides the `<tr1/tuple>` header. If you are sure your system does, and Google Test disagrees, you can override it by defining `GTEST_HAS_TR1_TUPLE=1`. See comments in [include/gtest/internal/gtest-port.h](../include/gtest/internal/gtest-port.h) for more information. |
-For more details, see the comments at the definitions of these functions in the [source code](https://github.com/google/googletest/blob/master/googletest/include/gtest/gtest-param-test.h).
+For more details, see the comments at the definitions of these functions in the [source code](../include/gtest/gtest-param-test.h).
The following statement will instantiate tests from the `FooTest` test case
each with parameter values `"meeny"`, `"miny"`, and `"moe"`.
@@ -1249,8 +1249,8 @@ tests in the given test case, whether their definitions come before or
_after_ the `INSTANTIATE_TEST_CASE_P` statement.
You can see
-[these](https://github.com/google/googletest/blob/master/googletest/samples/sample7_unittest.cc)
-[files](https://github.com/google/googletest/blob/master/googletest/samples/sample8_unittest.cc) for more examples.
+[these](../samples/sample7_unittest.cc)
+[files](../samples/sample8_unittest.cc) for more examples.
_Availability_: Linux, Windows (requires MSVC 8.0 or above), Mac; since version 1.2.0.
@@ -1450,7 +1450,7 @@ two cases to consider:
Both static functions and definitions/declarations in an unnamed namespace are
only visible within the same translation unit. To test them, you can `#include`
-the entire `.cc` file being tested in your `*_test.cc` file. (#including `.cc`
+the entire `.cc` file being tested in your `*_test.cc` file. (`#include`ing `.cc`
files is not a good way to reuse code - you should not do this in production
code!)
@@ -1551,8 +1551,8 @@ exception, you could catch the exception and assert on it. But Google
Test doesn't use exceptions, so how do we test that a piece of code
generates an expected failure?
-`"gtest/gtest-spi.h"` contains some constructs to do this. After
-#including this header, you can use
+`"gtest/gtest-spi.h"` contains some constructs to do this. After
+`#include`ing this header, you can use
| `EXPECT_FATAL_FAILURE(`_statement, substring_`);` |
|:--------------------------------------------------|
@@ -1646,8 +1646,8 @@ _Availability:_ Linux, Windows, Mac; since v1.4.0.
## Defining Event Listeners ##
To define a event listener, you subclass either
-[testing::TestEventListener](https://github.com/google/googletest/blob/master/googletest/include/gtest/gtest.h#L991)
-or [testing::EmptyTestEventListener](https://github.com/google/googletest/blob/master/googletest/include/gtest/gtest.h#L1044).
+[testing::TestEventListener](../include/gtest/gtest.h#L991)
+or [testing::EmptyTestEventListener](../include/gtest/gtest.h#L1044).
The former is an (abstract) interface, where <i>each pure virtual method<br>
can be overridden to handle a test event</i> (For example, when a test
starts, the `OnTestStart()` method will be called.). The latter provides
@@ -1656,10 +1656,10 @@ subclass only needs to override the methods it cares about.
When an event is fired, its context is passed to the handler function
as an argument. The following argument types are used:
- * [UnitTest](https://github.com/google/googletest/blob/master/googletest/include/gtest/gtest.h#L1151) reflects the state of the entire test program,
- * [TestCase](https://github.com/google/googletest/blob/master/googletest/include/gtest/gtest.h#L778) has information about a test case, which can contain one or more tests,
- * [TestInfo](https://github.com/google/googletest/blob/master/googletest/include/gtest/gtest.h#L644) contains the state of a test, and
- * [TestPartResult](https://github.com/google/googletest/blob/master/googletest/include/gtest/gtest-test-part.h#L47) represents the result of a test assertion.
+ * [UnitTest](../include/gtest/gtest.h#L1151) reflects the state of the entire test program,
+ * [TestCase](../include/gtest/gtest.h#L778) has information about a test case, which can contain one or more tests,
+ * [TestInfo](../include/gtest/gtest.h#L644) contains the state of a test, and
+ * [TestPartResult](../include/gtest/gtest-test-part.h#L47) represents the result of a test assertion.
An event handler function can examine the argument it receives to find
out interesting information about the event and the test program's
@@ -1695,7 +1695,7 @@ state. Here's an example:
To use the event listener you have defined, add an instance of it to
the Google Test event listener list (represented by class
-[TestEventListeners](https://github.com/google/googletest/blob/master/googletest/include/gtest/gtest.h#L1064)
+[TestEventListeners](../include/gtest/gtest.h#L1064)
- note the "s" at the end of the name) in your
`main()` function, before calling `RUN_ALL_TESTS()`:
```
@@ -1723,7 +1723,7 @@ event listener list and delete it. You can do so by adding one line:
Now, sit back and enjoy a completely different output from your
tests. For more details, you can read this
-[sample](https://github.com/google/googletest/blob/master/googletest/samples/sample9_unittest.cc).
+[sample](../samples/sample9_unittest.cc).
You may append more than one listener to the list. When an `On*Start()`
or `OnTestPartResult()` event is fired, the listeners will receive it in
@@ -1748,7 +1748,7 @@ failures. This ensures that failures generated by the latter are
attributed to the right test by the former.
We have a sample of failure-raising listener
-[here](https://github.com/google/googletest/blob/master/googletest/samples/sample10_unittest.cc).
+[here](../samples/sample10_unittest.cc).
# Running Test Programs: Advanced Options #
@@ -2173,7 +2173,7 @@ and you should see an `OUTPUT_DIR` directory being created with files
`gtest/gtest.h` and `gtest/gtest-all.cc` in it. These files contain
everything you need to use Google Test. Just copy them to anywhere
you want and you are ready to write tests. You can use the
-[scripts/test/Makefile](https://github.com/google/googletest/blob/master/googletest/scripts/test/Makefile)
+[scripts/test/Makefile](../scripts/test/Makefile)
file as an example on how to compile your tests against them.
# Where to Go from Here #
diff --git a/3rdparty/googletest/googletest/docs/DevGuide.md b/3rdparty/googletest/googletest/docs/DevGuide.md
index 867770a62a8..06467a32771 100644
--- a/3rdparty/googletest/googletest/docs/DevGuide.md
+++ b/3rdparty/googletest/googletest/docs/DevGuide.md
@@ -14,8 +14,8 @@ All Google Test source and pre-built packages are provided under the [New BSD Li
## The Google Test Community ##
-The Google Test community exists primarily through the [discussion group](http://groups.google.com/group/googletestframework), the
-[issue tracker](http://code.google.com/p/googletest/issues/list) and, to a lesser extent, the [source control repository](http://code.google.com/p/googletest/source/checkout). You are definitely encouraged to contribute to the
+The Google Test community exists primarily through the [discussion group](http://groups.google.com/group/googletestframework) and the GitHub repository.
+You are definitely encouraged to contribute to the
discussion and you can also help us to keep the effectiveness of the
group high by following and promoting the guidelines listed here.
@@ -35,37 +35,27 @@ Sure, C++ testing is serious business and all that, but it's also
a lot of fun. Let's keep it that way. Let's strive to be one of the
friendliest communities in all of open source.
-### Where to Discuss Google Test ###
-
-As always, discuss Google Test in the official [Google C++ Testing Framework discussion group](http://groups.google.com/group/googletestframework). You don't have to actually submit
-code in order to sign up. Your participation itself is a valuable
-contribution.
+As always, discuss Google Test in the official GoogleTest discussion group.
+You don't have to actually submit code in order to sign up. Your participation
+itself is a valuable contribution.
# Working with the Code #
If you want to get your hands dirty with the code inside Google Test,
this is the section for you.
-## Checking Out the Source from Subversion ##
-
-Checking out the Google Test source is most useful if you plan to
-tweak it yourself. You check out the source for Google Test using a
-[Subversion](http://subversion.tigris.org/) client as you would for any
-other project hosted on Google Code. Please see the instruction on
-the [source code access page](http://code.google.com/p/googletest/source/checkout) for how to do it.
-
## Compiling from Source ##
Once you check out the code, you can find instructions on how to
-compile it in the [README](http://code.google.com/p/googletest/source/browse/trunk/README) file.
+compile it in the [README](../README.md) file.
## Testing ##
A testing framework is of no good if itself is not thoroughly tested.
Tests should be written for any new code, and changes should be
verified to not break existing tests before they are submitted for
-review. To perform the tests, follow the instructions in [README](http://code.google.com/p/googletest/source/browse/trunk/README) and
-verify that there are no failures.
+review. To perform the tests, follow the instructions in
+[README](../README.md) and verify that there are no failures.
# Contributing Code #
@@ -104,14 +94,12 @@ can read the PumpManual for details.
Please do submit code. Here's what you need to do:
- 1. Normally you should make your change against the SVN trunk instead of a branch or a tag, as the latter two are for release control and should be treated mostly as read-only.
- 1. Decide which code you want to submit. A submission should be a set of changes that addresses one issue in the [Google Test issue tracker](http://code.google.com/p/googletest/issues/list). Please don't mix more than one logical change per submittal, because it makes the history hard to follow. If you want to make a change that doesn't have a corresponding issue in the issue tracker, please create one.
+ 1. A submission should be a set of changes that addresses one issue in the [issue tracker](https://github.com/google/googletest/issues). Please don't mix more than one logical change per submittal, because it makes the history hard to follow. If you want to make a change that doesn't have a corresponding issue in the issue tracker, please create one.
1. Also, coordinate with team members that are listed on the issue in question. This ensures that work isn't being duplicated and communicating your plan early also generally leads to better patches.
1. Ensure that your code adheres to the [Google Test source code style](#Coding_Style.md).
1. Ensure that there are unit tests for your code.
1. Sign a Contributor License Agreement.
- 1. Create a patch file using `svn diff`.
- 1. We use [Rietveld](http://codereview.appspot.com/) to do web-based code reviews. You can read about the tool [here](http://code.google.com/p/rietveld/wiki/CodeReviewHelp). When you are ready, upload your patch via Rietveld and notify `googletestframework@googlegroups.com` to review it. There are several ways to upload the patch. We recommend using the [upload\_gtest.py](http://code.google.com/p/googletest/source/browse/trunk/scripts/upload_gtest.py) script, which you can find in the `scripts/` folder in the SVN trunk.
+ 1. Create a Pull Request in the usual way.
## Google Test Committers ##
@@ -125,7 +113,7 @@ Test.
# Release Process #
-We follow the typical release process for Subversion-based projects:
+We follow a typical release process:
1. A release branch named `release-X.Y` is created.
1. Bugs are fixed and features are added in trunk; those individual patches are merged into the release branch until it's stable.
@@ -133,7 +121,6 @@ We follow the typical release process for Subversion-based projects:
1. Repeat steps 2 and 3 throughout one release cycle (as determined by features or time).
1. Go back to step 1 to create another release branch and so on.
-
---
-This page is based on the [Making GWT Better](http://code.google.com/webtoolkit/makinggwtbetter.html) guide from the [Google Web Toolkit](http://code.google.com/webtoolkit/) project. Except as otherwise [noted](http://code.google.com/policies.html#restrictions), the content of this page is licensed under the [Creative Commons Attribution 2.5 License](http://creativecommons.org/licenses/by/2.5/). \ No newline at end of file
+This page is based on the [Making GWT Better](http://code.google.com/webtoolkit/makinggwtbetter.html) guide from the [Google Web Toolkit](http://code.google.com/webtoolkit/) project. Except as otherwise [noted](http://code.google.com/policies.html#restrictions), the content of this page is licensed under the [Creative Commons Attribution 2.5 License](http://creativecommons.org/licenses/by/2.5/).
diff --git a/3rdparty/googletest/googletest/docs/FAQ.md b/3rdparty/googletest/googletest/docs/FAQ.md
index ccbd97bd8d3..5fd6cb7238a 100644
--- a/3rdparty/googletest/googletest/docs/FAQ.md
+++ b/3rdparty/googletest/googletest/docs/FAQ.md
@@ -28,11 +28,11 @@ list can help you decide whether it is for you too.
* `SCOPED_TRACE` helps you understand the context of an assertion failure when it comes from inside a sub-routine or loop.
* You can decide which tests to run using name patterns. This saves time when you want to quickly reproduce a test failure.
* Google Test can generate XML test result reports that can be parsed by popular continuous build system like Hudson.
- * Simple things are easy in Google Test, while hard things are possible: in addition to advanced features like [global test environments](http://code.google.com/p/googletest/wiki/AdvancedGuide#Global_Set-Up_and_Tear-Down) and tests parameterized by [values](http://code.google.com/p/googletest/wiki/AdvancedGuide#Value_Parameterized_Tests) or [types](http://code.google.com/p/googletest/wiki/AdvancedGuide#Typed_Tests), Google Test supports various ways for the user to extend the framework -- if Google Test doesn't do something out of the box, chances are that a user can implement the feature using Google Test's public API, without changing Google Test itself. In particular, you can:
- * expand your testing vocabulary by defining [custom predicates](http://code.google.com/p/googletest/wiki/AdvancedGuide#Predicate_Assertions_for_Better_Error_Messages),
- * teach Google Test how to [print your types](http://code.google.com/p/googletest/wiki/AdvancedGuide#Teaching_Google_Test_How_to_Print_Your_Values),
- * define your own testing macros or utilities and verify them using Google Test's [Service Provider Interface](http://code.google.com/p/googletest/wiki/AdvancedGuide#Catching_Failures), and
- * reflect on the test cases or change the test output format by intercepting the [test events](http://code.google.com/p/googletest/wiki/AdvancedGuide#Extending_Google_Test_by_Handling_Test_Events).
+ * Simple things are easy in Google Test, while hard things are possible: in addition to advanced features like [global test environments](AdvancedGuide.md#global-set-up-and-tear-down) and tests parameterized by [values](AdvancedGuide.md#value-parameterized-tests) or [types](docs/AdvancedGuide.md#typed-tests), Google Test supports various ways for the user to extend the framework -- if Google Test doesn't do something out of the box, chances are that a user can implement the feature using Google Test's public API, without changing Google Test itself. In particular, you can:
+ * expand your testing vocabulary by defining [custom predicates](AdvancedGuide.md#predicate-assertions-for-better-error-messages),
+ * teach Google Test how to [print your types](AdvancedGuide.md#teaching-google-test-how-to-print-your-values),
+ * define your own testing macros or utilities and verify them using Google Test's [Service Provider Interface](AdvancedGuide.md#catching-failures), and
+ * reflect on the test cases or change the test output format by intercepting the [test events](AdvancedGuide.md#extending-google-test-by-handling-test-events).
## I'm getting warnings when compiling Google Test. Would you fix them? ##
@@ -76,7 +76,7 @@ for simplicity we just say that it cannot start with `_`.).
It may seem fine for `TestCaseName` and `TestName` to contain `_` in the
middle. However, consider this:
-```
+``` cpp
TEST(Time, Flies_Like_An_Arrow) { ... }
TEST(Time_Flies, Like_An_Arrow) { ... }
```
@@ -201,7 +201,7 @@ we don't have a convention on the order of the two arguments for
twice in the implementation, making it even harder to understand and
maintain. We believe the benefit doesn't justify the cost.
-Finally, with the growth of Google Mock's [matcher](http://code.google.com/p/googlemock/wiki/CookBook#Using_Matchers_in_Google_Test_Assertions) library, we are
+Finally, with the growth of Google Mock's [matcher](../../googlemock/docs/CookBook.md#using-matchers-in-google-test-assertions) library, we are
encouraging people to use the unified `EXPECT_THAT(value, matcher)`
syntax more often in tests. One significant advantage of the matcher
approach is that matchers can be easily combined to form new matchers,
@@ -242,7 +242,7 @@ of this approach:
1. Throwing in a destructor is undefined behavior in C++. Not using exceptions means Google Test's assertions are safe to use in destructors.
1. The `EXPECT_*` family of macros will continue even after a failure, allowing multiple failures in a `TEST` to be reported in a single run. This is a popular feature, as in C++ the edit-compile-test cycle is usually quite long and being able to fixing more than one thing at a time is a blessing.
1. If assertions are implemented using exceptions, a test may falsely ignore a failure if it's caught by user code:
-```
+``` cpp
try { ... ASSERT_TRUE(...) ... }
catch (...) { ... }
```
@@ -259,13 +259,13 @@ macro for both cases. One possibility is to provide only one macro
for tests with fixtures, and require the user to define an empty
fixture sometimes:
-```
+``` cpp
class FooTest : public ::testing::Test {};
TEST_F(FooTest, DoesThis) { ... }
```
or
-```
+``` cpp
typedef ::testing::Test FooTest;
TEST_F(FooTest, DoesThat) { ... }
@@ -293,7 +293,7 @@ possibly allows. In particular:
* The runner-style requires to split the information into two pieces: the definition of the death test itself, and the specification for the runner on how to run the death test and what to expect. The death test would be written in C++, while the runner spec may or may not be. A user needs to carefully keep the two in sync. `ASSERT_DEATH(statement, expected_message)` specifies all necessary information in one place, in one language, without boilerplate code. It is very declarative.
* `ASSERT_DEATH` has a similar syntax and error-reporting semantics as other Google Test assertions, and thus is easy to learn.
* `ASSERT_DEATH` can be mixed with other assertions and other logic at your will. You are not limited to one death test per test method. For example, you can write something like:
-```
+``` cpp
if (FooCondition()) {
ASSERT_DEATH(Bar(), "blah");
} else {
@@ -302,7 +302,7 @@ possibly allows. In particular:
```
If you prefer one death test per test method, you can write your tests in that style too, but we don't want to impose that on the users. The fewer artificial limitations the better.
* `ASSERT_DEATH` can reference local variables in the current function, and you can decide how many death tests you want based on run-time information. For example,
-```
+``` cpp
const int count = GetCount(); // Only known at run time.
for (int i = 1; i <= count; i++) {
ASSERT_DEATH({
@@ -335,7 +335,7 @@ as running in a parallel universe, more or less.
If your class has a static data member:
-```
+``` cpp
// foo.h
class Foo {
...
@@ -345,7 +345,7 @@ class Foo {
You also need to define it _outside_ of the class body in `foo.cc`:
-```
+``` cpp
const int Foo::kBar; // No initializer here.
```
@@ -376,7 +376,7 @@ to write tests using each derived fixture.
Typically, your code looks like this:
-```
+``` cpp
// Defines a base test fixture.
class BaseTest : public ::testing::Test {
protected:
@@ -409,7 +409,7 @@ If necessary, you can continue to derive test fixtures from a derived fixture.
Google Test has no limit on how deep the hierarchy can be.
For a complete example using derived test fixtures, see
-[sample5](http://code.google.com/p/googletest/source/browse/trunk/samples/sample5_unittest.cc).
+[sample5](../samples/sample5_unittest.cc).
## My compiler complains "void value not ignored as it ought to be." What does this mean? ##
@@ -476,7 +476,7 @@ explicitly telling the compiler which version to pick.
For example, suppose you have
-```
+``` cpp
bool IsPositive(int n) {
return n > 0;
}
@@ -487,13 +487,13 @@ bool IsPositive(double x) {
you will get a compiler error if you write
-```
+``` cpp
EXPECT_PRED1(IsPositive, 5);
```
However, this will work:
-```
+``` cpp
EXPECT_PRED1(*static_cast<bool (*)(int)>*(IsPositive), 5);
```
@@ -502,7 +502,7 @@ type of the function pointer for the `int`-version of `IsPositive()`.)
As another example, when you have a template function
-```
+``` cpp
template <typename T>
bool IsNegative(T x) {
return x < 0;
@@ -511,14 +511,14 @@ bool IsNegative(T x) {
you can use it in a predicate assertion like this:
-```
+``` cpp
ASSERT_PRED1(IsNegative*<int>*, -5);
```
Things are more interesting if your template has more than one parameters. The
following won't compile:
-```
+``` cpp
ASSERT_PRED2(*GreaterThan<int, int>*, 5, 0);
```
@@ -527,7 +527,7 @@ as the C++ pre-processor thinks you are giving `ASSERT_PRED2` 4 arguments,
which is one more than expected. The workaround is to wrap the predicate
function in parentheses:
-```
+``` cpp
ASSERT_PRED2(*(GreaterThan<int, int>)*, 5, 0);
```
@@ -537,13 +537,13 @@ ASSERT_PRED2(*(GreaterThan<int, int>)*, 5, 0);
Some people had been ignoring the return value of `RUN_ALL_TESTS()`. That is,
instead of
-```
+``` cpp
return RUN_ALL_TESTS();
```
they write
-```
+``` cpp
RUN_ALL_TESTS();
```
@@ -562,7 +562,7 @@ is used as the return value of `main()`.
Due to a peculiarity of C++, in order to support the syntax for streaming
messages to an `ASSERT_*`, e.g.
-```
+``` cpp
ASSERT_EQ(1, Foo()) << "blah blah" << foo;
```
@@ -591,7 +591,7 @@ the corresponding source code, or use `C-x `` to jump to the next failure.
You don't have to. Instead of
-```
+``` cpp
class FooTest : public BaseTest {};
TEST_F(FooTest, Abc) { ... }
@@ -604,7 +604,7 @@ TEST_F(BarTest, Def) { ... }
```
you can simply `typedef` the test fixtures:
-```
+``` cpp
typedef BaseTest FooTest;
TEST_F(FooTest, Abc) { ... }
@@ -646,7 +646,7 @@ members of the helper class public.
You have several other options that don't require using `FRIEND_TEST`:
* Write the tests as members of the fixture class:
-```
+``` cpp
class Foo {
friend class FooTest;
...
@@ -668,7 +668,7 @@ TEST_F(FooTest, Test2) {
}
```
* In the fixture class, write accessors for the tested class' private members, then use the accessors in your tests:
-```
+``` cpp
class Foo {
friend class FooTest;
...
@@ -689,7 +689,7 @@ TEST_F(FooTest, Test1) {
}
```
* If the methods are declared **protected**, you can change their access level in a test-only subclass:
-```
+``` cpp
class YourClass {
...
protected: // protected access for testability.
@@ -717,7 +717,7 @@ implementation details and ideally should be kept out of a .h. So often I make
them free functions instead.
Instead of:
-```
+``` cpp
// foo.h
class Foo {
...
@@ -733,7 +733,7 @@ EXPECT_TRUE(Foo::Func(12345));
```
You probably should better write:
-```
+``` cpp
// foo.h
class Foo {
...
@@ -754,7 +754,7 @@ EXPECT_TRUE(internal::Func(12345));
## I would like to run a test several times with different parameters. Do I need to write several similar copies of it? ##
-No. You can use a feature called [value-parameterized tests](AdvancedGuide#Value_Parameterized_Tests.md) which
+No. You can use a feature called [value-parameterized tests](AdvancedGuide.md#Value_Parameterized_Tests) which
lets you repeat your tests with different parameters, without defining it more than once.
## How do I test a file that defines main()? ##
@@ -774,7 +774,7 @@ Then `foo.cc` can be easily tested.
If you are adding tests to an existing file and don't want an intrusive change
like this, there is a hack: just include the entire `foo.cc` file in your unit
test. For example:
-```
+``` cpp
// File foo_unittest.cc
// The headers section
@@ -803,8 +803,9 @@ reference global and/or local variables, and can be:
* a complex expression, or
* a compound statement.
-> Some examples are shown here:
-```
+Some examples are shown here:
+
+``` cpp
// A death test can be a simple function call.
TEST(MyDeathTest, FunctionCall) {
ASSERT_DEATH(Xyz(5), "Xyz failed");
@@ -848,7 +849,7 @@ expression syntax
(http://en.wikipedia.org/wiki/Regular_expression#POSIX_Extended_Regular_Expressions).
On Windows, it uses a limited variant of regular expression
syntax. For more details, see the
-[regular expression syntax](AdvancedGuide#Regular_Expression_Syntax.md).
+[regular expression syntax](AdvancedGuide.md#Regular_Expression_Syntax).
## I have a fixture class Foo, but TEST\_F(Foo, Bar) gives me error "no matching function for call to Foo::Foo()". Why? ##
@@ -883,7 +884,7 @@ inefficient and makes the semantics unclean.
If we were to determine the order of tests based on test name instead of test
case name, then we would have a problem with the following situation:
-```
+``` cpp
TEST_F(FooTest, AbcDeathTest) { ... }
TEST_F(FooTest, Uvw) { ... }
@@ -902,7 +903,7 @@ You don't have to, but if you like, you may split up the test case into
`FooTest` and `FooDeathTest`, where the names make it clear that they are
related:
-```
+``` cpp
class FooTest : public ::testing::Test { ... };
TEST_F(FooTest, Abc) { ... }
@@ -955,13 +956,12 @@ using gtest-md.vcproj instead of gtest.vcproj.
## I put my tests in a library and Google Test doesn't run them. What's happening? ##
Have you read a
-[warning](http://code.google.com/p/googletest/wiki/Primer#Important_note_for_Visual_C++_users) on
+[warning](Primer.md#important-note-for-visual-c-users) on
the Google Test Primer page?
## I want to use Google Test with Visual Studio but don't know where to start. ##
Many people are in your position and one of the posted his solution to
-our mailing list. Here is his link:
-http://hassanjamilahmad.blogspot.com/2009/07/gtest-starters-help.html.
+our mailing list.
## I am seeing compile errors mentioning std::type\_traits when I try to use Google Test on Solaris. ##
Google Test uses parts of the standard C++ library that SunStudio does not support.
@@ -994,7 +994,7 @@ you can use the _horrible_ hack of sniffing your executable name
## Google Test defines a macro that clashes with one defined by another library. How do I deal with that? ##
In C++, macros don't obey namespaces. Therefore two libraries that
-both define a macro of the same name will clash if you #include both
+both define a macro of the same name will clash if you `#include` both
definitions. In case a Google Test macro clashes with another
library, you can force Google Test to rename its macro to avoid the
conflict.
@@ -1006,11 +1006,11 @@ Specifically, if both Google Test and some other code define macro
```
to the compiler flags to tell Google Test to change the macro's name
from `FOO` to `GTEST_FOO`. For example, with `-DGTEST_DONT_DEFINE_TEST=1`, you'll need to write
-```
+``` cpp
GTEST_TEST(SomeTest, DoesThis) { ... }
```
instead of
-```
+``` cpp
TEST(SomeTest, DoesThis) { ... }
```
in order to define a test.
@@ -1024,7 +1024,7 @@ Yes.
The rule is **all test methods in the same test case must use the same fixture class**. This means that the following is **allowed** because both tests use the same fixture class (`::testing::Test`).
-```
+``` cpp
namespace foo {
TEST(CoolTest, DoSomething) {
SUCCEED();
@@ -1040,7 +1040,7 @@ TEST(CoolTest, DoSomething) {
However, the following code is **not allowed** and will produce a runtime error from Google Test because the test methods are using different test fixture classes with the same test case name.
-```
+``` cpp
namespace foo {
class CoolTest : public ::testing::Test {}; // Fixture foo::CoolTest
TEST_F(CoolTest, DoSomething) {
@@ -1059,19 +1059,19 @@ TEST_F(CoolTest, DoSomething) {
## How do I build Google Testing Framework with Xcode 4? ##
If you try to build Google Test's Xcode project with Xcode 4.0 or later, you may encounter an error message that looks like
-"Missing SDK in target gtest\_framework: /Developer/SDKs/MacOSX10.4u.sdk". That means that Xcode does not support the SDK the project is targeting. See the Xcode section in the [README](http://code.google.com/p/googletest/source/browse/trunk/README) file on how to resolve this.
+"Missing SDK in target gtest\_framework: /Developer/SDKs/MacOSX10.4u.sdk". That means that Xcode does not support the SDK the project is targeting. See the Xcode section in the [README](../README.md) file on how to resolve this.
## My question is not covered in your FAQ! ##
If you cannot find the answer to your question in this FAQ, there are
some other resources you can use:
- 1. read other [wiki pages](http://code.google.com/p/googletest/w/list),
- 1. search the mailing list [archive](http://groups.google.com/group/googletestframework/topics),
+ 1. read other [wiki pages](../docs),
+ 1. search the mailing list [archive](https://groups.google.com/forum/#!forum/googletestframework),
1. ask it on [googletestframework@googlegroups.com](mailto:googletestframework@googlegroups.com) and someone will answer it (to prevent spam, we require you to join the [discussion group](http://groups.google.com/group/googletestframework) before you can post.).
Please note that creating an issue in the
-[issue tracker](http://code.google.com/p/googletest/issues/list) is _not_
+[issue tracker](https://github.com/google/googletest/issues) is _not_
a good way to get your answer, as it is monitored infrequently by a
very small number of people.
@@ -1079,9 +1079,9 @@ When asking a question, it's helpful to provide as much of the
following information as possible (people cannot help you if there's
not enough information in your question):
- * the version (or the revision number if you check out from SVN directly) of Google Test you use (Google Test is under active development, so it's possible that your problem has been solved in a later version),
+ * the version (or the commit hash if you check out from Git directly) of Google Test you use (Google Test is under active development, so it's possible that your problem has been solved in a later version),
* your operating system,
* the name and version of your compiler,
* the complete command line flags you give to your compiler,
* the complete compiler error messages (if the question is about compilation),
- * the _actual_ code (ideally, a minimal but complete program) that has the problem you encounter. \ No newline at end of file
+ * the _actual_ code (ideally, a minimal but complete program) that has the problem you encounter.
diff --git a/3rdparty/googletest/googletest/docs/Primer.md b/3rdparty/googletest/googletest/docs/Primer.md
index b57ed4aaee5..474c1d2ab63 100644
--- a/3rdparty/googletest/googletest/docs/Primer.md
+++ b/3rdparty/googletest/googletest/docs/Primer.md
@@ -127,18 +127,14 @@ This section describes assertions that compare two values.
| **Fatal assertion** | **Nonfatal assertion** | **Verifies** |
|:--------------------|:-----------------------|:-------------|
-|`ASSERT_EQ(`_expected_`, `_actual_`);`|`EXPECT_EQ(`_expected_`, `_actual_`);`| _expected_ `==` _actual_ |
-|`ASSERT_NE(`_val1_`, `_val2_`);` |`EXPECT_NE(`_val1_`, `_val2_`);` | _val1_ `!=` _val2_ |
-|`ASSERT_LT(`_val1_`, `_val2_`);` |`EXPECT_LT(`_val1_`, `_val2_`);` | _val1_ `<` _val2_ |
-|`ASSERT_LE(`_val1_`, `_val2_`);` |`EXPECT_LE(`_val1_`, `_val2_`);` | _val1_ `<=` _val2_ |
-|`ASSERT_GT(`_val1_`, `_val2_`);` |`EXPECT_GT(`_val1_`, `_val2_`);` | _val1_ `>` _val2_ |
-|`ASSERT_GE(`_val1_`, `_val2_`);` |`EXPECT_GE(`_val1_`, `_val2_`);` | _val1_ `>=` _val2_ |
-
-In the event of a failure, Google Test prints both _val1_ and _val2_
-. In `ASSERT_EQ*` and `EXPECT_EQ*` (and all other equality assertions
-we'll introduce later), you should put the expression you want to test
-in the position of _actual_, and put its expected value in _expected_,
-as Google Test's failure messages are optimized for this convention.
+|`ASSERT_EQ(`_val1_`, `_val2_`);`|`EXPECT_EQ(`_val1_`, `_val2_`);`| _val1_ `==` _val2_ |
+|`ASSERT_NE(`_val1_`, `_val2_`);`|`EXPECT_NE(`_val1_`, `_val2_`);`| _val1_ `!=` _val2_ |
+|`ASSERT_LT(`_val1_`, `_val2_`);`|`EXPECT_LT(`_val1_`, `_val2_`);`| _val1_ `<` _val2_ |
+|`ASSERT_LE(`_val1_`, `_val2_`);`|`EXPECT_LE(`_val1_`, `_val2_`);`| _val1_ `<=` _val2_ |
+|`ASSERT_GT(`_val1_`, `_val2_`);`|`EXPECT_GT(`_val1_`, `_val2_`);`| _val1_ `>` _val2_ |
+|`ASSERT_GE(`_val1_`, `_val2_`);`|`EXPECT_GE(`_val1_`, `_val2_`);`| _val1_ `>=` _val2_ |
+
+In the event of a failure, Google Test prints both _val1_ and _val2_.
Value arguments must be comparable by the assertion's comparison
operator or you'll get a compiler error. We used to require the
@@ -147,7 +143,7 @@ but it's no longer necessary since v1.6.0 (if `<<` is supported, it
will be called to print the arguments when the assertion fails;
otherwise Google Test will attempt to print them in the best way it
can. For more details and how to customize the printing of the
-arguments, see this Google Mock [recipe](http://code.google.com/p/googlemock/wiki/CookBook#Teaching_Google_Mock_How_to_Print_Your_Values).).
+arguments, see this Google Mock [recipe](../../googlemock/docs/CookBook.md#teaching-google-mock-how-to-print-your-values).).
These assertions can work with a user-defined type, but only if you define the
corresponding comparison operator (e.g. `==`, `<`, etc). If the corresponding
@@ -172,6 +168,10 @@ and `wstring`).
_Availability_: Linux, Windows, Mac.
+_Historical note_: Before February 2016 `*_EQ` had a convention of calling it as
+`ASSERT_EQ(expected, actual)`, so lots of existing code uses this order.
+Now `*_EQ` treats both parameters in the same way.
+
## String Comparison ##
The assertions in this group compare two **C strings**. If you want to compare
@@ -179,9 +179,9 @@ two `string` objects, use `EXPECT_EQ`, `EXPECT_NE`, and etc instead.
| **Fatal assertion** | **Nonfatal assertion** | **Verifies** |
|:--------------------|:-----------------------|:-------------|
-| `ASSERT_STREQ(`_expected\_str_`, `_actual\_str_`);` | `EXPECT_STREQ(`_expected\_str_`, `_actual\_str_`);` | the two C strings have the same content |
+| `ASSERT_STREQ(`_str1_`, `_str2_`);` | `EXPECT_STREQ(`_str1_`, `_str_2`);` | the two C strings have the same content |
| `ASSERT_STRNE(`_str1_`, `_str2_`);` | `EXPECT_STRNE(`_str1_`, `_str2_`);` | the two C strings have different content |
-| `ASSERT_STRCASEEQ(`_expected\_str_`, `_actual\_str_`);`| `EXPECT_STRCASEEQ(`_expected\_str_`, `_actual\_str_`);` | the two C strings have the same content, ignoring case |
+| `ASSERT_STRCASEEQ(`_str1_`, `_str2_`);`| `EXPECT_STRCASEEQ(`_str1_`, `_str2_`);` | the two C strings have the same content, ignoring case |
| `ASSERT_STRCASENE(`_str1_`, `_str2_`);`| `EXPECT_STRCASENE(`_str1_`, `_str2_`);` | the two C strings have different content, ignoring case |
Note that "CASE" in an assertion name means that case is ignored.
@@ -256,7 +256,7 @@ To create a fixture, just:
1. Derive a class from `::testing::Test` . Start its body with `protected:` or `public:` as we'll want to access fixture members from sub-classes.
1. Inside the class, declare any objects you plan to use.
1. If necessary, write a default constructor or `SetUp()` function to prepare the objects for each test. A common mistake is to spell `SetUp()` as `Setup()` with a small `u` - don't let that happen to you.
- 1. If necessary, write a destructor or `TearDown()` function to release any resources you allocated in `SetUp()` . To learn when you should use the constructor/destructor and when you should use `SetUp()/TearDown()`, read this [FAQ entry](http://code.google.com/p/googletest/wiki/FAQ#Should_I_use_the_constructor/destructor_of_the_test_fixture_or_t).
+ 1. If necessary, write a destructor or `TearDown()` function to release any resources you allocated in `SetUp()` . To learn when you should use the constructor/destructor and when you should use `SetUp()/TearDown()`, read this [FAQ entry](FAQ.md#should-i-use-the-constructordestructor-of-the-test-fixture-or-the-set-uptear-down-function).
1. If needed, define subroutines for your tests to share.
When using a fixture, use `TEST_F()` instead of `TEST()` as it allows you to
diff --git a/3rdparty/googletest/googletest/docs/V1_5_AdvancedGuide.md b/3rdparty/googletest/googletest/docs/V1_5_AdvancedGuide.md
index 2c3fc1a49a2..34e19c26fdf 100644
--- a/3rdparty/googletest/googletest/docs/V1_5_AdvancedGuide.md
+++ b/3rdparty/googletest/googletest/docs/V1_5_AdvancedGuide.md
@@ -123,7 +123,7 @@ c is 10<br>
**Notes:**
- 1. If you see a compiler error "no matching function to call" when using `ASSERT_PRED*` or `EXPECT_PRED*`, please see [this](http://code.google.com/p/googletest/wiki/V1_5_FAQ#The_compiler_complains_%22no_matching_function_to_call%22) for how to resolve it.
+ 1. If you see a compiler error "no matching function to call" when using `ASSERT_PRED*` or `EXPECT_PRED*`, please see [this](V1_5_FAQ.md#the-compiler-complains-about-undefined-references-to-some-static-const-member-variables-but-i-did-define-them-in-the-class-body-whats-wrong) for how to resolve it.
1. Currently we only provide predicate assertions of arity <= 5. If you need a higher-arity assertion, let us know.
_Availability_: Linux, Windows, Mac
@@ -263,7 +263,7 @@ int SmallestPrimeCommonDivisor(int m, int n) { ... }
int n) {
if (MutuallyPrime(m, n))
return ::testing::AssertionSuccess();
-
+
return ::testing::AssertionFailure()
<< m_expr << " and " << n_expr << " (" << m << " and " << n
<< ") are not mutually prime, " << "as they have a common divisor "
@@ -444,7 +444,7 @@ Since these precondition checks cause the processes to die, we call such tests
_death tests_. More generally, any test that checks that a program terminates
in an expected fashion is also a death test.
-If you want to test `EXPECT_*()/ASSERT_*()` failures in your test code, see [Catching Failures](#Catching_Failures.md).
+If you want to test `EXPECT_*()/ASSERT_*()` failures in your test code, see [Catching Failures](#catching-failures).
## How to Write a Death Test ##
@@ -729,7 +729,7 @@ For example,
11: EXPECT_EQ(1, Bar(n));
12: EXPECT_EQ(2, Bar(n + 1));
13: }
-14:
+14:
15: TEST(FooTest, Bar) {
16: {
17: SCOPED_TRACE("A"); // This trace point will be included in
@@ -1114,9 +1114,9 @@ which are all in the `testing` namespace:
| `Values(v1, v2, ..., vN)` | Yields values `{v1, v2, ..., vN}`. |
| `ValuesIn(container)` and `ValuesIn(begin, end)` | Yields values from a C-style array, an STL-style container, or an iterator range `[begin, end)`. |
| `Bool()` | Yields sequence `{false, true}`. |
-| `Combine(g1, g2, ..., gN)` | Yields all combinations (the Cartesian product for the math savvy) of the values generated by the `N` generators. This is only available if your system provides the `<tr1/tuple>` header. If you are sure your system does, and Google Test disagrees, you can override it by defining `GTEST_HAS_TR1_TUPLE=1`. See comments in [include/gtest/internal/gtest-port.h](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/internal/gtest-port.h) for more information. |
+| `Combine(g1, g2, ..., gN)` | Yields all combinations (the Cartesian product for the math savvy) of the values generated by the `N` generators. This is only available if your system provides the `<tr1/tuple>` header. If you are sure your system does, and Google Test disagrees, you can override it by defining `GTEST_HAS_TR1_TUPLE=1`. See comments in [include/gtest/internal/gtest-port.h](../include/gtest/internal/gtest-port.h) for more information. |
-For more details, see the comments at the definitions of these functions in the [source code](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest-param-test.h).
+For more details, see the comments at the definitions of these functions in the [source code](../include/gtest/gtest-param-test.h).
The following statement will instantiate tests from the `FooTest` test case
each with parameter values `"meeny"`, `"miny"`, and `"moe"`.
@@ -1141,7 +1141,7 @@ names:
* `InstantiationName/FooTest.HasBlahBlah/1` for `"miny"`
* `InstantiationName/FooTest.HasBlahBlah/2` for `"moe"`
-You can use these names in [--gtest\_filter](#Running_a_Subset_of_the_Tests.md).
+You can use these names in [--gtest\-filter](#running-a-subset-of-the-tests).
This statement will instantiate all tests from `FooTest` again, each
with parameter values `"cat"` and `"dog"`:
@@ -1164,8 +1164,8 @@ tests in the given test case, whether their definitions come before or
_after_ the `INSTANTIATE_TEST_CASE_P` statement.
You can see
-[these](http://code.google.com/p/googletest/source/browse/trunk/samples/sample7_unittest.cc)
-[files](http://code.google.com/p/googletest/source/browse/trunk/samples/sample8_unittest.cc) for more examples.
+[these](../samples/sample7_unittest.cc)
+[files](../samples/sample8_unittest.cc) for more examples.
_Availability_: Linux, Windows (requires MSVC 8.0 or above), Mac; since version 1.2.0.
@@ -1365,7 +1365,7 @@ two cases to consider:
Both static functions and definitions/declarations in an unnamed namespace are
only visible within the same translation unit. To test them, you can `#include`
-the entire `.cc` file being tested in your `*_test.cc` file. (#including `.cc`
+the entire `.cc` file being tested in your `*_test.cc` file. (`#include`ing `.cc`
files is not a good way to reuse code - you should not do this in production
code!)
@@ -1467,7 +1467,7 @@ Test doesn't use exceptions, so how do we test that a piece of code
generates an expected failure?
`<gtest/gtest-spi.h>` contains some constructs to do this. After
-#including this header, you can use
+`#include`ing this header, you can use
| `EXPECT_FATAL_FAILURE(`_statement, substring_`);` |
|:--------------------------------------------------|
@@ -1561,8 +1561,8 @@ _Availability:_ Linux, Windows, Mac; since v1.4.0.
## Defining Event Listeners ##
To define a event listener, you subclass either
-[testing::TestEventListener](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#855)
-or [testing::EmptyTestEventListener](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#905).
+[testing::TestEventListener](../include/gtest/gtest.h#L855)
+or [testing::EmptyTestEventListener](../include/gtest/gtest.h#L905).
The former is an (abstract) interface, where <i>each pure virtual method<br>
can be overridden to handle a test event</i> (For example, when a test
starts, the `OnTestStart()` method will be called.). The latter provides
@@ -1571,10 +1571,10 @@ subclass only needs to override the methods it cares about.
When an event is fired, its context is passed to the handler function
as an argument. The following argument types are used:
- * [UnitTest](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#1007) reflects the state of the entire test program,
- * [TestCase](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#689) has information about a test case, which can contain one or more tests,
- * [TestInfo](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#599) contains the state of a test, and
- * [TestPartResult](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest-test-part.h#42) represents the result of a test assertion.
+ * [UnitTest](../include/gtest/gtest.h#L1007) reflects the state of the entire test program,
+ * [TestCase](../include/gtest/gtest.h#L689) has information about a test case, which can contain one or more tests,
+ * [TestInfo](../include/gtest/gtest.h#L599) contains the state of a test, and
+ * [TestPartResult](../include/gtest/gtest-test-part.h#L42) represents the result of a test assertion.
An event handler function can examine the argument it receives to find
out interesting information about the event and the test program's
@@ -1610,7 +1610,7 @@ state. Here's an example:
To use the event listener you have defined, add an instance of it to
the Google Test event listener list (represented by class
-[TestEventListeners](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#929)
+[TestEventListeners](../include/gtest/gtest.h#L929)
- note the "s" at the end of the name) in your
`main()` function, before calling `RUN_ALL_TESTS()`:
```
@@ -1638,7 +1638,7 @@ event listener list and delete it. You can do so by adding one line:
Now, sit back and enjoy a completely different output from your
tests. For more details, you can read this
-[sample](http://code.google.com/p/googletest/source/browse/trunk/samples/sample9_unittest.cc).
+[sample](../samples/sample9_unittest.cc).
You may append more than one listener to the list. When an `On*Start()`
or `OnTestPartResult()` event is fired, the listeners will receive it in
@@ -1663,7 +1663,7 @@ failures. This ensures that failures generated by the latter are
attributed to the right test by the former.
We have a sample of failure-raising listener
-[here](http://code.google.com/p/googletest/source/browse/trunk/samples/sample10_unittest.cc).
+[here](../samples/sample10_unittest.cc).
# Running Test Programs: Advanced Options #
@@ -1783,12 +1783,12 @@ _Availability:_ Linux, Windows, Mac.
### Temporarily Enabling Disabled Tests ###
-To include [disabled tests](#Temporarily_Disabling_Tests.md) in test
+To include [disabled tests](#temporarily-disabling-tests) in test
execution, just invoke the test program with the
`--gtest_also_run_disabled_tests` flag or set the
`GTEST_ALSO_RUN_DISABLED_TESTS` environment variable to a value other
than `0`. You can combine this with the
-[--gtest\_filter](#Running_a_Subset_of_the_Tests.md) flag to further select
+[--gtest\_filter](#running-a-subset-of-the-tests) flag to further select
which disabled tests to run.
_Availability:_ Linux, Windows, Mac; since version 1.3.0.
@@ -2086,11 +2086,11 @@ and you should see an `OUTPUT_DIR` directory being created with files
`gtest/gtest.h` and `gtest/gtest-all.cc` in it. These files contain
everything you need to use Google Test. Just copy them to anywhere
you want and you are ready to write tests. You can use the
-[scrpts/test/Makefile](http://code.google.com/p/googletest/source/browse/trunk/scripts/test/Makefile)
+[scrpts/test/Makefile](../scripts/test/Makefile)
file as an example on how to compile your tests against them.
# Where to Go from Here #
Congratulations! You've now learned more advanced Google Test tools and are
ready to tackle more complex testing tasks. If you want to dive even deeper, you
-can read the [FAQ](V1_5_FAQ.md). \ No newline at end of file
+can read the [FAQ](V1_5_FAQ.md).
diff --git a/3rdparty/googletest/googletest/docs/V1_5_FAQ.md b/3rdparty/googletest/googletest/docs/V1_5_FAQ.md
index 014dba2016c..e870aff0007 100644
--- a/3rdparty/googletest/googletest/docs/V1_5_FAQ.md
+++ b/3rdparty/googletest/googletest/docs/V1_5_FAQ.md
@@ -104,7 +104,7 @@ we don't have a convention on the order of the two arguments for
twice in the implementation, making it even harder to understand and
maintain. We believe the benefit doesn't justify the cost.
-Finally, with the growth of Google Mock's [matcher](http://code.google.com/p/googlemock/wiki/CookBook#Using_Matchers_in_Google_Test_Assertions) library, we are
+Finally, with the growth of Google Mock's [matcher](../../CookBook.md#using-matchers-in-google-test-assertions) library, we are
encouraging people to use the unified `EXPECT_THAT(value, matcher)`
syntax more often in tests. One significant advantage of the matcher
approach is that matchers can be easily combined to form new matchers,
@@ -651,7 +651,7 @@ EXPECT_TRUE(internal::Func(12345));
## I would like to run a test several times with different parameters. Do I need to write several similar copies of it? ##
-No. You can use a feature called [value-parameterized tests](V1_5_AdvancedGuide#Value_Parameterized_Tests.md) which
+No. You can use a feature called [value-parameterized tests](V1_5_AdvancedGuide.md#Value_Parameterized_Tests) which
lets you repeat your tests with different parameters, without defining it more than once.
## How do I test a file that defines main()? ##
@@ -701,6 +701,7 @@ reference global and/or local variables, and can be:
* a compound statement.
> Some examples are shown here:
+
```
// A death test can be a simple function call.
TEST(MyDeathTest, FunctionCall) {
@@ -744,7 +745,7 @@ On POSIX systems, Google Test uses the POSIX Extended regular
expression syntax
(http://en.wikipedia.org/wiki/Regular_expression#POSIX_Extended_Regular_Expressions). On
Windows, it uses a limited variant of regular expression syntax. For
-more details, see the [regular expression syntax](V1_5_AdvancedGuide#Regular_Expression_Syntax.md).
+more details, see the [regular expression syntax](V1_5_AdvancedGuide.md#Regular_Expression_Syntax).
## I have a fixture class Foo, but TEST\_F(Foo, Bar) gives me error "no matching function for call to Foo::Foo()". Why? ##
@@ -851,7 +852,7 @@ using gtest-md.vcproj instead of gtest.vcproj.
## I put my tests in a library and Google Test doesn't run them. What's happening? ##
Have you read a
-[warning](V1_5_Primer#Important_note_for_Visual_C++_users.md) on
+[warning](V1_5_Primer.md#important-note-for-visual-c-users) on
the Google Test Primer page?
## I want to use Google Test with Visual Studio but don't know where to start. ##
@@ -882,4 +883,4 @@ not enough information in your question):
* the name and version of your compiler,
* the complete command line flags you give to your compiler,
* the complete compiler error messages (if the question is about compilation),
- * the _actual_ code (ideally, a minimal but complete program) that has the problem you encounter.ïœ \ No newline at end of file
+ * the _actual_ code (ideally, a minimal but complete program) that has the problem you encounter.ïœ
diff --git a/3rdparty/googletest/googletest/docs/V1_5_Primer.md b/3rdparty/googletest/googletest/docs/V1_5_Primer.md
index 5c42e0b8345..6960d2ce4c3 100644
--- a/3rdparty/googletest/googletest/docs/V1_5_Primer.md
+++ b/3rdparty/googletest/googletest/docs/V1_5_Primer.md
@@ -251,7 +251,7 @@ To create a fixture, just:
1. Derive a class from `::testing::Test` . Start its body with `protected:` or `public:` as we'll want to access fixture members from sub-classes.
1. Inside the class, declare any objects you plan to use.
1. If necessary, write a default constructor or `SetUp()` function to prepare the objects for each test. A common mistake is to spell `SetUp()` as `Setup()` with a small `u` - don't let that happen to you.
- 1. If necessary, write a destructor or `TearDown()` function to release any resources you allocated in `SetUp()` . To learn when you should use the constructor/destructor and when you should use `SetUp()/TearDown()`, read this [FAQ entry](http://code.google.com/p/googletest/wiki/V1_5_FAQ#Should_I_use_the_constructor/destructor_of_the_test_fixture_or_t).
+ 1. If necessary, write a destructor or `TearDown()` function to release any resources you allocated in `SetUp()` . To learn when you should use the constructor/destructor and when you should use `SetUp()/TearDown()`, read this [FAQ entry](V1_5_FAQ.md#should-i-use-the-constructordestructor-of-the-test-fixture-or-the-set-uptear-down-function).
1. If needed, define subroutines for your tests to share.
When using a fixture, use `TEST_F()` instead of `TEST()` as it allows you to
@@ -494,4 +494,4 @@ is currently _unsafe_ to use Google Test assertions from two threads
concurrently on other systems (e.g. Windows). In most tests this is
not an issue as usually the assertions are done in the main thread. If
you want to help, you can volunteer to implement the necessary
-synchronization primitives in `gtest-port.h` for your platform. \ No newline at end of file
+synchronization primitives in `gtest-port.h` for your platform.
diff --git a/3rdparty/googletest/googletest/docs/V1_6_AdvancedGuide.md b/3rdparty/googletest/googletest/docs/V1_6_AdvancedGuide.md
index 44e0d6f5358..78864b1667c 100644
--- a/3rdparty/googletest/googletest/docs/V1_6_AdvancedGuide.md
+++ b/3rdparty/googletest/googletest/docs/V1_6_AdvancedGuide.md
@@ -123,7 +123,7 @@ c is 10<br>
**Notes:**
- 1. If you see a compiler error "no matching function to call" when using `ASSERT_PRED*` or `EXPECT_PRED*`, please see [this](http://code.google.com/p/googletest/wiki/V1_6_FAQ#The_compiler_complains_%22no_matching_function_to_call%22) for how to resolve it.
+ 1. If you see a compiler error "no matching function to call" when using `ASSERT_PRED*` or `EXPECT_PRED*`, please see [this](v1_6_FAQ.md#ithe-compiler-complains-about-undefined-references-to-some-static-const-member-variables-but-i-did-define-them-in-the-class-body-whats-wrong) for how to resolve it.
1. Currently we only provide predicate assertions of arity <= 5. If you need a higher-arity assertion, let us know.
_Availability_: Linux, Windows, Mac
@@ -263,7 +263,7 @@ int SmallestPrimeCommonDivisor(int m, int n) { ... }
int n) {
if (MutuallyPrime(m, n))
return ::testing::AssertionSuccess();
-
+
return ::testing::AssertionFailure()
<< m_expr << " and " << n_expr << " (" << m << " and " << n
<< ") are not mutually prime, " << "as they have a common divisor "
@@ -515,9 +515,9 @@ _death tests_. More generally, any test that checks that a program terminates
Note that if a piece of code throws an exception, we don't consider it "death"
for the purpose of death tests, as the caller of the code could catch the exception
and avoid the crash. If you want to verify exceptions thrown by your code,
-see [Exception Assertions](#Exception_Assertions.md).
+see [Exception Assertions](#exception-assertions).
-If you want to test `EXPECT_*()/ASSERT_*()` failures in your test code, see [Catching Failures](#Catching_Failures.md).
+If you want to test `EXPECT_*()/ASSERT_*()` failures in your test code, see [Catching Failures](#catching-failures).
## How to Write a Death Test ##
@@ -801,7 +801,7 @@ For example,
11: EXPECT_EQ(1, Bar(n));
12: EXPECT_EQ(2, Bar(n + 1));
13: }
-14:
+14:
15: TEST(FooTest, Bar) {
16: {
17: SCOPED_TRACE("A"); // This trace point will be included in
@@ -1196,9 +1196,9 @@ which are all in the `testing` namespace:
| `Values(v1, v2, ..., vN)` | Yields values `{v1, v2, ..., vN}`. |
| `ValuesIn(container)` and `ValuesIn(begin, end)` | Yields values from a C-style array, an STL-style container, or an iterator range `[begin, end)`. `container`, `begin`, and `end` can be expressions whose values are determined at run time. |
| `Bool()` | Yields sequence `{false, true}`. |
-| `Combine(g1, g2, ..., gN)` | Yields all combinations (the Cartesian product for the math savvy) of the values generated by the `N` generators. This is only available if your system provides the `<tr1/tuple>` header. If you are sure your system does, and Google Test disagrees, you can override it by defining `GTEST_HAS_TR1_TUPLE=1`. See comments in [include/gtest/internal/gtest-port.h](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/internal/gtest-port.h) for more information. |
+| `Combine(g1, g2, ..., gN)` | Yields all combinations (the Cartesian product for the math savvy) of the values generated by the `N` generators. This is only available if your system provides the `<tr1/tuple>` header. If you are sure your system does, and Google Test disagrees, you can override it by defining `GTEST_HAS_TR1_TUPLE=1`. See comments in [include/gtest/internal/gtest-port.h](../include/gtest/internal/gtest-port.h) for more information. |
-For more details, see the comments at the definitions of these functions in the [source code](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest-param-test.h).
+For more details, see the comments at the definitions of these functions in the [source code](../include/gtest/gtest-param-test.h).
The following statement will instantiate tests from the `FooTest` test case
each with parameter values `"meeny"`, `"miny"`, and `"moe"`.
@@ -1223,7 +1223,7 @@ names:
* `InstantiationName/FooTest.HasBlahBlah/1` for `"miny"`
* `InstantiationName/FooTest.HasBlahBlah/2` for `"moe"`
-You can use these names in [--gtest\_filter](#Running_a_Subset_of_the_Tests.md).
+You can use these names in [--gtest\-filter](#running-a-subset-of-the-tests).
This statement will instantiate all tests from `FooTest` again, each
with parameter values `"cat"` and `"dog"`:
@@ -1246,8 +1246,8 @@ tests in the given test case, whether their definitions come before or
_after_ the `INSTANTIATE_TEST_CASE_P` statement.
You can see
-[these](http://code.google.com/p/googletest/source/browse/trunk/samples/sample7_unittest.cc)
-[files](http://code.google.com/p/googletest/source/browse/trunk/samples/sample8_unittest.cc) for more examples.
+[these](../samples/sample7_unittest.cc)
+[files](../samples/sample8_unittest.cc) for more examples.
_Availability_: Linux, Windows (requires MSVC 8.0 or above), Mac; since version 1.2.0.
@@ -1447,7 +1447,7 @@ two cases to consider:
Both static functions and definitions/declarations in an unnamed namespace are
only visible within the same translation unit. To test them, you can `#include`
-the entire `.cc` file being tested in your `*_test.cc` file. (#including `.cc`
+the entire `.cc` file being tested in your `*_test.cc` file. (`#include`ing `.cc`
files is not a good way to reuse code - you should not do this in production
code!)
@@ -1549,7 +1549,7 @@ Test doesn't use exceptions, so how do we test that a piece of code
generates an expected failure?
`"gtest/gtest-spi.h"` contains some constructs to do this. After
-#including this header, you can use
+`#include`ing this header, you can use
| `EXPECT_FATAL_FAILURE(`_statement, substring_`);` |
|:--------------------------------------------------|
@@ -1643,8 +1643,8 @@ _Availability:_ Linux, Windows, Mac; since v1.4.0.
## Defining Event Listeners ##
To define a event listener, you subclass either
-[testing::TestEventListener](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#855)
-or [testing::EmptyTestEventListener](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#905).
+[testing::TestEventListener](../include/gtest/gtest.h#L855)
+or [testing::EmptyTestEventListener](../include/gtest/gtest.h#L905).
The former is an (abstract) interface, where <i>each pure virtual method<br>
can be overridden to handle a test event</i> (For example, when a test
starts, the `OnTestStart()` method will be called.). The latter provides
@@ -1653,10 +1653,10 @@ subclass only needs to override the methods it cares about.
When an event is fired, its context is passed to the handler function
as an argument. The following argument types are used:
- * [UnitTest](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#1007) reflects the state of the entire test program,
- * [TestCase](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#689) has information about a test case, which can contain one or more tests,
- * [TestInfo](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#599) contains the state of a test, and
- * [TestPartResult](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest-test-part.h#42) represents the result of a test assertion.
+ * [UnitTest](../include/gtest/gtest.h#L1007) reflects the state of the entire test program,
+ * [TestCase](../include/gtest/gtest.h#L689) has information about a test case, which can contain one or more tests,
+ * [TestInfo](../include/gtest/gtest.h#L599) contains the state of a test, and
+ * [TestPartResult](../include/gtest/gtest-test-part.h#L42) represents the result of a test assertion.
An event handler function can examine the argument it receives to find
out interesting information about the event and the test program's
@@ -1692,7 +1692,7 @@ state. Here's an example:
To use the event listener you have defined, add an instance of it to
the Google Test event listener list (represented by class
-[TestEventListeners](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#929)
+[TestEventListeners](../include/gtest/gtest.h#L929)
- note the "s" at the end of the name) in your
`main()` function, before calling `RUN_ALL_TESTS()`:
```
@@ -1720,7 +1720,7 @@ event listener list and delete it. You can do so by adding one line:
Now, sit back and enjoy a completely different output from your
tests. For more details, you can read this
-[sample](http://code.google.com/p/googletest/source/browse/trunk/samples/sample9_unittest.cc).
+[sample](../samples/sample9_unittest.cc).
You may append more than one listener to the list. When an `On*Start()`
or `OnTestPartResult()` event is fired, the listeners will receive it in
@@ -1745,7 +1745,7 @@ failures. This ensures that failures generated by the latter are
attributed to the right test by the former.
We have a sample of failure-raising listener
-[here](http://code.google.com/p/googletest/source/browse/trunk/samples/sample10_unittest.cc).
+[here](../samples/sample10_unittest.cc).
# Running Test Programs: Advanced Options #
@@ -1865,12 +1865,12 @@ _Availability:_ Linux, Windows, Mac.
### Temporarily Enabling Disabled Tests ###
-To include [disabled tests](#Temporarily_Disabling_Tests.md) in test
+To include [disabled tests](#temporarily-disabling-tests) in test
execution, just invoke the test program with the
`--gtest_also_run_disabled_tests` flag or set the
`GTEST_ALSO_RUN_DISABLED_TESTS` environment variable to a value other
than `0`. You can combine this with the
-[--gtest\_filter](#Running_a_Subset_of_the_Tests.md) flag to further select
+[--gtest\-filter](#running-a-subset-of-the_tests) flag to further select
which disabled tests to run.
_Availability:_ Linux, Windows, Mac; since version 1.3.0.
@@ -2168,11 +2168,11 @@ and you should see an `OUTPUT_DIR` directory being created with files
`gtest/gtest.h` and `gtest/gtest-all.cc` in it. These files contain
everything you need to use Google Test. Just copy them to anywhere
you want and you are ready to write tests. You can use the
-[scripts/test/Makefile](http://code.google.com/p/googletest/source/browse/trunk/scripts/test/Makefile)
+[scripts/test/Makefile](../scripts/test/Makefile)
file as an example on how to compile your tests against them.
# Where to Go from Here #
Congratulations! You've now learned more advanced Google Test tools and are
ready to tackle more complex testing tasks. If you want to dive even deeper, you
-can read the [Frequently-Asked Questions](V1_6_FAQ.md). \ No newline at end of file
+can read the [Frequently-Asked Questions](V1_6_FAQ.md).
diff --git a/3rdparty/googletest/googletest/docs/V1_6_FAQ.md b/3rdparty/googletest/googletest/docs/V1_6_FAQ.md
index 61677a6814f..2b7f7840772 100644
--- a/3rdparty/googletest/googletest/docs/V1_6_FAQ.md
+++ b/3rdparty/googletest/googletest/docs/V1_6_FAQ.md
@@ -28,11 +28,11 @@ list can help you decide whether it is for you too.
* `SCOPED_TRACE` helps you understand the context of an assertion failure when it comes from inside a sub-routine or loop.
* You can decide which tests to run using name patterns. This saves time when you want to quickly reproduce a test failure.
* Google Test can generate XML test result reports that can be parsed by popular continuous build system like Hudson.
- * Simple things are easy in Google Test, while hard things are possible: in addition to advanced features like [global test environments](http://code.google.com/p/googletest/wiki/V1_6_AdvancedGuide#Global_Set-Up_and_Tear-Down) and tests parameterized by [values](http://code.google.com/p/googletest/wiki/V1_6_AdvancedGuide#Value_Parameterized_Tests) or [types](http://code.google.com/p/googletest/wiki/V1_6_AdvancedGuide#Typed_Tests), Google Test supports various ways for the user to extend the framework -- if Google Test doesn't do something out of the box, chances are that a user can implement the feature using Google Test's public API, without changing Google Test itself. In particular, you can:
- * expand your testing vocabulary by defining [custom predicates](http://code.google.com/p/googletest/wiki/V1_6_AdvancedGuide#Predicate_Assertions_for_Better_Error_Messages),
- * teach Google Test how to [print your types](http://code.google.com/p/googletest/wiki/V1_6_AdvancedGuide#Teaching_Google_Test_How_to_Print_Your_Values),
- * define your own testing macros or utilities and verify them using Google Test's [Service Provider Interface](http://code.google.com/p/googletest/wiki/V1_6_AdvancedGuide#Catching_Failures), and
- * reflect on the test cases or change the test output format by intercepting the [test events](http://code.google.com/p/googletest/wiki/V1_6_AdvancedGuide#Extending_Google_Test_by_Handling_Test_Events).
+ * Simple things are easy in Google Test, while hard things are possible: in addition to advanced features like [global test environments](V1_6_AdvancedGuide.md#Global_Set-Up_and_Tear-Down) and tests parameterized by [values](V1_6_AdvancedGuide.md#value-parameterized-tests) or [types](V1_6_AdvancedGuide.md#typed-tests), Google Test supports various ways for the user to extend the framework -- if Google Test doesn't do something out of the box, chances are that a user can implement the feature using Google Test's public API, without changing Google Test itself. In particular, you can:
+ * expand your testing vocabulary by defining [custom predicates](V1_6_AdvancedGuide.md#predicate-assertions-for-better-error-messages),
+ * teach Google Test how to [print your types](V1_6_AdvancedGuide.md#teaching-google-test-how-to-print-your-values),
+ * define your own testing macros or utilities and verify them using Google Test's [Service Provider Interface](V1_6_AdvancedGuide.md#catching-failures), and
+ * reflect on the test cases or change the test output format by intercepting the [test events](V1_6_AdvancedGuide.md#extending-google-test-by-handling-test-events).
## I'm getting warnings when compiling Google Test. Would you fix them? ##
@@ -201,7 +201,7 @@ we don't have a convention on the order of the two arguments for
twice in the implementation, making it even harder to understand and
maintain. We believe the benefit doesn't justify the cost.
-Finally, with the growth of Google Mock's [matcher](http://code.google.com/p/googlemock/wiki/CookBook#Using_Matchers_in_Google_Test_Assertions) library, we are
+Finally, with the growth of Google Mock's [matcher](../../CookBook.md#using-matchers-in-google-test-assertions) library, we are
encouraging people to use the unified `EXPECT_THAT(value, matcher)`
syntax more often in tests. One significant advantage of the matcher
approach is that matchers can be easily combined to form new matchers,
@@ -409,7 +409,7 @@ If necessary, you can continue to derive test fixtures from a derived fixture.
Google Test has no limit on how deep the hierarchy can be.
For a complete example using derived test fixtures, see
-[sample5](http://code.google.com/p/googletest/source/browse/trunk/samples/sample5_unittest.cc).
+[sample5](../samples/sample5_unittest.cc).
## My compiler complains "void value not ignored as it ought to be." What does this mean? ##
@@ -748,7 +748,7 @@ EXPECT_TRUE(internal::Func(12345));
## I would like to run a test several times with different parameters. Do I need to write several similar copies of it? ##
-No. You can use a feature called [value-parameterized tests](V1_6_AdvancedGuide#Value_Parameterized_Tests.md) which
+No. You can use a feature called [value-parameterized tests](V1_6_AdvancedGuide.md#Value_Parameterized_Tests) which
lets you repeat your tests with different parameters, without defining it more than once.
## How do I test a file that defines main()? ##
@@ -798,6 +798,7 @@ reference global and/or local variables, and can be:
* a compound statement.
> Some examples are shown here:
+
```
// A death test can be a simple function call.
TEST(MyDeathTest, FunctionCall) {
@@ -842,7 +843,7 @@ expression syntax
(http://en.wikipedia.org/wiki/Regular_expression#POSIX_Extended_Regular_Expressions).
On Windows, it uses a limited variant of regular expression
syntax. For more details, see the
-[regular expression syntax](V1_6_AdvancedGuide#Regular_Expression_Syntax.md).
+[regular expression syntax](V1_6_AdvancedGuide.md#Regular_Expression_Syntax).
## I have a fixture class Foo, but TEST\_F(Foo, Bar) gives me error "no matching function for call to Foo::Foo()". Why? ##
@@ -949,7 +950,7 @@ using gtest-md.vcproj instead of gtest.vcproj.
## I put my tests in a library and Google Test doesn't run them. What's happening? ##
Have you read a
-[warning](http://code.google.com/p/googletest/wiki/V1_6_Primer#Important_note_for_Visual_C++_users) on
+[warning](V1_6_Primer.md#important-note-for-visual-c-users) on
the Google Test Primer page?
## I want to use Google Test with Visual Studio but don't know where to start. ##
@@ -988,7 +989,7 @@ you can use the _horrible_ hack of sniffing your executable name
## Google Test defines a macro that clashes with one defined by another library. How do I deal with that? ##
In C++, macros don't obey namespaces. Therefore two libraries that
-both define a macro of the same name will clash if you #include both
+both define a macro of the same name will clash if you `#include` both
definitions. In case a Google Test macro clashes with another
library, you can force Google Test to rename its macro to avoid the
conflict.
@@ -1034,4 +1035,4 @@ not enough information in your question):
* the name and version of your compiler,
* the complete command line flags you give to your compiler,
* the complete compiler error messages (if the question is about compilation),
- * the _actual_ code (ideally, a minimal but complete program) that has the problem you encounter. \ No newline at end of file
+ * the _actual_ code (ideally, a minimal but complete program) that has the problem you encounter.
diff --git a/3rdparty/googletest/googletest/docs/V1_6_Primer.md b/3rdparty/googletest/googletest/docs/V1_6_Primer.md
index 2c51a2101a6..8d840ef45b9 100644
--- a/3rdparty/googletest/googletest/docs/V1_6_Primer.md
+++ b/3rdparty/googletest/googletest/docs/V1_6_Primer.md
@@ -146,7 +146,7 @@ but it's no longer necessary since v1.6.0 (if `<<` is supported, it
will be called to print the arguments when the assertion fails;
otherwise Google Test will attempt to print them in the best way it
can. For more details and how to customize the printing of the
-arguments, see this Google Mock [recipe](http://code.google.com/p/googlemock/wiki/CookBook#Teaching_Google_Mock_How_to_Print_Your_Values).).
+arguments, see this Google Mock [recipe](../../googlemock/docs/CookBook.md#teaching-google-mock-how-to-print-your-values).).
These assertions can work with a user-defined type, but only if you define the
corresponding comparison operator (e.g. `==`, `<`, etc). If the corresponding
@@ -255,7 +255,7 @@ To create a fixture, just:
1. Derive a class from `::testing::Test` . Start its body with `protected:` or `public:` as we'll want to access fixture members from sub-classes.
1. Inside the class, declare any objects you plan to use.
1. If necessary, write a default constructor or `SetUp()` function to prepare the objects for each test. A common mistake is to spell `SetUp()` as `Setup()` with a small `u` - don't let that happen to you.
- 1. If necessary, write a destructor or `TearDown()` function to release any resources you allocated in `SetUp()` . To learn when you should use the constructor/destructor and when you should use `SetUp()/TearDown()`, read this [FAQ entry](http://code.google.com/p/googletest/wiki/V1_6_FAQ#Should_I_use_the_constructor/destructor_of_the_test_fixture_or_t).
+ 1. If necessary, write a destructor or `TearDown()` function to release any resources you allocated in `SetUp()` . To learn when you should use the constructor/destructor and when you should use `SetUp()/TearDown()`, read this [FAQ entry](V1_6_FAQ.md#should-i-use-the-constructordestructor-of-the-test-fixture-or-the-set-uptear-down-function).
1. If needed, define subroutines for your tests to share.
When using a fixture, use `TEST_F()` instead of `TEST()` as it allows you to
@@ -498,4 +498,4 @@ is currently _unsafe_ to use Google Test assertions from two threads
concurrently on other systems (e.g. Windows). In most tests this is
not an issue as usually the assertions are done in the main thread. If
you want to help, you can volunteer to implement the necessary
-synchronization primitives in `gtest-port.h` for your platform. \ No newline at end of file
+synchronization primitives in `gtest-port.h` for your platform.
diff --git a/3rdparty/googletest/googletest/docs/V1_6_PumpManual.md b/3rdparty/googletest/googletest/docs/V1_6_PumpManual.md
index cf6cf56b041..8184f153ca2 100644
--- a/3rdparty/googletest/googletest/docs/V1_6_PumpManual.md
+++ b/3rdparty/googletest/googletest/docs/V1_6_PumpManual.md
@@ -161,7 +161,7 @@ exp ::= simple_expression_in_Python_syntax
## Code ##
-You can find the source code of Pump in [scripts/pump.py](http://code.google.com/p/googletest/source/browse/trunk/scripts/pump.py). It is still
+You can find the source code of Pump in [scripts/pump.py](../scripts/pump.py). It is still
very unpolished and lacks automated tests, although it has been
successfully used many times. If you find a chance to use it in your
project, please let us know what you think! We also welcome help on
@@ -174,4 +174,4 @@ You can find real-world applications of Pump in [Google Test](http://www.google.
## Tips ##
* If a meta variable is followed by a letter or digit, you can separate them using `[[]]`, which inserts an empty string. For example `Foo$j[[]]Helper` generate `Foo1Helper` when `j` is 1.
- * To avoid extra-long Pump source lines, you can break a line anywhere you want by inserting `[[]]` followed by a new line. Since any new-line character next to `[[` or `]]` is ignored, the generated code won't contain this new line. \ No newline at end of file
+ * To avoid extra-long Pump source lines, you can break a line anywhere you want by inserting `[[]]` followed by a new line. Since any new-line character next to `[[` or `]]` is ignored, the generated code won't contain this new line.
diff --git a/3rdparty/googletest/googletest/docs/V1_6_Samples.md b/3rdparty/googletest/googletest/docs/V1_6_Samples.md
index 81225694a00..f21d2005673 100644
--- a/3rdparty/googletest/googletest/docs/V1_6_Samples.md
+++ b/3rdparty/googletest/googletest/docs/V1_6_Samples.md
@@ -1,14 +1,14 @@
If you're like us, you'd like to look at some Google Test sample code. The
-[samples folder](http://code.google.com/p/googletest/source/browse/#svn/trunk/samples) has a number of well-commented samples showing how to use a
+[samples folder](../samples) has a number of well-commented samples showing how to use a
variety of Google Test features.
- * [Sample #1](http://code.google.com/p/googletest/source/browse/trunk/samples/sample1_unittest.cc) shows the basic steps of using Google Test to test C++ functions.
- * [Sample #2](http://code.google.com/p/googletest/source/browse/trunk/samples/sample2_unittest.cc) shows a more complex unit test for a class with multiple member functions.
- * [Sample #3](http://code.google.com/p/googletest/source/browse/trunk/samples/sample3_unittest.cc) uses a test fixture.
- * [Sample #4](http://code.google.com/p/googletest/source/browse/trunk/samples/sample4_unittest.cc) is another basic example of using Google Test.
- * [Sample #5](http://code.google.com/p/googletest/source/browse/trunk/samples/sample5_unittest.cc) teaches how to reuse a test fixture in multiple test cases by deriving sub-fixtures from it.
- * [Sample #6](http://code.google.com/p/googletest/source/browse/trunk/samples/sample6_unittest.cc) demonstrates type-parameterized tests.
- * [Sample #7](http://code.google.com/p/googletest/source/browse/trunk/samples/sample7_unittest.cc) teaches the basics of value-parameterized tests.
- * [Sample #8](http://code.google.com/p/googletest/source/browse/trunk/samples/sample8_unittest.cc) shows using `Combine()` in value-parameterized tests.
- * [Sample #9](http://code.google.com/p/googletest/source/browse/trunk/samples/sample9_unittest.cc) shows use of the listener API to modify Google Test's console output and the use of its reflection API to inspect test results.
- * [Sample #10](http://code.google.com/p/googletest/source/browse/trunk/samples/sample10_unittest.cc) shows use of the listener API to implement a primitive memory leak checker. \ No newline at end of file
+ * [Sample #1](../samples/sample1_unittest.cc) shows the basic steps of using Google Test to test C++ functions.
+ * [Sample #2](../samples/sample2_unittest.cc) shows a more complex unit test for a class with multiple member functions.
+ * [Sample #3](../samples/sample3_unittest.cc) uses a test fixture.
+ * [Sample #4](../samples/sample4_unittest.cc) is another basic example of using Google Test.
+ * [Sample #5](../samples/sample5_unittest.cc) teaches how to reuse a test fixture in multiple test cases by deriving sub-fixtures from it.
+ * [Sample #6](../samples/sample6_unittest.cc) demonstrates type-parameterized tests.
+ * [Sample #7](../samples/sample7_unittest.cc) teaches the basics of value-parameterized tests.
+ * [Sample #8](../samples/sample8_unittest.cc) shows using `Combine()` in value-parameterized tests.
+ * [Sample #9](../samples/sample9_unittest.cc) shows use of the listener API to modify Google Test's console output and the use of its reflection API to inspect test results.
+ * [Sample #10](../samples/sample10_unittest.cc) shows use of the listener API to implement a primitive memory leak checker.
diff --git a/3rdparty/googletest/googletest/docs/V1_7_AdvancedGuide.md b/3rdparty/googletest/googletest/docs/V1_7_AdvancedGuide.md
index a3d646241f1..dd4af8f366a 100644
--- a/3rdparty/googletest/googletest/docs/V1_7_AdvancedGuide.md
+++ b/3rdparty/googletest/googletest/docs/V1_7_AdvancedGuide.md
@@ -123,7 +123,7 @@ c is 10<br>
**Notes:**
- 1. If you see a compiler error "no matching function to call" when using `ASSERT_PRED*` or `EXPECT_PRED*`, please see [this](http://code.google.com/p/googletest/wiki/V1_7_FAQ#The_compiler_complains_%22no_matching_function_to_call%22) for how to resolve it.
+ 1. If you see a compiler error "no matching function to call" when using `ASSERT_PRED*` or `EXPECT_PRED*`, please see [this](V1_7_FAQ.md#the-compiler-complains-about-undefined-references-to-some-static-const-member-variables-but-i-did-define-them-in-the-class-body-whats-wrong) for how to resolve it.
1. Currently we only provide predicate assertions of arity <= 5. If you need a higher-arity assertion, let us know.
_Availability_: Linux, Windows, Mac
@@ -263,7 +263,7 @@ int SmallestPrimeCommonDivisor(int m, int n) { ... }
int n) {
if (MutuallyPrime(m, n))
return ::testing::AssertionSuccess();
-
+
return ::testing::AssertionFailure()
<< m_expr << " and " << n_expr << " (" << m << " and " << n
<< ") are not mutually prime, " << "as they have a common divisor "
@@ -515,9 +515,9 @@ _death tests_. More generally, any test that checks that a program terminates
Note that if a piece of code throws an exception, we don't consider it "death"
for the purpose of death tests, as the caller of the code could catch the exception
and avoid the crash. If you want to verify exceptions thrown by your code,
-see [Exception Assertions](#Exception_Assertions.md).
+see [Exception Assertions](#exception-assertions).
-If you want to test `EXPECT_*()/ASSERT_*()` failures in your test code, see [Catching Failures](#Catching_Failures.md).
+If you want to test `EXPECT_*()/ASSERT_*()` failures in your test code, see [Catching Failures](#catching-failures).
## How to Write a Death Test ##
@@ -802,7 +802,7 @@ For example,
11: EXPECT_EQ(1, Bar(n));
12: EXPECT_EQ(2, Bar(n + 1));
13: }
-14:
+14:
15: TEST(FooTest, Bar) {
16: {
17: SCOPED_TRACE("A"); // This trace point will be included in
@@ -1197,9 +1197,9 @@ which are all in the `testing` namespace:
| `Values(v1, v2, ..., vN)` | Yields values `{v1, v2, ..., vN}`. |
| `ValuesIn(container)` and `ValuesIn(begin, end)` | Yields values from a C-style array, an STL-style container, or an iterator range `[begin, end)`. `container`, `begin`, and `end` can be expressions whose values are determined at run time. |
| `Bool()` | Yields sequence `{false, true}`. |
-| `Combine(g1, g2, ..., gN)` | Yields all combinations (the Cartesian product for the math savvy) of the values generated by the `N` generators. This is only available if your system provides the `<tr1/tuple>` header. If you are sure your system does, and Google Test disagrees, you can override it by defining `GTEST_HAS_TR1_TUPLE=1`. See comments in [include/gtest/internal/gtest-port.h](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/internal/gtest-port.h) for more information. |
+| `Combine(g1, g2, ..., gN)` | Yields all combinations (the Cartesian product for the math savvy) of the values generated by the `N` generators. This is only available if your system provides the `<tr1/tuple>` header. If you are sure your system does, and Google Test disagrees, you can override it by defining `GTEST_HAS_TR1_TUPLE=1`. See comments in [include/gtest/internal/gtest-port.h](../include/gtest/internal/gtest-port.h) for more information. |
-For more details, see the comments at the definitions of these functions in the [source code](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest-param-test.h).
+For more details, see the comments at the definitions of these functions in the [source code](../include/gtest/gtest-param-test.h).
The following statement will instantiate tests from the `FooTest` test case
each with parameter values `"meeny"`, `"miny"`, and `"moe"`.
@@ -1224,7 +1224,7 @@ names:
* `InstantiationName/FooTest.HasBlahBlah/1` for `"miny"`
* `InstantiationName/FooTest.HasBlahBlah/2` for `"moe"`
-You can use these names in [--gtest\_filter](#Running_a_Subset_of_the_Tests.md).
+You can use these names in [--gtest\_filter](#running-a-subset-of-the-tests).
This statement will instantiate all tests from `FooTest` again, each
with parameter values `"cat"` and `"dog"`:
@@ -1247,8 +1247,8 @@ tests in the given test case, whether their definitions come before or
_after_ the `INSTANTIATE_TEST_CASE_P` statement.
You can see
-[these](http://code.google.com/p/googletest/source/browse/trunk/samples/sample7_unittest.cc)
-[files](http://code.google.com/p/googletest/source/browse/trunk/samples/sample8_unittest.cc) for more examples.
+[these](../samples/sample7_unittest.cc)
+[files](../samples/sample8_unittest.cc) for more examples.
_Availability_: Linux, Windows (requires MSVC 8.0 or above), Mac; since version 1.2.0.
@@ -1448,7 +1448,7 @@ two cases to consider:
Both static functions and definitions/declarations in an unnamed namespace are
only visible within the same translation unit. To test them, you can `#include`
-the entire `.cc` file being tested in your `*_test.cc` file. (#including `.cc`
+the entire `.cc` file being tested in your `*_test.cc` file. (`#include`ing `.cc`
files is not a good way to reuse code - you should not do this in production
code!)
@@ -1550,7 +1550,7 @@ Test doesn't use exceptions, so how do we test that a piece of code
generates an expected failure?
`"gtest/gtest-spi.h"` contains some constructs to do this. After
-#including this header, you can use
+`#include`ing this header, you can use
| `EXPECT_FATAL_FAILURE(`_statement, substring_`);` |
|:--------------------------------------------------|
@@ -1644,8 +1644,8 @@ _Availability:_ Linux, Windows, Mac; since v1.4.0.
## Defining Event Listeners ##
To define a event listener, you subclass either
-[testing::TestEventListener](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#855)
-or [testing::EmptyTestEventListener](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#905).
+[testing::TestEventListener](../include/gtest/gtest.h#L855)
+or [testing::EmptyTestEventListener](../include/gtest/gtest.h#L905).
The former is an (abstract) interface, where <i>each pure virtual method<br>
can be overridden to handle a test event</i> (For example, when a test
starts, the `OnTestStart()` method will be called.). The latter provides
@@ -1654,10 +1654,10 @@ subclass only needs to override the methods it cares about.
When an event is fired, its context is passed to the handler function
as an argument. The following argument types are used:
- * [UnitTest](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#1007) reflects the state of the entire test program,
- * [TestCase](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#689) has information about a test case, which can contain one or more tests,
- * [TestInfo](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#599) contains the state of a test, and
- * [TestPartResult](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest-test-part.h#42) represents the result of a test assertion.
+ * [UnitTest](../include/gtest/gtest.h#L1007) reflects the state of the entire test program,
+ * [TestCase](../include/gtest/gtest.h#L689) has information about a test case, which can contain one or more tests,
+ * [TestInfo](../include/gtest/gtest.h#L599) contains the state of a test, and
+ * [TestPartResult](../include/gtest/gtest-test-part.h#L42) represents the result of a test assertion.
An event handler function can examine the argument it receives to find
out interesting information about the event and the test program's
@@ -1693,7 +1693,7 @@ state. Here's an example:
To use the event listener you have defined, add an instance of it to
the Google Test event listener list (represented by class
-[TestEventListeners](http://code.google.com/p/googletest/source/browse/trunk/include/gtest/gtest.h#929)
+[TestEventListeners](../include/gtest/gtest.h#L929)
- note the "s" at the end of the name) in your
`main()` function, before calling `RUN_ALL_TESTS()`:
```
@@ -1721,7 +1721,7 @@ event listener list and delete it. You can do so by adding one line:
Now, sit back and enjoy a completely different output from your
tests. For more details, you can read this
-[sample](http://code.google.com/p/googletest/source/browse/trunk/samples/sample9_unittest.cc).
+[sample](../samples/sample9_unittest.cc).
You may append more than one listener to the list. When an `On*Start()`
or `OnTestPartResult()` event is fired, the listeners will receive it in
@@ -1746,7 +1746,7 @@ failures. This ensures that failures generated by the latter are
attributed to the right test by the former.
We have a sample of failure-raising listener
-[here](http://code.google.com/p/googletest/source/browse/trunk/samples/sample10_unittest.cc).
+[here](../samples/sample10_unittest.cc).
# Running Test Programs: Advanced Options #
@@ -1866,12 +1866,12 @@ _Availability:_ Linux, Windows, Mac.
### Temporarily Enabling Disabled Tests ###
-To include [disabled tests](#Temporarily_Disabling_Tests.md) in test
+To include [disabled tests](#temporarily-disabling-tests) in test
execution, just invoke the test program with the
`--gtest_also_run_disabled_tests` flag or set the
`GTEST_ALSO_RUN_DISABLED_TESTS` environment variable to a value other
than `0`. You can combine this with the
-[--gtest\_filter](#Running_a_Subset_of_the_Tests.md) flag to further select
+[--gtest\_filter](#running-a-subset-of-the-tests) flag to further select
which disabled tests to run.
_Availability:_ Linux, Windows, Mac; since version 1.3.0.
@@ -2171,11 +2171,11 @@ and you should see an `OUTPUT_DIR` directory being created with files
`gtest/gtest.h` and `gtest/gtest-all.cc` in it. These files contain
everything you need to use Google Test. Just copy them to anywhere
you want and you are ready to write tests. You can use the
-[scripts/test/Makefile](http://code.google.com/p/googletest/source/browse/trunk/scripts/test/Makefile)
+[scripts/test/Makefile](../scripts/test/Makefile)
file as an example on how to compile your tests against them.
# Where to Go from Here #
Congratulations! You've now learned more advanced Google Test tools and are
ready to tackle more complex testing tasks. If you want to dive even deeper, you
-can read the [Frequently-Asked Questions](V1_7_FAQ.md). \ No newline at end of file
+can read the [Frequently-Asked Questions](V1_7_FAQ.md).
diff --git a/3rdparty/googletest/googletest/docs/V1_7_FAQ.md b/3rdparty/googletest/googletest/docs/V1_7_FAQ.md
index b5d547ce4eb..3dd914dcf16 100644
--- a/3rdparty/googletest/googletest/docs/V1_7_FAQ.md
+++ b/3rdparty/googletest/googletest/docs/V1_7_FAQ.md
@@ -28,11 +28,11 @@ list can help you decide whether it is for you too.
* `SCOPED_TRACE` helps you understand the context of an assertion failure when it comes from inside a sub-routine or loop.
* You can decide which tests to run using name patterns. This saves time when you want to quickly reproduce a test failure.
* Google Test can generate XML test result reports that can be parsed by popular continuous build system like Hudson.
- * Simple things are easy in Google Test, while hard things are possible: in addition to advanced features like [global test environments](http://code.google.com/p/googletest/wiki/V1_7_AdvancedGuide#Global_Set-Up_and_Tear-Down) and tests parameterized by [values](http://code.google.com/p/googletest/wiki/V1_7_AdvancedGuide#Value_Parameterized_Tests) or [types](http://code.google.com/p/googletest/wiki/V1_7_AdvancedGuide#Typed_Tests), Google Test supports various ways for the user to extend the framework -- if Google Test doesn't do something out of the box, chances are that a user can implement the feature using Google Test's public API, without changing Google Test itself. In particular, you can:
- * expand your testing vocabulary by defining [custom predicates](http://code.google.com/p/googletest/wiki/V1_7_AdvancedGuide#Predicate_Assertions_for_Better_Error_Messages),
- * teach Google Test how to [print your types](http://code.google.com/p/googletest/wiki/V1_7_AdvancedGuide#Teaching_Google_Test_How_to_Print_Your_Values),
- * define your own testing macros or utilities and verify them using Google Test's [Service Provider Interface](http://code.google.com/p/googletest/wiki/V1_7_AdvancedGuide#Catching_Failures), and
- * reflect on the test cases or change the test output format by intercepting the [test events](http://code.google.com/p/googletest/wiki/V1_7_AdvancedGuide#Extending_Google_Test_by_Handling_Test_Events).
+ * Simple things are easy in Google Test, while hard things are possible: in addition to advanced features like [global test environments](V1_7_AdvancedGuide.md#global-set-up-and-tear-down) and tests parameterized by [values](V1_7_AdvancedGuide.md#value-parameterized-tests) or [types](V1_7_AdvancedGuide.md#typed-tests), Google Test supports various ways for the user to extend the framework -- if Google Test doesn't do something out of the box, chances are that a user can implement the feature using Google Test's public API, without changing Google Test itself. In particular, you can:
+ * expand your testing vocabulary by defining [custom predicates](V1_7_AdvancedGuide.md#predicate-assertions-for-better-error-messages),
+ * teach Google Test how to [print your types](V1_7_AdvancedGuide.md#teaching-google-test-how-to-print-your-values),
+ * define your own testing macros or utilities and verify them using Google Test's [Service Provider Interface](V1_7_AdvancedGuide.md#catching-failures), and
+ * reflect on the test cases or change the test output format by intercepting the [test events](V1_7_AdvancedGuide.md#extending-google-test-by-handling-test-events).
## I'm getting warnings when compiling Google Test. Would you fix them? ##
@@ -201,7 +201,7 @@ we don't have a convention on the order of the two arguments for
twice in the implementation, making it even harder to understand and
maintain. We believe the benefit doesn't justify the cost.
-Finally, with the growth of Google Mock's [matcher](http://code.google.com/p/googlemock/wiki/CookBook#Using_Matchers_in_Google_Test_Assertions) library, we are
+Finally, with the growth of Google Mock's [matcher](../../CookBook.md#using-matchers-in-google-test-assertions) library, we are
encouraging people to use the unified `EXPECT_THAT(value, matcher)`
syntax more often in tests. One significant advantage of the matcher
approach is that matchers can be easily combined to form new matchers,
@@ -409,7 +409,7 @@ If necessary, you can continue to derive test fixtures from a derived fixture.
Google Test has no limit on how deep the hierarchy can be.
For a complete example using derived test fixtures, see
-[sample5](http://code.google.com/p/googletest/source/browse/trunk/samples/sample5_unittest.cc).
+[sample5](../samples/sample5_unittest.cc).
## My compiler complains "void value not ignored as it ought to be." What does this mean? ##
@@ -748,7 +748,7 @@ EXPECT_TRUE(internal::Func(12345));
## I would like to run a test several times with different parameters. Do I need to write several similar copies of it? ##
-No. You can use a feature called [value-parameterized tests](V1_7_AdvancedGuide#Value_Parameterized_Tests.md) which
+No. You can use a feature called [value-parameterized tests](V1_7_AdvancedGuide.md#Value_Parameterized_Tests) which
lets you repeat your tests with different parameters, without defining it more than once.
## How do I test a file that defines main()? ##
@@ -798,6 +798,7 @@ reference global and/or local variables, and can be:
* a compound statement.
> Some examples are shown here:
+
```
// A death test can be a simple function call.
TEST(MyDeathTest, FunctionCall) {
@@ -842,7 +843,7 @@ expression syntax
(http://en.wikipedia.org/wiki/Regular_expression#POSIX_Extended_Regular_Expressions).
On Windows, it uses a limited variant of regular expression
syntax. For more details, see the
-[regular expression syntax](V1_7_AdvancedGuide#Regular_Expression_Syntax.md).
+[regular expression syntax](V1_7_AdvancedGuide.md#Regular_Expression_Syntax).
## I have a fixture class Foo, but TEST\_F(Foo, Bar) gives me error "no matching function for call to Foo::Foo()". Why? ##
@@ -949,7 +950,7 @@ using gtest-md.vcproj instead of gtest.vcproj.
## I put my tests in a library and Google Test doesn't run them. What's happening? ##
Have you read a
-[warning](http://code.google.com/p/googletest/wiki/V1_7_Primer#Important_note_for_Visual_C++_users) on
+[warning](V1_7_Primer.md#important-note-for-visual-c-users) on
the Google Test Primer page?
## I want to use Google Test with Visual Studio but don't know where to start. ##
@@ -988,7 +989,7 @@ you can use the _horrible_ hack of sniffing your executable name
## Google Test defines a macro that clashes with one defined by another library. How do I deal with that? ##
In C++, macros don't obey namespaces. Therefore two libraries that
-both define a macro of the same name will clash if you #include both
+both define a macro of the same name will clash if you `#include` both
definitions. In case a Google Test macro clashes with another
library, you can force Google Test to rename its macro to avoid the
conflict.
@@ -1053,7 +1054,7 @@ TEST_F(CoolTest, DoSomething) {
## How do I build Google Testing Framework with Xcode 4? ##
If you try to build Google Test's Xcode project with Xcode 4.0 or later, you may encounter an error message that looks like
-"Missing SDK in target gtest\_framework: /Developer/SDKs/MacOSX10.4u.sdk". That means that Xcode does not support the SDK the project is targeting. See the Xcode section in the [README](http://code.google.com/p/googletest/source/browse/trunk/README) file on how to resolve this.
+"Missing SDK in target gtest\_framework: /Developer/SDKs/MacOSX10.4u.sdk". That means that Xcode does not support the SDK the project is targeting. See the Xcode section in the [README](../../README.MD) file on how to resolve this.
## My question is not covered in your FAQ! ##
@@ -1078,4 +1079,4 @@ not enough information in your question):
* the name and version of your compiler,
* the complete command line flags you give to your compiler,
* the complete compiler error messages (if the question is about compilation),
- * the _actual_ code (ideally, a minimal but complete program) that has the problem you encounter. \ No newline at end of file
+ * the _actual_ code (ideally, a minimal but complete program) that has the problem you encounter.
diff --git a/3rdparty/googletest/googletest/docs/V1_7_Primer.md b/3rdparty/googletest/googletest/docs/V1_7_Primer.md
index 1de5080a97d..b1827c73558 100644
--- a/3rdparty/googletest/googletest/docs/V1_7_Primer.md
+++ b/3rdparty/googletest/googletest/docs/V1_7_Primer.md
@@ -146,7 +146,7 @@ but it's no longer necessary since v1.6.0 (if `<<` is supported, it
will be called to print the arguments when the assertion fails;
otherwise Google Test will attempt to print them in the best way it
can. For more details and how to customize the printing of the
-arguments, see this Google Mock [recipe](http://code.google.com/p/googlemock/wiki/CookBook#Teaching_Google_Mock_How_to_Print_Your_Values).).
+arguments, see this Google Mock [recipe](../../googlemock/docs/CookBook.md#teaching-google-mock-how-to-print-your-values).).
These assertions can work with a user-defined type, but only if you define the
corresponding comparison operator (e.g. `==`, `<`, etc). If the corresponding
@@ -255,7 +255,7 @@ To create a fixture, just:
1. Derive a class from `::testing::Test` . Start its body with `protected:` or `public:` as we'll want to access fixture members from sub-classes.
1. Inside the class, declare any objects you plan to use.
1. If necessary, write a default constructor or `SetUp()` function to prepare the objects for each test. A common mistake is to spell `SetUp()` as `Setup()` with a small `u` - don't let that happen to you.
- 1. If necessary, write a destructor or `TearDown()` function to release any resources you allocated in `SetUp()` . To learn when you should use the constructor/destructor and when you should use `SetUp()/TearDown()`, read this [FAQ entry](http://code.google.com/p/googletest/wiki/V1_7_FAQ#Should_I_use_the_constructor/destructor_of_the_test_fixture_or_t).
+ 1. If necessary, write a destructor or `TearDown()` function to release any resources you allocated in `SetUp()` . To learn when you should use the constructor/destructor and when you should use `SetUp()/TearDown()`, read this [FAQ entry](V1_7_FAQ.md#should-i-use-the-constructordestructor-of-the-test-fixture-or-the-set-uptear-down-function).
1. If needed, define subroutines for your tests to share.
When using a fixture, use `TEST_F()` instead of `TEST()` as it allows you to
@@ -498,4 +498,4 @@ is currently _unsafe_ to use Google Test assertions from two threads
concurrently on other systems (e.g. Windows). In most tests this is
not an issue as usually the assertions are done in the main thread. If
you want to help, you can volunteer to implement the necessary
-synchronization primitives in `gtest-port.h` for your platform. \ No newline at end of file
+synchronization primitives in `gtest-port.h` for your platform.
diff --git a/3rdparty/googletest/googletest/docs/V1_7_PumpManual.md b/3rdparty/googletest/googletest/docs/V1_7_PumpManual.md
index cf6cf56b041..8184f153ca2 100644
--- a/3rdparty/googletest/googletest/docs/V1_7_PumpManual.md
+++ b/3rdparty/googletest/googletest/docs/V1_7_PumpManual.md
@@ -161,7 +161,7 @@ exp ::= simple_expression_in_Python_syntax
## Code ##
-You can find the source code of Pump in [scripts/pump.py](http://code.google.com/p/googletest/source/browse/trunk/scripts/pump.py). It is still
+You can find the source code of Pump in [scripts/pump.py](../scripts/pump.py). It is still
very unpolished and lacks automated tests, although it has been
successfully used many times. If you find a chance to use it in your
project, please let us know what you think! We also welcome help on
@@ -174,4 +174,4 @@ You can find real-world applications of Pump in [Google Test](http://www.google.
## Tips ##
* If a meta variable is followed by a letter or digit, you can separate them using `[[]]`, which inserts an empty string. For example `Foo$j[[]]Helper` generate `Foo1Helper` when `j` is 1.
- * To avoid extra-long Pump source lines, you can break a line anywhere you want by inserting `[[]]` followed by a new line. Since any new-line character next to `[[` or `]]` is ignored, the generated code won't contain this new line. \ No newline at end of file
+ * To avoid extra-long Pump source lines, you can break a line anywhere you want by inserting `[[]]` followed by a new line. Since any new-line character next to `[[` or `]]` is ignored, the generated code won't contain this new line.
diff --git a/3rdparty/googletest/googletest/docs/V1_7_Samples.md b/3rdparty/googletest/googletest/docs/V1_7_Samples.md
index 81225694a00..f21d2005673 100644
--- a/3rdparty/googletest/googletest/docs/V1_7_Samples.md
+++ b/3rdparty/googletest/googletest/docs/V1_7_Samples.md
@@ -1,14 +1,14 @@
If you're like us, you'd like to look at some Google Test sample code. The
-[samples folder](http://code.google.com/p/googletest/source/browse/#svn/trunk/samples) has a number of well-commented samples showing how to use a
+[samples folder](../samples) has a number of well-commented samples showing how to use a
variety of Google Test features.
- * [Sample #1](http://code.google.com/p/googletest/source/browse/trunk/samples/sample1_unittest.cc) shows the basic steps of using Google Test to test C++ functions.
- * [Sample #2](http://code.google.com/p/googletest/source/browse/trunk/samples/sample2_unittest.cc) shows a more complex unit test for a class with multiple member functions.
- * [Sample #3](http://code.google.com/p/googletest/source/browse/trunk/samples/sample3_unittest.cc) uses a test fixture.
- * [Sample #4](http://code.google.com/p/googletest/source/browse/trunk/samples/sample4_unittest.cc) is another basic example of using Google Test.
- * [Sample #5](http://code.google.com/p/googletest/source/browse/trunk/samples/sample5_unittest.cc) teaches how to reuse a test fixture in multiple test cases by deriving sub-fixtures from it.
- * [Sample #6](http://code.google.com/p/googletest/source/browse/trunk/samples/sample6_unittest.cc) demonstrates type-parameterized tests.
- * [Sample #7](http://code.google.com/p/googletest/source/browse/trunk/samples/sample7_unittest.cc) teaches the basics of value-parameterized tests.
- * [Sample #8](http://code.google.com/p/googletest/source/browse/trunk/samples/sample8_unittest.cc) shows using `Combine()` in value-parameterized tests.
- * [Sample #9](http://code.google.com/p/googletest/source/browse/trunk/samples/sample9_unittest.cc) shows use of the listener API to modify Google Test's console output and the use of its reflection API to inspect test results.
- * [Sample #10](http://code.google.com/p/googletest/source/browse/trunk/samples/sample10_unittest.cc) shows use of the listener API to implement a primitive memory leak checker. \ No newline at end of file
+ * [Sample #1](../samples/sample1_unittest.cc) shows the basic steps of using Google Test to test C++ functions.
+ * [Sample #2](../samples/sample2_unittest.cc) shows a more complex unit test for a class with multiple member functions.
+ * [Sample #3](../samples/sample3_unittest.cc) uses a test fixture.
+ * [Sample #4](../samples/sample4_unittest.cc) is another basic example of using Google Test.
+ * [Sample #5](../samples/sample5_unittest.cc) teaches how to reuse a test fixture in multiple test cases by deriving sub-fixtures from it.
+ * [Sample #6](../samples/sample6_unittest.cc) demonstrates type-parameterized tests.
+ * [Sample #7](../samples/sample7_unittest.cc) teaches the basics of value-parameterized tests.
+ * [Sample #8](../samples/sample8_unittest.cc) shows using `Combine()` in value-parameterized tests.
+ * [Sample #9](../samples/sample9_unittest.cc) shows use of the listener API to modify Google Test's console output and the use of its reflection API to inspect test results.
+ * [Sample #10](../samples/sample10_unittest.cc) shows use of the listener API to implement a primitive memory leak checker.
diff --git a/3rdparty/googletest/googletest/include/gtest/gtest.h b/3rdparty/googletest/googletest/include/gtest/gtest.h
index 7b59c492563..9efba750829 100644
--- a/3rdparty/googletest/googletest/include/gtest/gtest.h
+++ b/3rdparty/googletest/googletest/include/gtest/gtest.h
@@ -1372,39 +1372,38 @@ namespace internal {
// frame size of CmpHelperEQ. This helps reduce the overhead of some sanitizers
// when calling EXPECT_* in a tight loop.
template <typename T1, typename T2>
-AssertionResult CmpHelperEQFailure(const char* expected_expression,
- const char* actual_expression,
- const T1& expected, const T2& actual) {
- return EqFailure(expected_expression,
- actual_expression,
- FormatForComparisonFailureMessage(expected, actual),
- FormatForComparisonFailureMessage(actual, expected),
+AssertionResult CmpHelperEQFailure(const char* lhs_expression,
+ const char* rhs_expression,
+ const T1& lhs, const T2& rhs) {
+ return EqFailure(lhs_expression,
+ rhs_expression,
+ FormatForComparisonFailureMessage(lhs, rhs),
+ FormatForComparisonFailureMessage(rhs, lhs),
false);
}
// The helper function for {ASSERT|EXPECT}_EQ.
template <typename T1, typename T2>
-AssertionResult CmpHelperEQ(const char* expected_expression,
- const char* actual_expression,
- const T1& expected,
- const T2& actual) {
+AssertionResult CmpHelperEQ(const char* lhs_expression,
+ const char* rhs_expression,
+ const T1& lhs,
+ const T2& rhs) {
GTEST_DISABLE_MSC_WARNINGS_PUSH_(4389 /* signed/unsigned mismatch */)
- if (expected == actual) {
+ if (lhs == rhs) {
return AssertionSuccess();
}
GTEST_DISABLE_MSC_WARNINGS_POP_()
- return CmpHelperEQFailure(expected_expression, actual_expression, expected,
- actual);
+ return CmpHelperEQFailure(lhs_expression, rhs_expression, lhs, rhs);
}
// With this overloaded version, we allow anonymous enums to be used
// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums
// can be implicitly cast to BiggestInt.
-GTEST_API_ AssertionResult CmpHelperEQ(const char* expected_expression,
- const char* actual_expression,
- BiggestInt expected,
- BiggestInt actual);
+GTEST_API_ AssertionResult CmpHelperEQ(const char* lhs_expression,
+ const char* rhs_expression,
+ BiggestInt lhs,
+ BiggestInt rhs);
// The helper class for {ASSERT|EXPECT}_EQ. The template argument
// lhs_is_null_literal is true iff the first argument to ASSERT_EQ()
@@ -1415,12 +1414,11 @@ class EqHelper {
public:
// This templatized version is for the general case.
template <typename T1, typename T2>
- static AssertionResult Compare(const char* expected_expression,
- const char* actual_expression,
- const T1& expected,
- const T2& actual) {
- return CmpHelperEQ(expected_expression, actual_expression, expected,
- actual);
+ static AssertionResult Compare(const char* lhs_expression,
+ const char* rhs_expression,
+ const T1& lhs,
+ const T2& rhs) {
+ return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
}
// With this overloaded version, we allow anonymous enums to be used
@@ -1429,12 +1427,11 @@ class EqHelper {
//
// Even though its body looks the same as the above version, we
// cannot merge the two, as it will make anonymous enums unhappy.
- static AssertionResult Compare(const char* expected_expression,
- const char* actual_expression,
- BiggestInt expected,
- BiggestInt actual) {
- return CmpHelperEQ(expected_expression, actual_expression, expected,
- actual);
+ static AssertionResult Compare(const char* lhs_expression,
+ const char* rhs_expression,
+ BiggestInt lhs,
+ BiggestInt rhs) {
+ return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
}
};
@@ -1449,37 +1446,36 @@ class EqHelper<true> {
// EXPECT_EQ(false, a_bool).
template <typename T1, typename T2>
static AssertionResult Compare(
- const char* expected_expression,
- const char* actual_expression,
- const T1& expected,
- const T2& actual,
+ const char* lhs_expression,
+ const char* rhs_expression,
+ const T1& lhs,
+ const T2& rhs,
// The following line prevents this overload from being considered if T2
// is not a pointer type. We need this because ASSERT_EQ(NULL, my_ptr)
// expands to Compare("", "", NULL, my_ptr), which requires a conversion
// to match the Secret* in the other overload, which would otherwise make
// this template match better.
typename EnableIf<!is_pointer<T2>::value>::type* = 0) {
- return CmpHelperEQ(expected_expression, actual_expression, expected,
- actual);
+ return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
}
// This version will be picked when the second argument to ASSERT_EQ() is a
// pointer, e.g. ASSERT_EQ(NULL, a_pointer).
template <typename T>
static AssertionResult Compare(
- const char* expected_expression,
- const char* actual_expression,
+ const char* lhs_expression,
+ const char* rhs_expression,
// We used to have a second template parameter instead of Secret*. That
// template parameter would deduce to 'long', making this a better match
// than the first overload even without the first overload's EnableIf.
// Unfortunately, gcc with -Wconversion-null warns when "passing NULL to
// non-pointer argument" (even a deduced integral argument), so the old
// implementation caused warnings in user code.
- Secret* /* expected (NULL) */,
- T* actual) {
- // We already know that 'expected' is a null pointer.
- return CmpHelperEQ(expected_expression, actual_expression,
- static_cast<T*>(NULL), actual);
+ Secret* /* lhs (NULL) */,
+ T* rhs) {
+ // We already know that 'lhs' is a null pointer.
+ return CmpHelperEQ(lhs_expression, rhs_expression,
+ static_cast<T*>(NULL), rhs);
}
};
@@ -1538,18 +1534,18 @@ GTEST_IMPL_CMP_HELPER_(GT, >);
// The helper function for {ASSERT|EXPECT}_STREQ.
//
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression,
- const char* actual_expression,
- const char* expected,
- const char* actual);
+GTEST_API_ AssertionResult CmpHelperSTREQ(const char* s1_expression,
+ const char* s2_expression,
+ const char* s1,
+ const char* s2);
// The helper function for {ASSERT|EXPECT}_STRCASEEQ.
//
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression,
- const char* actual_expression,
- const char* expected,
- const char* actual);
+GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* s1_expression,
+ const char* s2_expression,
+ const char* s1,
+ const char* s2);
// The helper function for {ASSERT|EXPECT}_STRNE.
//
@@ -1571,10 +1567,10 @@ GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression,
// Helper function for *_STREQ on wide strings.
//
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression,
- const char* actual_expression,
- const wchar_t* expected,
- const wchar_t* actual);
+GTEST_API_ AssertionResult CmpHelperSTREQ(const char* s1_expression,
+ const char* s2_expression,
+ const wchar_t* s1,
+ const wchar_t* s2);
// Helper function for *_STRNE on wide strings.
//
@@ -1632,28 +1628,28 @@ namespace internal {
//
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
template <typename RawType>
-AssertionResult CmpHelperFloatingPointEQ(const char* expected_expression,
- const char* actual_expression,
- RawType expected,
- RawType actual) {
- const FloatingPoint<RawType> lhs(expected), rhs(actual);
+AssertionResult CmpHelperFloatingPointEQ(const char* lhs_expression,
+ const char* rhs_expression,
+ RawType lhs_value,
+ RawType rhs_value) {
+ const FloatingPoint<RawType> lhs(lhs_value), rhs(rhs_value);
if (lhs.AlmostEquals(rhs)) {
return AssertionSuccess();
}
- ::std::stringstream expected_ss;
- expected_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
- << expected;
+ ::std::stringstream lhs_ss;
+ lhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
+ << lhs_value;
- ::std::stringstream actual_ss;
- actual_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
- << actual;
+ ::std::stringstream rhs_ss;
+ rhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
+ << rhs_value;
- return EqFailure(expected_expression,
- actual_expression,
- StringStreamToString(&expected_ss),
- StringStreamToString(&actual_ss),
+ return EqFailure(lhs_expression,
+ rhs_expression,
+ StringStreamToString(&lhs_ss),
+ StringStreamToString(&rhs_ss),
false);
}
@@ -1879,12 +1875,12 @@ class TestWithParam : public Test, public WithParamInterface<T> {
// Macros for testing equalities and inequalities.
//
-// * {ASSERT|EXPECT}_EQ(expected, actual): Tests that expected == actual
-// * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2
-// * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2
-// * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2
-// * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2
-// * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2
+// * {ASSERT|EXPECT}_EQ(v1, v2): Tests that v1 == v2
+// * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2
+// * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2
+// * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2
+// * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2
+// * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2
//
// When they are not, Google Test prints both the tested expressions and
// their actual values. The values must be compatible built-in types,
@@ -1906,8 +1902,8 @@ class TestWithParam : public Test, public WithParamInterface<T> {
// are related, not how their content is related. To compare two C
// strings by content, use {ASSERT|EXPECT}_STR*().
//
-// 3. {ASSERT|EXPECT}_EQ(expected, actual) is preferred to
-// {ASSERT|EXPECT}_TRUE(expected == actual), as the former tells you
+// 3. {ASSERT|EXPECT}_EQ(v1, v2) is preferred to
+// {ASSERT|EXPECT}_TRUE(v1 == v2), as the former tells you
// what the actual value is when it fails, and similarly for the
// other comparisons.
//
@@ -1923,12 +1919,12 @@ class TestWithParam : public Test, public WithParamInterface<T> {
// ASSERT_LT(i, array_size);
// ASSERT_GT(records.size(), 0) << "There is no record left.";
-#define EXPECT_EQ(expected, actual) \
+#define EXPECT_EQ(val1, val2) \
EXPECT_PRED_FORMAT2(::testing::internal:: \
- EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \
- expected, actual)
-#define EXPECT_NE(expected, actual) \
- EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual)
+ EqHelper<GTEST_IS_NULL_LITERAL_(val1)>::Compare, \
+ val1, val2)
+#define EXPECT_NE(val1, val2) \
+ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)
#define EXPECT_LE(val1, val2) \
EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)
#define EXPECT_LT(val1, val2) \
@@ -1938,10 +1934,10 @@ class TestWithParam : public Test, public WithParamInterface<T> {
#define EXPECT_GT(val1, val2) \
EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)
-#define GTEST_ASSERT_EQ(expected, actual) \
+#define GTEST_ASSERT_EQ(val1, val2) \
ASSERT_PRED_FORMAT2(::testing::internal:: \
- EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \
- expected, actual)
+ EqHelper<GTEST_IS_NULL_LITERAL_(val1)>::Compare, \
+ val1, val2)
#define GTEST_ASSERT_NE(val1, val2) \
ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)
#define GTEST_ASSERT_LE(val1, val2) \
@@ -1996,29 +1992,29 @@ class TestWithParam : public Test, public WithParamInterface<T> {
//
// These macros evaluate their arguments exactly once.
-#define EXPECT_STREQ(expected, actual) \
- EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual)
+#define EXPECT_STREQ(s1, s2) \
+ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2)
#define EXPECT_STRNE(s1, s2) \
EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)
-#define EXPECT_STRCASEEQ(expected, actual) \
- EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual)
+#define EXPECT_STRCASEEQ(s1, s2) \
+ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2)
#define EXPECT_STRCASENE(s1, s2)\
EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)
-#define ASSERT_STREQ(expected, actual) \
- ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual)
+#define ASSERT_STREQ(s1, s2) \
+ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2)
#define ASSERT_STRNE(s1, s2) \
ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)
-#define ASSERT_STRCASEEQ(expected, actual) \
- ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual)
+#define ASSERT_STRCASEEQ(s1, s2) \
+ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2)
#define ASSERT_STRCASENE(s1, s2)\
ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)
// Macros for comparing floating-point numbers.
//
-// * {ASSERT|EXPECT}_FLOAT_EQ(expected, actual):
+// * {ASSERT|EXPECT}_FLOAT_EQ(val1, val2):
// Tests that two float values are almost equal.
-// * {ASSERT|EXPECT}_DOUBLE_EQ(expected, actual):
+// * {ASSERT|EXPECT}_DOUBLE_EQ(val1, val2):
// Tests that two double values are almost equal.
// * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error):
// Tests that v1 and v2 are within the given distance to each other.
@@ -2028,21 +2024,21 @@ class TestWithParam : public Test, public WithParamInterface<T> {
// FloatingPoint template class in gtest-internal.h if you are
// interested in the implementation details.
-#define EXPECT_FLOAT_EQ(expected, actual)\
+#define EXPECT_FLOAT_EQ(val1, val2)\
EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \
- expected, actual)
+ val1, val2)
-#define EXPECT_DOUBLE_EQ(expected, actual)\
+#define EXPECT_DOUBLE_EQ(val1, val2)\
EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \
- expected, actual)
+ val1, val2)
-#define ASSERT_FLOAT_EQ(expected, actual)\
+#define ASSERT_FLOAT_EQ(val1, val2)\
ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \
- expected, actual)
+ val1, val2)
-#define ASSERT_DOUBLE_EQ(expected, actual)\
+#define ASSERT_DOUBLE_EQ(val1, val2)\
ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \
- expected, actual)
+ val1, val2)
#define EXPECT_NEAR(val1, val2, abs_error)\
EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \
diff --git a/3rdparty/googletest/googletest/include/gtest/internal/gtest-port.h b/3rdparty/googletest/googletest/include/gtest/internal/gtest-port.h
index 141d4579a31..7d6e4658194 100644
--- a/3rdparty/googletest/googletest/include/gtest/internal/gtest-port.h
+++ b/3rdparty/googletest/googletest/include/gtest/internal/gtest-port.h
@@ -287,7 +287,7 @@
# define GTEST_FLAG_PREFIX_DASH_ "gtest-"
# define GTEST_FLAG_PREFIX_UPPER_ "GTEST_"
# define GTEST_NAME_ "Google Test"
-# define GTEST_PROJECT_URL_ "http://code.google.com/p/googletest/"
+# define GTEST_PROJECT_URL_ "https://github.com/google/googletest/"
#endif // !defined(GTEST_DEV_EMAIL_)
#if !defined(GTEST_INIT_GOOGLE_TEST_NAME_)
@@ -358,8 +358,9 @@
# define GTEST_HAS_STD_FUNCTION_ 1
# define GTEST_HAS_STD_INITIALIZER_LIST_ 1
# define GTEST_HAS_STD_MOVE_ 1
-# define GTEST_HAS_STD_UNIQUE_PTR_ 1
# define GTEST_HAS_STD_SHARED_PTR_ 1
+# define GTEST_HAS_STD_TYPE_TRAITS_ 1
+# define GTEST_HAS_STD_UNIQUE_PTR_ 1
#endif
// C++11 specifies that <tuple> provides std::tuple.
@@ -920,14 +921,14 @@ using ::std::tuple_size;
#endif // GTEST_HAS_SEH
#ifdef _MSC_VER
-
# if GTEST_LINKED_AS_SHARED_LIBRARY
# define GTEST_API_ __declspec(dllimport)
# elif GTEST_CREATE_SHARED_LIBRARY
# define GTEST_API_ __declspec(dllexport)
# endif
-
-#endif // _MSC_VER
+#elif __GNUC__ >= 4 || defined(__clang__)
+# define GTEST_API_ __attribute__((visibility ("default")))
+#endif // _MSC_VER
#ifndef GTEST_API_
# define GTEST_API_
@@ -1968,13 +1969,8 @@ class MutexBase {
extern ::testing::internal::MutexBase mutex
// Defines and statically (i.e. at link time) initializes a static mutex.
-// The initialization list here does not explicitly initialize each field,
-// instead relying on default initialization for the unspecified fields. In
-// particular, the owner_ field (a pthread_t) is not explicitly initialized.
-// This allows initialization to work whether pthread_t is a scalar or struct.
-// The flag -Wmissing-field-initializers must not be specified for this to work.
# define GTEST_DEFINE_STATIC_MUTEX_(mutex) \
- ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, false }
+ ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, false, pthread_t() }
// The Mutex class can only be used for mutexes created at runtime. It
// shares its API with MutexBase otherwise.
diff --git a/3rdparty/googletest/googletest/scripts/fuse_gtest_files.py b/3rdparty/googletest/googletest/scripts/fuse_gtest_files.py
index 57ef72f0e31..3f3e9f36d61 100644
--- a/3rdparty/googletest/googletest/scripts/fuse_gtest_files.py
+++ b/3rdparty/googletest/googletest/scripts/fuse_gtest_files.py
@@ -60,7 +60,10 @@ __author__ = 'wan@google.com (Zhanyong Wan)'
import os
import re
-import sets
+try:
+ from sets import Set as set # For Python 2.3 compatibility
+except ImportError:
+ pass
import sys
# We assume that this file is in the scripts/ directory in the Google
@@ -90,10 +93,10 @@ def VerifyFileExists(directory, relative_path):
"""
if not os.path.isfile(os.path.join(directory, relative_path)):
- print 'ERROR: Cannot find %s in directory %s.' % (relative_path,
- directory)
- print ('Please either specify a valid project root directory '
- 'or omit it on the command line.')
+ print('ERROR: Cannot find %s in directory %s.' % (relative_path,
+ directory))
+ print('Please either specify a valid project root directory '
+ 'or omit it on the command line.')
sys.exit(1)
@@ -119,11 +122,11 @@ def VerifyOutputFile(output_dir, relative_path):
# TODO(wan@google.com): The following user-interaction doesn't
# work with automated processes. We should provide a way for the
# Makefile to force overwriting the files.
- print ('%s already exists in directory %s - overwrite it? (y/N) ' %
- (relative_path, output_dir))
+ print('%s already exists in directory %s - overwrite it? (y/N) ' %
+ (relative_path, output_dir))
answer = sys.stdin.readline().strip()
if answer not in ['y', 'Y']:
- print 'ABORTED.'
+ print('ABORTED.')
sys.exit(1)
# Makes sure the directory holding the output file exists; creates
@@ -146,8 +149,8 @@ def ValidateOutputDir(output_dir):
def FuseGTestH(gtest_root, output_dir):
"""Scans folder gtest_root to generate gtest/gtest.h in output_dir."""
- output_file = file(os.path.join(output_dir, GTEST_H_OUTPUT), 'w')
- processed_files = sets.Set() # Holds all gtest headers we've processed.
+ output_file = open(os.path.join(output_dir, GTEST_H_OUTPUT), 'w')
+ processed_files = set() # Holds all gtest headers we've processed.
def ProcessFile(gtest_header_path):
"""Processes the given gtest header file."""
@@ -159,7 +162,7 @@ def FuseGTestH(gtest_root, output_dir):
processed_files.add(gtest_header_path)
# Reads each line in the given gtest header.
- for line in file(os.path.join(gtest_root, gtest_header_path), 'r'):
+ for line in open(os.path.join(gtest_root, gtest_header_path), 'r'):
m = INCLUDE_GTEST_FILE_REGEX.match(line)
if m:
# It's '#include "gtest/..."' - let's process it recursively.
@@ -175,7 +178,7 @@ def FuseGTestH(gtest_root, output_dir):
def FuseGTestAllCcToFile(gtest_root, output_file):
"""Scans folder gtest_root to generate gtest/gtest-all.cc in output_file."""
- processed_files = sets.Set()
+ processed_files = set()
def ProcessFile(gtest_source_file):
"""Processes the given gtest source file."""
@@ -187,7 +190,7 @@ def FuseGTestAllCcToFile(gtest_root, output_file):
processed_files.add(gtest_source_file)
# Reads each line in the given gtest source file.
- for line in file(os.path.join(gtest_root, gtest_source_file), 'r'):
+ for line in open(os.path.join(gtest_root, gtest_source_file), 'r'):
m = INCLUDE_GTEST_FILE_REGEX.match(line)
if m:
if 'include/' + m.group(1) == GTEST_SPI_H_SEED:
@@ -218,7 +221,7 @@ def FuseGTestAllCcToFile(gtest_root, output_file):
def FuseGTestAllCc(gtest_root, output_dir):
"""Scans folder gtest_root to generate gtest/gtest-all.cc in output_dir."""
- output_file = file(os.path.join(output_dir, GTEST_ALL_CC_OUTPUT), 'w')
+ output_file = open(os.path.join(output_dir, GTEST_ALL_CC_OUTPUT), 'w')
FuseGTestAllCcToFile(gtest_root, output_file)
output_file.close()
@@ -242,7 +245,7 @@ def main():
# fuse_gtest_files.py GTEST_ROOT_DIR OUTPUT_DIR
FuseGTest(sys.argv[1], sys.argv[2])
else:
- print __doc__
+ print(__doc__)
sys.exit(1)
diff --git a/3rdparty/googletest/googletest/src/gtest-internal-inl.h b/3rdparty/googletest/googletest/src/gtest-internal-inl.h
index 56c8a20c655..ed8a682a964 100644
--- a/3rdparty/googletest/googletest/src/gtest-internal-inl.h
+++ b/3rdparty/googletest/googletest/src/gtest-internal-inl.h
@@ -1032,7 +1032,7 @@ class TestResultAccessor {
#if GTEST_CAN_STREAM_RESULTS_
// Streams test results to the given port on the given host machine.
-class StreamingListener : public EmptyTestEventListener {
+class GTEST_API_ StreamingListener : public EmptyTestEventListener {
public:
// Abstract base class for writing strings to a socket.
class AbstractSocketWriter {
diff --git a/3rdparty/googletest/googletest/src/gtest-port.cc b/3rdparty/googletest/googletest/src/gtest-port.cc
index 3842c415607..0162fac44be 100644
--- a/3rdparty/googletest/googletest/src/gtest-port.cc
+++ b/3rdparty/googletest/googletest/src/gtest-port.cc
@@ -58,6 +58,11 @@
# include <sys/procfs.h>
#endif // GTEST_OS_QNX
+#if GTEST_OS_AIX
+# include <procinfo.h>
+# include <sys/types.h>
+#endif // GTEST_OS_AIX
+
#include "gtest/gtest-spi.h"
#include "gtest/gtest-message.h"
#include "gtest/internal/gtest-internal.h"
@@ -146,6 +151,19 @@ size_t GetThreadCount() {
}
}
+#elif GTEST_OS_AIX
+
+size_t GetThreadCount() {
+ struct procentry64 entry;
+ pid_t pid = getpid();
+ int status = getprocs64(&entry, sizeof(entry), NULL, 0, &pid, 1);
+ if (status == 1) {
+ return entry.pi_thcount;
+ } else {
+ return 0;
+ }
+}
+
#else
size_t GetThreadCount() {
diff --git a/3rdparty/googletest/googletest/src/gtest-printers.cc b/3rdparty/googletest/googletest/src/gtest-printers.cc
index d5975a271a7..a2df412f8a2 100644
--- a/3rdparty/googletest/googletest/src/gtest-printers.cc
+++ b/3rdparty/googletest/googletest/src/gtest-printers.cc
@@ -339,12 +339,7 @@ void PrintTo(const wchar_t* s, ostream* os) {
*os << "NULL";
} else {
*os << ImplicitCast_<const void*>(s) << " pointing to ";
-#ifndef __OS2__
PrintCharsAsStringTo(s, std::wcslen(s), os);
-#else
- // OS/2 gcc does not declare wcslen() in std namesapce.
- PrintCharsAsStringTo(s, wcslen(s), os);
-#endif
}
}
#endif // wchar_t is native
diff --git a/3rdparty/googletest/googletest/src/gtest.cc b/3rdparty/googletest/googletest/src/gtest.cc
index 4170e5c79e0..d882ab2e36a 100644
--- a/3rdparty/googletest/googletest/src/gtest.cc
+++ b/3rdparty/googletest/googletest/src/gtest.cc
@@ -1301,41 +1301,41 @@ std::vector<std::string> SplitEscapedString(const std::string& str) {
// and their values, as strings. For example, for ASSERT_EQ(foo, bar)
// where foo is 5 and bar is 6, we have:
//
-// expected_expression: "foo"
-// actual_expression: "bar"
-// expected_value: "5"
-// actual_value: "6"
+// lhs_expression: "foo"
+// rhs_expression: "bar"
+// lhs_value: "5"
+// rhs_value: "6"
//
// The ignoring_case parameter is true iff the assertion is a
-// *_STRCASEEQ*. When it's true, the string " (ignoring case)" will
+// *_STRCASEEQ*. When it's true, the string "Ignoring case" will
// be inserted into the message.
-AssertionResult EqFailure(const char* expected_expression,
- const char* actual_expression,
- const std::string& expected_value,
- const std::string& actual_value,
+AssertionResult EqFailure(const char* lhs_expression,
+ const char* rhs_expression,
+ const std::string& lhs_value,
+ const std::string& rhs_value,
bool ignoring_case) {
Message msg;
- msg << "Value of: " << actual_expression;
- if (actual_value != actual_expression) {
- msg << "\n Actual: " << actual_value;
+ msg << " Expected: " << lhs_expression;
+ if (lhs_value != lhs_expression) {
+ msg << "\n Which is: " << lhs_value;
+ }
+ msg << "\nTo be equal to: " << rhs_expression;
+ if (rhs_value != rhs_expression) {
+ msg << "\n Which is: " << rhs_value;
}
- msg << "\nExpected: " << expected_expression;
if (ignoring_case) {
- msg << " (ignoring case)";
- }
- if (expected_value != expected_expression) {
- msg << "\nWhich is: " << expected_value;
+ msg << "\nIgnoring case";
}
- if (!expected_value.empty() && !actual_value.empty()) {
- const std::vector<std::string> expected_lines =
- SplitEscapedString(expected_value);
- const std::vector<std::string> actual_lines =
- SplitEscapedString(actual_value);
- if (expected_lines.size() > 1 || actual_lines.size() > 1) {
+ if (!lhs_value.empty() && !rhs_value.empty()) {
+ const std::vector<std::string> lhs_lines =
+ SplitEscapedString(lhs_value);
+ const std::vector<std::string> rhs_lines =
+ SplitEscapedString(rhs_value);
+ if (lhs_lines.size() > 1 || rhs_lines.size() > 1) {
msg << "\nWith diff:\n"
- << edit_distance::CreateUnifiedDiff(expected_lines, actual_lines);
+ << edit_distance::CreateUnifiedDiff(lhs_lines, rhs_lines);
}
}
@@ -1434,18 +1434,18 @@ namespace internal {
// The helper function for {ASSERT|EXPECT}_EQ with int or enum
// arguments.
-AssertionResult CmpHelperEQ(const char* expected_expression,
- const char* actual_expression,
- BiggestInt expected,
- BiggestInt actual) {
- if (expected == actual) {
+AssertionResult CmpHelperEQ(const char* lhs_expression,
+ const char* rhs_expression,
+ BiggestInt lhs,
+ BiggestInt rhs) {
+ if (lhs == rhs) {
return AssertionSuccess();
}
- return EqFailure(expected_expression,
- actual_expression,
- FormatForComparisonFailureMessage(expected, actual),
- FormatForComparisonFailureMessage(actual, expected),
+ return EqFailure(lhs_expression,
+ rhs_expression,
+ FormatForComparisonFailureMessage(lhs, rhs),
+ FormatForComparisonFailureMessage(rhs, lhs),
false);
}
@@ -1484,34 +1484,34 @@ GTEST_IMPL_CMP_HELPER_(GT, > )
#undef GTEST_IMPL_CMP_HELPER_
// The helper function for {ASSERT|EXPECT}_STREQ.
-AssertionResult CmpHelperSTREQ(const char* expected_expression,
- const char* actual_expression,
- const char* expected,
- const char* actual) {
- if (String::CStringEquals(expected, actual)) {
+AssertionResult CmpHelperSTREQ(const char* lhs_expression,
+ const char* rhs_expression,
+ const char* lhs,
+ const char* rhs) {
+ if (String::CStringEquals(lhs, rhs)) {
return AssertionSuccess();
}
- return EqFailure(expected_expression,
- actual_expression,
- PrintToString(expected),
- PrintToString(actual),
+ return EqFailure(lhs_expression,
+ rhs_expression,
+ PrintToString(lhs),
+ PrintToString(rhs),
false);
}
// The helper function for {ASSERT|EXPECT}_STRCASEEQ.
-AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression,
- const char* actual_expression,
- const char* expected,
- const char* actual) {
- if (String::CaseInsensitiveCStringEquals(expected, actual)) {
+AssertionResult CmpHelperSTRCASEEQ(const char* lhs_expression,
+ const char* rhs_expression,
+ const char* lhs,
+ const char* rhs) {
+ if (String::CaseInsensitiveCStringEquals(lhs, rhs)) {
return AssertionSuccess();
}
- return EqFailure(expected_expression,
- actual_expression,
- PrintToString(expected),
- PrintToString(actual),
+ return EqFailure(lhs_expression,
+ rhs_expression,
+ PrintToString(lhs),
+ PrintToString(rhs),
true);
}
@@ -1866,18 +1866,18 @@ bool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) {
}
// Helper function for *_STREQ on wide strings.
-AssertionResult CmpHelperSTREQ(const char* expected_expression,
- const char* actual_expression,
- const wchar_t* expected,
- const wchar_t* actual) {
- if (String::WideCStringEquals(expected, actual)) {
+AssertionResult CmpHelperSTREQ(const char* lhs_expression,
+ const char* rhs_expression,
+ const wchar_t* lhs,
+ const wchar_t* rhs) {
+ if (String::WideCStringEquals(lhs, rhs)) {
return AssertionSuccess();
}
- return EqFailure(expected_expression,
- actual_expression,
- PrintToString(expected),
- PrintToString(actual),
+ return EqFailure(lhs_expression,
+ rhs_expression,
+ PrintToString(lhs),
+ PrintToString(rhs),
false);
}
@@ -2930,6 +2930,8 @@ bool ShouldUseColor(bool stdout_is_tty) {
String::CStringEquals(term, "xterm-256color") ||
String::CStringEquals(term, "screen") ||
String::CStringEquals(term, "screen-256color") ||
+ String::CStringEquals(term, "tmux") ||
+ String::CStringEquals(term, "tmux-256color") ||
String::CStringEquals(term, "rxvt-unicode") ||
String::CStringEquals(term, "rxvt-unicode-256color") ||
String::CStringEquals(term, "linux") ||
diff --git a/3rdparty/googletest/googletest/test/gtest-port_test.cc b/3rdparty/googletest/googletest/test/gtest-port_test.cc
index d17bad00230..6ea607bc70d 100644
--- a/3rdparty/googletest/googletest/test/gtest-port_test.cc
+++ b/3rdparty/googletest/googletest/test/gtest-port_test.cc
@@ -75,8 +75,8 @@ TEST(IsXDigitTest, WorksForNarrowAscii) {
}
TEST(IsXDigitTest, ReturnsFalseForNarrowNonAscii) {
- EXPECT_FALSE(IsXDigit(static_cast<char>(0x80)));
- EXPECT_FALSE(IsXDigit(static_cast<char>('0' | 0x80)));
+ EXPECT_FALSE(IsXDigit('\x80'));
+ EXPECT_FALSE(IsXDigit(static_cast<char>('0' | '\x80')));
}
TEST(IsXDigitTest, WorksForWideAscii) {
diff --git a/3rdparty/googletest/googletest/test/gtest_env_var_test.py b/3rdparty/googletest/googletest/test/gtest_env_var_test.py
index ac24337fa1e..1fc6ebe5f59 100644
--- a/3rdparty/googletest/googletest/test/gtest_env_var_test.py
+++ b/3rdparty/googletest/googletest/test/gtest_env_var_test.py
@@ -47,8 +47,8 @@ environ = os.environ.copy()
def AssertEq(expected, actual):
if expected != actual:
- print 'Expected: %s' % (expected,)
- print ' Actual: %s' % (actual,)
+ print('Expected: %s' % (expected,))
+ print(' Actual: %s' % (actual,))
raise AssertionError
diff --git a/3rdparty/googletest/googletest/test/gtest_filter_unittest.py b/3rdparty/googletest/googletest/test/gtest_filter_unittest.py
index 0d1a770058c..ec0b151b11b 100644
--- a/3rdparty/googletest/googletest/test/gtest_filter_unittest.py
+++ b/3rdparty/googletest/googletest/test/gtest_filter_unittest.py
@@ -44,7 +44,10 @@ __author__ = 'wan@google.com (Zhanyong Wan)'
import os
import re
-import sets
+try:
+ from sets import Set as set # For Python 2.3 compatibility
+except ImportError:
+ pass
import sys
import gtest_test_utils
@@ -58,7 +61,7 @@ import gtest_test_utils
# exception is thrown if the input is anything other than 'True' nor 'False'.
os.environ['EMPTY_VAR'] = ''
child = gtest_test_utils.Subprocess(
- [sys.executable, '-c', 'import os; print \'EMPTY_VAR\' in os.environ'])
+ [sys.executable, '-c', 'import os; print(\'EMPTY_VAR\' in os.environ)'])
CAN_PASS_EMPTY_ENV = eval(child.output)
@@ -71,7 +74,7 @@ CAN_PASS_EMPTY_ENV = eval(child.output)
os.environ['UNSET_VAR'] = 'X'
del os.environ['UNSET_VAR']
child = gtest_test_utils.Subprocess(
- [sys.executable, '-c', 'import os; print \'UNSET_VAR\' not in os.environ'])
+ [sys.executable, '-c', 'import os; print(\'UNSET_VAR\' not in os.environ)'])
CAN_UNSET_ENV = eval(child.output)
@@ -243,14 +246,14 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase):
for slice_var in list_of_sets:
full_partition.extend(slice_var)
self.assertEqual(len(set_var), len(full_partition))
- self.assertEqual(sets.Set(set_var), sets.Set(full_partition))
+ self.assertEqual(set(set_var), set(full_partition))
def AdjustForParameterizedTests(self, tests_to_run):
"""Adjust tests_to_run in case value parameterized tests are disabled."""
global param_tests_present
if not param_tests_present:
- return list(sets.Set(tests_to_run) - sets.Set(PARAM_TESTS))
+ return list(set(tests_to_run) - set(PARAM_TESTS))
else:
return tests_to_run
diff --git a/3rdparty/googletest/googletest/test/gtest_output_test.py b/3rdparty/googletest/googletest/test/gtest_output_test.py
index d5c637b4c1a..06dbee09805 100644
--- a/3rdparty/googletest/googletest/test/gtest_output_test.py
+++ b/3rdparty/googletest/googletest/test/gtest_output_test.py
@@ -279,7 +279,7 @@ class GTestOutputTest(gtest_test_utils.TestCase):
def testOutput(self):
output = GetOutputOfAllCommands()
- golden_file = open(GOLDEN_PATH, 'rb')
+ golden_file = open(GOLDEN_PATH, 'r')
# A mis-configured source control system can cause \r appear in EOL
# sequences when we read the golden file irrespective of an operating
# system used. Therefore, we need to strip those \r's from newlines
diff --git a/3rdparty/googletest/googletest/test/gtest_output_test_golden_lin.txt b/3rdparty/googletest/googletest/test/gtest_output_test_golden_lin.txt
index 7fff85300ce..2223d560e2d 100644
--- a/3rdparty/googletest/googletest/test/gtest_output_test_golden_lin.txt
+++ b/3rdparty/googletest/googletest/test/gtest_output_test_golden_lin.txt
@@ -5,8 +5,8 @@ Value of: false
Actual: false
Expected: true
gtest_output_test_.cc:#: Failure
-Value of: 3
-Expected: 2
+ Expected: 2
+To be equal to: 3
[==========] Running 66 tests from 29 test cases.
[----------] Global test environment set-up.
FooEnvironment::SetUp() called.
@@ -34,21 +34,21 @@ BarEnvironment::SetUp() called.
[----------] 2 tests from NonfatalFailureTest
[ RUN ] NonfatalFailureTest.EscapesStringOperands
gtest_output_test_.cc:#: Failure
-Value of: actual
- Actual: "actual \"string\""
-Expected: kGoldenString
-Which is: "\"Line"
+ Expected: kGoldenString
+ Which is: "\"Line"
+To be equal to: actual
+ Which is: "actual \"string\""
gtest_output_test_.cc:#: Failure
-Value of: actual
- Actual: "actual \"string\""
-Expected: golden
-Which is: "\"Line"
+ Expected: golden
+ Which is: "\"Line"
+To be equal to: actual
+ Which is: "actual \"string\""
[ FAILED ] NonfatalFailureTest.EscapesStringOperands
[ RUN ] NonfatalFailureTest.DiffForLongStrings
gtest_output_test_.cc:#: Failure
-Value of: "Line 2"
-Expected: golden_str
-Which is: "\"Line\0 1\"\nLine 2"
+ Expected: golden_str
+ Which is: "\"Line\0 1\"\nLine 2"
+To be equal to: "Line 2"
With diff:
@@ -1,2 @@
-\"Line\0 1\"
@@ -59,16 +59,16 @@ With diff:
[ RUN ] FatalFailureTest.FatalFailureInSubroutine
(expecting a failure that x should be 1)
gtest_output_test_.cc:#: Failure
-Value of: x
- Actual: 2
-Expected: 1
+ Expected: 1
+To be equal to: x
+ Which is: 2
[ FAILED ] FatalFailureTest.FatalFailureInSubroutine
[ RUN ] FatalFailureTest.FatalFailureInNestedSubroutine
(expecting a failure that x should be 1)
gtest_output_test_.cc:#: Failure
-Value of: x
- Actual: 2
-Expected: 1
+ Expected: 1
+To be equal to: x
+ Which is: 2
[ FAILED ] FatalFailureTest.FatalFailureInNestedSubroutine
[ RUN ] FatalFailureTest.NonfatalFailureInSubroutine
(expecting a failure on false)
@@ -107,39 +107,39 @@ This failure is expected, and shouldn't have a trace.
[ RUN ] SCOPED_TRACETest.WorksInLoop
(expected to fail)
gtest_output_test_.cc:#: Failure
-Value of: n
- Actual: 1
-Expected: 2
+ Expected: 2
+To be equal to: n
+ Which is: 1
Google Test trace:
gtest_output_test_.cc:#: i = 1
gtest_output_test_.cc:#: Failure
-Value of: n
- Actual: 2
-Expected: 1
+ Expected: 1
+To be equal to: n
+ Which is: 2
Google Test trace:
gtest_output_test_.cc:#: i = 2
[ FAILED ] SCOPED_TRACETest.WorksInLoop
[ RUN ] SCOPED_TRACETest.WorksInSubroutine
(expected to fail)
gtest_output_test_.cc:#: Failure
-Value of: n
- Actual: 1
-Expected: 2
+ Expected: 2
+To be equal to: n
+ Which is: 1
Google Test trace:
gtest_output_test_.cc:#: n = 1
gtest_output_test_.cc:#: Failure
-Value of: n
- Actual: 2
-Expected: 1
+ Expected: 1
+To be equal to: n
+ Which is: 2
Google Test trace:
gtest_output_test_.cc:#: n = 2
[ FAILED ] SCOPED_TRACETest.WorksInSubroutine
[ RUN ] SCOPED_TRACETest.CanBeNested
(expected to fail)
gtest_output_test_.cc:#: Failure
-Value of: n
- Actual: 2
-Expected: 1
+ Expected: 1
+To be equal to: n
+ Which is: 2
Google Test trace:
gtest_output_test_.cc:#: n = 2
gtest_output_test_.cc:#:
@@ -437,9 +437,9 @@ Expected: 1 fatal failure
[ OK ] TypedTest/0.Success
[ RUN ] TypedTest/0.Failure
gtest_output_test_.cc:#: Failure
-Value of: TypeParam()
- Actual: 0
-Expected: 1
+ Expected: 1
+To be equal to: TypeParam()
+ Which is: 0
Expected failure
[ FAILED ] TypedTest/0.Failure, where TypeParam = int
[----------] 2 tests from Unsigned/TypedTestP/0, where TypeParam = unsigned char
@@ -447,10 +447,10 @@ Expected failure
[ OK ] Unsigned/TypedTestP/0.Success
[ RUN ] Unsigned/TypedTestP/0.Failure
gtest_output_test_.cc:#: Failure
-Value of: TypeParam()
- Actual: '\0'
-Expected: 1U
-Which is: 1
+ Expected: 1U
+ Which is: 1
+To be equal to: TypeParam()
+ Which is: '\0'
Expected failure
[ FAILED ] Unsigned/TypedTestP/0.Failure, where TypeParam = unsigned char
[----------] 2 tests from Unsigned/TypedTestP/1, where TypeParam = unsigned int
@@ -458,10 +458,10 @@ Expected failure
[ OK ] Unsigned/TypedTestP/1.Success
[ RUN ] Unsigned/TypedTestP/1.Failure
gtest_output_test_.cc:#: Failure
-Value of: TypeParam()
- Actual: 0
-Expected: 1U
-Which is: 1
+ Expected: 1U
+ Which is: 1
+To be equal to: TypeParam()
+ Which is: 0
Expected failure
[ FAILED ] Unsigned/TypedTestP/1.Failure, where TypeParam = unsigned int
[----------] 4 tests from ExpectFailureTest
@@ -597,18 +597,18 @@ Expected non-fatal failure.
[----------] 1 test from PrintingFailingParams/FailingParamTest
[ RUN ] PrintingFailingParams/FailingParamTest.Fails/0
gtest_output_test_.cc:#: Failure
-Value of: GetParam()
- Actual: 2
-Expected: 1
+ Expected: 1
+To be equal to: GetParam()
+ Which is: 2
[ FAILED ] PrintingFailingParams/FailingParamTest.Fails/0, where GetParam() = 2
[----------] 2 tests from PrintingStrings/ParamTest
[ RUN ] PrintingStrings/ParamTest.Success/a
[ OK ] PrintingStrings/ParamTest.Success/a
[ RUN ] PrintingStrings/ParamTest.Failure/a
gtest_output_test_.cc:#: Failure
-Value of: GetParam()
- Actual: "a"
-Expected: "b"
+ Expected: "b"
+To be equal to: GetParam()
+ Which is: "a"
Expected failure
[ FAILED ] PrintingStrings/ParamTest.Failure/a, where GetParam() = "a"
[----------] Global test environment tear-down
@@ -678,16 +678,16 @@ Expected fatal failure.
[ RUN ] FatalFailureTest.FatalFailureInSubroutine
(expecting a failure that x should be 1)
gtest_output_test_.cc:#: Failure
-Value of: x
- Actual: 2
-Expected: 1
+ Expected: 1
+To be equal to: x
+ Which is: 2
[ FAILED ] FatalFailureTest.FatalFailureInSubroutine (? ms)
[ RUN ] FatalFailureTest.FatalFailureInNestedSubroutine
(expecting a failure that x should be 1)
gtest_output_test_.cc:#: Failure
-Value of: x
- Actual: 2
-Expected: 1
+ Expected: 1
+To be equal to: x
+ Which is: 2
[ FAILED ] FatalFailureTest.FatalFailureInNestedSubroutine (? ms)
[ RUN ] FatalFailureTest.NonfatalFailureInSubroutine
(expecting a failure on false)
diff --git a/3rdparty/googletest/googletest/test/gtest_test_utils.py b/3rdparty/googletest/googletest/test/gtest_test_utils.py
index 7e3cbcafd9a..4acd36c975c 100644
--- a/3rdparty/googletest/googletest/test/gtest_test_utils.py
+++ b/3rdparty/googletest/googletest/test/gtest_test_utils.py
@@ -178,7 +178,7 @@ def GetTestExecutablePath(executable_name, build_dir=None):
'Unable to find the test binary "%s". Please make sure to provide\n'
'a path to the binary via the --build_dir flag or the BUILD_DIR\n'
'environment variable.' % path)
- print >> sys.stderr, message
+ sys.stdout.write(message)
sys.exit(1)
return path
diff --git a/3rdparty/googletest/googletest/test/gtest_throw_on_failure_test.py b/3rdparty/googletest/googletest/test/gtest_throw_on_failure_test.py
index 5678ffeaf6f..3e7740cabb8 100644
--- a/3rdparty/googletest/googletest/test/gtest_throw_on_failure_test.py
+++ b/3rdparty/googletest/googletest/test/gtest_throw_on_failure_test.py
@@ -70,7 +70,7 @@ def SetEnvVar(env_var, value):
def Run(command):
"""Runs a command; returns True/False if its exit code is/isn't 0."""
- print 'Running "%s". . .' % ' '.join(command)
+ print('Running "%s". . .' % ' '.join(command))
p = gtest_test_utils.Subprocess(command)
return p.exited and p.exit_code == 0
diff --git a/3rdparty/googletest/googletest/test/gtest_uninitialized_test.py b/3rdparty/googletest/googletest/test/gtest_uninitialized_test.py
index 6ae57eeedaf..4358370097f 100644
--- a/3rdparty/googletest/googletest/test/gtest_uninitialized_test.py
+++ b/3rdparty/googletest/googletest/test/gtest_uninitialized_test.py
@@ -46,8 +46,8 @@ def Assert(condition):
def AssertEq(expected, actual):
if expected != actual:
- print 'Expected: %s' % (expected,)
- print ' Actual: %s' % (actual,)
+ print('Expected: %s' % (expected,))
+ print(' Actual: %s' % (actual,))
raise AssertionError
diff --git a/3rdparty/googletest/googletest/test/gtest_unittest.cc b/3rdparty/googletest/googletest/test/gtest_unittest.cc
index 60aed357795..88e94134b94 100644
--- a/3rdparty/googletest/googletest/test/gtest_unittest.cc
+++ b/3rdparty/googletest/googletest/test/gtest_unittest.cc
@@ -2466,7 +2466,7 @@ TEST(StringAssertionTest, ASSERT_STRCASEEQ) {
ASSERT_STRCASEEQ("", "");
EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("Hi", "hi2"),
- "(ignoring case)");
+ "Ignoring case");
}
// Tests ASSERT_STRCASENE.
@@ -3260,7 +3260,7 @@ TEST_F(SingleEvaluationTest, ASSERT_STR) {
// failed EXPECT_STRCASEEQ
EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ(p1_++, p2_++),
- "ignoring case");
+ "Ignoring case");
EXPECT_EQ(s1_ + 2, p1_);
EXPECT_EQ(s2_ + 2, p2_);
}
@@ -3528,35 +3528,35 @@ TEST(AssertionTest, EqFailure) {
EqFailure("foo", "bar", foo_val, bar_val, false)
.failure_message());
EXPECT_STREQ(
- "Value of: bar\n"
- " Actual: 6\n"
- "Expected: foo\n"
- "Which is: 5",
+ " Expected: foo\n"
+ " Which is: 5\n"
+ "To be equal to: bar\n"
+ " Which is: 6",
msg1.c_str());
const std::string msg2(
EqFailure("foo", "6", foo_val, bar_val, false)
.failure_message());
EXPECT_STREQ(
- "Value of: 6\n"
- "Expected: foo\n"
- "Which is: 5",
+ " Expected: foo\n"
+ " Which is: 5\n"
+ "To be equal to: 6",
msg2.c_str());
const std::string msg3(
EqFailure("5", "bar", foo_val, bar_val, false)
.failure_message());
EXPECT_STREQ(
- "Value of: bar\n"
- " Actual: 6\n"
- "Expected: 5",
+ " Expected: 5\n"
+ "To be equal to: bar\n"
+ " Which is: 6",
msg3.c_str());
const std::string msg4(
EqFailure("5", "6", foo_val, bar_val, false).failure_message());
EXPECT_STREQ(
- "Value of: 6\n"
- "Expected: 5",
+ " Expected: 5\n"
+ "To be equal to: 6",
msg4.c_str());
const std::string msg5(
@@ -3564,10 +3564,11 @@ TEST(AssertionTest, EqFailure) {
std::string("\"x\""), std::string("\"y\""),
true).failure_message());
EXPECT_STREQ(
- "Value of: bar\n"
- " Actual: \"y\"\n"
- "Expected: foo (ignoring case)\n"
- "Which is: \"x\"",
+ " Expected: foo\n"
+ " Which is: \"x\"\n"
+ "To be equal to: bar\n"
+ " Which is: \"y\"\n"
+ "Ignoring case",
msg5.c_str());
}
@@ -3579,11 +3580,11 @@ TEST(AssertionTest, EqFailureWithDiff) {
const std::string msg1(
EqFailure("left", "right", left, right, false).failure_message());
EXPECT_STREQ(
- "Value of: right\n"
- " Actual: 1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n11\\n12\\n13\\n14\n"
- "Expected: left\n"
- "Which is: "
+ " Expected: left\n"
+ " Which is: "
"1\\n2XXX\\n3\\n5\\n6\\n7\\n8\\n9\\n10\\n11\\n12XXX\\n13\\n14\\n15\n"
+ "To be equal to: right\n"
+ " Which is: 1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n11\\n12\\n13\\n14\n"
"With diff:\n@@ -1,5 +1,6 @@\n 1\n-2XXX\n+2\n 3\n+4\n 5\n 6\n"
"@@ -7,8 +8,6 @@\n 8\n 9\n-10\n 11\n-12XXX\n+12\n 13\n 14\n-15\n",
msg1.c_str());
@@ -3678,9 +3679,9 @@ TEST(ExpectTest, ASSERT_EQ_Double) {
TEST(AssertionTest, ASSERT_EQ) {
ASSERT_EQ(5, 2 + 3);
EXPECT_FATAL_FAILURE(ASSERT_EQ(5, 2*3),
- "Value of: 2*3\n"
- " Actual: 6\n"
- "Expected: 5");
+ " Expected: 5\n"
+ "To be equal to: 2*3\n"
+ " Which is: 6");
}
// Tests ASSERT_EQ(NULL, pointer).
@@ -3697,7 +3698,7 @@ TEST(AssertionTest, ASSERT_EQ_NULL) {
// A failure.
static int n = 0;
EXPECT_FATAL_FAILURE(ASSERT_EQ(NULL, &n),
- "Value of: &n\n");
+ "To be equal to: &n\n");
}
#endif // GTEST_CAN_COMPARE_NULL
@@ -3812,7 +3813,7 @@ void TestEq1(int x) {
// Tests calling a test subroutine that's not part of a fixture.
TEST(AssertionTest, NonFixtureSubroutine) {
EXPECT_FATAL_FAILURE(TestEq1(2),
- "Value of: x");
+ "To be equal to: x");
}
// An uncopyable class.
@@ -3861,7 +3862,7 @@ TEST(AssertionTest, AssertWorksWithUncopyableObject) {
EXPECT_FATAL_FAILURE(TestAssertNonPositive(),
"IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1");
EXPECT_FATAL_FAILURE(TestAssertEqualsUncopyable(),
- "Value of: y\n Actual: -1\nExpected: x\nWhich is: 5");
+ "Expected: x\n Which is: 5\nTo be equal to: y\n Which is: -1");
}
// Tests that uncopyable objects can be used in expects.
@@ -3873,7 +3874,7 @@ TEST(AssertionTest, ExpectWorksWithUncopyableObject) {
"IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1");
EXPECT_EQ(x, x);
EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y),
- "Value of: y\n Actual: -1\nExpected: x\nWhich is: 5");
+ "Expected: x\n Which is: 5\nTo be equal to: y\n Which is: -1");
}
enum NamedEnum {
@@ -3885,7 +3886,7 @@ TEST(AssertionTest, NamedEnum) {
EXPECT_EQ(kE1, kE1);
EXPECT_LT(kE1, kE2);
EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Which is: 0");
- EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Actual: 1");
+ EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Which is: 1");
}
// The version of gcc used in XCode 2.2 has a bug and doesn't allow
@@ -3949,9 +3950,9 @@ TEST(AssertionTest, AnonymousEnum) {
// ICE's in C++Builder.
EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseB),
- "Value of: kCaseB");
+ "To be equal to: kCaseB");
EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC),
- "Actual: 42");
+ "Which is: 42");
# endif
EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC),
@@ -4389,9 +4390,9 @@ TEST(ExpectTest, ExpectFalseWithAssertionResult) {
TEST(ExpectTest, EXPECT_EQ) {
EXPECT_EQ(5, 2 + 3);
EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2*3),
- "Value of: 2*3\n"
- " Actual: 6\n"
- "Expected: 5");
+ " Expected: 5\n"
+ "To be equal to: 2*3\n"
+ " Which is: 6");
EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2 - 3),
"2 - 3");
}
@@ -4422,7 +4423,7 @@ TEST(ExpectTest, EXPECT_EQ_NULL) {
// A failure.
int n = 0;
EXPECT_NONFATAL_FAILURE(EXPECT_EQ(NULL, &n),
- "Value of: &n\n");
+ "To be equal to: &n\n");
}
#endif // GTEST_CAN_COMPARE_NULL
@@ -4538,7 +4539,7 @@ TEST(ExpectTest, EXPECT_ANY_THROW) {
TEST(ExpectTest, ExpectPrecedence) {
EXPECT_EQ(1 < 2, true);
EXPECT_NONFATAL_FAILURE(EXPECT_EQ(true, true && false),
- "Value of: true && false");
+ "To be equal to: true && false");
}
@@ -4685,7 +4686,7 @@ TEST(EqAssertionTest, Bool) {
EXPECT_FATAL_FAILURE({
bool false_value = false;
ASSERT_EQ(false_value, true);
- }, "Value of: true");
+ }, "To be equal to: true");
}
// Tests using int values in {EXPECT|ASSERT}_EQ.
@@ -4719,10 +4720,10 @@ TEST(EqAssertionTest, WideChar) {
EXPECT_EQ(L'b', L'b');
EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'\0', L'x'),
- "Value of: L'x'\n"
- " Actual: L'x' (120, 0x78)\n"
- "Expected: L'\0'\n"
- "Which is: L'\0' (0, 0x0)");
+ " Expected: L'\0'\n"
+ " Which is: L'\0' (0, 0x0)\n"
+ "To be equal to: L'x'\n"
+ " Which is: L'x' (120, 0x78)");
static wchar_t wchar;
wchar = L'b';
@@ -4730,7 +4731,7 @@ TEST(EqAssertionTest, WideChar) {
"wchar");
wchar = 0x8119;
EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<wchar_t>(0x8120), wchar),
- "Value of: wchar");
+ "To be equal to: wchar");
}
// Tests using ::std::string values in {EXPECT|ASSERT}_EQ.
@@ -4759,8 +4760,8 @@ TEST(EqAssertionTest, StdString) {
static ::std::string str3(str1);
str3.at(2) = '\0';
EXPECT_FATAL_FAILURE(ASSERT_EQ(str1, str3),
- "Value of: str3\n"
- " Actual: \"A \\0 in the middle\"");
+ "To be equal to: str3\n"
+ " Which is: \"A \\0 in the middle\"");
}
#if GTEST_HAS_STD_WSTRING
@@ -4880,7 +4881,7 @@ TEST(EqAssertionTest, CharPointer) {
ASSERT_EQ(p1, p1);
EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2),
- "Value of: p2");
+ "To be equal to: p2");
EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2),
"p2");
EXPECT_FATAL_FAILURE(ASSERT_EQ(reinterpret_cast<char*>(0x1234),
@@ -4902,7 +4903,7 @@ TEST(EqAssertionTest, WideCharPointer) {
EXPECT_EQ(p0, p0);
EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2),
- "Value of: p2");
+ "To be equal to: p2");
EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2),
"p2");
void* pv3 = (void*)0x1234; // NOLINT
@@ -6840,6 +6841,12 @@ TEST(ColoredOutputTest, UsesColorsWhenTermSupportsColors) {
SetEnv("TERM", "screen-256color"); // TERM supports colors.
EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY.
+ SetEnv("TERM", "tmux"); // TERM supports colors.
+ EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY.
+
+ SetEnv("TERM", "tmux-256color"); // TERM supports colors.
+ EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY.
+
SetEnv("TERM", "rxvt-unicode"); // TERM supports colors.
EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY.
diff --git a/3rdparty/googletest/googletest/test/gtest_xml_output_unittest.py b/3rdparty/googletest/googletest/test/gtest_xml_output_unittest.py
index f605d4ee2a2..bcd5975991d 100644
--- a/3rdparty/googletest/googletest/test/gtest_xml_output_unittest.py
+++ b/3rdparty/googletest/googletest/test/gtest_xml_output_unittest.py
@@ -64,20 +64,20 @@ EXPECTED_NON_EMPTY_XML = """<?xml version="1.0" encoding="UTF-8"?>
</testsuite>
<testsuite name="FailedTest" tests="1" failures="1" disabled="0" errors="0" time="*">
<testcase name="Fails" status="run" time="*" classname="FailedTest">
- <failure message="gtest_xml_output_unittest_.cc:*&#x0A;Value of: 2&#x0A;Expected: 1" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
-Value of: 2
-Expected: 1%(stack)s]]></failure>
+ <failure message="gtest_xml_output_unittest_.cc:*&#x0A; Expected: 1&#x0A;To be equal to: 2" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
+ Expected: 1
+To be equal to: 2%(stack)s]]></failure>
</testcase>
</testsuite>
<testsuite name="MixedResultTest" tests="3" failures="1" disabled="1" errors="0" time="*">
<testcase name="Succeeds" status="run" time="*" classname="MixedResultTest"/>
<testcase name="Fails" status="run" time="*" classname="MixedResultTest">
- <failure message="gtest_xml_output_unittest_.cc:*&#x0A;Value of: 2&#x0A;Expected: 1" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
-Value of: 2
-Expected: 1%(stack)s]]></failure>
- <failure message="gtest_xml_output_unittest_.cc:*&#x0A;Value of: 3&#x0A;Expected: 2" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
-Value of: 3
-Expected: 2%(stack)s]]></failure>
+ <failure message="gtest_xml_output_unittest_.cc:*&#x0A; Expected: 1&#x0A;To be equal to: 2" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
+ Expected: 1
+To be equal to: 2%(stack)s]]></failure>
+ <failure message="gtest_xml_output_unittest_.cc:*&#x0A; Expected: 2&#x0A;To be equal to: 3" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
+ Expected: 2
+To be equal to: 3%(stack)s]]></failure>
</testcase>
<testcase name="DISABLED_test" status="notrun" time="*" classname="MixedResultTest"/>
</testsuite>
@@ -209,7 +209,8 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
'gtest_no_test_unittest')
try:
os.remove(output_file)
- except OSError, e:
+ except OSError:
+ e = sys.exc_info()[1]
if e.errno != errno.ENOENT:
raise
diff --git a/3rdparty/googletest/googletest/test/gtest_xml_test_utils.py b/3rdparty/googletest/googletest/test/gtest_xml_test_utils.py
index 3d0c3b2c2dc..341956b54dd 100644
--- a/3rdparty/googletest/googletest/test/gtest_xml_test_utils.py
+++ b/3rdparty/googletest/googletest/test/gtest_xml_test_utils.py
@@ -101,7 +101,7 @@ class GTestXMLTestCase(gtest_test_utils.TestCase):
self.assertEquals(
len(expected_children), len(actual_children),
'number of child elements differ in element ' + actual_node.tagName)
- for child_id, child in expected_children.iteritems():
+ for child_id, child in expected_children.items():
self.assert_(child_id in actual_children,
'<%s> is not in <%s> (in element %s)' %
(child_id, actual_children, actual_node.tagName))
diff --git a/3rdparty/luv/.ci/install.bat b/3rdparty/luv/.ci/install.bat
deleted file mode 100644
index 1ee346dccc9..00000000000
--- a/3rdparty/luv/.ci/install.bat
+++ /dev/null
@@ -1,270 +0,0 @@
-@echo off
-
-cd %APPVEYOR_BUILD_FOLDER%
-
-:: =========================================================
-:: Set some defaults. Infer some variables.
-::
-:: These are set globally
-if "%LUA_VER%" NEQ "" (
- set LUA=lua
- set LUA_SHORTV=%LUA_VER:~0,3%
-) else (
- set LUA=luajit
- set LJ_SHORTV=%LJ_VER:~0,3%
- set LUA_SHORTV=5.1
-)
-
-:: defines LUA_DIR so Cmake can find this Lua install
-if "%LUA%"=="luajit" (
- set LUA_DIR=c:\lua\%platform%\lj%LJ_SHORTV%
-) else (
- set LUA_DIR=c:\lua\%platform%\%LUA_VER%
-)
-
-:: Now we declare a scope
-Setlocal EnableDelayedExpansion EnableExtensions
-
-if not defined LUAROCKS_URL set LUAROCKS_URL=http://keplerproject.github.io/luarocks/releases
-if not defined LUAROCKS_REPO set LUAROCKS_REPO=https://luarocks.org
-if not defined LUA_URL set LUA_URL=http://www.lua.org/ftp
-if defined NOCOMPAT (
- set COMPATFLAG=--nocompat
-) else (
- set COMPATFLAG=
-)
-if not defined LUAJIT_GIT_REPO set LUAJIT_GIT_REPO=https://github.com/LuaJIT/LuaJIT.git
-if not defined LUAJIT_URL set LUAJIT_URL=https://github.com/LuaJIT/LuaJIT/archive
-
-if not defined LR_EXTERNAL set LR_EXTERNAL=c:\external
-if not defined LUAROCKS_INSTALL set LUAROCKS_INSTALL=%LUA_DIR%\LuaRocks
-
-
-:: LuaRocks <= 2.2.2 used a versioned directory
-:: HEAD and newer versions do not, so act accordingly.
-if defined LR_ROOT goto :skiplrver
-
-if "%LUAROCKS_VER%" EQU "HEAD" (
- set LR_ROOT=%LUAROCKS_INSTALL%
- goto :skiplrver
-)
-set LR_ROOT=%LUAROCKS_INSTALL%
-if %LUAROCKS_VER:~0,1% LEQ 2 (
- if %LUAROCKS_VER:~2,1% LEQ 2 (
- if %LUAROCKS_VER:~4,1% LEQ 3 (
- set LR_ROOT=%LUAROCKS_INSTALL%\!LUAROCKS_VER:~0,3!
- )
- )
-)
-:skiplrver
-
-if not defined LR_SYSTREE set LR_SYSTREE=%LUAROCKS_INSTALL%\systree
-
-if not defined SEVENZIP set SEVENZIP=7z
-::
-:: =========================================================
-
-:: first create some necessary directories:
-mkdir downloads 2>NUL
-
-:: Download and compile Lua (or LuaJIT)
-if "%LUA%"=="luajit" (
- if not exist %LUA_DIR% (
- if "%LJ_SHORTV%"=="2.1" (
- :: Clone repository and checkout 2.1 branch
- set lj_source_folder=%APPVEYOR_BUILD_FOLDER%\downloads\luajit-%LJ_VER%
- if not exist !lj_source_folder! (
- echo Cloning git repo %LUAJIT_GIT_REPO% !lj_source_folder!
- git clone %LUAJIT_GIT_REPO% !lj_source_folder! || call :die "Failed to clone repository"
- ) else (
- cd !lj_source_folder!
- git pull || call :die "Failed to update repository"
- )
- cd !lj_source_folder!\src
- git checkout v2.1 || call :die
- ) else (
- set lj_source_folder=%APPVEYOR_BUILD_FOLDER%\downloads\luajit-%LJ_VER%
- if not exist !lj_source_folder! (
- echo Downloading... %LUAJIT_URL%/v%LJ_VER%.tar.gz
- curl --location --silent --fail --max-time 120 --connect-timeout 30 %LUAJIT_URL%/v%LJ_VER%.tar.gz | %SEVENZIP% x -si -so -tgzip | %SEVENZIP% x -si -ttar -aoa -odownloads
- )
- cd !lj_source_folder!\src
- )
- :: Compiles LuaJIT
- if "%Configuration%"=="MinGW" (
- call mingw32-make
- ) else (
- call msvcbuild.bat
- )
-
- mkdir %LUA_DIR% 2> NUL
- for %%a in (bin bin\lua bin\lua\jit include lib) do ( mkdir "%LUA_DIR%\%%a" )
-
- for %%a in (luajit.exe lua51.dll) do ( move "!lj_source_folder!\src\%%a" "%LUA_DIR%\bin" )
- copy "%LUA_DIR%\bin\luajit.exe" "%LUA_DIR%\bin\lua.exe"
-
- move "!lj_source_folder!\src\lua51.lib" "%LUA_DIR%\lib"
- for %%a in (lauxlib.h lua.h lua.hpp luaconf.h lualib.h luajit.h) do (
- copy "!lj_source_folder!\src\%%a" "%LUA_DIR%\include"
- )
-
- copy "!lj_source_folder!\src\jit\*.lua" "%LUA_DIR%\bin\lua\jit"
-
- ) else (
- echo LuaJIT %LJ_VER% already installed at %LUA_DIR%
- )
-) else (
- if not exist %LUA_DIR% (
- :: Download and compile Lua
- if not exist downloads\lua-%LUA_VER% (
- curl --silent --fail --max-time 120 --connect-timeout 30 %LUA_URL%/lua-%LUA_VER%.tar.gz | %SEVENZIP% x -si -so -tgzip | %SEVENZIP% x -si -ttar -aoa -odownloads
- )
-
- mkdir downloads\lua-%LUA_VER%\etc 2> NUL
- copy %~dp0\winmake.bat downloads\lua-%LUA_VER%\etc\winmake.bat
-
- cd downloads\lua-%LUA_VER%
- call etc\winmake %COMPATFLAG%
- call etc\winmake install %LUA_DIR%
- ) else (
- echo Lua %LUA_VER% already installed at %LUA_DIR%
- )
-)
-
-if not exist %LUA_DIR%\bin\%LUA%.exe call :die "Missing Lua interpreter at %LUA_DIR%\bin\%LUA%.exe"
-
-set PATH=%LUA_DIR%\bin;%PATH%
-call !LUA! -v
-
-
-
-:: ==========================================================
-:: LuaRocks
-:: ==========================================================
-
-if not exist "%LR_ROOT%" (
- :: Downloads and installs LuaRocks
- cd %APPVEYOR_BUILD_FOLDER%
-
- if %LUAROCKS_VER%==HEAD (
- set lr_source_folder=%APPVEYOR_BUILD_FOLDER%\downloads\luarocks-%LUAROCKS_VER%-win32
- if not exist !lr_source_folder! (
- git clone https://github.com/keplerproject/luarocks.git --single-branch --depth 1 !lr_source_folder! || call :die "Failed to clone LuaRocks repository"
- ) else (
- cd !lr_source_folder!
- git pull || call :die "Failed to update LuaRocks repository"
- )
- ) else (
- if not exist downloads\luarocks-%LUAROCKS_VER%-win32.zip (
- echo Downloading LuaRocks...
- curl --silent --fail --max-time 120 --connect-timeout 30 --output downloads\luarocks-%LUAROCKS_VER%-win32.zip %LUAROCKS_URL%/luarocks-%LUAROCKS_VER%-win32.zip
- %SEVENZIP% x -aoa -odownloads downloads\luarocks-%LUAROCKS_VER%-win32.zip
- )
- )
-
- cd downloads\luarocks-%LUAROCKS_VER%-win32
- if "%Configuration%"=="MinGW" (
- call install.bat /LUA %LUA_DIR% /Q /LV %LUA_SHORTV% /P "%LUAROCKS_INSTALL%" /TREE "%LR_SYSTREE%" /MW
- ) else (
- call install.bat /LUA %LUA_DIR% /Q /LV %LUA_SHORTV% /P "%LUAROCKS_INSTALL%" /TREE "%LR_SYSTREE%"
- )
-
- :: Configures LuaRocks to instruct CMake the correct generator to use. Else, CMake will pick the highest
- :: Visual Studio version installed
- if "%Configuration%"=="MinGW" (
- echo cmake_generator = "MinGW Makefiles" >> %LUAROCKS_INSTALL%\config-%LUA_SHORTV%.lua
- ) else (
- set MSVS_GENERATORS[2008]=Visual Studio 9 2008
- set MSVS_GENERATORS[2010]=Visual Studio 10 2010
- set MSVS_GENERATORS[2012]=Visual Studio 11 2012
- set MSVS_GENERATORS[2013]=Visual Studio 12 2013
- set MSVS_GENERATORS[2015]=Visual Studio 14 2015
-
- set CMAKE_GENERATOR=!MSVS_GENERATORS[%Configuration%]!
- if "%platform%" EQU "x64" (set CMAKE_GENERATOR=!CMAKE_GENERATOR! Win64)
-
- echo cmake_generator = "!CMAKE_GENERATOR!" >> %LUAROCKS_INSTALL%\config-%LUA_SHORTV%.lua
- )
-)
-
-if not exist "%LR_ROOT%" call :die "LuaRocks not found at %LR_ROOT%"
-
-set PATH=%LR_ROOT%;%LR_SYSTREE%\bin;%PATH%
-
-:: Lua will use just the system rocks
-set LUA_PATH=%LR_ROOT%\lua\?.lua;%LR_ROOT%\lua\?\init.lua
-set LUA_PATH=%LUA_PATH%;%LR_SYSTREE%\share\lua\%LUA_SHORTV%\?.lua
-set LUA_PATH=%LUA_PATH%;%LR_SYSTREE%\share\lua\%LUA_SHORTV%\?\init.lua
-set LUA_PATH=%LUA_PATH%;.\?.lua;.\?\init.lua
-set LUA_CPATH=%LR_SYSTREE%\lib\lua\%LUA_SHORTV%\?.dll;.\?.dll
-
-call luarocks --version || call :die "Error with LuaRocks installation"
-call luarocks list
-
-
-if not exist "%LR_EXTERNAL%" (
- mkdir "%LR_EXTERNAL%"
- mkdir "%LR_EXTERNAL%\lib"
- mkdir "%LR_EXTERNAL%\include"
-)
-
-set PATH=%LR_EXTERNAL%;%PATH%
-
-:: Exports the following variables:
-:: (beware of whitespace between & and ^ below)
-endlocal & set PATH=%PATH%&^
-set LR_SYSTREE=%LR_SYSTREE%&^
-set LUA_PATH=%LUA_PATH%&^
-set LUA_CPATH=%LUA_CPATH%&^
-set LR_EXTERNAL=%LR_EXTERNAL%
-
-echo.
-echo ======================================================
-if "%LUA%"=="luajit" (
- echo Installation of LuaJIT %LJ_VER% and LuaRocks %LUAROCKS_VER% done.
-) else (
- echo Installation of Lua %LUA_VER% and LuaRocks %LUAROCKS_VER% done.
- if defined NOCOMPAT echo Lua was built with compatibility flags disabled.
-)
-echo Platform - %platform%
-echo LUA - %LUA%
-echo LUA_SHORTV - %LUA_SHORTV%
-echo LJ_SHORTV - %LJ_SHORTV%
-echo LUA_PATH - %LUA_PATH%
-echo LUA_CPATH - %LUA_CPATH%
-echo.
-echo LR_EXTERNAL - %LR_EXTERNAL%
-echo ======================================================
-echo.
-
-goto :eof
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-:: This blank space is intentional. If you see errors like "The system cannot find the batch label specified 'foo'"
-:: then try adding or removing blank lines lines above.
-:: Yes, really.
-:: http://stackoverflow.com/questions/232651/why-the-system-cannot-find-the-batch-label-specified-is-thrown-even-if-label-e
-
-:: helper functions:
-
-:: for bailing out when an error occurred
-:die %1
-echo %1
-exit /B 1
-goto :eof
diff --git a/3rdparty/luv/.ci/platform.sh b/3rdparty/luv/.ci/platform.sh
deleted file mode 100644
index 7259a7d6369..00000000000
--- a/3rdparty/luv/.ci/platform.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-if [ -z "${PLATFORM:-}" ]; then
- PLATFORM=$TRAVIS_OS_NAME;
-fi
-
-if [ "$PLATFORM" == "osx" ]; then
- PLATFORM="macosx";
-fi
-
-if [ -z "$PLATFORM" ]; then
- if [ "$(uname)" == "Linux" ]; then
- PLATFORM="linux";
- else
- PLATFORM="macosx";
- fi;
-fi
diff --git a/3rdparty/luv/.ci/set_compiler_env.bat b/3rdparty/luv/.ci/set_compiler_env.bat
deleted file mode 100644
index 7e8462ec57e..00000000000
--- a/3rdparty/luv/.ci/set_compiler_env.bat
+++ /dev/null
@@ -1,40 +0,0 @@
-@echo off
-
-:: Now we declare a scope
-Setlocal EnableDelayedExpansion EnableExtensions
-
-if not defined Configuration set Configuration=2015
-
-if "%Configuration%"=="MinGW" ( goto :mingw )
-
-set arch=x86
-
-if "%platform%" EQU "x64" ( set arch=x86_amd64 )
-
-if "%Configuration%"=="2015" (
- set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
-)
-
-if "%Configuration%"=="2013" (
- set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"
-)
-
-if "%Configuration%"=="2012" (
- set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"
-)
-
-if "%Configuration%"=="2010" (
- set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
-)
-
-if "%Configuration%"=="2008" (
- set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
-)
-
-:: Visual Studio detected
-endlocal & call %SET_VS_ENV% %arch%
-goto :eof
-
-:: MinGW detected
-:mingw
-endlocal & set PATH=c:\mingw\bin;%PATH%
diff --git a/3rdparty/luv/.ci/setenv_lua.sh b/3rdparty/luv/.ci/setenv_lua.sh
deleted file mode 100644
index 55454389398..00000000000
--- a/3rdparty/luv/.ci/setenv_lua.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-export PATH=${PATH}:$HOME/.lua:$HOME/.local/bin:${TRAVIS_BUILD_DIR}/install/luarocks/bin
-bash .ci/setup_lua.sh
-eval `$HOME/.lua/luarocks path`
diff --git a/3rdparty/luv/.ci/setup_lua.sh b/3rdparty/luv/.ci/setup_lua.sh
deleted file mode 100644
index f8963331767..00000000000
--- a/3rdparty/luv/.ci/setup_lua.sh
+++ /dev/null
@@ -1,122 +0,0 @@
-#! /bin/bash
-
-# A script for setting up environment for travis-ci testing.
-# Sets up Lua and Luarocks.
-# LUA must be "lua5.1", "lua5.2" or "luajit".
-# luajit2.0 - master v2.0
-# luajit2.1 - master v2.1
-
-set -eufo pipefail
-
-LUAJIT_VERSION="2.0.4"
-LUAJIT_BASE="LuaJIT-$LUAJIT_VERSION"
-
-source .ci/platform.sh
-
-LUA_HOME_DIR=$TRAVIS_BUILD_DIR/install/lua
-
-LR_HOME_DIR=$TRAVIS_BUILD_DIR/install/luarocks
-
-mkdir $HOME/.lua
-
-LUAJIT="no"
-
-if [ "$PLATFORM" == "macosx" ]; then
- if [ "$LUA" == "luajit" ]; then
- LUAJIT="yes";
- fi
- if [ "$LUA" == "luajit2.0" ]; then
- LUAJIT="yes";
- fi
- if [ "$LUA" == "luajit2.1" ]; then
- LUAJIT="yes";
- fi;
-elif [ "$(expr substr $LUA 1 6)" == "luajit" ]; then
- LUAJIT="yes";
-fi
-
-mkdir -p "$LUA_HOME_DIR"
-
-if [ "$LUAJIT" == "yes" ]; then
-
- if [ "$LUA" == "luajit" ]; then
- curl --location https://github.com/LuaJIT/LuaJIT/archive/v$LUAJIT_VERSION.tar.gz | tar xz;
- else
- git clone https://github.com/LuaJIT/LuaJIT.git $LUAJIT_BASE;
- fi
-
- cd $LUAJIT_BASE
-
- if [ "$LUA" == "luajit2.1" ]; then
- git checkout v2.1;
- # force the INSTALL_TNAME to be luajit
- perl -i -pe 's/INSTALL_TNAME=.+/INSTALL_TNAME= luajit/' Makefile
- fi
-
- make && make install PREFIX="$LUA_HOME_DIR"
-
- ln -s $LUA_HOME_DIR/bin/luajit $HOME/.lua/luajit
- ln -s $LUA_HOME_DIR/bin/luajit $HOME/.lua/lua;
-
-else
-
- if [ "$LUA" == "lua5.1" ]; then
- curl http://www.lua.org/ftp/lua-5.1.5.tar.gz | tar xz
- cd lua-5.1.5;
- elif [ "$LUA" == "lua5.2" ]; then
- curl http://www.lua.org/ftp/lua-5.2.4.tar.gz | tar xz
- cd lua-5.2.4;
- elif [ "$LUA" == "lua5.3" ]; then
- curl http://www.lua.org/ftp/lua-5.3.2.tar.gz | tar xz
- cd lua-5.3.2;
- fi
-
- # Build Lua without backwards compatibility for testing
- perl -i -pe 's/-DLUA_COMPAT_(ALL|5_2)//' src/Makefile
- make $PLATFORM
- make INSTALL_TOP="$LUA_HOME_DIR" install;
-
- ln -s $LUA_HOME_DIR/bin/lua $HOME/.lua/lua
- ln -s $LUA_HOME_DIR/bin/luac $HOME/.lua/luac;
-
-fi
-
-cd $TRAVIS_BUILD_DIR
-
-lua -v
-
-LUAROCKS_BASE=luarocks-$LUAROCKS
-
-curl --location http://luarocks.org/releases/$LUAROCKS_BASE.tar.gz | tar xz
-
-cd $LUAROCKS_BASE
-
-if [ "$LUA" == "luajit" ]; then
- ./configure --lua-suffix=jit --with-lua-include="$LUA_HOME_DIR/include/luajit-2.0" --prefix="$LR_HOME_DIR";
-elif [ "$LUA" == "luajit2.0" ]; then
- ./configure --lua-suffix=jit --with-lua-include="$LUA_HOME_DIR/include/luajit-2.0" --prefix="$LR_HOME_DIR";
-elif [ "$LUA" == "luajit2.1" ]; then
- ./configure --lua-suffix=jit --with-lua-include="$LUA_HOME_DIR/include/luajit-2.1" --prefix="$LR_HOME_DIR";
-else
- ./configure --with-lua="$LUA_HOME_DIR" --prefix="$LR_HOME_DIR"
-fi
-
-make build && make install
-
-ln -s $LR_HOME_DIR/bin/luarocks $HOME/.lua/luarocks
-
-cd $TRAVIS_BUILD_DIR
-
-luarocks --version
-
-rm -rf $LUAROCKS_BASE
-
-if [ "$LUAJIT" == "yes" ]; then
- rm -rf $LUAJIT_BASE;
-elif [ "$LUA" == "lua5.1" ]; then
- rm -rf lua-5.1.5;
-elif [ "$LUA" == "lua5.2" ]; then
- rm -rf lua-5.2.4;
-elif [ "$LUA" == "lua5.3" ]; then
- rm -rf lua-5.3.2;
-fi
diff --git a/3rdparty/luv/.ci/winmake.bat b/3rdparty/luv/.ci/winmake.bat
deleted file mode 100644
index dcad55d36f7..00000000000
--- a/3rdparty/luv/.ci/winmake.bat
+++ /dev/null
@@ -1,457 +0,0 @@
-@ECHO OFF
-SETLOCAL ENABLEDELAYEDEXPANSION
-
-REM *****************************
-REM * Customization section *
-REM *****************************
-
-REM use the /help option for generic usage information
-
-REM Where is the source code located (the unpacked Lua source archive, toplevel dir)
-SET SOURCETREE=.\
-
-REM set the toolchain to either MS or GCC (allcaps), leave blank to autodetect
-SET TOOLCHAIN=
-
-REM set the compatibility flags, defaults to empty for 5.1, -DLUA_COMPAT_ALL for 5.2,
-REM and -DLUA_COMPAT_5_2 for 5.3, which are the same as the unix make files
-REM This setting can be overridden with the --nocompat flag
-SET COMPATFLAG=
-
-
-
-
-
-
-
-
-
-REM **********************************
-REM * Nothing to customize below *
-REM **********************************
-
-SET BATCHNAME=%~n0
-SET SOURCE=%SOURCETREE%src\
-SET LUA_H=%SOURCE%lua.h
-SET CURDIR=%CD%
-
-REM the following line ends with a TAB. DO NOT REMOVE IT!
-SET TABCHAR=
-REM Define LF to contain a linefeed character
-set ^"LFCHAR=^
-
-^" The above empty line is critical. DO NOT REMOVE
-
-
-REM Supported toolchains (allcaps)
-SET TOOLCHAINS=MS GCC
-REM Commands which, if exiting without error, indicate presence of the toolchain
-SET CHECK_GCC=gcc --version
-SET CHECK_MS=cl
-
-REM **********************************
-REM * Check for help request *
-REM **********************************
-
-SET HELPCMDS=help -help --help /help ? -? /?
-for %%L in ("!LFCHAR!") do for /f %%a in ("!HELPCMDS: =%%~L!") do (
- if "%%a"=="%~1" (
- echo.
- echo Builds a standalone Lua installation. Supports Lua version 5.1, 5.2 and 5.3.
- echo Your compiler must be in the system path, and this "%BATCHNAME%.bat" file must be located
- echo in ".\etc\" in the unpacked Lua source archive.
- echo.
- echo USAGE etc\%BATCHNAME% [FLAG] [COMMAND] [...]
- echo ^(execute from the root of the unpacked archive^)
- echo.
- echo Commands;
- echo clean : cleans the source tree of build ^(intermediate^) files
- echo install [path] : installs the build results into "path"
- echo local : installs into ".\local\" in the unpacked Lua source structure
- echo [toolchain] : uses a specific toolchain to build. If not provided then supported
- echo toolchains will be tested and the first available will be picked.
- echo Supported toolchains are: "%TOOLCHAINS%" ^(must use ALLCAPS^)
- echo.
- echo Flags;
- echo --nocompat : Specifies that no compatibility flags should be set when building.
- echo If not specified, the default compatibility flags will be used.
- echo.
- echo Example use;
- echo set PATH=C:\path\to\your\compiler\;%%PATH%%
- echo etc\%BATCHNAME% clean
- echo etc\%BATCHNAME%
- echo etc\%BATCHNAME% --nocompat GCC
- echo etc\%BATCHNAME% install "C:\Program Files\Lua"
- echo.
- goto :EXITOK
- )
-)
-
-REM **********************************
-REM * Check commandline *
-REM **********************************
-
-SET CMDOK=FALSE
-if "%~1"=="" (
- SET CMDOK=TRUE
-)
-for %%a in (local install clean) do (
- if "%%a"=="%~1" (
- SET CMDOK=TRUE
- )
-)
-for %%a in (--nocompat) do (
- if "%%a"=="%~1" (
- SET NOCOMPAT=TRUE
- if "%~2"=="" (
- SET CMDOK=TRUE
- )
- SHIFT
- )
-)
-for %%a in (%TOOLCHAINS%) do (
- if "%%a"=="%~1" (
- SET CMDOK=TRUE
- SET TOOLCHAIN=%~1
- )
-)
-if NOT %CMDOK%==TRUE (
- echo.
- echo Unknown command or toolchain specified.
- goto :EXITERROR
-)
-
-REM **************************************
-REM * Check for cleaning *
-REM **************************************
-
-if "%1"=="clean" (
- if NOT [%2]==[] (
- echo.
- echo ERROR: The clean command does not take extra parameters.
- ) else (
- echo Cleaning...
- if exist "%SOURCE%*.exe" del "%SOURCE%*.exe"
- if exist "%SOURCE%*.dll" del "%SOURCE%*.dll"
- if exist "%SOURCE%*.o" del "%SOURCE%*.o"
- if exist "%SOURCE%*.a" del "%SOURCE%*.a"
- if exist "%SOURCE%*.obj" del "%SOURCE%*.obj"
- if exist "%SOURCE%*.manifest" del "%SOURCE%*.manifest"
- if exist "%SOURCE%*.lib" del "%SOURCE%*.lib"
- echo Done.
- )
- goto :EXITOK
-)
-
-REM **************************************************
-REM * Fetch the Lua version from the source code *
-REM **************************************************
-
-Echo.
-Echo Checking source code to extract Lua version...
-IF NOT EXIST %LUA_H% (
- Echo Cannot locate Lua header file; %LUA_H%
- goto :EXITERROR
-)
-
-findstr /R /C:"#define[ %TABCHAR%][ %TABCHAR%]*LUA_VERSION_MAJOR" %LUA_H% > NUL
-if NOT %ERRORLEVEL%==0 (
- rem ECHO We've got a Lua version 5.1
- rem findstr /R /C:"#define[ %TABCHAR%][ %TABCHAR%]*LUA_VERSION[ %TABCHAR%]" %LUA_H%
- SET LUA_VER=5.1
-) else (
- rem ECHO We've got a Lua version 5.2+
- rem findstr /R /C:"#define[ %TABCHAR%][ %TABCHAR%]*LUA_VERSION_MAJOR[ %TABCHAR%]" %LUA_H%
- rem findstr /R /C:"#define[ %TABCHAR%][ %TABCHAR%]*LUA_VERSION_MINOR[ %TABCHAR%]" %LUA_H%
-
- for /F "delims=" %%a in ('findstr /R /C:"#define[ %TABCHAR%][ %TABCHAR%]*LUA_VERSION_MAJOR[ %TABCHAR%]" %LUA_H%') do set LUA_MAJOR=%%a
- SET LUA_MAJOR=!LUA_MAJOR:#define=!
- SET LUA_MAJOR=!LUA_MAJOR:LUA_VERSION_MAJOR=!
- SET LUA_MAJOR=!LUA_MAJOR: =!
- SET LUA_MAJOR=!LUA_MAJOR:%TABCHAR%=!
- SET LUA_MAJOR=!LUA_MAJOR:"=!
- SET LUA_MAJOR=!LUA_MAJOR:~0,1!
-
- for /F "delims=" %%a in ('findstr /R /C:"#define[ %TABCHAR%][ %TABCHAR%]*LUA_VERSION_MINOR[ %TABCHAR%]" %LUA_H%') do set LUA_MINOR=%%a
- SET LUA_MINOR=!LUA_MINOR:#define=!
- SET LUA_MINOR=!LUA_MINOR:LUA_VERSION_MINOR=!
- SET LUA_MINOR=!LUA_MINOR: =!
- SET LUA_MINOR=!LUA_MINOR:%TABCHAR%=!
- SET LUA_MINOR=!LUA_MINOR:"=!
- SET LUA_MINOR=!LUA_MINOR:~0,1!
-
- SET LUA_VER=!LUA_MAJOR!.!LUA_MINOR!
-)
-SET LUA_SVER=!LUA_VER:.=!
-
-Echo Lua version found: %LUA_VER%
-Echo.
-
-REM **************************************
-REM * Set some Lua version specifics *
-REM **************************************
-
-REM FILES_CORE; files for Lua core (+lauxlib, needed for Luac)
-REM FILES_LIB; files for Lua standard libraries
-REM FILES_DLL; vm files to be build with dll option
-REM FILES_OTH; vm files to be build without dll, for static linking
-
-if %LUA_SVER%==51 (
- set FILES_CORE=lapi lcode ldebug ldo ldump lfunc lgc llex lmem lobject lopcodes lparser lstate lstring ltable ltm lundump lvm lzio lauxlib
- set FILES_LIB=lbaselib ldblib liolib lmathlib loslib ltablib lstrlib loadlib linit
- set FILES_DLL=lua
- set FILES_OTH=luac print
- set INSTALL_H=lauxlib.h lua.h luaconf.h lualib.h ..\etc\lua.hpp
-)
-if %LUA_SVER%==52 (
- set FILES_CORE=lapi lcode lctype ldebug ldo ldump lfunc lgc llex lmem lobject lopcodes lparser lstate lstring ltable ltm lundump lvm lzio lauxlib
- set FILES_LIB=lbaselib lbitlib lcorolib ldblib liolib lmathlib loslib lstrlib ltablib loadlib linit
- set FILES_DLL=lua
- set FILES_OTH=luac
- set INSTALL_H=lauxlib.h lua.h lua.hpp luaconf.h lualib.h
- if "%COMPATFLAG%"=="" (
- set COMPATFLAG=-DLUA_COMPAT_ALL
- )
-)
-if %LUA_SVER%==53 (
- set FILES_CORE=lapi lcode lctype ldebug ldo ldump lfunc lgc llex lmem lobject lopcodes lparser lstate lstring ltable ltm lundump lvm lzio lauxlib
- set FILES_LIB=lbaselib lbitlib lcorolib ldblib liolib lmathlib loslib lstrlib ltablib lutf8lib loadlib linit
- set FILES_DLL=lua
- set FILES_OTH=luac
- set INSTALL_H=lauxlib.h lua.h lua.hpp luaconf.h lualib.h
- if "%COMPATFLAG%"=="" (
- set COMPATFLAG=-DLUA_COMPAT_5_2
- )
-)
-
-if "%NOCOMPAT%"=="TRUE" (
- set COMPATFLAG=
-)
-
-SET FILES_BASE=%FILES_DLL% %FILES_CORE% %FILES_LIB%
-
-if "%FILES_BASE%"=="" (
- Echo Unknown Lua version; %LUA_VER%
- goto :EXITERROR
-)
-
-REM *********************************
-REM * Check available toolchain *
-REM *********************************
-
-if [%TOOLCHAIN%]==[] (
- Echo Testing for MS...
- %CHECK_MS%
- IF !ERRORLEVEL!==0 SET TOOLCHAIN=MS
-)
-if [%TOOLCHAIN%]==[] (
- Echo Testing for GCC...
- %CHECK_GCC%
- IF !ERRORLEVEL!==0 SET TOOLCHAIN=GCC
-)
-if [%TOOLCHAIN%]==[] (
- Echo No supported toolchain found ^(please make sure it is in the system path^)
- goto :EXITERROR
-)
-
-REM ***************************
-REM * Configure toolchain *
-REM ***************************
-
-if %TOOLCHAIN%==GCC (
- echo Using GCC toolchain...
- SET OBJEXT=o
- SET LIBFILE=liblua%LUA_SVER%.a
-)
-if %TOOLCHAIN%==MS (
- echo Using Microsoft toolchain...
- SET OBJEXT=obj
- SET LIBFILE=lua%LUA_SVER%.lib
-)
-echo.
-
-REM **************************************
-REM * Check for installing *
-REM **************************************
-
-if "%1"=="install" (
- if "%~2"=="" (
- echo.
- echo ERROR: The install command requires a path where to install to.
- goto :EXITERROR
- )
- SET TARGETPATH=%~2
-)
-if "%1"=="local" (
- if NOT "%~2"=="" (
- echo.
- echo ERROR: The local command does not take extra parameters.
- goto :EXITERROR
- )
- SET TARGETPATH=%SOURCETREE%local
-)
-if NOT "%TARGETPATH%"=="" (
- mkdir "%TARGETPATH%\bin"
- mkdir "%TARGETPATH%\include"
- mkdir "%TARGETPATH%\lib\lua\%LUA_VER%"
- mkdir "%TARGETPATH%\man\man1"
- mkdir "%TARGETPATH%\share\lua\%LUA_VER%"
- copy "%SOURCE%lua.exe" "%TARGETPATH%\bin"
- copy "%SOURCE%luac.exe" "%TARGETPATH%\bin"
- copy "%SOURCE%lua%LUA_SVER%.dll" "%TARGETPATH%\bin"
- for %%a in (%INSTALL_H%) do ( copy "%SOURCE%%%a" "%TARGETPATH%\include" )
- copy "%SOURCE%%LIBFILE%" "%TARGETPATH%\lib"
- copy "%SOURCETREE%doc\lua.1" "%TARGETPATH%\man\man1"
- copy "%SOURCETREE%doc\luac.1" "%TARGETPATH%\man\man1"
-
- echo Installation completed in "%TARGETPATH%".
- goto :EXITOK
-)
-
-REM ***********************
-REM * Compile sources *
-REM ***********************
-goto :after_compile_function
-:compile_function
- REM Params: %1 is filelist (must be quoted)
- REM Return: same list, with the object file extension included, will be stored in global OBJLIST
-
- for %%a in (%~1) do (
- SET FILENAME=%%a
- if %TOOLCHAIN%==GCC (
- SET COMPCMD=gcc -O2 -Wall !EXTRAFLAG! !COMPATFLAG! -c -o !FILENAME!.%OBJEXT% !FILENAME!.c
- )
- if %TOOLCHAIN%==MS (
- SET COMPCMD=cl /nologo /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE !COMPATFLAG! !EXTRAFLAG! !FILENAME!.c
- )
- echo !COMPCMD!
- !COMPCMD!
- SET OBJLIST=!OBJLIST! !FILENAME!.%OBJEXT%
- )
-
-goto :eof
-:after_compile_function
-
-CD %SOURCE%
-REM Traverse the 4 lists of source files
-
-for %%b in (CORE LIB DLL OTH) do (
- SET LTYPE=%%b
- SET OBJLIST=
- if !LTYPE!==OTH (
- REM OTH is the only list of files build without DLL option
- SET EXTRAFLAG=
- ) else (
- SET EXTRAFLAG=-DLUA_BUILD_AS_DLL
- )
- if !LTYPE!==CORE SET FILELIST=%FILES_CORE%
- if !LTYPE!==LIB SET FILELIST=%FILES_LIB%
- if !LTYPE!==DLL SET FILELIST=%FILES_DLL%
- if !LTYPE!==OTH SET FILELIST=%FILES_OTH%
-
- echo Now compiling !LTYPE! file set...
- call:compile_function "!FILELIST!"
-
- if !LTYPE!==CORE SET FILES_CORE_O=!OBJLIST!
- if !LTYPE!==LIB SET FILES_LIB_O=!OBJLIST!
- if !LTYPE!==DLL SET FILES_DLL_O=!OBJLIST!
- if !LTYPE!==OTH SET FILES_OTH_O=!OBJLIST!
-)
-
-
-REM ****************************
-REM * Link GCC based files *
-REM ****************************
-
-if %TOOLCHAIN%==GCC (
- REM Link the LuaXX.dll file
- SET LINKCMD=gcc -shared -o lua%LUA_SVER%.dll %FILES_CORE_O% %FILES_LIB_O%
- echo !LINKCMD!
- !LINKCMD!
-
- REM strip from LuaXX.dll
- SET RANCMD=strip --strip-unneeded lua%LUA_SVER%.dll
- echo !RANCMD!
- !RANCMD!
-
- REM Link the Lua.exe file
- SET LINKCMD=gcc -o lua.exe -s lua.%OBJEXT% lua%LUA_SVER%.dll -lm
- echo !LINKCMD!
- !LINKCMD!
-
- REM create lib archive
- SET LIBCMD=ar rcu liblua%LUA_SVER%.a %FILES_CORE_O% %FILES_LIB_O%
- echo !LIBCMD!
- !LIBCMD!
-
- REM Speedup index using ranlib
- SET RANCMD=ranlib liblua%LUA_SVER%.a
- echo !RANCMD!
- !RANCMD!
-
- REM Link Luac.exe file
- SET LINKCMD=gcc -o luac.exe %FILES_OTH_O% liblua%LUA_SVER%.a -lm
- echo !LINKCMD!
- !LINKCMD!
-
-)
-
-
-REM ****************************
-REM * Link MS based files *
-REM ****************************
-
-if %TOOLCHAIN%==MS (
- REM Link the LuaXX.dll file, and LuaXX.obj
- SET LINKCMD=link /nologo /DLL /out:lua%LUA_SVER%.dll %FILES_CORE_O% %FILES_LIB_O%
- echo !LINKCMD!
- !LINKCMD!
-
- REM handle dll manifest
- if exist lua%LUA_SVER%.dll.manifest (
- SET MANICMD=mt /nologo -manifest lua%LUA_SVER%.dll.manifest -outputresource:lua%LUA_SVER%.dll;2
- echo !MANICMD!
- !MANICMD!
- )
-
- REM Link Lua.exe
- SET LINKCMD=link /nologo /out:lua.exe lua.%OBJEXT% lua%LUA_SVER%.lib
- echo !LINKCMD!
- !LINKCMD!
-
- REM handle manifest
- if exist lua.exe.manifest (
- SET MANICMD=mt /nologo -manifest lua.exe.manifest -outputresource:lua.exe
- echo !MANICMD!
- !MANICMD!
- )
-
- REM Link Luac.exe
- SET LINKCMD=link /nologo /out:luac.exe %FILES_OTH_O% %FILES_CORE_O%
- echo !LINKCMD!
- !LINKCMD!
-
- REM handle manifest
- if exist luac.exe.manifest (
- SET MANICMD=mt /nologo -manifest luac.exe.manifest -outputresource:luac.exe
- echo !MANICMD!
- !MANICMD!
- )
-)
-
-CD %CURDIR%
-
-REM ****************************
-REM * Finished building *
-REM ****************************
-
-echo.
-echo Build completed.
-goto :EXITOK
-
-:EXITOK
-exit /B 0
-
-:EXITERROR
-echo For help try; etc\%BATCHNAME% /help
-exit /B 1
diff --git a/3rdparty/luv/.gitignore b/3rdparty/luv/.gitignore
deleted file mode 100644
index 8bcf497a42c..00000000000
--- a/3rdparty/luv/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-build
-libluv.a
-libluv.so
-luv.so
-luv.dll
-luajit.exe
-luv-*.tar.gz
-luv-*.src.rock
-luv-*/
-build.luarocks/
diff --git a/3rdparty/luv/.travis.yml b/3rdparty/luv/.travis.yml
deleted file mode 100644
index b6909b894cc..00000000000
--- a/3rdparty/luv/.travis.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-language: c
-sudo: false
-
-addons:
- apt:
- sources:
- - kalakris-cmake
- packages:
- - cmake
-
-env:
- global:
- - LUAROCKS=2.3.0
- matrix:
- - WITH_LUA_ENGINE=Lua LUA=lua5.3
- - WITH_LUA_ENGINE=LuaJIT LUA=luajit2.1
- - PROCESS_CLEANUP_TEST=1 LUA=lua5.2
-
-os:
- - linux
- - osx
-
-before_install:
- - git submodule update --init --recursive
- - git submodule update --recursive
-
-script:
- - if [ "x$PROCESS_CLEANUP_TEST" = "x" ]; then make && make test; else ./tests/test-sigchld-after-lua_close.sh; fi
- # Test rock installation
- - source .ci/setenv_lua.sh
- - luarocks make
- - test $PWD = `lua -e "print(require'luv'.cwd())"`
-
-notifications:
- email: true
- irc: "irc.freenode.org#luvit"
diff --git a/3rdparty/luv/CMakeLists.txt b/3rdparty/luv/CMakeLists.txt
deleted file mode 100644
index 9f079670de2..00000000000
--- a/3rdparty/luv/CMakeLists.txt
+++ /dev/null
@@ -1,191 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-
-if(POLICY CMP0053)
- cmake_policy(SET CMP0053 NEW) # faster evaluation of variable references
-endif()
-
-project (luv C ASM)
-
-set(LUV_VERSION_MAJOR 1)
-set(LUV_VERSION_MINOR 8)
-set(LUV_VERSION_PATCH 0)
-set(LUV_VERSION ${LUV_VERSION_MAJOR}.${LUV_VERSION_MINOR}.${LUV_VERSION_PATCH})
-
-option(BUILD_MODULE "Build as module" ON)
-option(BUILD_SHARED_LIBS "Build shared library" OFF)
-option(WITH_SHARED_LIBUV "Link to a shared libuv library instead of static linking" OFF)
-
-if (NOT WITH_LUA_ENGINE)
- set(WITH_LUA_ENGINE "LuaJIT"
- CACHE STRING "Link to LuaJIT or PUC Lua" FORCE)
- set_property(CACHE WITH_LUA_ENGINE
- PROPERTY STRINGS "Lua;LuaJIT")
-endif (NOT WITH_LUA_ENGINE)
-
-if (NOT LUA_BUILD_TYPE)
- set(LUA_BUILD_TYPE "Static"
- CACHE STRING "Build Lua/LuaJIT as static, dynamic libary, or use system one" FORCE)
- set_property(CACHE LUA_BUILD_TYPE
- PROPERTY STRINGS "Static;Dynamic;System")
-endif (NOT LUA_BUILD_TYPE)
-
-if (WITH_LUA_ENGINE STREQUAL Lua)
- add_definitions(-DLUA_USE_DLOPEN)
- set(USE_LUAJIT OFF)
-else ()
- set(USE_LUAJIT ON)
-endif ()
-
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
-
-if (WITH_SHARED_LIBUV)
- find_package(Libuv)
- if (LIBUV_FOUND)
- include_directories(${LIBUV_INCLUDE_DIR})
- endif (LIBUV_FOUND)
-else (WITH_SHARED_LIBUV)
- include(deps/uv.cmake)
- if (BUILD_MODULE)
- add_definitions( -DBUILDING_UV_SHARED )
- endif (BUILD_MODULE)
-endif (WITH_SHARED_LIBUV)
-
-if (LUA)
- MESSAGE(STATUS "Lua: using information from luarocks")
-
- MESSAGE(STATUS "LUA_LIBDIR: " ${LUA_LIBDIR})
- MESSAGE(STATUS "LUA_INCDIR: " ${LUA_INCDIR})
- MESSAGE(STATUS "LUA: " ${LUA})
-
- SET(LUA_EXECUTABLE "${LUA}")
- SET(LUA_INCLUDE_DIR "${LUA_INCDIR}")
- SET(LUA_PACKAGE_PATH "${LUADIR}")
- SET(LUA_PACKAGE_CPATH "${LIBDIR}")
-
- SET(INSTALL_LIB_DIR ${LIBDIR})
-
- GET_FILENAME_COMPONENT(LUA_EXEC_NAME ${LUA_EXECUTABLE} NAME_WE)
- IF(LUA_EXEC_NAME STREQUAL "luajit")
- FIND_LIBRARY(LUA_LIBRARIES
- NAMES luajit libluajit
- PATHS ${LUA_LIBDIR}
- NO_DEFAULT_PATH)
- ELSEIF(LUA_EXEC_NAME STREQUAL "lua")
- FIND_LIBRARY(LUA_LIBRARIES
- NAMES lua lua53 lua52 lua51 liblua liblua53 liblua52 liblua51
- PATHS ${LUA_LIBDIR}
- NO_DEFAULT_PATH)
- ENDIF()
- MESSAGE(STATUS "Lua library: ${LUA_LIBRARIES}")
-
- include_directories(${LUA_INCLUDE_DIR})
-else (LUA)
- if (LUA_BUILD_TYPE STREQUAL System)
- if (USE_LUAJIT)
- find_package(LuaJIT)
- if (LUAJIT_FOUND)
- include_directories(${LUAJIT_INCLUDE_DIR})
- link_directories(${LUAJIT_LIBRARIES})
- endif (LUAJIT_FOUND)
- else (USE_LUAJIT)
- find_package(Lua)
- if (LUA_FOUND)
- include_directories(${LUA_INCLUDE_DIR})
- endif (LUA_FOUND)
- endif (USE_LUAJIT)
-
- else (LUA_BUILD_TYPE STREQUAL System)
- if (LUA_BUILD_TYPE STREQUAL Static)
- SET(WITH_SHARED_LUA OFF)
- else (LUA_BUILD_TYPE STREQUAL Static)
- SET(WITH_SHARED_LUA ON)
- endif (LUA_BUILD_TYPE STREQUAL Static)
- if (USE_LUAJIT)
- include(deps/luajit.cmake)
- include_directories(deps/luajit/src)
- else(USE_LUAJIT)
- include(deps/lua.cmake)
- include_directories(deps/lua/src)
- endif (USE_LUAJIT)
- endif (LUA_BUILD_TYPE STREQUAL System)
-endif (LUA)
-
-if (BUILD_MODULE)
- add_library(luv MODULE src/luv.c)
- set_target_properties(luv PROPERTIES PREFIX "")
-else (BUILD_MODULE)
- add_library(luv src/luv.c)
- if (BUILD_SHARED_LIBS)
- set_target_properties(luv
- PROPERTIES VERSION ${LUV_VERSION} SOVERSION ${LUV_VERSION_MAJOR})
- endif (BUILD_SHARED_LIBS)
-endif (BUILD_MODULE)
-
-if(APPLE)
- set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS
- "${CMAKE_SHARED_MODULE_CREATE_C_FLAGS} -flat_namespace -undefined suppress"
- )
- # execute_process(COMMAND which luajit OUTPUT_VARIABLE LUAJIT)
- # set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS
- # "${CMAKE_SHARED_MODULE_CREATE_C_FLAGS} -bundle_loader ${LUAJIT}"
- # )
-endif()
-
-if(WIN32)
- add_definitions(-DLUA_BUILD_AS_DLL -DLUA_LIB)
- if (LUA)
- target_link_libraries(luv uv ${LUA_LIBRARIES})
- else (LUA)
- if (USE_LUAJIT)
- target_link_libraries(luv uv luajit-5.1)
- else (USE_LUAJIT)
- if (LUA_BUILD_TYPE STREQUAL System)
- target_link_libraries(luv uv ${LUA_LIBRARIES})
- else (LUA_BUILD_TYPE STREQUAL System)
- target_link_libraries(luv uv lualib)
- endif (LUA_BUILD_TYPE STREQUAL System)
- endif (USE_LUAJIT)
- endif (LUA)
- # replace /MD to /MT to avoid link msvcr*.dll
- set(CompilerFlags
- CMAKE_C_FLAGS
- CMAKE_C_FLAGS_DEBUG
- CMAKE_C_FLAGS_MINSIZEREL
- CMAKE_C_FLAGS_RELWITHDEBINFO
- CMAKE_C_FLAGS_RELEASE)
- foreach(CompilerFlag ${CompilerFlags})
- string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
- endforeach()
-elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
- target_link_libraries(luv uv rt)
-else()
- target_link_libraries(luv uv)
-endif()
-
-if (NOT LUA)
- if (BUILD_MODULE)
- if (WIN32)
- set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
- else (WIN32)
- set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib/lua/${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
- endif (WIN32)
- else (BUILD_MODULE)
- set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib"
- CACHE PATH "Installation directory for libraries")
- set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include/luv"
- CACHE PATH "Installation directory for headers")
- endif (BUILD_MODULE)
-endif ()
-
-if (CMAKE_INSTALL_PREFIX)
- install(TARGETS luv
- ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
- LIBRARY DESTINATION "${INSTALL_LIB_DIR}"
- )
- if (NOT BUILD_MODULE)
- install(
- FILES src/luv.h src/util.h src/lhandle.h src/lreq.h
- DESTINATION "${INSTALL_INC_DIR}"
- )
- endif (NOT BUILD_MODULE)
-endif (CMAKE_INSTALL_PREFIX)
diff --git a/3rdparty/luv/LICENSE.txt b/3rdparty/luv/LICENSE.txt
deleted file mode 100644
index d6456956733..00000000000
--- a/3rdparty/luv/LICENSE.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/3rdparty/luv/Makefile b/3rdparty/luv/Makefile
deleted file mode 100644
index 1e7038c47ab..00000000000
--- a/3rdparty/luv/Makefile
+++ /dev/null
@@ -1,61 +0,0 @@
-LUV_TAG=$(shell git describe --tags)
-
-ifdef WITHOUT_AMALG
- CMAKE_OPTIONS+= -DWITH_AMALG=OFF
-endif
-
-BUILD_MODULE ?= ON
-BUILD_SHARED_LIBS ?= OFF
-WITH_SHARED_LIBUV ?= OFF
-WITH_LUA_ENGINE ?= LuaJIT
-LUA_BUILD_TYPE ?= Static
-
-
-ifeq ($(WITH_LUA_ENGINE), LuaJIT)
- LUABIN=build/luajit
-else
- LUABIN=build/lua
-endif
-
-CMAKE_OPTIONS += \
- -DBUILD_MODULE=$(BUILD_MODULE) \
- -DBUILD_SHARED_LIBS=$(BUILD_SHARED_LIBS) \
- -DWITH_SHARED_LIBUV=$(WITH_SHARED_LIBUV) \
- -DWITH_LUA_ENGINE=$(WITH_LUA_ENGINE) \
- -DLUA_BUILD_TYPE=$(LUA_BUILD_TYPE) \
-
-all: luv
-
-deps/libuv/include:
- git submodule update --init deps/libuv
-
-deps/luajit/src:
- git submodule update --init deps/luajit
-
-build/Makefile: deps/libuv/include deps/luajit/src
- cmake -H. -Bbuild ${CMAKE_OPTIONS} -DWITH_AMALG=OFF
-
-luv: build/Makefile
- cmake --build build --config Debug
- ln -sf build/luv.so
-
-clean:
- rm -rf build luv.so
-
-test: luv
- ${LUABIN} tests/run.lua
-
-reset:
- git submodule update --init --recursive && \
- git clean -f -d && \
- git checkout .
-
-publish-luarocks:
- rm -rf luv-${LUV_TAG}
- mkdir -p luv-${LUV_TAG}/deps
- cp -r src cmake CMakeLists.txt LICENSE.txt README.md docs.md luv-${LUV_TAG}/
- cp -r deps/libuv deps/*.cmake deps/lua_one.c luv-${LUV_TAG}/deps/
- tar -czvf luv-${LUV_TAG}.tar.gz luv-${LUV_TAG}
- github-release upload --user luvit --repo luv --tag ${LUV_TAG} \
- --file luv-${LUV_TAG}.tar.gz --name luv-${LUV_TAG}.tar.gz
- luarocks upload luv-${LUV_TAG}.rockspec --api-key=${LUAROCKS_TOKEN}
diff --git a/3rdparty/luv/README.md b/3rdparty/luv/README.md
deleted file mode 100644
index 47059d01ee7..00000000000
--- a/3rdparty/luv/README.md
+++ /dev/null
@@ -1,213 +0,0 @@
-luv
-===
-
-[![Linux Build Status](https://travis-ci.org/luvit/luv.svg?branch=master)](https://travis-ci.org/luvit/luv)
-
-[![Windows Build status](https://ci.appveyor.com/api/projects/status/uo1qhdcc0vcqsiok/branch/master?svg=true)](https://ci.appveyor.com/project/racker-buildbot/luv/branch/master)
-
-[libuv](https://github.com/joyent/libuv) bindings for
-[luajit](http://luajit.org/) and [lua](http://www.lua.org/)
-[5.1](http://www.lua.org/manual/5.1/manual.html)/
-[5.2](http://www.lua.org/manual/5.2/manual.html)/
-[5.3](http://www.lua.org/manual/5.3/manual.html).
-
-This library makes libuv available to lua scripts. It was made for the [luvit](http://luvit.io/) project but should usable from nearly any lua project.
-
-The library can be used by multiple threads at once. Each thread is assumed to load the library from a different `lua_State`. Luv will create a unique `uv_loop_t` for each state. You can't share uv handles between states/loops.
-
-The best docs currently are the [libuv docs](http://docs.libuv.org/) themselves. Hopfully soon we'll have a copy locally tailored for lua.
-
-```lua
-local uv = require('luv')
-
--- Create a handle to a uv_timer_t
-local timer = uv.new_timer()
-
--- This will wait 1000ms and then continue inside the callback
-timer:start(1000, 0, function ()
- -- timer here is the value we passed in before from new_timer.
-
- print ("Awake!")
-
- -- You must always close your uv handles or you'll leak memory
- -- We can't depend on the GC since it doesn't know enough about libuv.
- timer:close()
-end)
-
-print("Sleeping");
-
--- uv.run will block and wait for all events to run.
--- When there are no longer any active handles, it will return
-uv.run()
-```
-
-
-Here is an example of an TCP echo server
-```lua
-local uv = require('luv')
-
-local function create_server(host, port, on_connection)
-
- local server = uv.new_tcp()
- server:bind(host, port)
-
- server:listen(128, function(err)
- -- Make sure there was no problem setting up listen
- assert(not err, err)
-
- -- Accept the client
- local client = uv.new_tcp()
- server:accept(client)
-
- on_connection(client)
- end)
-
- return server
-end
-
-local server = create_server("0.0.0.0", 0, function (client)
-
- client:read_start(function (err, chunk)
-
- -- Crash on errors
- assert(not err, err)
-
- if chunk then
- -- Echo anything heard
- client:write(chunk)
- else
- -- When the stream ends, close the socket
- client:close()
- end
- end)
-end)
-
-print("TCP Echo serverr listening on port " .. server:getsockname().port)
-
-uv.run()
-```
-
-More examples can be found in the [examples](examples) and [tests](tests) folders.
-
-## Building From Source
-
-To build, first install your compiler tools.
-
-### Get a Compiler
-
-On linux this probably means `gcc` and `make`. On Ubuntu, the `build-essential`
-package is good for this.
-
-On OSX, you probably want XCode which comes with `clang` and `make` and friends.
-
-For windows the free Visual Studio Express works. If you get the 2013 edition,
-make sure to get the `Windows Deskop` edition. The `Windows` version doesn't
-include a working C compiler. Make sure to run all of setup including getting a
-free license.
-
-### Install CMake
-
-Now install Cmake. The version in `brew` on OSX or most Linux package managers
-is good. The version on Travis CI is too old and so I use a PPA there. On
-windows use the installer and make sure to add cmake to your command prompt
-path.
-
-### Install Git
-
-If you haven't already, install git and make sure it's in your path. This comes
-with XCode on OSX. On Linux it's in your package manager. For windows, use the
-installer at <http://git-scm.com>. Make sure it's available to your windows
-command prompt.
-
-### Clone the Code
-
-Now open a terminal and clone the code. For windows I recommend the special
-developer command prompt that came with Visual Studio.
-
-```
-git clone https://github.com/luvit/luv.git --recursive
-cd luv
-```
-
-### Build the Code and Test
-
-On windows I wrote a small batch file that runs the correct cmake commands and
-copies the output files for easy access.
-
-```
-C:\Code\luv> msvcbuild.bat
-C:\Code\luv> luajit tests\run.lua
-```
-
-On unix systems, use the Makefile.
-
-```
-~/Code/luv> make test
-```
-
-This will build luv as a module library. Module libraries are plugins that are
-not linked into other targets.
-
-#### Build with PUC Lua 5.3
-By default luv is linked with LuaJIT 2.0.4. If you rather like to link luv
-with PUC Lua 5.3 you can run make with:
-
-```
-~/Code/luv> WITH_LUA_ENGINE=Lua make
-```
-
-#### Build as static library
-
-If you want to build luv as a static library run make with:
-
-```
-~/Code/luv> BUILD_MODULE=OFF make
-```
-
-This will create a static library `libluv.a`.
-
-#### Build as shared library
-
-If you want to build luv as a shared library run make with:
-
-```
-~/Code/luv> BUILD_MODULE=OFF BUILD_SHARED_LIBS=ON make
-```
-
-This will create a shared library `libluv.so`.
-
-#### Build with shared libraries
-
-By default the build system will build luv with the supplied dependencies.
-These are:
- * libuv
- * LuaJIT or Lua
-
-However, if your target system has already one or more of these dependencies
-installed you can link `luv` against them.
-
-##### Linking with shared libuv
-
-The default shared library name for libuv is `libuv`. To link against it use:
-
-```
-~/Code/luv> WITH_SHARED_LIBUV=ON make
-```
-
-##### Linking with shared LuaJIT
-
-The default shared library name for LuaJIT is `libluajit-5.1`. To link against
-it use:
-
-```
-~/Code/luv> LUA_BUILD_TYPE=System make
-```
-
-##### Linking with shared Lua 5.x
-
-The default shared library name for Lua 5.x is `liblua5.x`. To link against
-it use:
-
-```
-~/Code/luv> LUA_BUILD_TYPE=System WITH_LUA_ENGINE=Lua make
-```
diff --git a/3rdparty/luv/appveyor.yml b/3rdparty/luv/appveyor.yml
deleted file mode 100644
index b8d01898573..00000000000
--- a/3rdparty/luv/appveyor.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-os: Visual Studio 2015
-
-# Test with the latest two releases of MSVC
-configuration:
- - 2015
- - 2013
-
-# Test with the latest Lua and LuaJIT versions
-environment:
- LUAROCKS_VER: 2.3.0
- matrix:
- - LUA_VER: 5.3.2
- NOCOMPAT: true # with compatibility flags disabled.
- - LJ_VER: 2.1
-
-platform:
- - x86
- - x64
-
-matrix:
- fast_finish: true
-
-cache:
- - c:\lua -> appveyor.yml
- - c:\external -> appveyor.yml
-
-install:
- - git submodule update --init
-
-build_script:
- - msvcbuild.bat
- - luajit.exe tests\run.lua
- # Test rock installation
- - call .ci\set_compiler_env.bat
- - call .ci\install.bat
- - luarocks make
- - ps: if("$(Get-Location)" -eq $(lua -e "print(require'luv'.cwd())")) { "LuaRocks test OK" } else { "LuaRocks test failed"; exit 1 }
- - luarocks remove luv
-
-artifacts:
- - path: luv.dll
- - path: luajit.exe
diff --git a/3rdparty/luv/cmake/Modules/FindLibuv.cmake b/3rdparty/luv/cmake/Modules/FindLibuv.cmake
deleted file mode 100644
index 045362ae5db..00000000000
--- a/3rdparty/luv/cmake/Modules/FindLibuv.cmake
+++ /dev/null
@@ -1,11 +0,0 @@
-# Locate libuv library
-# This module defines
-# LIBUV_FOUND, if false, do not try to link to libuv
-# LIBUV_LIBRARIES
-# LIBUV_INCLUDE_DIR, where to find uv.h
-
-FIND_PATH(LIBUV_INCLUDE_DIR NAMES uv.h)
-FIND_LIBRARY(LIBUV_LIBRARIES NAMES uv libuv)
-
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBUV DEFAULT_MSG LIBUV_LIBRARIES LIBUV_INCLUDE_DIR)
diff --git a/3rdparty/luv/cmake/Modules/FindLuaJIT.cmake b/3rdparty/luv/cmake/Modules/FindLuaJIT.cmake
deleted file mode 100644
index b9c2c3ee41a..00000000000
--- a/3rdparty/luv/cmake/Modules/FindLuaJIT.cmake
+++ /dev/null
@@ -1,55 +0,0 @@
-#=============================================================================
-# Copyright 2007-2009 Kitware, Inc.
-# Copyright 2013 Rolf Eike Beer <eike@sf-mail.de>
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# We use code from the CMake project to detect the Lua version.
-
-# Locate LuaJIT library
-# This module defines
-# LUAJIT_FOUND, if false, do not try to link to Lua JIT
-# LUAJIT_LIBRARIES
-# LUAJIT_INCLUDE_DIR, where to find lua.h
-#
-# Additionally it defines the Lua API/ABI version:
-# LUA_VERSION_STRING - the version of Lua found
-# LUA_VERSION_MAJOR - the major version of Lua
-# LUA_VERSION_MINOR - the minor version of Lua
-# LUA_VERSION_PATCH - the patch version of Lua
-
-FIND_PATH(LUAJIT_INCLUDE_DIR NAMES lua.h PATH_SUFFIXES luajit-2.0)
-FIND_LIBRARY(LUAJIT_LIBRARIES NAMES luajit-5.1)
-
-if (LUAJIT_INCLUDE_DIR AND EXISTS "${LUAJIT_INCLUDE_DIR}/lua.h")
- # At least 5.[012] have different ways to express the version
- # so all of them need to be tested. Lua 5.2 defines LUA_VERSION
- # and LUA_RELEASE as joined by the C preprocessor, so avoid those.
- file(STRINGS "${LUAJIT_INCLUDE_DIR}/lua.h" lua_version_strings
- REGEX "^#define[ \t]+LUA_(RELEASE[ \t]+\"Lua [0-9]|VERSION([ \t]+\"Lua [0-9]|_[MR])).*")
-
- string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_MAJOR[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_MAJOR ";${lua_version_strings};")
- if (LUA_VERSION_MAJOR MATCHES "^[0-9]+$")
- string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_MINOR[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_MINOR ";${lua_version_strings};")
- string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_RELEASE[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_PATCH ";${lua_version_strings};")
- set(LUA_VERSION_STRING "${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}.${LUA_VERSION_PATCH}")
- else ()
- string(REGEX REPLACE ".*;#define[ \t]+LUA_RELEASE[ \t]+\"Lua ([0-9.]+)\"[ \t]*;.*" "\\1" LUA_VERSION_STRING ";${lua_version_strings};")
- if (NOT LUA_VERSION_STRING MATCHES "^[0-9.]+$")
- string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION[ \t]+\"Lua ([0-9.]+)\"[ \t]*;.*" "\\1" LUA_VERSION_STRING ";${lua_version_strings};")
- endif ()
- string(REGEX REPLACE "^([0-9]+)\\.[0-9.]*$" "\\1" LUA_VERSION_MAJOR "${LUA_VERSION_STRING}")
- string(REGEX REPLACE "^[0-9]+\\.([0-9]+)[0-9.]*$" "\\1" LUA_VERSION_MINOR "${LUA_VERSION_STRING}")
- string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]).*" "\\1" LUA_VERSION_PATCH "${LUA_VERSION_STRING}")
- endif ()
-
- unset(lua_version_strings)
-endif()
-
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(LUAJIT DEFAULT_MSG LUAJIT_LIBRARIES LUAJIT_INCLUDE_DIR)
diff --git a/3rdparty/luv/deps/lua.cmake b/3rdparty/luv/deps/lua.cmake
deleted file mode 100644
index 393e67a107a..00000000000
--- a/3rdparty/luv/deps/lua.cmake
+++ /dev/null
@@ -1,128 +0,0 @@
-# Modfied from luajit.cmake
-# Added LUAJIT_ADD_EXECUTABLE Ryan Phillips <ryan at trolocsis.com>
-# This CMakeLists.txt has been first taken from LuaDist
-# Copyright (C) 2007-2011 LuaDist.
-# Created by Peter Drahoš
-# Redistribution and use of this file is allowed according to the terms of the MIT license.
-# Debugged and (now seriously) modified by Ronan Collobert, for Torch7
-
-#project(Lua53 C)
-
-SET(LUA_DIR ${CMAKE_CURRENT_LIST_DIR}/lua)
-
-SET(CMAKE_REQUIRED_INCLUDES
- ${LUA_DIR}
- ${LUA_DIR}/src
- ${CMAKE_CURRENT_BINARY_DIR}
-)
-
-OPTION(WITH_AMALG "Build eveything in one shot (needs memory)" ON)
-
-# Ugly warnings
-IF(MSVC)
- ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
-ENDIF()
-
-# Various includes
-INCLUDE(CheckLibraryExists)
-INCLUDE(CheckFunctionExists)
-INCLUDE(CheckCSourceCompiles)
-INCLUDE(CheckTypeSize)
-
-CHECK_TYPE_SIZE("void*" SIZEOF_VOID_P)
-IF(SIZEOF_VOID_P EQUAL 8)
- ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE)
-ENDIF()
-
-IF(NOT WIN32)
- FIND_LIBRARY(DL_LIBRARY "dl")
- IF(DL_LIBRARY)
- SET(CMAKE_REQUIRED_LIBRARIES ${DL_LIBRARY})
- LIST(APPEND LIBS ${DL_LIBRARY})
- ENDIF(DL_LIBRARY)
- CHECK_FUNCTION_EXISTS(dlopen LUA_USE_DLOPEN)
- IF(NOT LUA_USE_DLOPEN)
- MESSAGE(FATAL_ERROR "Cannot compile a useful lua.
-Function dlopen() seems not to be supported on your platform.
-Apparently you are not on a Windows platform as well.
-So lua has no way to deal with shared libraries!")
- ENDIF(NOT LUA_USE_DLOPEN)
-ENDIF(NOT WIN32)
-
-check_library_exists(m sin "" LUA_USE_LIBM)
-if ( LUA_USE_LIBM )
- list ( APPEND LIBS m )
-endif ()
-
-## SOURCES
-SET(SRC_LUALIB
- ${LUA_DIR}/src/lbaselib.c
- ${LUA_DIR}/src/lcorolib.c
- ${LUA_DIR}/src/ldblib.c
- ${LUA_DIR}/src/liolib.c
- ${LUA_DIR}/src/lmathlib.c
- ${LUA_DIR}/src/loadlib.c
- ${LUA_DIR}/src/loslib.c
- ${LUA_DIR}/src/lstrlib.c
- ${LUA_DIR}/src/ltablib.c
- ${LUA_DIR}/src/lutf8lib.c)
-
-SET(SRC_LUACORE
- ${LUA_DIR}/src/lauxlib.c
- ${LUA_DIR}/src/lapi.c
- ${LUA_DIR}/src/lcode.c
- ${LUA_DIR}/src/lctype.c
- ${LUA_DIR}/src/ldebug.c
- ${LUA_DIR}/src/ldo.c
- ${LUA_DIR}/src/ldump.c
- ${LUA_DIR}/src/lfunc.c
- ${LUA_DIR}/src/lgc.c
- ${LUA_DIR}/src/linit.c
- ${LUA_DIR}/src/llex.c
- ${LUA_DIR}/src/lmem.c
- ${LUA_DIR}/src/lobject.c
- ${LUA_DIR}/src/lopcodes.c
- ${LUA_DIR}/src/lparser.c
- ${LUA_DIR}/src/lstate.c
- ${LUA_DIR}/src/lstring.c
- ${LUA_DIR}/src/ltable.c
- ${LUA_DIR}/src/ltm.c
- ${LUA_DIR}/src/lundump.c
- ${LUA_DIR}/src/lvm.c
- ${LUA_DIR}/src/lzio.c
- ${SRC_LUALIB})
-
-## GENERATE
-
-IF(WITH_SHARED_LUA)
- IF(WITH_AMALG)
- add_library(lualib SHARED ${LUA_DIR}/../lua_one.c ${DEPS})
- ELSE()
- add_library(lualib SHARED ${SRC_LUACORE} ${DEPS} )
- ENDIF()
-ELSE()
- IF(WITH_AMALG)
- add_library(lualib STATIC ${LUA_DIR}/../lua_one.c ${DEPS} )
- ELSE()
- add_library(lualib STATIC ${SRC_LUACORE} ${DEPS} )
- ENDIF()
- set_target_properties(lualib PROPERTIES
- PREFIX "lib" IMPORT_PREFIX "lib")
-ENDIF()
-
-target_link_libraries (lualib ${LIBS} )
-set_target_properties (lualib PROPERTIES OUTPUT_NAME "lua53")
-
-IF(WIN32)
- add_executable(lua ${LUA_DIR}/src/lua.c)
- target_link_libraries(lua lualib)
-ELSE()
- IF(WITH_AMALG)
- add_executable(lua ${LUA_DIR}/src/lua.c ${LUA_DIR}/lua_one.c ${DEPS})
- ELSE()
- add_executable(lua ${LUA_DIR}/src/lua.c ${SRC_LUACORE} ${DEPS})
- ENDIF()
- target_link_libraries(lua ${LIBS})
- SET_TARGET_PROPERTIES(lua PROPERTIES ENABLE_EXPORTS ON)
-ENDIF(WIN32)
-
diff --git a/3rdparty/luv/deps/lua_one.c b/3rdparty/luv/deps/lua_one.c
deleted file mode 100644
index 2531883cc67..00000000000
--- a/3rdparty/luv/deps/lua_one.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-* one.c -- Lua core, libraries, and interpreter in a single file
-*/
-
-/* default is to build the full interpreter */
-#ifndef MAKE_LIB
-#ifndef MAKE_LUAC
-#ifndef MAKE_LUA
-#define MAKE_LIB
-#endif
-#endif
-#endif
-
-/* choose suitable platform-specific features */
-/* some of these may need extra libraries such as -ldl -lreadline -lncurses */
-#if 0
-#define LUA_USE_LINUX
-#define LUA_USE_MACOSX
-#define LUA_USE_POSIX
-#define LUA_ANSI
-#endif
-
-/* no need to change anything below this line ----------------------------- */
-
-/* setup for luaconf.h */
-#if HAVE_LPREFIX
-# include "lprefix.h"
-#endif
-
-#define LUA_CORE
-#define LUA_LIB
-#define ltable_c
-#define lvm_c
-#include "luaconf.h"
-
-/* do not export internal symbols */
-#undef LUAI_FUNC
-#undef LUAI_DDEC
-#undef LUAI_DDEF
-#define LUAI_FUNC static
-#define LUAI_DDEC static
-#define LUAI_DDEF static
-
-/* core -- used by all */
-#include "lapi.c"
-#include "lcode.c"
-#include "lctype.c"
-#include "ldebug.c"
-#include "ldo.c"
-#include "ldump.c"
-#include "lfunc.c"
-#include "lgc.c"
-#include "llex.c"
-#include "lmem.c"
-#include "lobject.c"
-#include "lopcodes.c"
-#include "lparser.c"
-#include "lstate.c"
-#include "lstring.c"
-#include "ltable.c"
-#include "ltm.c"
-#include "lundump.c"
-#include "lvm.c"
-#include "lzio.c"
-
-/* auxiliary library -- used by all */
-#include "lauxlib.c"
-
-/* standard library -- not used by luac */
-#ifndef MAKE_LUAC
-#include "lbaselib.c"
-#if LUA_VERSION_NUM == 502
-# include "lbitlib.c"
-#endif
-#include "lcorolib.c"
-#include "ldblib.c"
-#include "liolib.c"
-#include "lmathlib.c"
-#include "loadlib.c"
-#include "loslib.c"
-#include "lstrlib.c"
-#include "ltablib.c"
-#if LUA_VERSION_NUM >= 503
-# include "lutf8lib.c"
-#endif
-#include "linit.c"
-#endif
-
-/* lua */
-#ifdef MAKE_LUA
-#include "lua.c"
-#endif
-
-/* luac */
-#ifdef MAKE_LUAC
-#include "luac.c"
-#endif
diff --git a/3rdparty/luv/deps/luajit.cmake b/3rdparty/luv/deps/luajit.cmake
deleted file mode 100644
index e9d5b3582e1..00000000000
--- a/3rdparty/luv/deps/luajit.cmake
+++ /dev/null
@@ -1,407 +0,0 @@
-# Added LUAJIT_ADD_EXECUTABLE Ryan Phillips <ryan at trolocsis.com>
-# This CMakeLists.txt has been first taken from LuaDist
-# Copyright (C) 2007-2011 LuaDist.
-# Created by Peter Drahoš
-# Redistribution and use of this file is allowed according to the terms of the MIT license.
-# Debugged and (now seriously) modified by Ronan Collobert, for Torch7
-
-#project(LuaJIT C ASM)
-
-SET(LUAJIT_DIR ${CMAKE_CURRENT_LIST_DIR}/luajit)
-
-SET(CMAKE_REQUIRED_INCLUDES
- ${LUAJIT_DIR}
- ${LUAJIT_DIR}/src
- ${CMAKE_CURRENT_BINARY_DIR}
-)
-
-OPTION(WITH_AMALG "Build eveything in one shot (needs memory)" ON)
-
-# Ugly warnings
-IF(MSVC)
- ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
-ENDIF()
-
-# Various includes
-INCLUDE(CheckLibraryExists)
-INCLUDE(CheckFunctionExists)
-INCLUDE(CheckCSourceCompiles)
-INCLUDE(CheckTypeSize)
-
-# LuaJIT specific
-option(LUAJIT_DISABLE_FFI "Disable FFI." OFF)
-option(LUAJIT_ENABLE_LUA52COMPAT "Enable Lua 5.2 compatibility." ON)
-option(LUAJIT_DISABLE_JIT "Disable JIT." OFF)
-option(LUAJIT_CPU_SSE2 "Use SSE2 instead of x87 instructions." ON)
-option(LUAJIT_CPU_NOCMOV "Disable NOCMOV." OFF)
-MARK_AS_ADVANCED(LUAJIT_DISABLE_FFI LUAJIT_ENABLE_LUA52COMPAT LUAJIT_DISABLE_JIT LUAJIT_CPU_SSE2 LUAJIT_CPU_NOCMOV)
-
-IF(LUAJIT_DISABLE_FFI)
- ADD_DEFINITIONS(-DLUAJIT_DISABLE_FFI)
-ENDIF()
-
-IF(LUAJIT_ENABLE_LUA52COMPAT)
- ADD_DEFINITIONS(-DLUAJIT_ENABLE_LUA52COMPAT)
-ENDIF()
-
-IF(LUAJIT_DISABLE_JIT)
- ADD_DEFINITIONS(-DLUAJIT_DISABLE_JIT)
-ENDIF()
-
-IF(LUAJIT_CPU_SSE2)
- ADD_DEFINITIONS(-DLUAJIT_CPU_SSE2)
-ENDIF()
-
-IF(LUAJIT_CPU_NOCMOV)
- ADD_DEFINITIONS(-DLUAJIT_CPU_NOCMOV)
-ENDIF()
-######
-
-
-CHECK_TYPE_SIZE("void*" SIZEOF_VOID_P)
-IF(SIZEOF_VOID_P EQUAL 8)
- ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE)
-ENDIF()
-
-if ( WIN32 AND NOT CYGWIN )
- add_definitions ( -DLUAJIT_OS=LUAJIT_OS_WINDOWS)
- set ( LJVM_MODE coffasm )
-elseif ( APPLE )
- set ( CMAKE_EXE_LINKER_FLAGS "-pagezero_size 10000 -image_base 100000000 ${CMAKE_EXE_LINKER_FLAGS}" )
- set ( LJVM_MODE machasm )
-else ()
- set ( LJVM_MODE elfasm )
-endif ()
-
-IF(NOT WIN32)
- FIND_LIBRARY(DL_LIBRARY "dl")
- IF(DL_LIBRARY)
- SET(CMAKE_REQUIRED_LIBRARIES ${DL_LIBRARY})
- LIST(APPEND LIBS ${DL_LIBRARY})
- ENDIF(DL_LIBRARY)
- CHECK_FUNCTION_EXISTS(dlopen LUA_USE_DLOPEN)
- IF(NOT LUA_USE_DLOPEN)
- MESSAGE(FATAL_ERROR "Cannot compile a useful lua.
-Function dlopen() seems not to be supported on your platform.
-Apparently you are not on a Windows platform as well.
-So lua has no way to deal with shared libraries!")
- ENDIF(NOT LUA_USE_DLOPEN)
-ENDIF(NOT WIN32)
-
-check_library_exists(m sin "" LUA_USE_LIBM)
-if ( LUA_USE_LIBM )
- list ( APPEND LIBS m )
-endif ()
-
-## SOURCES
-MACRO(LJ_TEST_ARCH stuff)
- CHECK_C_SOURCE_COMPILES("
-#undef ${stuff}
-#include \"lj_arch.h\"
-#if ${stuff}
-int main() { return 0; }
-#else
-#error \"not defined\"
-#endif
-" ${stuff})
-ENDMACRO()
-
-MACRO(LJ_TEST_ARCH_VALUE stuff value)
- CHECK_C_SOURCE_COMPILES("
-#undef ${stuff}
-#include \"lj_arch.h\"
-#if ${stuff} == ${value}
-int main() { return 0; }
-#else
-#error \"not defined\"
-#endif
-" ${stuff}_${value})
-ENDMACRO()
-
-
-FOREACH(arch X64 X86 ARM PPC PPCSPE MIPS)
- LJ_TEST_ARCH(LJ_TARGET_${arch})
- if(LJ_TARGET_${arch})
- STRING(TOLOWER ${arch} TARGET_LJARCH)
- MESSAGE(STATUS "LuaJIT Target: ${TARGET_LJARCH}")
- BREAK()
- ENDIF()
-ENDFOREACH()
-
-IF(NOT TARGET_LJARCH)
- MESSAGE(FATAL_ERROR "architecture not supported")
-ELSE()
- MESSAGE(STATUS "LuaJIT target ${TARGET_LJARCH}")
-ENDIF()
-
-FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/jit)
-FILE(GLOB jit_files ${LUAJIT_DIR}/src/jit/*.lua)
-FILE(COPY ${jit_files} DESTINATION ${CMAKE_BINARY_DIR}/jit)
-
-SET(DASM_ARCH ${TARGET_LJARCH})
-SET(DASM_FLAGS)
-SET(TARGET_ARCH)
-LIST(APPEND TARGET_ARCH "LUAJIT_TARGET=LUAJIT_ARCH_${TARGET_LJARCH}")
-LJ_TEST_ARCH_VALUE(LJ_ARCH_BITS 64)
-IF(LJ_ARCH_BITS_64)
- SET(DASM_FLAGS ${DASM_FLAGS} -D P64)
-ENDIF()
-LJ_TEST_ARCH_VALUE(LJ_HASJIT 1)
-IF(LJ_HASJIT_1)
- SET(DASM_FLAGS ${DASM_FLAGS} -D JIT)
-ENDIF()
-LJ_TEST_ARCH_VALUE(LJ_HASFFI 1)
-IF(LJ_HASFFI_1)
- SET(DASM_FLAGS ${DASM_FLAGS} -D FFI)
-ENDIF()
-LJ_TEST_ARCH_VALUE(LJ_DUALNUM 1)
-IF(LJ_DUALNUM_1)
- SET(DASM_FLAGS ${DASM_FLAGS} -D DUALNUM)
-ENDIF()
-LJ_TEST_ARCH_VALUE(LJ_ARCH_HASFPU 1)
-IF(LJ_ARCH_HASFPU_1)
- SET(DASM_FLAGS ${DASM_FLAGS} -D FPU)
- LIST(APPEND TARGET_ARCH "LJ_ARCH_HASFPU=1")
-ELSE()
- LIST(APPEND TARGET_ARCH "LJ_ARCH_HASFPU=0")
-ENDIF()
-LJ_TEST_ARCH_VALUE(LJ_ABI_SOFTFP 1)
-IF(NOT LJ_ABI_SOFTFP_1)
- SET(DASM_FLAGS ${DASM_FLAGS} -D HFABI)
- LIST(APPEND TARGET_ARCH "LJ_ABI_SOFTFP=0")
-ELSE()
- LIST(APPEND TARGET_ARCH "LJ_ABI_SOFTFP=1")
-ENDIF()
-IF(WIN32)
- SET(DASM_FLAGS ${DASM_FLAGS} -LN -D WIN)
-ENDIF()
-IF(TARGET_LJARCH STREQUAL "x86")
- LJ_TEST_ARCH_VALUE(__SSE2__ 1)
- IF(__SSE2__1)
- SET(DASM_FLAGS ${DASM_FLAGS} -D SSE)
- ENDIF()
-ENDIF()
-IF(TARGET_LJARCH STREQUAL "x64")
- SET(DASM_ARCH "x86")
-ENDIF()
-IF(TARGET_LJARCH STREQUAL "ppc")
- LJ_TEST_ARCH_VALUE(LJ_ARCH_SQRT 1)
- IF(NOT LJ_ARCH_SQRT_1)
- SET(DASM_FLAGS ${DASM_FLAGS} -D SQRT)
- ENDIF()
- LJ_TEST_ARCH_VALUE(LJ_ARCH_PPC64 1)
- IF(NOT LJ_ARCH_PPC64_1)
- SET(DASM_FLAGS ${DASM_FLAGS} -D GPR64)
- ENDIF()
-ENDIF()
-
-add_executable(minilua ${LUAJIT_DIR}/src/host/minilua.c)
-SET_TARGET_PROPERTIES(minilua PROPERTIES COMPILE_DEFINITIONS "${TARGET_ARCH}")
-CHECK_LIBRARY_EXISTS(m sin "" MINILUA_USE_LIBM)
-if(MINILUA_USE_LIBM)
- TARGET_LINK_LIBRARIES(minilua m)
-endif()
-
-add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/buildvm_arch.h
- COMMAND minilua ${LUAJIT_DIR}/dynasm/dynasm.lua ${DASM_FLAGS} -o ${CMAKE_CURRENT_BINARY_DIR}/buildvm_arch.h ${LUAJIT_DIR}/src/vm_${DASM_ARCH}.dasc
- DEPENDS ${LUAJIT_DIR}/dynasm/dynasm.lua minilua
-)
-
-SET(SRC_LJLIB
- ${LUAJIT_DIR}/src/lib_base.c
- ${LUAJIT_DIR}/src/lib_math.c
- ${LUAJIT_DIR}/src/lib_bit.c
- ${LUAJIT_DIR}/src/lib_string.c
- ${LUAJIT_DIR}/src/lib_table.c
- ${LUAJIT_DIR}/src/lib_io.c
- ${LUAJIT_DIR}/src/lib_os.c
- ${LUAJIT_DIR}/src/lib_package.c
- ${LUAJIT_DIR}/src/lib_debug.c
- ${LUAJIT_DIR}/src/lib_jit.c
- ${LUAJIT_DIR}/src/lib_ffi.c)
-
-SET(SRC_LJCORE
- ${LUAJIT_DIR}/src/lj_gc.c
- ${LUAJIT_DIR}/src/lj_err.c
- ${LUAJIT_DIR}/src/lj_char.c
- ${LUAJIT_DIR}/src/lj_buf.c
- ${LUAJIT_DIR}/src/lj_profile.c
- ${LUAJIT_DIR}/src/lj_strfmt.c
- ${LUAJIT_DIR}/src/lj_bc.c
- ${LUAJIT_DIR}/src/lj_obj.c
- ${LUAJIT_DIR}/src/lj_str.c
- ${LUAJIT_DIR}/src/lj_tab.c
- ${LUAJIT_DIR}/src/lj_func.c
- ${LUAJIT_DIR}/src/lj_udata.c
- ${LUAJIT_DIR}/src/lj_meta.c
- ${LUAJIT_DIR}/src/lj_debug.c
- ${LUAJIT_DIR}/src/lj_state.c
- ${LUAJIT_DIR}/src/lj_dispatch.c
- ${LUAJIT_DIR}/src/lj_vmevent.c
- ${LUAJIT_DIR}/src/lj_vmmath.c
- ${LUAJIT_DIR}/src/lj_strscan.c
- ${LUAJIT_DIR}/src/lj_api.c
- ${LUAJIT_DIR}/src/lj_lex.c
- ${LUAJIT_DIR}/src/lj_parse.c
- ${LUAJIT_DIR}/src/lj_bcread.c
- ${LUAJIT_DIR}/src/lj_bcwrite.c
- ${LUAJIT_DIR}/src/lj_load.c
- ${LUAJIT_DIR}/src/lj_ir.c
- ${LUAJIT_DIR}/src/lj_opt_mem.c
- ${LUAJIT_DIR}/src/lj_opt_fold.c
- ${LUAJIT_DIR}/src/lj_opt_narrow.c
- ${LUAJIT_DIR}/src/lj_opt_dce.c
- ${LUAJIT_DIR}/src/lj_opt_loop.c
- ${LUAJIT_DIR}/src/lj_opt_split.c
- ${LUAJIT_DIR}/src/lj_opt_sink.c
- ${LUAJIT_DIR}/src/lj_mcode.c
- ${LUAJIT_DIR}/src/lj_snap.c
- ${LUAJIT_DIR}/src/lj_record.c
- ${LUAJIT_DIR}/src/lj_crecord.c
- ${LUAJIT_DIR}/src/lj_ffrecord.c
- ${LUAJIT_DIR}/src/lj_asm.c
- ${LUAJIT_DIR}/src/lj_trace.c
- ${LUAJIT_DIR}/src/lj_gdbjit.c
- ${LUAJIT_DIR}/src/lj_ctype.c
- ${LUAJIT_DIR}/src/lj_cdata.c
- ${LUAJIT_DIR}/src/lj_cconv.c
- ${LUAJIT_DIR}/src/lj_ccall.c
- ${LUAJIT_DIR}/src/lj_ccallback.c
- ${LUAJIT_DIR}/src/lj_carith.c
- ${LUAJIT_DIR}/src/lj_clib.c
- ${LUAJIT_DIR}/src/lj_cparse.c
- ${LUAJIT_DIR}/src/lj_lib.c
- ${LUAJIT_DIR}/src/lj_alloc.c
- ${LUAJIT_DIR}/src/lj_vmmath.c
- ${LUAJIT_DIR}/src/lib_aux.c
- ${LUAJIT_DIR}/src/lib_init.c
- ${SRC_LJLIB})
-
-SET(SRC_BUILDVM
- ${LUAJIT_DIR}/src/host/buildvm.c
- ${LUAJIT_DIR}/src/host/buildvm_asm.c
- ${LUAJIT_DIR}/src/host/buildvm_peobj.c
- ${LUAJIT_DIR}/src/host/buildvm_lib.c
- ${LUAJIT_DIR}/src/host/buildvm_fold.c
- ${CMAKE_CURRENT_BINARY_DIR}/buildvm_arch.h)
-
-## GENERATE
-ADD_EXECUTABLE(buildvm ${SRC_BUILDVM})
-SET_TARGET_PROPERTIES(buildvm PROPERTIES COMPILE_DEFINITIONS "${TARGET_ARCH}")
-
-macro(add_buildvm_target _target _mode)
- add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}
- COMMAND buildvm ARGS -m ${_mode} -o ${CMAKE_CURRENT_BINARY_DIR}/${_target} ${ARGN}
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- DEPENDS buildvm ${ARGN}
- )
-endmacro(add_buildvm_target)
-
-if (MSVC)
- add_buildvm_target ( lj_vm.obj peobj )
- set (LJ_VM_SRC ${CMAKE_CURRENT_BINARY_DIR}/lj_vm.obj)
-else ()
- add_buildvm_target ( lj_vm.S ${LJVM_MODE} )
- set (LJ_VM_SRC ${CMAKE_CURRENT_BINARY_DIR}/lj_vm.S)
-endif ()
-add_buildvm_target ( lj_ffdef.h ffdef ${SRC_LJLIB} )
-add_buildvm_target ( lj_bcdef.h bcdef ${SRC_LJLIB} )
-add_buildvm_target ( lj_folddef.h folddef ${LUAJIT_DIR}/src/lj_opt_fold.c )
-add_buildvm_target ( lj_recdef.h recdef ${SRC_LJLIB} )
-add_buildvm_target ( lj_libdef.h libdef ${SRC_LJLIB} )
-add_buildvm_target ( vmdef.lua vmdef ${SRC_LJLIB} )
-
-SET(DEPS
- ${LJ_VM_SRC}
- ${CMAKE_CURRENT_BINARY_DIR}/lj_ffdef.h
- ${CMAKE_CURRENT_BINARY_DIR}/lj_bcdef.h
- ${CMAKE_CURRENT_BINARY_DIR}/lj_libdef.h
- ${CMAKE_CURRENT_BINARY_DIR}/lj_recdef.h
- ${CMAKE_CURRENT_BINARY_DIR}/lj_folddef.h
- ${CMAKE_CURRENT_BINARY_DIR}/vmdef.lua
- )
-
-## COMPILE
-include_directories(
- ${LUAJIT_DIR}/dynasm
- ${LUAJIT_DIR}/src
- ${CMAKE_CURRENT_BINARY_DIR}
-)
-
-IF(WITH_SHARED_LUA)
- IF(WITH_AMALG)
- add_library(luajit-5.1 SHARED ${LUAJIT_DIR}/src/ljamalg.c ${DEPS} )
- ELSE()
- add_library(luajit-5.1 SHARED ${SRC_LJCORE} ${DEPS} )
- ENDIF()
- SET_TARGET_PROPERTIES(luajit-5.1 PROPERTIES OUTPUT_NAME "lua51")
-ELSE()
- IF(WITH_AMALG)
- add_library(luajit-5.1 STATIC ${LUAJIT_DIR}/src/ljamalg.c ${DEPS} )
- ELSE()
- add_library(luajit-5.1 STATIC ${SRC_LJCORE} ${DEPS} )
- ENDIF()
- SET_TARGET_PROPERTIES(luajit-5.1 PROPERTIES
- PREFIX "lib" IMPORT_PREFIX "lib" OUTPUT_NAME "luajit")
-ENDIF()
-
-target_link_libraries (luajit-5.1 ${LIBS} )
-
-IF(WIN32)
- add_executable(luajit ${LUAJIT_DIR}/src/luajit.c)
- target_link_libraries(luajit luajit-5.1)
-ELSE()
- IF(WITH_AMALG)
- add_executable(luajit ${LUAJIT_DIR}/src/luajit.c ${LUAJIT_DIR}/src/ljamalg.c ${DEPS})
- ELSE()
- add_executable(luajit ${LUAJIT_DIR}/src/luajit.c ${SRC_LJCORE} ${DEPS})
- ENDIF()
- target_link_libraries(luajit ${LIBS})
- SET_TARGET_PROPERTIES(luajit PROPERTIES ENABLE_EXPORTS ON)
-ENDIF()
-
-MACRO(LUAJIT_add_custom_commands luajit_target)
- SET(target_srcs "")
- FOREACH(file ${ARGN})
- IF(${file} MATCHES ".*\\.lua$")
- set(file "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
- set(source_file ${file})
- string(LENGTH ${CMAKE_SOURCE_DIR} _luajit_source_dir_length)
- string(LENGTH ${file} _luajit_file_length)
- math(EXPR _begin "${_luajit_source_dir_length} + 1")
- math(EXPR _stripped_file_length "${_luajit_file_length} - ${_luajit_source_dir_length} - 1")
- string(SUBSTRING ${file} ${_begin} ${_stripped_file_length} stripped_file)
-
- set(generated_file "${CMAKE_BINARY_DIR}/jitted_tmp/${stripped_file}_${luajit_target}_generated${CMAKE_C_OUTPUT_EXTENSION}")
-
- add_custom_command(
- OUTPUT ${generated_file}
- MAIN_DEPENDENCY ${source_file}
- DEPENDS luajit
- COMMAND luajit
- ARGS -bg
- ${source_file}
- ${generated_file}
- COMMENT "Building Luajitted ${source_file}: ${generated_file}"
- )
-
- get_filename_component(basedir ${generated_file} PATH)
- file(MAKE_DIRECTORY ${basedir})
-
- set(target_srcs ${target_srcs} ${generated_file})
- set_source_files_properties(
- ${generated_file}
- properties
- external_object true # this is an object file
- generated true # to say that "it is OK that the obj-files do not exist before build time"
- )
- ELSE()
- set(target_srcs ${target_srcs} ${file})
- ENDIF(${file} MATCHES ".*\\.lua$")
- ENDFOREACH(file)
-ENDMACRO()
-
-MACRO(LUAJIT_ADD_EXECUTABLE luajit_target)
- LUAJIT_add_custom_commands(${luajit_target} ${ARGN})
- add_executable(${luajit_target} ${target_srcs})
-ENDMACRO(LUAJIT_ADD_EXECUTABLE luajit_target)
diff --git a/3rdparty/luv/deps/uv.cmake b/3rdparty/luv/deps/uv.cmake
deleted file mode 100644
index b6570b26b60..00000000000
--- a/3rdparty/luv/deps/uv.cmake
+++ /dev/null
@@ -1,224 +0,0 @@
-## Modifications
-## Copyright 2014 The Luvit Authors. All Rights Reserved.
-
-## Original Copyright
-# Copyright (c) 2014 David Capello
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-include(CheckTypeSize)
-
-cmake_minimum_required(VERSION 2.8.9)
-
-set(LIBUVDIR ${CMAKE_CURRENT_LIST_DIR}/libuv)
-
-include_directories(
- ${LIBUVDIR}/src
- ${LIBUVDIR}/include
-)
-
-set(SOURCES
- ${LIBUVDIR}/include/uv.h
- ${LIBUVDIR}/include/tree.h
- ${LIBUVDIR}/include/uv-errno.h
- ${LIBUVDIR}/include/uv-threadpool.h
- ${LIBUVDIR}/include/uv-version.h
- ${LIBUVDIR}/src/fs-poll.c
- ${LIBUVDIR}/src/heap-inl.h
- ${LIBUVDIR}/src/inet.c
- ${LIBUVDIR}/src/queue.h
- ${LIBUVDIR}/src/threadpool.c
- ${LIBUVDIR}/src/uv-common.c
- ${LIBUVDIR}/src/uv-common.h
- ${LIBUVDIR}/src/version.c
-)
-
-if(WIN32)
- add_definitions(
- -D_WIN32_WINNT=0x0600
- -D_CRT_SECURE_NO_WARNINGS
- -D_GNU_SOURCE
- )
- set(SOURCES ${SOURCES}
- ${LIBUVDIR}/include/uv-win.h
- ${LIBUVDIR}/src/win/async.c
- ${LIBUVDIR}/src/win/atomicops-inl.h
- ${LIBUVDIR}/src/win/core.c
- ${LIBUVDIR}/src/win/dl.c
- ${LIBUVDIR}/src/win/error.c
- ${LIBUVDIR}/src/win/fs.c
- ${LIBUVDIR}/src/win/fs-event.c
- ${LIBUVDIR}/src/win/getaddrinfo.c
- ${LIBUVDIR}/src/win/getnameinfo.c
- ${LIBUVDIR}/src/win/handle.c
- ${LIBUVDIR}/src/win/handle-inl.h
- ${LIBUVDIR}/src/win/internal.h
- ${LIBUVDIR}/src/win/loop-watcher.c
- ${LIBUVDIR}/src/win/pipe.c
- ${LIBUVDIR}/src/win/thread.c
- ${LIBUVDIR}/src/win/poll.c
- ${LIBUVDIR}/src/win/process.c
- ${LIBUVDIR}/src/win/process-stdio.c
- ${LIBUVDIR}/src/win/req.c
- ${LIBUVDIR}/src/win/req-inl.h
- ${LIBUVDIR}/src/win/signal.c
- ${LIBUVDIR}/src/win/snprintf.c
- ${LIBUVDIR}/src/win/stream.c
- ${LIBUVDIR}/src/win/stream-inl.h
- ${LIBUVDIR}/src/win/tcp.c
- ${LIBUVDIR}/src/win/tty.c
- ${LIBUVDIR}/src/win/timer.c
- ${LIBUVDIR}/src/win/udp.c
- ${LIBUVDIR}/src/win/util.c
- ${LIBUVDIR}/src/win/winapi.c
- ${LIBUVDIR}/src/win/winapi.h
- ${LIBUVDIR}/src/win/winsock.c
- ${LIBUVDIR}/src/win/winsock.h
- )
-else()
- include_directories(${LIBUVDIR}/src/unix)
- set(SOURCES ${SOURCES}
- ${LIBUVDIR}/include/uv-unix.h
- ${LIBUVDIR}/include/uv-linux.h
- ${LIBUVDIR}/include/uv-sunos.h
- ${LIBUVDIR}/include/uv-darwin.h
- ${LIBUVDIR}/include/uv-bsd.h
- ${LIBUVDIR}/include/uv-aix.h
- ${LIBUVDIR}/src/unix/async.c
- ${LIBUVDIR}/src/unix/atomic-ops.h
- ${LIBUVDIR}/src/unix/core.c
- ${LIBUVDIR}/src/unix/dl.c
- ${LIBUVDIR}/src/unix/fs.c
- ${LIBUVDIR}/src/unix/getaddrinfo.c
- ${LIBUVDIR}/src/unix/getnameinfo.c
- ${LIBUVDIR}/src/unix/internal.h
- ${LIBUVDIR}/src/unix/loop.c
- ${LIBUVDIR}/src/unix/loop-watcher.c
- ${LIBUVDIR}/src/unix/pipe.c
- ${LIBUVDIR}/src/unix/poll.c
- ${LIBUVDIR}/src/unix/process.c
- ${LIBUVDIR}/src/unix/signal.c
- ${LIBUVDIR}/src/unix/spinlock.h
- ${LIBUVDIR}/src/unix/stream.c
- ${LIBUVDIR}/src/unix/tcp.c
- ${LIBUVDIR}/src/unix/thread.c
- ${LIBUVDIR}/src/unix/timer.c
- ${LIBUVDIR}/src/unix/tty.c
- ${LIBUVDIR}/src/unix/udp.c
- )
-endif()
-
-check_type_size("void*" SIZEOF_VOID_P)
-if(SIZEOF_VOID_P EQUAL 8)
- add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE)
-endif()
-
-## Freebsd
-if("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
- set(SOURCES ${SOURCES}
- ${LIBUVDIR}/src/unix/kqueue.c
- ${LIBUVDIR}/src/unix/freebsd.c
- )
-endif()
-
-## Linux
-if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
- add_definitions(
- -D_GNU_SOURCE
- )
- set(SOURCES ${SOURCES}
- ${LIBUVDIR}/src/unix/proctitle.c
- ${LIBUVDIR}/src/unix/linux-core.c
- ${LIBUVDIR}/src/unix/linux-inotify.c
- ${LIBUVDIR}/src/unix/linux-syscalls.c
- ${LIBUVDIR}/src/unix/linux-syscalls.h
- )
-endif()
-
-## SunOS
-if("${CMAKE_SYSTEM_NAME}" MATCHES "SunOS")
- add_definitions(
- -D__EXTENSIONS__
- -D_XOPEN_SOURCE=500
- )
- set(SOURCES ${SOURCES}
- ${LIBUVDIR}/src/unix/sunos.c
- )
-endif()
-
-## Darwin
-if(APPLE)
- add_definitions(
- -D=_DARWIN_USE_64_BIT_INODE
- )
- set(SOURCES ${SOURCES}
- ${LIBUVDIR}/src/unix/proctitle.c
- ${LIBUVDIR}/src/unix/darwin.c
- ${LIBUVDIR}/src/unix/fsevents.c
- ${LIBUVDIR}/src/unix/darwin-proctitle.c
- ${LIBUVDIR}/src/unix/kqueue.c
- )
-endif()
-
-add_library(uv STATIC ${SOURCES})
-set_property(TARGET uv PROPERTY POSITION_INDEPENDENT_CODE ON)
-
-if("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
- target_link_libraries(uv
- pthread
- kvm
- )
-endif()
-
-if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
- target_link_libraries(uv
- pthread
- )
-endif()
-
-if(WIN32)
- target_link_libraries(uv
- ws2_32.lib
- shell32.lib
- psapi.lib
- iphlpapi.lib
- advapi32.lib
- Userenv.lib
- )
-endif()
-
-if("${CMAKE_SYSTEM_NAME}" MATCHES "SunOS")
- target_link_libraries(uv
- kstat
- socket
- sendfile
- )
-endif()
-
-if(APPLE)
- find_library(FOUNDATION_LIBRARY Foundation)
- find_library(CORESERVICES_LIBRARY CoreServices)
- find_library(APPLICATION_SERVICES_LIBRARY ApplicationServices)
- target_link_libraries(uv
- ${FOUNDATION_LIBRARY}
- ${CORESERVICES_LIBRARY}
- ${APPLICATION_SERVICES_LIBRARY}
- )
-endif()
diff --git a/3rdparty/luv/docs.md b/3rdparty/luv/docs.md
deleted file mode 100644
index 187dec24ff1..00000000000
--- a/3rdparty/luv/docs.md
+++ /dev/null
@@ -1,1309 +0,0 @@
-# LibUV in Lua
-
-The [luv][] project provides access to the multi-platform support library
-[libuv][] to lua code. It was primariliy developed for the [luvit][] project as
-the `uv` builtin module, but can be used in other lua environments.
-
-### TCP Echo Server Example
-
-Here is a small example showing a TCP echo server:
-
-```lua
-local uv = require('uv')
-
-local server = uv.new_tcp()
-server:bind("127.0.0.1", 1337)
-server:listen(128, function (err)
- assert(not err, err)
- local client = uv.new_tcp()
- server:accept(client)
- client:read_start(function (err, chunk)
- assert(not err, err)
- if chunk then
- client:write(chunk)
- else
- client:shutdown()
- client:close()
- end
- end)
-end)
-print("TCP server listening at 127.0.0.1 port 1337")
-uv.run()
-```
-
-### Methods vs Functions
-
-As a quick note, [libuv][] is a C library and as such, there are no such things
-as methods. The [luv][] bindings allow calling the libuv functions as either
-functions or methods. For example, calling `server:bind(host, port)` is
-equivalent to calling `uv.tcp_bind(server, host, port)`. All wrapped uv types
-in lua have method shortcuts where is makes sense. Some are even renamed
-shorter like the `tcp_` prefix that removed in method form. Under the hood it's
-the exact same C function.
-
-## Table Of Contents
-
-The rest of the docs are organized by libuv type. There is some hierarchy as
-most types are considered handles and some are considered streams.
-
- - [`uv_loop_t`][] — Event loop
- - [`uv_handle_t`][] — Base handle
- - [`uv_timer_t`][] — Timer handle
- - [`uv_prepare_t`][] — Prepare handle
- - [`uv_check_t`][] — Check handle
- - [`uv_idle_t`][] — Idle handle
- - [`uv_async_t`][] — Async handle
- - [`uv_poll_t`][] — Poll handle
- - [`uv_signal_t`][] — Signal handle
- - [`uv_process_t`][] — Process handle
- - [`uv_stream_t`][] — Stream handle
- - [`uv_tcp_t`][] — TCP handle
- - [`uv_pipe_t`][] — Pipe handle
- - [`uv_tty_t`][] — TTY handle
- - [`uv_udp_t`][] — UDP handle
- - [`uv_fs_event_t`][] — FS Event handle
- - [`uv_fs_poll_t`][] — FS Poll handle
- - [Filesystem operations][]
- - [DNS utility functions][]
- - [Miscellaneous utilities][]
-
-## `uv_loop_t` — Event loop
-
-[`uv_loop_t`]: #uv_loop_t--event-loop
-
-The event loop is the central part of libuv’s functionality. It takes care of
-polling for i/o and scheduling callbacks to be run based on different sources of
-events.
-
-In [luv][], there is an implicit uv loop for every lua state that loads the
-library. You can use this library in an multithreaded environment as long as
-each thread has it's own lua state with corresponsding own uv loop.
-
-### `uv.loop_close()`
-
-Closes all internal loop resources. This function must only be called once the
-loop has finished its execution or it will raise a UV_EBUSY error.
-
-### `uv.run([mode])`
-
-> optional `mode` defaults to `"default"`
-
-This function runs the event loop. It will act differently depending on the
-specified mode:
-
- - `"default"`: Runs the event loop until there are no more active and
- referenced handles or requests. Always returns `false`.
-
- - `"once"`: Poll for i/o once. Note that this function blocks if there are no
- pending callbacks. Returns `false` when done (no active handles or requests
- left), or `true` if more callbacks are expected (meaning you should run
- the event loop again sometime in the future).
-
- - `"nowait"`: Poll for i/o once but don’t block if there are no
- pending callbacks. Returns `false` if done (no active handles or requests
- left), or `true` if more callbacks are expected (meaning you should run
- the event loop again sometime in the future).
-
-Luvit will implicitly call `uv.run()` after loading user code, but if you use
-the `luv` bindings directly, you need to call this after registering your
-initial set of event callbacks to start the event loop.
-
-### `uv.loop_alive()`
-
-Returns true if there are active handles or request in the loop.
-
-### `uv.stop()`
-
-Stop the event loop, causing `uv_run()` to end as soon as possible. This
-will happen not sooner than the next loop iteration. If this function was called
-before blocking for i/o, the loop won’t block for i/o on this iteration.
-
-### `uv.backend_fd()`
-
-Get backend file descriptor. Only kqueue, epoll and event ports are supported.
-
-This can be used in conjunction with `uv_run("nowait")` to poll in one thread
-and run the event loop’s callbacks in another.
-
-**Note**: Embedding a kqueue fd in another kqueue pollset doesn’t work on all
-platforms. It’s not an error to add the fd but it never generates events.
-
-### `uv.backend_timeout()`
-
-Get the poll timeout. The return value is in milliseconds, or -1 for no timeout.
-
-### `uv.now()`
-
-Return the current timestamp in milliseconds. The timestamp is cached at the
-start of the event loop tick, see `uv.update_time()` for details and rationale.
-
-The timestamp increases monotonically from some arbitrary point in time. Don’t
-make assumptions about the starting point, you will only get disappointed.
-
-**Note**: Use `uv.hrtime()` if you need sub-millisecond granularity.
-
-### `uv.update_time()`
-
-Update the event loop’s concept of “nowâ€. Libuv caches the current time at the
-start of the event loop tick in order to reduce the number of time-related
-system calls.
-
-You won’t normally need to call this function unless you have callbacks that
-block the event loop for longer periods of time, where “longer†is somewhat
-subjective but probably on the order of a millisecond or more.
-
-### `uv.walk(callback)`
-
-Walk the list of handles: `callback` will be executed with the handle.
-
-```lua
--- Example usage of uv.walk to close all handles that aren't already closing.
-uv.walk(function (handle)
- if not handle:is_closing() then
- handle:close()
- end
-end)
-```
-
-## `uv_handle_t` — Base handle
-
-[`uv_handle_t`]: #uv_handle_t--base-handle
-
-`uv_handle_t` is the base type for all libuv handle types.
-
-Structures are aligned so that any libuv handle can be cast to `uv_handle_t`.
-All API functions defined here work with any handle type.
-
-### `uv.is_active(handle)`
-
-> method form `handle:is_active()`
-
-Returns `true` if the handle is active, `false` if it’s inactive. What “activeâ€
-means depends on the type of handle:
-
- - A [`uv_async_t`][] handle is always active and cannot be deactivated, except
- by closing it with uv_close().
-
- - A [`uv_pipe_t`][], [`uv_tcp_t`][], [`uv_udp_t`][], etc. handlebasically any
- handle that deals with i/ois active when it is doing something that
- involves i/o, like reading, writing, connecting, accepting new connections,
- etc.
-
- - A [`uv_check_t`][], [`uv_idle_t`][], [`uv_timer_t`][], etc. handle is active
- when it has been started with a call to `uv.check_start()`,
- `uv.idle_start()`, etc.
-
-Rule of thumb: if a handle of type `uv_foo_t` has a `uv.foo_start()` function,
-then it’s active from the moment that function is called. Likewise,
-`uv.foo_stop()` deactivates the handle again.
-
-### `uv.is_closing(handle)`
-
-> method form `handle:is_closing()`
-
-Returns `true` if the handle is closing or closed, `false` otherwise.
-
-**Note**: This function should only be used between the initialization of the
-handle and the arrival of the close callback.
-
-### `uv.close(handle, callback)`
-
-> method form `handle:close(callback)`
-
-Request handle to be closed. `callback` will be called asynchronously after this
-call. This MUST be called on each handle before memory is released.
-
-Handles that wrap file descriptors are closed immediately but `callback` will
-still be deferred to the next iteration of the event loop. It gives you a chance
-to free up any resources associated with the handle.
-
-In-progress requests, like `uv_connect_t` or `uv_write_t`, are cancelled and
-have their callbacks called asynchronously with `status=UV_ECANCELED`.
-
-### `uv.ref(handle)`
-
-> method form `handle:ref()`
-
-Reference the given handle. References are idempotent, that is, if a handle is
-already referenced calling this function again will have no effect.
-
-See [Reference counting][].
-
-### `uv.unref(handle)`
-
-> method form `handle:unref()`
-
-Un-reference the given handle. References are idempotent, that is, if a handle
-is not referenced calling this function again will have no effect.
-
-See [Reference counting][].
-
-### `uv.has_ref(handle)`
-
-> method form `handle:has_ref()`
-
-Returns `true` if the handle referenced, `false` otherwise.
-
-See [Reference counting][].
-
-### `uv.send_buffer_size(handle, [size]) -> size`
-
-> method form `handle:send_buffer_size(size)`
-
-Gets or sets the size of the send buffer that the operating system uses for the
-socket.
-
-If `size` is omitted, it will return the current send buffer size, otherwise it
-will use `size` to set the new send buffer size.
-
-This function works for TCP, pipe and UDP handles on Unix and for TCP and UDP
-handles on Windows.
-
-**Note**: Linux will set double the size and return double the size of the
-original set value.
-
-### `uv.recv_buffer_size(handle, [size])`
-
-> method form `handle:recv_buffer_size(size)`
-
-Gets or sets the size of the receive buffer that the operating system uses for
-the socket.
-
-If `size` is omitted, it will return the current receive buffer size, otherwise
-it will use `size` to set the new receive buffer size.
-
-This function works for TCP, pipe and UDP handles on Unix and for TCP and UDP
-handles on Windows.
-
-**Note**: Linux will set double the size and return double the size of the
-original set value.
-
-### `uv.fileno(handle)`
-
-> method form `handle:fileno()`
-
-Gets the platform dependent file descriptor equivalent.
-
-The following handles are supported: TCP, pipes, TTY, UDP and poll. Passing any
-other handle type will fail with UV_EINVAL.
-
-If a handle doesn’t have an attached file descriptor yet or the handle itself
-has been closed, this function will return UV_EBADF.
-
-**Warning**: Be very careful when using this function. libuv assumes it’s in
-control of the file descriptor so any change to it may lead to malfunction.
-
-## Reference counting
-
-[reference counting]: #reference-counting
-
-The libuv event loop (if run in the default mode) will run until there are no
-active and referenced handles left. The user can force the loop to exit early by
-unreferencing handles which are active, for example by calling `uv.unref()`
-after calling `uv.timer_start()`.
-
-A handle can be referenced or unreferenced, the refcounting scheme doesn’t use a
-counter, so both operations are idempotent.
-
-All handles are referenced when active by default, see `uv.is_active()` for a
-more detailed explanation on what being active involves.
-
-## `uv_timer_t` — Timer handle
-
-[`uv_timer_t`]: #uv_timer_t--timer-handle
-
-Timer handles are used to schedule callbacks to be called in the future.
-
-### `uv.new_timer() -> timer`
-
-Creates and initializes a new `uv_timer_t`. Returns the lua userdata wrapping
-it.
-
-```lua
--- Creating a simple setTimeout wrapper
-local function setTimeout(timeout, callback)
- local timer = uv.new_timer()
- timer:start(timeout, 0, function ()
- timer:stop()
- timer:close()
- callback()
- end)
- return timer
-end
-
--- Creating a simple setInterval wrapper
-local function setInterval(interval, callback)
- local timer = uv.new_timer()
- timer:start(interval, interval, function ()
- timer:stop()
- timer:close()
- callback()
- end)
- return timer
-end
-
--- And clearInterval
-local function clearInterval(timer)
- timer:stop()
- timer:close()
-end
-```
-
-### `uv.timer_start(timer, timeout, repeat, callback)`
-
-> method form `timer:start(timeout, repeat, callback)`
-
-Start the timer. `timeout` and `repeat` are in milliseconds.
-
-If `timeout` is zero, the callback fires on the next event loop iteration. If
-`repeat` is non-zero, the callback fires first after timeout milliseconds and
-then repeatedly after repeat milliseconds.
-
-### `uv.timer_stop(timer)`
-
-> method form `timer:stop()`
-
-Stop the timer, the callback will not be called anymore.
-
-### `uv.timer_again(timer)`
-
-> method form `timer:again()`
-
-Stop the timer, and if it is repeating restart it using the repeat value as the
-timeout. If the timer has never been started before it raises `EINVAL`.
-
-### `uv.timer_set_repeat(timer, repeat)`
-
-> method form `timer:set_repeat(repeat)`
-
-Set the repeat value in milliseconds.
-
-**Note**: If the repeat value is set from a timer callback it does not
-immediately take effect. If the timer was non-repeating before, it will have
-been stopped. If it was repeating, then the old repeat value will have been
-used to schedule the next timeout.
-
-### `uv.timer_get_repeat(timer) -> repeat`
-
-> method form `timer:get_repeat() -> repeat`
-
-Get the timer repeat value.
-
-## `uv_prepare_t` — Prepare handle
-
-[`uv_prepare_t`]: #uv_prepare_t--prepare-handle
-
-Prepare handles will run the given callback once per loop iteration, right before polling for i/o.
-
-```lua
-local prepare = uv.new_prepare()
-prepare:start(function()
- print("Before I/O polling")
-end)
-```
-
-### `uv.new_prepare() -> prepare`
-
-Creates and initializes a new `uv_prepare_t`. Returns the lua userdata wrapping
-it.
-
-### `uv.prepare_start(prepare, callback)`
-
-> method form `prepare:start(callback)`
-
-Start the handle with the given callback.
-
-### `uv.prepare_stop(prepare)`
-
-> method form `prepare:stop()`
-
-Stop the handle, the callback will no longer be called.
-
-## `uv_check_t` — Check handle
-
-[`uv_check_t`]: #uv_check_t--check-handle
-
-Check handles will run the given callback once per loop iteration, right after
-polling for i/o.
-
-```lua
-local check = uv.new_check()
-check:start(function()
- print("After I/O polling")
-end)
-```
-
-### `uv.new_check() -> check`
-
-Creates and initializes a new `uv_check_t`. Returns the lua userdata wrapping
-it.
-
-### `uv.check_start(check, callback)`
-
-> method form `check:start(callback)`
-
-Start the handle with the given callback.
-
-### `uv.check_stop(check)`
-
-> method form `check:stop()`
-
-Stop the handle, the callback will no longer be called.
-
-## `uv_idle_t` — Idle handle
-
-[`uv_idle_t`]: #uv_idle_t--idle-handle
-
-Idle handles will run the given callback once per loop iteration, right before
-the [`uv_prepare_t`][] handles.
-
-**Note**: The notable difference with prepare handles is that when there are
-active idle handles, the loop will perform a zero timeout poll instead of
-blocking for i/o.
-
-**Warning**: Despite the name, idle handles will get their callbacks called on
-every loop iteration, not when the loop is actually “idleâ€.
-
-```lua
-local idle = uv.new_idle()
-idle:start(function()
- print("Before I/O polling, no blocking")
-end)
-```
-### `uv.new_idle() -> idle`
-
-Creates and initializes a new `uv_idle_t`. Returns the lua userdata wrapping
-it.
-
-### `uv.idle_start(idle, callback)`
-
-> method form `idle:start(callback)`
-
-Start the handle with the given callback.
-
-### `uv.idle_stop(check)`
-
-> method form `idle:stop()`
-
-Stop the handle, the callback will no longer be called.
-
-## `uv_async_t` — Async handle
-
-[`uv_async_t`]: #uv_async_t--async-handle
-
-Async handles allow the user to “wakeup†the event loop and get a callback
-called from another thread.
-
-```lua
-local async
-async = uv.new_async(function()
- print("async operation ran")
- async:close()
-end)
-
-async:send()
-```
-
-### `uv.new_async(callback) -> async`
-
-Creates and initializes a new `uv_async_t`. Returns the lua userdata wrapping
-it. A NULL callback is allowed.
-
-**Note**: Unlike other handle initialization functions, it immediately starts
-the handle.
-
-### `uv.async_send(async)`
-
-> method form `async:send()`
-
-Wakeup the event loop and call the async handle’s callback.
-
-**Note**: It’s safe to call this function from any thread. The callback will be
-called on the loop thread.
-
-**Warning**: libuv will coalesce calls to `uv.async_send(async)`, that is, not
-every call to it will yield an execution of the callback, the only guarantee is
-that it will be called at least once. Thus, calling this function may not
-wakeup the event loop if it was already called previously within a short period
-of time.
-
-## `uv_poll_t` — Poll handle
-
-[`uv_poll_t`]: #uv_poll_t--poll-handle
-
-Poll handles are used to watch file descriptors for readability and writability,
-similar to the purpose of [poll(2)](http://linux.die.net/man/2/poll).
-
-The purpose of poll handles is to enable integrating external libraries that
-rely on the event loop to signal it about the socket status changes, like c-ares
-or libssh2. Using `uv_poll_t` for any other purpose is not recommended;
-`uv_tcp_t`, `uv_udp_t`, etc. provide an implementation that is faster and more
-scalable than what can be achieved with `uv_poll_t`, especially on Windows.
-
-It is possible that poll handles occasionally signal that a file descriptor is
-readable or writable even when it isn’t. The user should therefore always be
-prepared to handle EAGAIN or equivalent when it attempts to read from or write
-to the fd.
-
-It is not okay to have multiple active poll handles for the same socket, this
-can cause libuv to busyloop or otherwise malfunction.
-
-The user should not close a file descriptor while it is being polled by an
-active poll handle. This can cause the handle to report an error, but it might
-also start polling another socket. However the fd can be safely closed
-immediately after a call to `uv.poll_stop()` or `uv.close()`.
-
-**Note** On windows only sockets can be polled with poll handles. On Unix any
-file descriptor that would be accepted by poll(2) can be used.
-
-
-### `uv.new_poll(fd) -> poll`
-
-Initialize the handle using a file descriptor.
-
-The file descriptor is set to non-blocking mode.
-
-### `uv.new_socket_poll(fd) -> poll`
-
-Initialize the handle using a socket descriptor. On Unix this is identical to
-`uv.poll_init()`. On windows it takes a SOCKET handle.
-
-The socket is set to non-blocking mode.
-
-### `uv.poll_start(poll, events, callback)`
-
-> method form `poll:start()`
-
-Starts polling the file descriptor. `events` is `"r"`, `"w"`, or `"rw"` and
-translates to a bitmask made up of UV_READABLE and UV_WRITABLE. As soon as an
-event is detected the callback will be called with status set to 0, and the
-detected events set on the events field.
-
-The user should not close the socket while the handle is active. If the user
-does that anyway, the callback may be called reporting an error status, but this
-is not guaranteed.
-
-**Note** Calling `uv.poll_start()`` on a handle that is already active is fine.
-Doing so will update the events mask that is being watched for.
-
-## `uv.poll_stop(poll)`
-
-> method form `poll:stop()`
-
-Stop polling the file descriptor, the callback will no longer be called.
-
-## `uv_signal_t` — Signal handle
-
-[`uv_signal_t`]: #uv_signal_t--signal-handle
-
-Signal handles implement Unix style signal handling on a per-event loop bases.
-
-Reception of some signals is emulated on Windows:
-* SIGINT is normally delivered when the user presses CTRL+C. However, like on
-Unix, it is not generated when terminal raw mode is enabled.
-* SIGBREAK is delivered when the user pressed CTRL + BREAK.
-* SIGHUP is generated when the user closes the console window. On SIGHUP the
-program is given approximately 10 seconds to perform cleanup. After that
-Windows will unconditionally terminate it.
-* SIGWINCH is raised whenever libuv detects that the console has been resized.
-SIGWINCH is emulated by libuv when the program uses a uv_tty_t handle to write
-to the console. SIGWINCH may not always be delivered in a timely manner; libuv
-will only detect size changes when the cursor is being moved. When a readable
-[`uv_tty_t`][] handle is used in raw mode, resizing the console buffer will
-also trigger a SIGWINCH signal.
-
-Watchers for other signals can be successfully created, but these signals are
-never received. These signals are: SIGILL, SIGABRT, SIGFPE, SIGSEGV, SIGTERM
-and SIGKILL.
-
-Calls to raise() or abort() to programmatically raise a signal are not detected
-by libuv; these will not trigger a signal watcher.
-
-**Note**: On Linux SIGRT0 and SIGRT1 (signals 32 and 33) are used by the NPTL
-pthreads library to manage threads. Installing watchers for those signals will
-lead to unpredictable behavior and is strongly discouraged. Future versions of
-libuv may simply reject them.
-
-```lua
--- Create a new signal handler
-local sigint = uv.new_signal()
--- Define a handler function
-uv.signal_start(sigint, "sigint", function(signal)
-print("got " .. signal .. ", shutting down")
-os.exit(1)
-end)
-```
-
-### `uv.new_signal() -> signal`
-
-Creates and initializes a new `uv_signal_t`. Returns the lua userdata wrapping
-it.
-
-### `uv.signal_start(signal, signum, callback)`
-
-> method form `signal:start(signum, callback)`
-
-Start the handle with the given callback, watching for the given signal.
-
-### `uv.signal_stop(signal)`
-
-> method form `signal:stop()`
-
-Stop the handle, the callback will no longer be called.
-
-## `uv_process_t` — Process handle
-
-[`uv_process_t`]: #uv_process_t--process-handle
-
-Process handles will spawn a new process and allow the user to control it and
-establish communication channels with it using streams.
-
-### `uv.disable_stdio_inheritance()`
-
-Disables inheritance for file descriptors / handles that this process inherited
-from its parent. The effect is that child processes spawned by this process
-don’t accidentally inherit these handles.
-
-It is recommended to call this function as early in your program as possible,
-before the inherited file descriptors can be closed or duplicated.
-
-**Note** This function works on a best-effort basis: there is no guarantee that
-libuv can discover all file descriptors that were inherited. In general it does
-a better job on Windows than it does on Unix.
-
-### `uv.spawn(file, options, onexit) -> process, pid`
-
-Initializes the process handle and starts the process. If the process is
-successfully spawned, this function will return the handle and pid of the child
-process.
-
-Possible reasons for failing to spawn would include (but not be limited to) the
-file to execute not existing, not having permissions to use the setuid or setgid
-specified, or not having enough memory to allocate for the new process.
-
-
-```lua
-local stdout = uv.new_pipe(false)
-local stderr = uv.new_pipe(false)
-local stdin = uv.new_pipe(false)
-
-local handle, pid
-
-local function onexit(code, signal)
- p("exit", {code=code,signal=signal})
-end
-
-local function onclose()
- p("close")
-end
-
-local function onread(err, chunk)
- assert(not err, err)
- if (chunk) then
- p("data", {data=chunk})
- else
- p("end")
- end
-end
-
-local function onshutdown()
- uv.close(handle, onclose)
-end
-
-handle, pid = uv.spawn("cat", {
- stdio = {stdin, stdout, stderr}
-}, onexit)
-
-p{
- handle=handle,
- pid=pid
-}
-
-uv.read_start(stdout, onread)
-uv.read_start(stderr, onread)
-uv.write(stdin, "Hello World")
-uv.shutdown(stdin, onshutdown)
-```
-
- - `options.args` - Command line arguments as a list of string. The first string
- should be the path to the program. On Windows this uses CreateProcess which
- concatenates the arguments into a string this can cause some strange errors.
- (See `options.verbatim` below for Windows.)
- - `options.stdio` - Set the file descriptors that will be made available to the
- child process. The convention is that the first entries are stdin, stdout,
- and stderr. (**Note** On Windows file descriptors after the third are
- available to the child process only if the child processes uses the MSVCRT
- runtime.)
- - `options.env` - Set environment variables for the new process.
- - `options.cwd` - Set current working directory for the subprocess.
- - `options.uid` - Set the child process' user id.
- - `options.gid` - Set the child process' group id.
- - `options.verbatim` - If true, do not wrap any arguments in quotes, or perform
- any other escaping, when converting the argument list into a command line
- string. This option is only meaningful on Windows systems. On Unix it is
- silently ignored.
- - `options.detached` - If true, spawn the child process in a detached state -
- this will make it a process group leader, and will effectively enable the
- child to keep running after the parent exits. Note that the child process
- will still keep the parent's event loop alive unless the parent process calls
- `uv.unref()` on the child's process handle.
- - `options.hide` - If true, hide the subprocess console window that would
- normally be created. This option is only meaningful on Windows systems. On
- Unix it is silently ignored.
-
-The `options.stdio` entries can take many shapes.
-
-- If they are numbers, then the child process inherits that same zero-indexed fd
- from the parent process.
-- If `uv_stream_h` handles are passed in, those are used as a read-write pipe or
- inherited stream depending if the stream has a valid fd.
-- Including `nil` placeholders means to ignore that fd in the child.
-
-When the child process exits, the `onexit` callback will be called with exit
-code and signal.
-
-### `uv.process_kill(process, sigmun)`
-
-> method form `process:kill(sigmun)`
-
-Sends the specified signal to the given process handle.
-
-### `uv.kill(pid, sigmun)`
-
-Sends the specified signal to the given PID.
-
-## `uv_stream_t` — Stream handle
-
-[`uv_stream_t`]: #uv_stream_t--stream-handle
-
-Stream handles provide an abstraction of a duplex communication channel.
-[`uv_stream_t`][] is an abstract type, libuv provides 3 stream implementations in
-the form of [`uv_tcp_t`][], [`uv_pipe_t`][] and [`uv_tty_t`][].
-
-### `uv.shutdown(stream, [callback]) -> req`
-
-> (method form `stream:shutdown([callback]) -> req`)
-
-Shutdown the outgoing (write) side of a duplex stream. It waits for pending
-write requests to complete. The callback is called after
-shutdown is complete.
-
-### `uv.listen(stream, backlog, callback)`
-
-> (method form `stream:listen(backlog, callback)`)
-
-Start listening for incoming connections. `backlog` indicates the number of
-connections the kernel might queue, same as `listen(2)`. When a new incoming
-connection is received the callback is called.
-
-### `uv.accept(stream, client_stream)`
-
-> (method form `stream:accept(client_stream)`)
-
-This call is used in conjunction with `uv.listen()` to accept incoming
-connections. Call this function after receiving a callback to accept the
-connection.
-
-When the connection callback is called it is guaranteed that this function
-will complete successfully the first time. If you attempt to use it more than
-once, it may fail. It is suggested to only call this function once per
-connection call.
-
-```lua
-server:listen(128, function (err)
- local client = uv.new_tcp()
- server:accept(client)
-end)
-```
-
-### `uv.read_start(stream, callback)`
-
-> (method form `stream:read_start(callback)`)
-
-Callback is of the form `(err, data)`.
-
-Read data from an incoming stream. The callback will be made several times until
-there is no more data to read or `uv.read_stop()` is called. When we’ve reached
-EOF, `data` will be `nil`.
-
-```lua
-stream:read_start(function (err, chunk)
- if err then
- -- handle read error
- elseif chunk then
- -- handle data
- else
- -- handle disconnect
- end
-end)
-```
-
-### `uv.read_stop(stream)`
-
-> (method form `stream:read_stop()`)
-
-Stop reading data from the stream. The read callback will no longer be called.
-
-### `uv.write(stream, data, [callback])`
-
-> (method form `stream:write(data, [callback])`)
-
-Write data to stream.
-
-`data` can either be a lua string or a table of strings. If a table is passed
-in, the C backend will use writev to send all strings in a single system call.
-
-The optional `callback` is for knowing when the write is
-complete.
-
-### `uv.write2(stream, data, send_handle, callback)`
-
-> (method form `stream:write2(data, send_handle, callback)`)
-
-Extended write function for sending handles over a pipe. The pipe must be
-initialized with ip option to `true`.
-
-**Note: `send_handle` must be a TCP socket or pipe, which is a server or a
-connection (listening or connected state). Bound sockets or pipes will be
-assumed to be servers.
-
-### `uv.try_write(stream, data)`
-
-> (method form `stream:try_write(data)`)
-
-Same as `uv.write()`, but won’t queue a write request if it can’t be completed
-immediately.
-
-Will return number of bytes written (can be less than the supplied buffer size).
-
-### `uv.is_readable(stream)`
-
-> (method form `stream:is_readable()`)
-
-Returns `true` if the stream is readable, `false` otherwise.
-
-### `uv.is_writable(stream)`
-
-> (method form `stream:is_writable()`)
-
-Returns `true` if the stream is writable, `false` otherwise.
-
-### `uv.stream_set_blocking(stream, blocking)`
-
-> (method form `stream:set_blocking(blocking)`)
-
-Enable or disable blocking mode for a stream.
-
-When blocking mode is enabled all writes complete synchronously. The interface
-remains unchanged otherwise, e.g. completion or failure of the operation will
-still be reported through a callback which is made asynchronously.
-
-**Warning**: Relying too much on this API is not recommended. It is likely to
-change significantly in the future. Currently this only works on Windows and
-only for uv_pipe_t handles. Also libuv currently makes no ordering guarantee
-when the blocking mode is changed after write requests have already been
-submitted. Therefore it is recommended to set the blocking mode immediately
-after opening or creating the stream.
-
-## `uv_tcp_t` — TCP handle
-
-[`uv_tcp_t`]: #uv_tcp_t--tcp-handle
-
-TCP handles are used to represent both TCP streams and servers.
-
-`uv_tcp_t` is a ‘subclass’ of [`uv_stream_t`][](#uv_stream_t--stream-handle).
-
-### `uv.new_tcp() -> tcp`
-
-Creates and initializes a new `uv_tcp_t`. Returns the lua userdata wrapping it.
-
-### `uv.tcp_open(tcp, sock)`
-
-> (method form `tcp:open(sock)`)
-
-Open an existing file descriptor or SOCKET as a TCP handle.
-
-**Note: The user is responsible for setting the file descriptor in non-blocking
-mode.
-
-### `uv.tcp_nodelay(tcp, enable)`
-
-> (method form `tcp:nodelay(enable)`)
-
-Enable / disable Nagle’s algorithm.
-
-### `uv.tcp_keepalive(tcp, enable, [delay])`
-
-> (method form `tcp:keepalive(enable, [delay])`)
-
-Enable / disable TCP keep-alive. `delay` is the initial delay in seconds, ignored
-when enable is `false`.
-
-### `uv.tcp_simultaneous_accepts(tcp, enable)`
-
-> (method form `tcp:simultaneous_accepts(enable)`)
-
-Enable / disable simultaneous asynchronous accept requests that are queued by
-the operating system when listening for new TCP connections.
-
-This setting is used to tune a TCP server for the desired performance. Having
-simultaneous accepts can significantly improve the rate of accepting connections
-(which is why it is enabled by default) but may lead to uneven load distribution
-in multi-process setups.
-
-### `uv.tcp_bind(tcp, address, port)`
-
-> (method form `tcp:bind(address, port)`)
-
-Bind the handle to an address and port. `address` should be an IP address and
-not a domain name.
-
-When the port is already taken, you can expect to see an UV_EADDRINUSE error
-from either `uv.tcp_bind()`, `uv.listen()` or `uv.tcp_connect()`. That is, a
-successful call to this function does not guarantee that the call to `uv.listen()`
-or `uv.tcp_connect()` will succeed as well.
-
-Use a port of `0` to let the OS assign an ephemeral port. You can look it up
-later using `uv.tcp_getsockname()`.
-
-### `uv.tcp_getsockname(tcp)`
-
-> (method form `tcp:getsockname()`)
-
-Get the current address to which the handle is bound.
-
-### `uv.tcp_getpeername(tcp)`
-
-> (method form `tcp:getpeername()`)
-
-Get the address of the peer connected to the handle.
-
-### `uv.tcp_connect(tcp, address, port, callback) -> req`
-
-> (method form `tcp:connect(host, port, callback) -> req`)
-
-### `uv.tcp_write_queue_size(tcp) -> size`
-
-> (method form `tcp:write_queue_size() -> size`)
-
-Establish an IPv4 or IPv6 TCP connection.
-
-The callback is made when the connection has been established or when a
-connection error happened.
-
-```lua
-local client = uv.new_tcp()
-client:connect("127.0.0.1", 8080, function (err)
- -- check error and carry on.
-end)
-```
-
-## `uv_pipe_t` — Pipe handle
-
-[`uv_pipe_t`]: #uv_pipe_t--pipe-handle
-
-Pipe handles provide an abstraction over local domain sockets on Unix and named
-pipes on Windows.
-
-```lua
-local pipe = uv.new_pipe(false)
-
-pipe:bind('/tmp/sock.test')
-
-pipe:listen(128, function()
- local client = uv.new_pipe(false)
- pipe:accept(client)
- client:write("hello!\n")
- client:close()
-end)
-```
-
-### `uv.new_pipe(ipc) -> pipe`
-
-Creates and initializes a new `uv_pipe_t`. Returns the lua userdata wrapping
-it. The `ipc` argument is a boolean to indicate if this pipe will be used for
-handle passing between processes.
-
-### `uv.pipe_open(file) -> pipe`
-
-Open an existing file descriptor or [`uv_handle_t`][] as a pipe.
-
-**Note**: The file descriptor is set to non-blocking mode.
-
-### `uv.pipe_bind(pipe, name)`
-
-> (method form `pipe:bind(name)`)
-
-Bind the pipe to a file path (Unix) or a name (Windows).
-
-**Note**: Paths on Unix get truncated to sizeof(sockaddr_un.sun_path) bytes,
-typically between 92 and 108 bytes.
-
-### `uv.pipe_connect(pipe, name, callback)`
-
-> (method form `pipe:connect(name, callback)`)
-
-Connect to the Unix domain socket or the named pipe.
-
-**Note**: Paths on Unix get truncated to sizeof(sockaddr_un.sun_path) bytes,
-typically between 92 and 108 bytes.
-
-### `uv.pipe_getsockname(pipe)`
-
-> (method form `pipe:getsockname()`)
-
-Returns the name of the Unix domain socket or the named pipe.
-
-### `uv.pipe_pending_instances(pipe, count)`
-
-> (method form `pipe:pending_instances(count)`)
-
-Set the number of pending pipe instance handles when the pipe server is waiting for connections.
-
-**Note**: This setting applies to Windows only.
-
-### `uv.pipe_pending_count(pipe)`
-
-> (method form `pipe:pending_count()`)
-
-Returns the pending pipe count for the named pipe.
-
-### `uv.pipe_pending_type(pipe)`
-
-> (method form `pipe:pending_type()`)
-
-Used to receive handles over IPC pipes.
-
-First - call [`uv.pipe_pending_count`][], if it’s > 0 then initialize a handle
-of the given type, returned by [`uv.pipe_pending_type`][] and call
-[`uv.accept(pipe, handle)`][].
-
-## `uv_tty_t` — TTY handle
-
-[`uv_tty_t`]: #uv_tty_t--tty-handle
-
-TTY handles represent a stream for the console.
-
-```lua
--- Simple echo program
-local stdin = uv.new_tty(0, true)
-local stdout = uv.new_tty(1, false)
-
-stdin:read_start(function (err, data)
- assert(not err, err)
- if data then
- stdout:write(data)
- else
- stdin:close()
- stdout:close()
- end
-end)
-```
-
-### uv.new_tty(fd, readable) -> tty
-
-Initialize a new TTY stream with the given file descriptor. Usually the file
-descriptor will be:
-
- - 0 - stdin
- - 1 - stdout
- - 2 - stderr
-
-`readable, specifies if you plan on calling uv_read_start() with this stream.
-`stdin is readable, stdout is not.
-
-On Unix this function will try to open /dev/tty and use it if the passed file
-descriptor refers to a TTY. This lets libuv put the tty in non-blocking mode
-without affecting other processes that share the tty.
-
-Note: If opening `/dev/tty` fails, libuv falls back to blocking writes for
-non-readable TTY streams.
-
-### uv.tty_set_mode(mode)
-
-> (method form `tty:set_mode(mode)`)
-
-Set the TTY using the specified terminal mode.
-
-Parameter `mode` is a C enum with the following values:
-
-- 0 - UV_TTY_MODE_NORMAL: Initial/normal terminal mode
-
-- 1 - UV_TTY_MODE_RAW: Raw input mode (On Windows, ENABLE_WINDOW_INPUT is
- also enabled)
-
-- 2 - UV_TTY_MODE_IO: Binary-safe I/O mode for IPC (Unix-only)
-
-## uv.tty_reset_mode()
-
-To be called when the program exits. Resets TTY settings to default values for
-the next process to take over.
-
-This function is async signal-safe on Unix platforms but can fail with error
-code UV_EBUSY if you call it when execution is inside uv_tty_set_mode().
-
-## uv.tty_get_winsize() -> w, h
-
-> (method form `tty:get_winsize() -> w, h`)
-
-Gets the current Window size.
-
-## `uv_udp_t` — UDP handle
-
-[`uv_udp_t`]: #uv_udp_t--udp-handle
-
-UDP handles encapsulate UDP communication for both clients and servers.
-
-### uv.new_udp() -> udp
-
-Initialize a new UDP handle. The actual socket is created lazily.
-
-### uv.udp_open(udp, fd)
-
-> (method form `udp:open(fd)`)
-
-Opens an existing file descriptor or Windows SOCKET as a UDP handle.
-
-Unix only: The only requirement of the sock argument is that it follows the
-datagram contract (works in unconnected mode, supports sendmsg()/recvmsg(),
-etc). In other words, other datagram-type sockets like raw sockets or netlink
-sockets can also be passed to this function.
-
-The file descriptor is set to non-blocking mode.
-
-Note: The passed file descriptor or SOCKET is not checked for its type, but
-it’s required that it represents a valid datagram socket.
-
-### uv.udp_bind(udp, host, port)
-
-> (method form `udp:bind(host, port)`)
-
-Bind the UDP handle to an IP address and port.
-
-### uv.udp_getsockname(udp)
-
-> (method form `udp:getsockname()`)
-
-Get the local IP and port of the UDP handle.
-
-### uv.udp_set_membership(udp, multicast_addr, interface_addr, membership)
-
-> (method form `udp:set_membership(multicast_addr, interface_addr, membership)`)
-
-Set membership for a multicast address.
-
-`multicast_addr` is multicast address to set membership for.
-
-`interface_addr` is interface address.
-
-`membership` can be the string `"leave"` or `"join"`.
-
-### uv.udp_set_multicast_loop(udp, on)
-
-> (method form `udp:set_multicast_loop(on)`)
-
-Set IP multicast loop flag. Makes multicast packets loop back to local
-sockets.
-
-`on` is a boolean.
-
-### uv.udp_set_multicast_ttl(udp, tty)
-
-> (method form `udp:set_multicast_ttl(tty)`)
-
-Set the multicast ttl.
-
-`ttl` is an integer 1 through 255.
-
-### uv.udp_set_multicast_interface(udp, interface_addr)
-
-> (method form `udp:set_multicast_interface(interface_addr)`)
-
-Set the multicast interface to send or receive data on.
-
-### uv.udp_set_broadcast(udp, on)
-
-Set broadcast on or off.
-
-> (method form `udp:set_broadcast(, on)`)
-
-### uv.udp_set_ttl(udp, ttl)
-
-> (method form `udp:set_ttl(ttl)`)
-
-Set the time to live.
-
-`ttl` is an integer 1 through 255.
-
-### uv.udp_send(udp, data, host, port, callback)
-
-> (method form `udp:send(data, host, port, callback)`)
-
-Send data over the UDP socket. If the socket has not previously been bound
-with `uv_udp_bind()` it will be bound to `0.0.0.0` (the “all interfaces†IPv4
-address) and a random port number.
-
-### uv.udp_try_send(udp, data, host, port)
-
-> (method form `udp:try_send(data, host, port)`)
-
-Same as `uv_udp_send()`, but won’t queue a send request if it can’t be
-completed immediately.
-
-### uv.udp_recv_start(udp, callback)
-
-> (method form `udp:recv_start(callback)`)
-
-Prepare for receiving data. If the socket has not previously been bound with
-`uv_udp_bind()` it is bound to `0.0.0.0` (the “all interfaces†IPv4 address)
-and a random port number.
-
-### uv.udp_recv_stop(udp)
-
-> (method form `udp:recv_stop()`)
-
-## `uv_fs_event_t` — FS Event handle
-
-[`uv_fs_event_t`]: #uv_fs_event_t--fs-event-handle
-
-**TODO**: port docs from [docs.libuv.org](http://docs.libuv.org/en/v1.x/fs_event.html)
-using [functions](https://github.com/luvit/luv/blob/25278a3871962cab29763692fdc3b270a7e96fe9/src/luv.c#L174-L177)
-and [methods](https://github.com/luvit/luv/blob/25278a3871962cab29763692fdc3b270a7e96fe9/src/luv.c#L265-L270)
-from [fs_event.c](https://github.com/luvit/luv/blob/master/src/fs_event.c)
-
-## `uv_fs_poll_t` — FS Poll handle
-
-[`uv_fs_poll_t`]: #uv_fs_poll_t--fs-poll-handle
-
-**TODO**: port docs from [docs.libuv.org](http://docs.libuv.org/en/v1.x/fs_poll.html)
-using [functions](https://github.com/luvit/luv/blob/25278a3871962cab29763692fdc3b270a7e96fe9/src/luv.c#L180-L183)
-and [methods](https://github.com/luvit/luv/blob/25278a3871962cab29763692fdc3b270a7e96fe9/src/luv.c#L272-L277)
-from [fs_poll.c](https://github.com/luvit/luv/blob/master/src/fs_poll.c)
-
-## Filesystem operations
-
-[Filesystem operations]:#filesystem-operations
-
-**TODO**: port docs from [docs.libuv.org](http://docs.libuv.org/en/v1.x/fs.html)
-using [functions](https://github.com/luvit/luv/blob/25278a3871962cab29763692fdc3b270a7e96fe9/src/luv.c#L186-L213)
-from [fs.c](https://github.com/luvit/luv/blob/master/src/fs.c)
-
-## DNS utility functions
-
-[DNS utility functions]: #dns-utility-functions
-
-**TODO**: port docs from [docs.libuv.org](http://docs.libuv.org/en/v1.x/dns.html)
-using [functions](https://github.com/luvit/luv/blob/25278a3871962cab29763692fdc3b270a7e96fe9/src/luv.c#L216-L217)
-from [dns.c](https://github.com/luvit/luv/blob/master/src/dns.c)
-
-## Miscellaneous utilities
-
-[Miscellaneous utilities]: #miscellaneous-utilities
-
-**TODO**: port docs from [docs.libuv.org](http://docs.libuv.org/en/v1.x/misc.html)
-using [functions](https://github.com/luvit/luv/blob/25278a3871962cab29763692fdc3b270a7e96fe9/src/luv.c#L220-L235)
-from [misc.c](https://github.com/luvit/luv/blob/master/src/misc.c)
-
-[luv]: https://github.com/luvit/luv
-[luvit]: https://github.com/luvit/luvit
-[libuv]: https://github.com/libuv/libuv
diff --git a/3rdparty/luv/examples/cqueues-main.lua b/3rdparty/luv/examples/cqueues-main.lua
deleted file mode 100644
index ff60ec2b1c9..00000000000
--- a/3rdparty/luv/examples/cqueues-main.lua
+++ /dev/null
@@ -1,31 +0,0 @@
---[[
-Demonstrates using luv with a cqueues mainloop
-]]
-
-local cqueues = require "cqueues"
-local uv = require "luv"
-
-local cq = cqueues.new()
-
-cq:wrap(function()
- while cqueues.poll({
- pollfd = uv.backend_fd();
- timeout = uv.backend_timeout() / 1000;
- events = "r";
- }) do
- uv.run("nowait")
- end
-end)
-
-cq:wrap(function()
- while true do
- cqueues.sleep(1)
- print("HELLO FROM CQUEUES")
- end
-end)
-
-uv.new_timer():start(1000, 1000, function()
- print("HELLO FROM LUV")
-end)
-
-assert(cq:loop())
diff --git a/3rdparty/luv/examples/cqueues-slave.lua b/3rdparty/luv/examples/cqueues-slave.lua
deleted file mode 100644
index 599e7c6ded7..00000000000
--- a/3rdparty/luv/examples/cqueues-slave.lua
+++ /dev/null
@@ -1,55 +0,0 @@
---[[
-Demonstrates using cqueues with a luv mainloop
-
-Starts a simple sleep+print loop using each library's native form.
-They should print intertwined.
-]]
-
-local cqueues = require "cqueues"
-local uv = require "luv"
-
-local cq = cqueues.new()
-
-do
- local timer = uv.new_timer()
- local function reset_timer()
- local timeout = cq:timeout()
- if timeout then
- -- libuv takes milliseconds as an integer,
- -- while cqueues gives timeouts as a floating point number
- -- use `math.ceil` as we'd rather wake up late than early
- timer:set_repeat(math.ceil(timeout * 1000))
- timer:again()
- else
- -- stop timer for now; it may be restarted later.
- timer:stop()
- end
- end
- local function onready()
- -- Step the cqueues loop once (sleeping for max 0 seconds)
- assert(cq:step(0))
- reset_timer()
- end
- -- Need to call `start` on libuv timer now
- -- to provide callback and so that `again` works
- timer:start(0, 0, onready)
- -- Ask libuv to watch the cqueue pollfd
- uv.new_poll(cq:pollfd()):start(cq:events(), onready)
-end
-
--- Adds a new function to the scheduler `cq`
--- The functions is an infinite loop that sleeps for 1 second and prints
-cq:wrap(function()
- while true do
- cqueues.sleep(1)
- print("HELLO FROM CQUEUES")
- end
-end)
-
--- Start a luv timer that fires every 1 second
-uv.new_timer():start(1000, 1000, function()
- print("HELLO FROM LUV")
-end)
-
--- Run luv mainloop
-uv.run()
diff --git a/3rdparty/luv/examples/echo-server-client.lua b/3rdparty/luv/examples/echo-server-client.lua
deleted file mode 100644
index ea4e6d2132d..00000000000
--- a/3rdparty/luv/examples/echo-server-client.lua
+++ /dev/null
@@ -1,68 +0,0 @@
-local p = require('lib/utils').prettyPrint
-local uv = require('luv')
-
-local function create_server(host, port, on_connection)
-
- local server = uv.new_tcp()
- p(1, server)
- uv.tcp_bind(server, host, port)
-
- uv.listen(server, 128, function(err)
- assert(not err, err)
- local client = uv.new_tcp()
- uv.accept(server, client)
- on_connection(client)
- end)
-
- return server
-end
-
-local server = create_server("0.0.0.0", 0, function (client)
- p("new client", client, uv.tcp_getsockname(client), uv.tcp_getpeername(client))
- uv.read_start(client, function (err, chunk)
- p("onread", {err=err,chunk=chunk})
-
- -- Crash on errors
- assert(not err, err)
-
- if chunk then
- -- Echo anything heard
- uv.write(client, chunk)
- else
- -- When the stream ends, close the socket
- uv.close(client)
- end
- end)
-end)
-
-local address = uv.tcp_getsockname(server)
-p("server", server, address)
-
-local client = uv.new_tcp()
-uv.tcp_connect(client, "127.0.0.1", address.port, function (err)
- assert(not err, err)
-
- uv.read_start(client, function (err, chunk)
- p("received at client", {err=err,chunk=chunk})
- assert(not err, err)
- if chunk then
- uv.shutdown(client)
- p("client done shutting down")
- else
- uv.close(client)
- uv.close(server)
- end
- end)
-
- p("writing from client")
- uv.write(client, "Hello")
- uv.write(client, "World")
-
-end)
-
--- Start the main event loop
-uv.run()
--- Close any stray handles when done
-uv.walk(uv.close)
-uv.run()
-uv.loop_close()
diff --git a/3rdparty/luv/examples/killing-children.lua b/3rdparty/luv/examples/killing-children.lua
deleted file mode 100644
index 6aab693d0c1..00000000000
--- a/3rdparty/luv/examples/killing-children.lua
+++ /dev/null
@@ -1,24 +0,0 @@
-local p = require('lib/utils').prettyPrint
-local uv = require('luv')
-
-
-
-local child, pid
-child, pid = uv.spawn("sleep", {
- args = {"100"}
-}, function (code, signal)
- p("EXIT", {code=code,signal=signal})
- uv.close(child)
-end)
-
-p{child=child, pid=pid}
-
--- uv.kill(pid, "SIGTERM")
-uv.process_kill(child, "SIGTERM")
-
-repeat
- print("\ntick.")
-until uv.run('once') == 0
-
-print("done")
-
diff --git a/3rdparty/luv/examples/lots-o-dns.lua b/3rdparty/luv/examples/lots-o-dns.lua
deleted file mode 100644
index 59a1b0fe534..00000000000
--- a/3rdparty/luv/examples/lots-o-dns.lua
+++ /dev/null
@@ -1,49 +0,0 @@
-local p = require('lib/utils').prettyPrint
-local uv = require('luv')
-
-uv.getaddrinfo(nil, 80, nil, p)
-
-local domains = {
- "facebook.com",
- "google.com",
- "mail.google.com",
- "maps.google.com",
- "plus.google.com",
- "play.google.com",
- "apple.com",
- "hp.com",
- "yahoo.com",
- "mozilla.com",
- "developer.mozilla.com",
- "luvit.io",
- "creationix.com",
- "howtonode.org",
- "github.com",
- "gist.github.com"
-}
-
-local i = 1
-local function next()
- uv.getaddrinfo(domains[i], nil, {
- v4mapped = true,
- all = true,
- addrconfig = true,
- canonname = true,
- numericserv = true,
- socktype = "STREAM"
- }, function (err, data)
- assert(not err, err)
- p(data)
- i = i + 1
- if i <= #domains then
- next()
- end
- end)
-end
-next();
-
-repeat
- print("\nTick..")
-until uv.run('once') == 0
-
-print("done")
diff --git a/3rdparty/luv/examples/repl.lua b/3rdparty/luv/examples/repl.lua
deleted file mode 100644
index 92be0f17d87..00000000000
--- a/3rdparty/luv/examples/repl.lua
+++ /dev/null
@@ -1,89 +0,0 @@
-local uv = require('luv')
-local utils = require('lib/utils')
-
-if uv.guess_handle(0) ~= "tty" or
- uv.guess_handle(1) ~= "tty" then
- error "stdio must be a tty"
-end
-local stdin = uv.new_tty(0, true)
-local stdout = require('lib/utils').stdout
-
-local debug = require('debug')
-local c = utils.color
-
-local function gatherResults(success, ...)
- local n = select('#', ...)
- return success, { n = n, ... }
-end
-
-local function printResults(results)
- for i = 1, results.n do
- results[i] = utils.dump(results[i])
- end
- print(table.concat(results, '\t'))
-end
-
-local buffer = ''
-
-local function evaluateLine(line)
- if line == "<3\n" then
- print("I " .. c("Bred") .. "♥" .. c() .. " you too!")
- return '>'
- end
- local chunk = buffer .. line
- local f, err = loadstring('return ' .. chunk, 'REPL') -- first we prefix return
-
- if not f then
- f, err = loadstring(chunk, 'REPL') -- try again without return
- end
-
- if f then
- buffer = ''
- local success, results = gatherResults(xpcall(f, debug.traceback))
-
- if success then
- -- successful call
- if results.n > 0 then
- printResults(results)
- end
- else
- -- error
- print(results[1])
- end
- else
-
- if err:match "'<eof>'$" then
- -- Lua expects some more input; stow it away for next time
- buffer = chunk .. '\n'
- return '>>'
- else
- print(err)
- buffer = ''
- end
- end
-
- return '>'
-end
-
-local function displayPrompt(prompt)
- uv.write(stdout, prompt .. ' ')
-end
-
-local function onread(err, line)
- if err then error(err) end
- if line then
- local prompt = evaluateLine(line)
- displayPrompt(prompt)
- else
- uv.close(stdin)
- end
-end
-
-coroutine.wrap(function()
- displayPrompt '>'
- uv.read_start(stdin, onread)
-end)()
-
-uv.run()
-
-print("")
diff --git a/3rdparty/luv/examples/talking-to-children.lua b/3rdparty/luv/examples/talking-to-children.lua
deleted file mode 100644
index 10a53ef8c88..00000000000
--- a/3rdparty/luv/examples/talking-to-children.lua
+++ /dev/null
@@ -1,47 +0,0 @@
-local p = require('lib/utils').prettyPrint
-local uv = require('luv')
-
-local stdout = uv.new_pipe(false)
-local stderr = uv.new_pipe( false)
-local stdin = uv.new_pipe(false)
-
-local handle, pid
-
-local function onexit(code, signal)
- p("exit", {code=code,signal=signal})
-end
-
-local function onclose()
- p("close")
-end
-
-local function onread(err, chunk)
- assert(not err, err)
- if (chunk) then
- p("data", {data=chunk})
- else
- p("end")
- end
-end
-
-local function onshutdown()
- uv.close(handle, onclose)
-end
-
-handle, pid = uv.spawn("cat", {
- stdio = {stdin, stdout, stderr}
-}, onexit)
-
-p{
- handle=handle,
- pid=pid
-}
-
-uv.read_start(stdout, onread)
-uv.read_start(stderr, onread)
-uv.write(stdin, "Hello World")
-uv.shutdown(stdin, onshutdown)
-
-uv.run()
-uv.walk(uv.close)
-uv.run()
diff --git a/3rdparty/luv/examples/tcp-cluster.lua b/3rdparty/luv/examples/tcp-cluster.lua
deleted file mode 100644
index e69ceffc62d..00000000000
--- a/3rdparty/luv/examples/tcp-cluster.lua
+++ /dev/null
@@ -1,84 +0,0 @@
-
--- This function will be run in a child process
-local child_code = string.dump(function ()
- local p = require('lib/utils').prettyPrint
- local uv = require('luv')
-
- -- The parent is going to pass us the server handle over a pipe
- -- This will be our local file descriptor at PIPE_FD
- local pipe = uv.new_pipe(true)
- local pipe_fd = tonumber(os.getenv("PIPE_FD"))
- assert(uv.pipe_open(pipe, pipe_fd))
-
- -- Configure the server handle
- local server = uv.new_tcp()
- local function onconnection()
- local client = uv.new_tcp()
- uv.accept(server, client)
- p("New TCP", client, "on", server)
- p{client=client}
- uv.write(client, "BYE!\n");
- uv.shutdown(client, function ()
- uv.close(client)
- uv.close(server)
- end)
- end
-
- -- Read the server handle from the parent
- local function onread(err, data)
- p("onread", {err=err,data=data})
- assert(not err, err)
- if uv.pipe_pending_count(pipe) > 0 then
- local pending_type = uv.pipe_pending_type(pipe)
- p("pending_type", pending_type)
- assert(pending_type == "tcp")
- assert(uv.accept(pipe, server))
- assert(uv.listen(server, 128, onconnection))
- p("Received server handle from parent process", server)
- elseif data then
- p("ondata", data)
- else
- p("onend", data)
- end
- end
- uv.read_start(pipe, onread)
-
- -- Start the event loop!
- uv.run()
-end)
-
-local p = require('lib/utils').prettyPrint
-local uv = require('luv')
-
-local exepath = assert(uv.exepath())
-local cpu_count = # assert(uv.cpu_info())
-
-local server = uv.new_tcp()
-assert(uv.tcp_bind(server, "::1", 1337))
-print("Master process bound to TCP port 1337 on ::1")
-
-
-local function onexit(status, signal)
- p("Child exited", {status=status,signal=signal})
-end
-
-local function spawnChild()
- local pipe = uv.new_pipe(true)
- local input = uv.new_pipe(false)
- local _, pid = assert(uv.spawn(exepath, {
- stdio = {input,1,2,pipe},
- env= {"PIPE_FD=3"}
- }, onexit))
- uv.write(input, child_code)
- uv.shutdown(input)
- p("Spawned child", pid, "and sending handle", server)
- assert(uv.write2(pipe, "123", server))
- assert(uv.shutdown(pipe))
-end
-
--- Spawn a child process for each CPU core
-for _ = 1, cpu_count do
- spawnChild()
-end
-
-uv.run()
diff --git a/3rdparty/luv/examples/timers.lua b/3rdparty/luv/examples/timers.lua
deleted file mode 100644
index 049235e6fb1..00000000000
--- a/3rdparty/luv/examples/timers.lua
+++ /dev/null
@@ -1,68 +0,0 @@
-local p = require('lib/utils').prettyPrint
-local uv = require('luv')
-
-local function set_timeout(timeout, callback)
- local timer = uv.new_timer()
- local function ontimeout()
- p("ontimeout", timer)
- uv.timer_stop(timer)
- uv.close(timer)
- callback(timer)
- end
- uv.timer_start(timer, timeout, 0, ontimeout)
- return timer
-end
-
-local function clear_timeout(timer)
- uv.timer_stop(timer)
- uv.close(timer)
-end
-
-local function set_interval(interval, callback)
- local timer = uv.new_timer()
- local function ontimeout()
- p("interval", timer)
- callback(timer)
- end
- uv.timer_start(timer, interval, interval, ontimeout)
- return timer
-end
-
-local clear_interval = clear_timeout
-
-local i = set_interval(300, function()
- print("interval...")
-end)
-
-set_timeout(1000, function()
- clear_interval(i)
-end)
-
-
-local handle = uv.new_timer()
-local delay = 1024
-local function ontimeout()
- p("tick", delay)
- delay = delay / 2
- if delay >= 1 then
- uv.timer_set_repeat(handle, delay)
- uv.timer_again(handle)
- else
- uv.timer_stop(handle)
- uv.close(handle)
- p("done")
- end
-end
-uv.timer_start(handle, delay, 0, ontimeout)
-
-
-repeat
- print("\ntick.")
-until uv.run('once') == 0
-
-print("done")
-
-uv.walk(uv.close)
-uv.run()
-uv.loop_close()
-
diff --git a/3rdparty/luv/examples/uvbook/helloworld.lua b/3rdparty/luv/examples/uvbook/helloworld.lua
deleted file mode 100644
index 2c77d0c51bc..00000000000
--- a/3rdparty/luv/examples/uvbook/helloworld.lua
+++ /dev/null
@@ -1,5 +0,0 @@
-local uv = require('luv')
-
-print('Now quitting.')
-uv.run('default')
-uv.loop_close()
diff --git a/3rdparty/luv/examples/uvbook/idle-basic.lua b/3rdparty/luv/examples/uvbook/idle-basic.lua
deleted file mode 100644
index dc2a47b3c30..00000000000
--- a/3rdparty/luv/examples/uvbook/idle-basic.lua
+++ /dev/null
@@ -1,14 +0,0 @@
-local uv = require('luv')
-
-local counter = 0
-local idle = uv.new_idle()
-idle:start(function()
- counter = counter + 1
- if counter >= 10e6 then
- idle:stop()
- end
-end)
-
-print("Idling...")
-uv.run('default')
-uv.loop_close() \ No newline at end of file
diff --git a/3rdparty/luv/examples/uvbook/onchange.lua b/3rdparty/luv/examples/uvbook/onchange.lua
deleted file mode 100644
index 07b3f9b1d78..00000000000
--- a/3rdparty/luv/examples/uvbook/onchange.lua
+++ /dev/null
@@ -1,30 +0,0 @@
-local uv = require('luv')
-
-if #arg==0 then
- print(string.format("Usage: %s <command> <file1> [file2 ...]",arg[0]));
- return
-end
-
-for i=1,#arg do
- local fse = uv.new_fs_event()
- assert(uv.fs_event_start(fse,arg[i],{
- --"watch_entry"=true,"stat"=true,
- recursive=true
- },function (err,fname,status)
- if(err) then
- print("Error "..err)
- else
- print(string.format('Change detected in %s',
- uv.fs_event_getpath(fse)))
- for k,v in pairs(status) do
- print(k,v)
- end
- print('file changed:'..(fname and fname or ''))
- end
- end))
-
-end
-
-uv.run('default')
-uv.loop_close()
-
diff --git a/3rdparty/luv/examples/uvbook/queue-work.lua b/3rdparty/luv/examples/uvbook/queue-work.lua
deleted file mode 100644
index cf52abfb216..00000000000
--- a/3rdparty/luv/examples/uvbook/queue-work.lua
+++ /dev/null
@@ -1,19 +0,0 @@
-local uv = require('luv')
-
-local ctx = uv.new_work(
- function(n) --work,in threadpool
- local uv = require('luv')
- local t = uv.thread_self()
- uv.sleep(100)
- return n*n,n
- end,
- function(r,n) print(string.format('%d => %d',n,r)) end --after work, in loop thread
-)
-uv.queue_work(ctx,2)
-uv.queue_work(ctx,4)
-uv.queue_work(ctx,6)
-uv.queue_work(ctx,8)
-uv.queue_work(ctx,10)
-
-uv.run('default')
-uv.loop_close()
diff --git a/3rdparty/luv/examples/uvbook/tcp-echo-client.lua b/3rdparty/luv/examples/uvbook/tcp-echo-client.lua
deleted file mode 100644
index 40dd22a311f..00000000000
--- a/3rdparty/luv/examples/uvbook/tcp-echo-client.lua
+++ /dev/null
@@ -1,21 +0,0 @@
-local uv = require('luv')
-
-
-local client = uv.new_tcp()
-uv.tcp_connect(client, "127.0.0.1", 1337, function (err)
- assert(not err, err)
- uv.read_start(client, function (err, chunk)
- assert(not err, err)
- if chunk then
- print(chunk)
- else
- uv.close(client)
- end
- end)
-
- uv.write(client, "Hello")
- uv.write(client, "World")
-end)
-print('CTRL-C to break')
-uv.run('default')
-uv.loop_close()
diff --git a/3rdparty/luv/examples/uvbook/tcp-echo-server.lua b/3rdparty/luv/examples/uvbook/tcp-echo-server.lua
deleted file mode 100644
index 269c49114cf..00000000000
--- a/3rdparty/luv/examples/uvbook/tcp-echo-server.lua
+++ /dev/null
@@ -1,22 +0,0 @@
-local uv = require('luv')
-
-
-local server = uv.new_tcp()
-server:bind("127.0.0.1", 1337)
-server:listen(128, function (err)
- assert(not err, err)
- local client = uv.new_tcp()
- server:accept(client)
- client:read_start(function (err, chunk)
- assert(not err, err)
- if chunk then
- client:write(chunk)
- else
- client:shutdown()
- client:close()
- end
- end)
-end)
-
-uv.run('default')
-uv.loop_close()
diff --git a/3rdparty/luv/examples/uvbook/thread-create.lua b/3rdparty/luv/examples/uvbook/thread-create.lua
deleted file mode 100644
index 4b42587adbf..00000000000
--- a/3rdparty/luv/examples/uvbook/thread-create.lua
+++ /dev/null
@@ -1,38 +0,0 @@
-local uv = require('luv')
-
-local step = 10
-
-local hare_id = uv.new_thread(function(step,...)
- local ffi = require'ffi'
- local uv = require('luv')
- local sleep
- if ffi.os=='Windows' then
- ffi.cdef "void Sleep(int ms);"
- sleep = ffi.C.Sleep
- else
- ffi.cdef "unsigned int usleep(unsigned int seconds);"
- sleep = ffi.C.usleep
- end
- while (step>0) do
- step = step - 1
- uv.sleep(math.random(1000))
- print("Hare ran another step")
- end
- print("Hare done running!")
-end, step,true,'abcd','false')
-
-local tortoise_id = uv.new_thread(function(step,...)
- local uv = require('luv')
- while (step>0) do
- step = step - 1
- uv.sleep(math.random(100))
- print("Tortoise ran another step")
- end
- print("Tortoise done running!")
-end,step,'abcd','false')
-
-print(hare_id==hare_id,uv.thread_equal(hare_id,hare_id))
-print(tortoise_id==hare_id,uv.thread_equal(tortoise_id,hare_id))
-
-uv.thread_join(hare_id)
-uv.thread_join(tortoise_id)
diff --git a/3rdparty/luv/examples/uvbook/uvcat.lua b/3rdparty/luv/examples/uvbook/uvcat.lua
deleted file mode 100644
index 99fdd68000b..00000000000
--- a/3rdparty/luv/examples/uvbook/uvcat.lua
+++ /dev/null
@@ -1,37 +0,0 @@
-local uv = require('luv')
-
-
-local fname = arg[1] and arg[1] or arg[0]
-
-uv.fs_open(fname, 'r', tonumber('644', 8), function(err,fd)
- if err then
- print("error opening file:"..err)
- else
- local stat = uv.fs_fstat(fd)
- local off = 0
- local block = 10
-
- local function on_read(err,chunk)
- if(err) then
- print("Read error: "..err);
- elseif #chunk==0 then
- uv.fs_close(fd)
- else
- off = block + off
- uv.fs_write(1,chunk,-1,function(err,chunk)
- if err then
- print("Write error: "..err)
- else
- uv.fs_read(fd, block, off, on_read)
- end
- end)
- end
- end
- uv.fs_read(fd, block, off, on_read)
- end
-end)
-
-
-
-uv.run('default')
-uv.loop_close()
diff --git a/3rdparty/luv/examples/uvbook/uvtee.lua b/3rdparty/luv/examples/uvbook/uvtee.lua
deleted file mode 100644
index c91b066ae21..00000000000
--- a/3rdparty/luv/examples/uvbook/uvtee.lua
+++ /dev/null
@@ -1,35 +0,0 @@
-local uv = require('luv')
-
-if not arg[1] then
- print(string.format("please run %s filename",arg[0]))
- return
-end
-
-
-local stdin = uv.new_tty(0, true)
-local stdout = uv.new_tty(1, true)
---local stdin_pipe = uv.new_pipe(false)
---uv.pipe_open(stdin_pipe,0)
-
-local fname = arg[1]
-
-uv.fs_open(fname, 'w+', tonumber('644', 8), function(err,fd)
- if err then
- print("error opening file:"..err)
- else
- local fpipe = uv.new_pipe(false)
- uv.pipe_open(fpipe, fd)
-
- uv.read_start(stdin, function(err,chunk)
- if err then
- print('Read error: '..err)
- else
- uv.write(stdout,chunk)
- uv.write(fpipe,chunk)
- end
- end);
- end
-end)
-
-uv.run('default')
-uv.loop_close()
diff --git a/3rdparty/luv/lib/tap.lua b/3rdparty/luv/lib/tap.lua
deleted file mode 100644
index d1cfb59c249..00000000000
--- a/3rdparty/luv/lib/tap.lua
+++ /dev/null
@@ -1,165 +0,0 @@
-local uv = require('luv')
-local dump = require('lib/utils').dump
-local stdout = require('lib/utils').stdout
-
-local function protect(...)
- local n = select('#', ...)
- local arguments = {...}
- for i = 1, n do
- arguments[i] = tostring(arguments[i])
- end
-
- local text = table.concat(arguments, "\t")
- text = " " .. string.gsub(text, "\n", "\n ")
- print(text)
-end
-
-local function pprotect(...)
- local n = select('#', ...)
- local arguments = { ... }
-
- for i = 1, n do
- arguments[i] = dump(arguments[i])
- end
-
- protect(table.concat(arguments, "\t"))
-end
-
-
-local tests = {};
-
-local function run()
- local passed = 0
-
- if #tests < 1 then
- error("No tests specified!")
- end
-
- print("1.." .. #tests)
- for i = 1, #tests do
- local test = tests[i]
- local cwd = uv.cwd()
- local pass, err = xpcall(function ()
- local expected = 0
- local function expect(fn, count)
- expected = expected + (count or 1)
- return function (...)
- expected = expected - 1
- local ret = fn(...)
- collectgarbage()
- return ret
- end
- end
- test.fn(protect, pprotect, expect, uv)
- collectgarbage()
- uv.run()
- collectgarbage()
- if expected > 0 then
- error("Missing " .. expected .. " expected call" .. (expected == 1 and "" or "s"))
- elseif expected < 0 then
- error("Found " .. -expected .. " unexpected call" .. (expected == -1 and "" or "s"))
- end
- collectgarbage()
- local unclosed = 0
- uv.walk(function (handle)
- if handle == stdout then return end
- unclosed = unclosed + 1
- print("UNCLOSED", handle)
- end)
- if unclosed > 0 then
- error(unclosed .. " unclosed handle" .. (unclosed == 1 and "" or "s"))
- end
- if uv.cwd() ~= cwd then
- error("Test moved cwd from " .. cwd .. " to " .. uv.cwd())
- end
- collectgarbage()
- end, debug.traceback)
-
- -- Flush out any more opened handles
- uv.stop()
- uv.walk(function (handle)
- if handle == stdout then return end
- if not uv.is_closing(handle) then uv.close(handle) end
- end)
- uv.run()
- uv.chdir(cwd)
-
- if pass then
- print("ok " .. i .. " " .. test.name)
- passed = passed + 1
- else
- protect(err)
- print("not ok " .. i .. " " .. test.name)
- end
- end
-
- local failed = #tests - passed
- if failed == 0 then
- print("# All tests passed")
- else
- print("#" .. failed .. " failed test" .. (failed == 1 and "" or "s"))
- end
-
- -- Close all then handles, including stdout
- uv.walk(uv.close)
- uv.run()
-
- os.exit(-failed)
-end
-
-local single = true
-local prefix
-
-local function tap(suite)
-
- if type(suite) == "function" then
- -- Pass in suite directly for single mode
- suite(function (name, fn)
- if prefix then
- name = prefix .. ' - ' .. name
- end
- tests[#tests + 1] = {
- name = name,
- fn = fn
- }
- end)
- prefix = nil
- elseif type(suite) == "string" then
- prefix = suite
- single = false
- else
- -- Or pass in false to collect several runs of tests
- -- And then pass in true in a later call to flush tests queue.
- single = suite
- end
-
- if single then run() end
-
-end
-
-
---[[
--- Sample Usage
-
-local passed, failed, total = tap(function (test)
-
- test("add 1 to 2", function(print)
- print("Adding 1 to 2")
- assert(1 + 2 == 3)
- end)
-
- test("close handle", function (print, p, expect, uv)
- local handle = uv.new_timer()
- uv.close(handle, expect(function (self)
- assert(self == handle)
- end))
- end)
-
- test("simulate failure", function ()
- error("Oopsie!")
- end)
-
-end)
-]]
-
-return tap
diff --git a/3rdparty/luv/lib/utils.lua b/3rdparty/luv/lib/utils.lua
deleted file mode 100644
index 777879ec28c..00000000000
--- a/3rdparty/luv/lib/utils.lua
+++ /dev/null
@@ -1,165 +0,0 @@
-
-local uv = require('luv')
-local utils = {}
-local usecolors
-
-if uv.guess_handle(1) == "tty" then
- utils.stdout = uv.new_tty(1, false)
- usecolors = true
-else
- utils.stdout = uv.new_pipe(false)
- uv.pipe_open(utils.stdout, 1)
- usecolors = false
-end
-
-local colors = {
- black = "0;30",
- red = "0;31",
- green = "0;32",
- yellow = "0;33",
- blue = "0;34",
- magenta = "0;35",
- cyan = "0;36",
- white = "0;37",
- B = "1;",
- Bblack = "1;30",
- Bred = "1;31",
- Bgreen = "1;32",
- Byellow = "1;33",
- Bblue = "1;34",
- Bmagenta = "1;35",
- Bcyan = "1;36",
- Bwhite = "1;37"
-}
-
-function utils.color(color_name)
- if usecolors then
- return "\27[" .. (colors[color_name] or "0") .. "m"
- else
- return ""
- end
-end
-
-function utils.colorize(color_name, string, reset_name)
- return utils.color(color_name) .. tostring(string) .. utils.color(reset_name)
-end
-
-local backslash, null, newline, carriage, tab, quote, quote2, obracket, cbracket
-
-function utils.loadColors(n)
- if n ~= nil then usecolors = n end
- backslash = utils.colorize("Bgreen", "\\\\", "green")
- null = utils.colorize("Bgreen", "\\0", "green")
- newline = utils.colorize("Bgreen", "\\n", "green")
- carriage = utils.colorize("Bgreen", "\\r", "green")
- tab = utils.colorize("Bgreen", "\\t", "green")
- quote = utils.colorize("Bgreen", '"', "green")
- quote2 = utils.colorize("Bgreen", '"')
- obracket = utils.colorize("B", '[')
- cbracket = utils.colorize("B", ']')
-end
-
-utils.loadColors()
-
-function utils.dump(o, depth)
- local t = type(o)
- if t == 'string' then
- return quote .. o:gsub("\\", backslash):gsub("%z", null):gsub("\n", newline):gsub("\r", carriage):gsub("\t", tab) .. quote2
- end
- if t == 'nil' then
- return utils.colorize("Bblack", "nil")
- end
- if t == 'boolean' then
- return utils.colorize("yellow", tostring(o))
- end
- if t == 'number' then
- return utils.colorize("blue", tostring(o))
- end
- if t == 'userdata' then
- return utils.colorize("magenta", tostring(o))
- end
- if t == 'thread' then
- return utils.colorize("Bred", tostring(o))
- end
- if t == 'function' then
- return utils.colorize("cyan", tostring(o))
- end
- if t == 'cdata' then
- return utils.colorize("Bmagenta", tostring(o))
- end
- if t == 'table' then
- if type(depth) == 'nil' then
- depth = 0
- end
- if depth > 1 then
- return utils.colorize("yellow", tostring(o))
- end
- local indent = (" "):rep(depth)
-
- -- Check to see if this is an array
- local is_array = true
- local i = 1
- for k,v in pairs(o) do
- if not (k == i) then
- is_array = false
- end
- i = i + 1
- end
-
- local first = true
- local lines = {}
- i = 1
- local estimated = 0
- for k,v in (is_array and ipairs or pairs)(o) do
- local s
- if is_array then
- s = ""
- else
- if type(k) == "string" and k:find("^[%a_][%a%d_]*$") then
- s = k .. ' = '
- else
- s = '[' .. utils.dump(k, 100) .. '] = '
- end
- end
- s = s .. utils.dump(v, depth + 1)
- lines[i] = s
- estimated = estimated + #s
- i = i + 1
- end
- if estimated > 200 then
- return "{\n " .. indent .. table.concat(lines, ",\n " .. indent) .. "\n" .. indent .. "}"
- else
- return "{ " .. table.concat(lines, ", ") .. " }"
- end
- end
- -- This doesn't happen right?
- return tostring(o)
-end
-
-
-
--- Print replacement that goes through libuv. This is useful on windows
--- to use libuv's code to translate ansi escape codes to windows API calls.
-function print(...)
- local n = select('#', ...)
- local arguments = {...}
- for i = 1, n do
- arguments[i] = tostring(arguments[i])
- end
- uv.write(utils.stdout, table.concat(arguments, "\t") .. "\n")
-end
-
--- A nice global data dumper
-function utils.prettyPrint(...)
- local n = select('#', ...)
- local arguments = { ... }
-
- for i = 1, n do
- arguments[i] = utils.dump(arguments[i])
- end
-
- print(table.concat(arguments, "\t"))
-end
-
-return utils
-
diff --git a/3rdparty/luv/luv-1.8.0-4.rockspec b/3rdparty/luv/luv-1.8.0-4.rockspec
deleted file mode 100644
index 23855203e0d..00000000000
--- a/3rdparty/luv/luv-1.8.0-4.rockspec
+++ /dev/null
@@ -1,34 +0,0 @@
-package = "luv"
-version = "1.8.0-4"
-source = {
- url = 'https://github.com/luvit/luv/releases/download/1.8.0-4/luv-1.8.0-4.tar.gz',
-}
-
-description = {
- summary = "Bare libuv bindings for lua",
- detailed = [[
-libuv bindings for luajit and lua 5.1/5.2/5.3.
-
-This library makes libuv available to lua scripts. It was made for the luvit
-project but should usable from nearly any lua project.
- ]],
- homepage = "https://github.com/luvit/luv",
- license = "Apache 2.0"
-}
-
-dependencies = {
- "lua >= 5.1"
-}
-
-build = {
- type = 'cmake',
- variables = {
- CMAKE_C_FLAGS="$(CFLAGS)",
- CMAKE_MODULE_LINKER_FLAGS="$(LIBFLAG)",
- LUA_LIBDIR="$(LUA_LIBDIR)",
- LUA_INCDIR="$(LUA_INCDIR)",
- LUA="$(LUA)",
- LIBDIR="$(LIBDIR)",
- LUADIR="$(LUADIR)",
- },
-}
diff --git a/3rdparty/luv/msvcbuild.bat b/3rdparty/luv/msvcbuild.bat
deleted file mode 100644
index 7a5c7bd4c31..00000000000
--- a/3rdparty/luv/msvcbuild.bat
+++ /dev/null
@@ -1,13 +0,0 @@
-@echo off
-
-set VS=12
-if "%configuration%"=="2015" (set VS=14)
-if "%configuration%"=="2013" (set VS=12)
-
-if not defined platform set platform=x64
-if "%platform%" EQU "x64" (set VS=%VS% Win64)
-
-cmake -H. -Bbuild -G"Visual Studio %VS%"
-cmake --build build --config Release
-copy build\Release\luv.dll .
-copy build\Release\luajit.exe .
diff --git a/3rdparty/luv/src/async.c b/3rdparty/luv/src/async.c
deleted file mode 100644
index 87ae0cc0460..00000000000
--- a/3rdparty/luv/src/async.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-#include "lthreadpool.h"
-
-static uv_async_t* luv_check_async(lua_State* L, int index) {
- uv_async_t* handle = luv_checkudata(L, index, "uv_async");
- luaL_argcheck(L, handle->type == UV_ASYNC && handle->data, index, "Expected uv_async_t");
- return handle;
-}
-
-static void luv_async_cb(uv_async_t* handle) {
- lua_State* L = luv_state(handle->loop);
- luv_handle_t* data = handle->data;
- int n = luv_thread_arg_push(L, data->extra);
- luv_call_callback(L, data, LUV_ASYNC, n);
- luv_thread_arg_clear(data->extra);
-}
-
-static int luv_new_async(lua_State* L) {
- uv_async_t* handle;
- luv_handle_t* data;
- int ret;
- luaL_checktype(L, 1, LUA_TFUNCTION);
- handle = luv_newuserdata(L, sizeof(*handle));
- ret = uv_async_init(luv_loop(L), handle, luv_async_cb);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- data = luv_setup_handle(L);
- data->extra = malloc(sizeof(luv_thread_arg_t));
- memset(data->extra, 0, sizeof(luv_thread_arg_t));
- handle->data = data;
- luv_check_callback(L, handle->data, LUV_ASYNC, 1);
- return 1;
-}
-
-static int luv_async_send(lua_State* L) {
- int ret;
- uv_async_t* handle = luv_check_async(L, 1);
- luv_thread_arg_t* arg = ((luv_handle_t*) handle->data)->extra;
-
- luv_thread_arg_set(L, arg, 2, lua_gettop(L), 0);
- ret = uv_async_send(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
diff --git a/3rdparty/luv/src/check.c b/3rdparty/luv/src/check.c
deleted file mode 100644
index dbd330ae255..00000000000
--- a/3rdparty/luv/src/check.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static uv_check_t* luv_check_check(lua_State* L, int index) {
- uv_check_t* handle = luv_checkudata(L, index, "uv_check");
- luaL_argcheck(L, handle->type == UV_CHECK && handle->data, index, "Expected uv_check_t");
- return handle;
-}
-
-static int luv_new_check(lua_State* L) {
- uv_check_t* handle = luv_newuserdata(L, sizeof(*handle));
- int ret = uv_check_init(luv_loop(L), handle);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- handle->data = luv_setup_handle(L);
- return 1;
-}
-
-static void luv_check_cb(uv_check_t* handle) {
- lua_State* L = luv_state(handle->loop);
- luv_handle_t* data = handle->data;
- luv_call_callback(L, data, LUV_CHECK, 0);
-}
-
-static int luv_check_start(lua_State* L) {
- uv_check_t* handle = luv_check_check(L, 1);
- int ret;
- luv_check_callback(L, handle->data, LUV_CHECK, 2);
- ret = uv_check_start(handle, luv_check_cb);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_check_stop(lua_State* L) {
- uv_check_t* handle = luv_check_check(L, 1);
- int ret = uv_check_stop(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
diff --git a/3rdparty/luv/src/constants.c b/3rdparty/luv/src/constants.c
deleted file mode 100644
index 3417028c438..00000000000
--- a/3rdparty/luv/src/constants.c
+++ /dev/null
@@ -1,649 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include "luv.h"
-
-static int luv_constants(lua_State* L) {
- lua_newtable(L);
-
- // File open bitwise flags O_*
-#ifdef O_RDONLY
- lua_pushinteger(L, O_RDONLY);
- lua_setfield(L, -2, "O_RDONLY");
-#endif
-#ifdef O_WRONLY
- lua_pushinteger(L, O_WRONLY);
- lua_setfield(L, -2, "O_WRONLY");
-#endif
-#ifdef O_RDWR
- lua_pushinteger(L, O_RDWR);
- lua_setfield(L, -2, "O_RDWR");
-#endif
-#ifdef O_APPEND
- lua_pushinteger(L, O_APPEND);
- lua_setfield(L, -2, "O_APPEND");
-#endif
-#ifdef O_CREAT
- lua_pushinteger(L, O_CREAT);
- lua_setfield(L, -2, "O_CREAT");
-#endif
-#ifdef O_DSYNC
- lua_pushinteger(L, O_DSYNC);
- lua_setfield(L, -2, "O_DSYNC");
-#endif
-#ifdef O_EXCL
- lua_pushinteger(L, O_EXCL);
- lua_setfield(L, -2, "O_EXCL");
-#endif
-#ifdef O_EXLOCK
- lua_pushinteger(L, O_EXLOCK);
- lua_setfield(L, -2, "O_EXLOCK");
-#endif
-#ifdef O_NOCTTY
- lua_pushinteger(L, O_NOCTTY);
- lua_setfield(L, -2, "O_NOCTTY");
-#endif
-#ifdef O_NONBLOCK
- lua_pushinteger(L, O_NONBLOCK);
- lua_setfield(L, -2, "O_NONBLOCK");
-#endif
-#ifdef O_RSYNC
- lua_pushinteger(L, O_RSYNC);
- lua_setfield(L, -2, "O_RSYNC");
-#endif
-#ifdef O_SYNC
- lua_pushinteger(L, O_SYNC);
- lua_setfield(L, -2, "O_SYNC");
-#endif
-#ifdef O_TRUNC
- lua_pushinteger(L, O_TRUNC);
- lua_setfield(L, -2, "O_TRUNC");
-#endif
-
- // Socket types SOCK_*
-#ifdef SOCK_STREAM
- lua_pushinteger(L, SOCK_STREAM);
- lua_setfield(L, -2, "SOCK_STREAM");
-#endif
-#ifdef SOCK_DGRAM
- lua_pushinteger(L, SOCK_DGRAM);
- lua_setfield(L, -2, "SOCK_DGRAM");
-#endif
-#ifdef SOCK_SEQPACKET
- lua_pushinteger(L, SOCK_SEQPACKET);
- lua_setfield(L, -2, "SOCK_SEQPACKET");
-#endif
-#ifdef SOCK_RAW
- lua_pushinteger(L, SOCK_RAW);
- lua_setfield(L, -2, "SOCK_RAW");
-#endif
-#ifdef SOCK_RDM
- lua_pushinteger(L, SOCK_RDM);
- lua_setfield(L, -2, "SOCK_RDM");
-#endif
-
- // AF_*
-#ifdef AF_UNIX
- lua_pushinteger(L, AF_UNIX);
- lua_setfield(L, -2, "AF_UNIX");
-#endif
-#ifdef AF_INET
- lua_pushinteger(L, AF_INET);
- lua_setfield(L, -2, "AF_INET");
-#endif
-#ifdef AF_INET6
- lua_pushinteger(L, AF_INET6);
- lua_setfield(L, -2, "AF_INET6");
-#endif
-#ifdef AF_IPX
- lua_pushinteger(L, AF_IPX);
- lua_setfield(L, -2, "AF_IPX");
-#endif
-#ifdef AF_NETLINK
- lua_pushinteger(L, AF_NETLINK);
- lua_setfield(L, -2, "AF_NETLINK");
-#endif
-#ifdef AF_X25
- lua_pushinteger(L, AF_X25);
- lua_setfield(L, -2, "AF_X25");
-#endif
-#ifdef AF_AX25
- lua_pushinteger(L, AF_AX25);
- lua_setfield(L, -2, "AF_AX25");
-#endif
-#ifdef AF_ATMPVC
- lua_pushinteger(L, AF_ATMPVC);
- lua_setfield(L, -2, "AF_ATMPVC");
-#endif
-#ifdef AF_APPLETALK
- lua_pushinteger(L, AF_APPLETALK);
- lua_setfield(L, -2, "AF_APPLETALK");
-#endif
-#ifdef AF_PACKET
- lua_pushinteger(L, AF_PACKET);
- lua_setfield(L, -2, "AF_PACKET");
-#endif
-
- // AI_*
-#ifdef AI_ADDRCONFIG
- lua_pushinteger(L, AI_ADDRCONFIG);
- lua_setfield(L, -2, "AI_ADDRCONFIG");
-#endif
-#ifdef AI_V4MAPPED
- lua_pushinteger(L, AI_V4MAPPED);
- lua_setfield(L, -2, "AI_V4MAPPED");
-#endif
-#ifdef AI_ALL
- lua_pushinteger(L, AI_ALL);
- lua_setfield(L, -2, "AI_ALL");
-#endif
-#ifdef AI_NUMERICHOST
- lua_pushinteger(L, AI_NUMERICHOST);
- lua_setfield(L, -2, "AI_NUMERICHOST");
-#endif
-#ifdef AI_PASSIVE
- lua_pushinteger(L, AI_PASSIVE);
- lua_setfield(L, -2, "AI_PASSIVE");
-#endif
-#ifdef AI_NUMERICSERV
- lua_pushinteger(L, AI_NUMERICSERV);
- lua_setfield(L, -2, "AI_NUMERICSERV");
-#endif
-
- // Signals
-#ifdef SIGHUP
- lua_pushinteger(L, SIGHUP);
- lua_setfield(L, -2, "SIGHUP");
-#endif
-#ifdef SIGINT
- lua_pushinteger(L, SIGINT);
- lua_setfield(L, -2, "SIGINT");
-#endif
-#ifdef SIGQUIT
- lua_pushinteger(L, SIGQUIT);
- lua_setfield(L, -2, "SIGQUIT");
-#endif
-#ifdef SIGILL
- lua_pushinteger(L, SIGILL);
- lua_setfield(L, -2, "SIGILL");
-#endif
-#ifdef SIGTRAP
- lua_pushinteger(L, SIGTRAP);
- lua_setfield(L, -2, "SIGTRAP");
-#endif
-#ifdef SIGABRT
- lua_pushinteger(L, SIGABRT);
- lua_setfield(L, -2, "SIGABRT");
-#endif
-#ifdef SIGIOT
- lua_pushinteger(L, SIGIOT);
- lua_setfield(L, -2, "SIGIOT");
-#endif
-#ifdef SIGBUS
- lua_pushinteger(L, SIGBUS);
- lua_setfield(L, -2, "SIGBUS");
-#endif
-#ifdef SIGFPE
- lua_pushinteger(L, SIGFPE);
- lua_setfield(L, -2, "SIGFPE");
-#endif
-#ifdef SIGKILL
- lua_pushinteger(L, SIGKILL);
- lua_setfield(L, -2, "SIGKILL");
-#endif
-#ifdef SIGUSR1
- lua_pushinteger(L, SIGUSR1);
- lua_setfield(L, -2, "SIGUSR1");
-#endif
-#ifdef SIGSEGV
- lua_pushinteger(L, SIGSEGV);
- lua_setfield(L, -2, "SIGSEGV");
-#endif
-#ifdef SIGUSR2
- lua_pushinteger(L, SIGUSR2);
- lua_setfield(L, -2, "SIGUSR2");
-#endif
-#ifdef SIGPIPE
- lua_pushinteger(L, SIGPIPE);
- lua_setfield(L, -2, "SIGPIPE");
-#endif
-#ifdef SIGALRM
- lua_pushinteger(L, SIGALRM);
- lua_setfield(L, -2, "SIGALRM");
-#endif
-#ifdef SIGTERM
- lua_pushinteger(L, SIGTERM);
- lua_setfield(L, -2, "SIGTERM");
-#endif
-#ifdef SIGCHLD
- lua_pushinteger(L, SIGCHLD);
- lua_setfield(L, -2, "SIGCHLD");
-#endif
-#ifdef SIGSTKFLT
- lua_pushinteger(L, SIGSTKFLT);
- lua_setfield(L, -2, "SIGSTKFLT");
-#endif
-#ifdef SIGCONT
- lua_pushinteger(L, SIGCONT);
- lua_setfield(L, -2, "SIGCONT");
-#endif
-#ifdef SIGSTOP
- lua_pushinteger(L, SIGSTOP);
- lua_setfield(L, -2, "SIGSTOP");
-#endif
-#ifdef SIGTSTP
- lua_pushinteger(L, SIGTSTP);
- lua_setfield(L, -2, "SIGTSTP");
-#endif
-#ifdef SIGBREAK
- lua_pushinteger(L, SIGBREAK);
- lua_setfield(L, -2, "SIGBREAK");
-#endif
-#ifdef SIGTTIN
- lua_pushinteger(L, SIGTTIN);
- lua_setfield(L, -2, "SIGTTIN");
-#endif
-#ifdef SIGTTOU
- lua_pushinteger(L, SIGTTOU);
- lua_setfield(L, -2, "SIGTTOU");
-#endif
-#ifdef SIGURG
- lua_pushinteger(L, SIGURG);
- lua_setfield(L, -2, "SIGURG");
-#endif
-#ifdef SIGXCPU
- lua_pushinteger(L, SIGXCPU);
- lua_setfield(L, -2, "SIGXCPU");
-#endif
-#ifdef SIGXFSZ
- lua_pushinteger(L, SIGXFSZ);
- lua_setfield(L, -2, "SIGXFSZ");
-#endif
-#ifdef SIGVTALRM
- lua_pushinteger(L, SIGVTALRM);
- lua_setfield(L, -2, "SIGVTALRM");
-#endif
-#ifdef SIGPROF
- lua_pushinteger(L, SIGPROF);
- lua_setfield(L, -2, "SIGPROF");
-#endif
-#ifdef SIGWINCH
- lua_pushinteger(L, SIGWINCH);
- lua_setfield(L, -2, "SIGWINCH");
-#endif
-#ifdef SIGIO
- lua_pushinteger(L, SIGIO);
- lua_setfield(L, -2, "SIGIO");
-#endif
-#ifdef SIGPOLL
- lua_pushinteger(L, SIGPOLL);
- lua_setfield(L, -2, "SIGPOLL");
-#endif
-#ifdef SIGLOST
- lua_pushinteger(L, SIGLOST);
- lua_setfield(L, -2, "SIGLOST");
-#endif
-#ifdef SIGPWR
- lua_pushinteger(L, SIGPWR);
- lua_setfield(L, -2, "SIGPWR");
-#endif
-#ifdef SIGSYS
- lua_pushinteger(L, SIGSYS);
- lua_setfield(L, -2, "SIGSYS");
-#endif
- return 1;
-}
-
-static int luv_af_string_to_num(const char* string) {
- if (!string) return AF_UNSPEC;
-#ifdef AF_UNIX
- if (strcmp(string, "unix") == 0) return AF_UNIX;
-#endif
-#ifdef AF_INET
- if (strcmp(string, "inet") == 0) return AF_INET;
-#endif
-#ifdef AF_INET6
- if (strcmp(string, "inet6") == 0) return AF_INET6;
-#endif
-#ifdef AF_IPX
- if (strcmp(string, "ipx") == 0) return AF_IPX;
-#endif
-#ifdef AF_NETLINK
- if (strcmp(string, "netlink") == 0) return AF_NETLINK;
-#endif
-#ifdef AF_X25
- if (strcmp(string, "x25") == 0) return AF_X25;
-#endif
-#ifdef AF_AX25
- if (strcmp(string, "ax25") == 0) return AF_AX25;
-#endif
-#ifdef AF_ATMPVC
- if (strcmp(string, "atmpvc") == 0) return AF_ATMPVC;
-#endif
-#ifdef AF_APPLETALK
- if (strcmp(string, "appletalk") == 0) return AF_APPLETALK;
-#endif
-#ifdef AF_PACKET
- if (strcmp(string, "packet") == 0) return AF_PACKET;
-#endif
- return 0;
-}
-
-static const char* luv_af_num_to_string(const int num) {
- switch (num) {
-#ifdef AF_UNIX
- case AF_UNIX: return "unix";
-#endif
-#ifdef AF_INET
- case AF_INET: return "inet";
-#endif
-#ifdef AF_INET6
- case AF_INET6: return "inet6";
-#endif
-#ifdef AF_IPX
- case AF_IPX: return "ipx";
-#endif
-#ifdef AF_NETLINK
- case AF_NETLINK: return "netlink";
-#endif
-#ifdef AF_X25
- case AF_X25: return "x25";
-#endif
-#ifdef AF_AX25
- case AF_AX25: return "ax25";
-#endif
-#ifdef AF_ATMPVC
- case AF_ATMPVC: return "atmpvc";
-#endif
-#ifdef AF_APPLETALK
- case AF_APPLETALK: return "appletalk";
-#endif
-#ifdef AF_PACKET
- case AF_PACKET: return "packet";
-#endif
- }
- return NULL;
-}
-
-
-static int luv_sock_string_to_num(const char* string) {
- if (!string) return 0;
-#ifdef SOCK_STREAM
- if (strcmp(string, "stream") == 0) return SOCK_STREAM;
-#endif
-#ifdef SOCK_DGRAM
- if (strcmp(string, "dgram") == 0) return SOCK_DGRAM;
-#endif
-#ifdef SOCK_SEQPACKET
- if (strcmp(string, "seqpacket") == 0) return SOCK_SEQPACKET;
-#endif
-#ifdef SOCK_RAW
- if (strcmp(string, "raw") == 0) return SOCK_RAW;
-#endif
-#ifdef SOCK_RDM
- if (strcmp(string, "rdm") == 0) return SOCK_RDM;
-#endif
- return 0;
-}
-
-static const char* luv_sock_num_to_string(const int num) {
- switch (num) {
-#ifdef SOCK_STREAM
- case SOCK_STREAM: return "stream";
-#endif
-#ifdef SOCK_DGRAM
- case SOCK_DGRAM: return "dgram";
-#endif
-#ifdef SOCK_SEQPACKET
- case SOCK_SEQPACKET: return "seqpacket";
-#endif
-#ifdef SOCK_RAW
- case SOCK_RAW: return "raw";
-#endif
-#ifdef SOCK_RDM
- case SOCK_RDM: return "rdm";
-#endif
- }
- return NULL;
-}
-
-static int luv_sig_string_to_num(const char* string) {
- if (!string) return 0;
-#ifdef SIGHUP
- if (strcmp(string, "sighup") == 0) return SIGHUP;
-#endif
-#ifdef SIGINT
- if (strcmp(string, "sigint") == 0) return SIGINT;
-#endif
-#ifdef SIGQUIT
- if (strcmp(string, "sigquit") == 0) return SIGQUIT;
-#endif
-#ifdef SIGILL
- if (strcmp(string, "sigill") == 0) return SIGILL;
-#endif
-#ifdef SIGTRAP
- if (strcmp(string, "sigtrap") == 0) return SIGTRAP;
-#endif
-#ifdef SIGABRT
- if (strcmp(string, "sigabrt") == 0) return SIGABRT;
-#endif
-#ifdef SIGIOT
- if (strcmp(string, "sigiot") == 0) return SIGIOT;
-#endif
-#ifdef SIGBUS
- if (strcmp(string, "sigbus") == 0) return SIGBUS;
-#endif
-#ifdef SIGFPE
- if (strcmp(string, "sigfpe") == 0) return SIGFPE;
-#endif
-#ifdef SIGKILL
- if (strcmp(string, "sigkill") == 0) return SIGKILL;
-#endif
-#ifdef SIGUSR1
- if (strcmp(string, "sigusr1") == 0) return SIGUSR1;
-#endif
-#ifdef SIGSEGV
- if (strcmp(string, "sigsegv") == 0) return SIGSEGV;
-#endif
-#ifdef SIGUSR2
- if (strcmp(string, "sigusr2") == 0) return SIGUSR2;
-#endif
-#ifdef SIGPIPE
- if (strcmp(string, "sigpipe") == 0) return SIGPIPE;
-#endif
-#ifdef SIGALRM
- if (strcmp(string, "sigalrm") == 0) return SIGALRM;
-#endif
-#ifdef SIGTERM
- if (strcmp(string, "sigterm") == 0) return SIGTERM;
-#endif
-#ifdef SIGCHLD
- if (strcmp(string, "sigchld") == 0) return SIGCHLD;
-#endif
-#ifdef SIGSTKFLT
- if (strcmp(string, "sigstkflt") == 0) return SIGSTKFLT;
-#endif
-#ifdef SIGCONT
- if (strcmp(string, "sigcont") == 0) return SIGCONT;
-#endif
-#ifdef SIGSTOP
- if (strcmp(string, "sigstop") == 0) return SIGSTOP;
-#endif
-#ifdef SIGTSTP
- if (strcmp(string, "sigtstp") == 0) return SIGTSTP;
-#endif
-#ifdef SIGBREAK
- if (strcmp(string, "sigbreak") == 0) return SIGBREAK;
-#endif
-#ifdef SIGTTIN
- if (strcmp(string, "sigttin") == 0) return SIGTTIN;
-#endif
-#ifdef SIGTTOU
- if (strcmp(string, "sigttou") == 0) return SIGTTOU;
-#endif
-#ifdef SIGURG
- if (strcmp(string, "sigurg") == 0) return SIGURG;
-#endif
-#ifdef SIGXCPU
- if (strcmp(string, "sigxcpu") == 0) return SIGXCPU;
-#endif
-#ifdef SIGXFSZ
- if (strcmp(string, "sigxfsz") == 0) return SIGXFSZ;
-#endif
-#ifdef SIGVTALRM
- if (strcmp(string, "sigvtalrm") == 0) return SIGVTALRM;
-#endif
-#ifdef SIGPROF
- if (strcmp(string, "sigprof") == 0) return SIGPROF;
-#endif
-#ifdef SIGWINCH
- if (strcmp(string, "sigwinch") == 0) return SIGWINCH;
-#endif
-#ifdef SIGIO
- if (strcmp(string, "sigio") == 0) return SIGIO;
-#endif
-#ifdef SIGPOLL
- if (strcmp(string, "sigpoll") == 0) return SIGPOLL;
-#endif
-#ifdef SIGLOST
- if (strcmp(string, "siglost") == 0) return SIGLOST;
-#endif
-#ifdef SIGPWR
- if (strcmp(string, "sigpwr") == 0) return SIGPWR;
-#endif
-#ifdef SIGSYS
- if (strcmp(string, "sigsys") == 0) return SIGSYS;
-#endif
- return 0;
-}
-
-static const char* luv_sig_num_to_string(const int num) {
- switch (num) {
-#ifdef SIGHUP
- case SIGHUP: return "sighup";
-#endif
-#ifdef SIGINT
- case SIGINT: return "sigint";
-#endif
-#ifdef SIGQUIT
- case SIGQUIT: return "sigquit";
-#endif
-#ifdef SIGILL
- case SIGILL: return "sigill";
-#endif
-#ifdef SIGTRAP
- case SIGTRAP: return "sigtrap";
-#endif
-#ifdef SIGABRT
- case SIGABRT: return "sigabrt";
-#endif
-#ifdef SIGIOT
-# if SIGIOT != SIGABRT
- case SIGIOT: return "sigiot";
-# endif
-#endif
-#ifdef SIGBUS
- case SIGBUS: return "sigbus";
-#endif
-#ifdef SIGFPE
- case SIGFPE: return "sigfpe";
-#endif
-#ifdef SIGKILL
- case SIGKILL: return "sigkill";
-#endif
-#ifdef SIGUSR1
- case SIGUSR1: return "sigusr1";
-#endif
-#ifdef SIGSEGV
- case SIGSEGV: return "sigsegv";
-#endif
-#ifdef SIGUSR2
- case SIGUSR2: return "sigusr2";
-#endif
-#ifdef SIGPIPE
- case SIGPIPE: return "sigpipe";
-#endif
-#ifdef SIGALRM
- case SIGALRM: return "sigalrm";
-#endif
-#ifdef SIGTERM
- case SIGTERM: return "sigterm";
-#endif
-#ifdef SIGCHLD
- case SIGCHLD: return "sigchld";
-#endif
-#ifdef SIGSTKFLT
- case SIGSTKFLT: return "sigstkflt";
-#endif
-#ifdef SIGCONT
- case SIGCONT: return "sigcont";
-#endif
-#ifdef SIGSTOP
- case SIGSTOP: return "sigstop";
-#endif
-#ifdef SIGTSTP
- case SIGTSTP: return "sigtstp";
-#endif
-#ifdef SIGBREAK
- case SIGBREAK: return "sigbreak";
-#endif
-#ifdef SIGTTIN
- case SIGTTIN: return "sigttin";
-#endif
-#ifdef SIGTTOU
- case SIGTTOU: return "sigttou";
-#endif
-#ifdef SIGURG
- case SIGURG: return "sigurg";
-#endif
-#ifdef SIGXCPU
- case SIGXCPU: return "sigxcpu";
-#endif
-#ifdef SIGXFSZ
- case SIGXFSZ: return "sigxfsz";
-#endif
-#ifdef SIGVTALRM
- case SIGVTALRM: return "sigvtalrm";
-#endif
-#ifdef SIGPROF
- case SIGPROF: return "sigprof";
-#endif
-#ifdef SIGWINCH
- case SIGWINCH: return "sigwinch";
-#endif
-#ifdef SIGIO
- case SIGIO: return "sigio";
-#endif
-#ifdef SIGPOLL
-# if SIGPOLL != SIGIO
- case SIGPOLL: return "sigpoll";
-# endif
-#endif
-#ifdef SIGLOST
- case SIGLOST: return "siglost";
-#endif
-#ifdef SIGPWR
-# if SIGPWR != SIGLOST
- case SIGPWR: return "sigpwr";
-# endif
-#endif
-#ifdef SIGSYS
- case SIGSYS: return "sigsys";
-#endif
- }
- return NULL;
-}
diff --git a/3rdparty/luv/src/dns.c b/3rdparty/luv/src/dns.c
deleted file mode 100644
index f3446f30985..00000000000
--- a/3rdparty/luv/src/dns.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include "luv.h"
-#ifndef WIN32
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#endif
-
-static void luv_pushaddrinfo(lua_State* L, struct addrinfo* res) {
- char ip[INET6_ADDRSTRLEN];
- int port, i = 0;
- const char *addr;
- struct addrinfo* curr = res;
- lua_newtable(L);
- for (curr = res; curr; curr = curr->ai_next) {
- if (curr->ai_family == AF_INET || curr->ai_family == AF_INET6) {
- lua_newtable(L);
- if (curr->ai_family == AF_INET) {
- addr = (char*) &((struct sockaddr_in*) curr->ai_addr)->sin_addr;
- port = ((struct sockaddr_in*) curr->ai_addr)->sin_port;
- } else {
- addr = (char*) &((struct sockaddr_in6*) curr->ai_addr)->sin6_addr;
- port = ((struct sockaddr_in6*) curr->ai_addr)->sin6_port;
- }
- lua_pushstring(L, luv_af_num_to_string(curr->ai_family));
- lua_setfield(L, -2, "family");
- uv_inet_ntop(curr->ai_family, addr, ip, INET6_ADDRSTRLEN);
- lua_pushstring(L, ip);
- lua_setfield(L, -2, "addr");
- if (ntohs(port)) {
- lua_pushinteger(L, ntohs(port));
- lua_setfield(L, -2, "port");
- }
- lua_pushstring(L, luv_sock_num_to_string(curr->ai_socktype));
- lua_setfield(L, -2, "socktype");
- lua_pushstring(L, luv_af_num_to_string(curr->ai_protocol));
- lua_setfield(L, -2, "protocol");
- if (curr->ai_canonname) {
- lua_pushstring(L, curr->ai_canonname);
- lua_setfield(L, -2, "canonname");
- }
- lua_rawseti(L, -2, ++i);
- }
- }
-}
-
-static void luv_getaddrinfo_cb(uv_getaddrinfo_t* req, int status, struct addrinfo* res) {
- lua_State* L = luv_state(req->loop);
- int nargs;
-
- if (status < 0) {
- luv_status(L, status);
- nargs = 1;
- }
- else {
- lua_pushnil(L);
- luv_pushaddrinfo(L, res);
- nargs = 2;
- }
- luv_fulfill_req(L, req->data, nargs);
- luv_cleanup_req(L, req->data);
- req->data = NULL;
- if (res) uv_freeaddrinfo(res);
-}
-
-
-static int luv_getaddrinfo(lua_State* L) {
- uv_getaddrinfo_t* req;
- const char* node;
- const char* service;
- struct addrinfo hints_s;
- struct addrinfo* hints = &hints_s;
- int ret, ref;
- if (lua_isnoneornil(L, 1)) node = NULL;
- else node = luaL_checkstring(L, 1);
- if (lua_isnoneornil(L, 2)) service = NULL;
- else service = luaL_checkstring(L, 2);
- if (!lua_isnoneornil(L, 3)) luaL_checktype(L, 3, LUA_TTABLE);
- else hints = NULL;
- ref = lua_isnoneornil(L, 4) ? LUA_NOREF : luv_check_continuation(L, 4);
- if (hints) {
- // Initialize the hints
- memset(hints, 0, sizeof(*hints));
-
- // Process the `family` hint.
- lua_getfield(L, 3, "family");
- if (lua_isnumber(L, -1)) {
- hints->ai_family = lua_tointeger(L, -1);
- }
- else if (lua_isstring(L, -1)) {
- hints->ai_family = luv_af_string_to_num(lua_tostring(L, -1));
- }
- else if (lua_isnil(L, -1)) {
- hints->ai_family = AF_UNSPEC;
- }
- else {
- luaL_argerror(L, 3, "family hint must be string if set");
- }
- lua_pop(L, 1);
-
- // Process `socktype` hint
- lua_getfield(L, 3, "socktype");
- if (lua_isnumber(L, -1)) {
- hints->ai_socktype = lua_tointeger(L, -1);
- }
- else if (lua_isstring(L, -1)) {
- hints->ai_socktype = luv_sock_string_to_num(lua_tostring(L, -1));
- }
- else if (!lua_isnil(L, -1)) {
- return luaL_argerror(L, 3, "socktype hint must be string if set");
- }
- lua_pop(L, 1);
-
- // Process the `protocol` hint
- lua_getfield(L, 3, "protocol");
- if (lua_isnumber(L, -1)) {
- hints->ai_protocol = lua_tointeger(L, -1);
- }
- else if (lua_isstring(L, -1)) {
- int protocol = luv_af_string_to_num(lua_tostring(L, -1));
- if (protocol) {
- hints->ai_protocol = protocol;
- }
- else {
- return luaL_argerror(L, 3, "Invalid protocol hint");
- }
- }
- else if (!lua_isnil(L, -1)) {
- return luaL_argerror(L, 3, "protocol hint must be string if set");
- }
- lua_pop(L, 1);
-
- lua_getfield(L, 3, "addrconfig");
- if (lua_toboolean(L, -1)) hints->ai_flags |= AI_ADDRCONFIG;
- lua_pop(L, 1);
-
- lua_getfield(L, 3, "v4mapped");
- if (lua_toboolean(L, -1)) hints->ai_flags |= AI_V4MAPPED;
- lua_pop(L, 1);
-
- lua_getfield(L, 3, "all");
- if (lua_toboolean(L, -1)) hints->ai_flags |= AI_ALL;
- lua_pop(L, 1);
-
- lua_getfield(L, 3, "numerichost");
- if (lua_toboolean(L, -1)) hints->ai_flags |= AI_NUMERICHOST;
- lua_pop(L, 1);
-
- lua_getfield(L, 3, "passive");
- if (lua_toboolean(L, -1)) hints->ai_flags |= AI_PASSIVE;
- lua_pop(L, 1);
-
- lua_getfield(L, 3, "numericserv");
- if (lua_toboolean(L, -1)) {
- hints->ai_flags |= AI_NUMERICSERV;
- /* On OS X upto at least OSX 10.9, getaddrinfo crashes
- * if AI_NUMERICSERV is set and the servname is NULL or "0".
- * This workaround avoids a segfault in libsystem.
- */
- if (NULL == service) service = "00";
- }
- lua_pop(L, 1);
-
- lua_getfield(L, 3, "canonname");
- if (lua_toboolean(L, -1)) hints->ai_flags |= AI_CANONNAME;
- lua_pop(L, 1);
- }
-
- req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
-
- ret = uv_getaddrinfo(luv_loop(L), req, ref == LUA_NOREF ? NULL : luv_getaddrinfo_cb, node, service, hints);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- if (ref == LUA_NOREF) {
-
- lua_pop(L, 1);
- luv_pushaddrinfo(L, req->addrinfo);
- uv_freeaddrinfo(req->addrinfo);
- luv_cleanup_req(L, req->data);
- }
- return 1;
-}
-
-static void luv_getnameinfo_cb(uv_getnameinfo_t* req, int status, const char* hostname, const char* service) {
- lua_State* L = luv_state(req->loop);
-
- int nargs;
-
- if (status < 0) {
- luv_status(L, status);
- nargs = 1;
- }
- else {
- lua_pushnil(L);
- lua_pushstring(L, hostname);
- lua_pushstring(L, service);
- nargs = 3;
- }
-
- luv_fulfill_req(L, req->data, nargs);
- luv_cleanup_req(L, req->data);
- req->data = NULL;
-}
-
-static int luv_getnameinfo(lua_State* L) {
- uv_getnameinfo_t* req;
- struct sockaddr_storage addr;
- const char* ip = NULL;
- int flags = 0;
- int ret, ref, port = 0;
-
- luaL_checktype(L, 1, LUA_TTABLE);
- memset(&addr, 0, sizeof(addr));
-
- lua_getfield(L, 1, "ip");
- if (lua_isstring(L, -1)) {
- ip = lua_tostring(L, -1);
- }
- else if (!lua_isnil(L, -1)) {
- luaL_argerror(L, 1, "ip property must be string if set");
- }
- lua_pop(L, 1);
-
- lua_getfield(L, 1, "port");
- if (lua_isnumber(L, -1)) {
- port = lua_tointeger(L, -1);
- }
- else if (!lua_isnil(L, -1)) {
- luaL_argerror(L, 1, "port property must be integer if set");
- }
- lua_pop(L, 1);
-
- if (ip || port) {
- if (!ip) ip = "0.0.0.0";
- if (!uv_ip4_addr(ip, port, (struct sockaddr_in*)&addr)) {
- addr.ss_family = AF_INET;
- }
- else if (!uv_ip6_addr(ip, port, (struct sockaddr_in6*)&addr)) {
- addr.ss_family = AF_INET6;
- }
- else {
- return luaL_argerror(L, 1, "Invalid ip address or port");
- }
- }
-
- lua_getfield(L, 1, "family");
- if (lua_isnumber(L, -1)) {
- addr.ss_family = lua_tointeger(L, -1);
- }
- else if (lua_isstring(L, -1)) {
- addr.ss_family = luv_af_string_to_num(lua_tostring(L, -1));
- }
- else if (!lua_isnil(L, -1)) {
- luaL_argerror(L, 1, "family must be string if set");
- }
- lua_pop(L, 1);
-
- ref = lua_isnoneornil(L, 2) ? LUA_NOREF : luv_check_continuation(L, 2);
-
- req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
-
- ret = uv_getnameinfo(luv_loop(L), req, ref == LUA_NOREF ? NULL : luv_getnameinfo_cb, (struct sockaddr*)&addr, flags);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- if (ref == LUA_NOREF) {
- lua_pop(L, 1);
- lua_pushstring(L, req->host);
- lua_pushstring(L, req->service);
- luv_cleanup_req(L, req->data);
- return 2;
- }
- return 1;
-}
-
diff --git a/3rdparty/luv/src/fs.c b/3rdparty/luv/src/fs.c
deleted file mode 100644
index bacf11ea647..00000000000
--- a/3rdparty/luv/src/fs.c
+++ /dev/null
@@ -1,614 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include "luv.h"
-
-static uv_fs_t* luv_check_fs(lua_State* L, int index) {
- uv_fs_t* req = luaL_checkudata(L, index, "uv_req");
- luaL_argcheck(L, req->type = UV_FS && req->data, index, "Expected uv_fs_t");
- return req;
-}
-
-static void luv_push_timespec_table(lua_State* L, const uv_timespec_t* t) {
- lua_createtable(L, 0, 2);
- lua_pushinteger(L, t->tv_sec);
- lua_setfield(L, -2, "sec");
- lua_pushinteger(L, t->tv_nsec);
- lua_setfield(L, -2, "nsec");
-}
-
-static void luv_push_stats_table(lua_State* L, const uv_stat_t* s) {
- const char* type = NULL;
- lua_createtable(L, 0, 23);
- lua_pushinteger(L, s->st_dev);
- lua_setfield(L, -2, "dev");
- lua_pushinteger(L, s->st_mode);
- lua_setfield(L, -2, "mode");
- lua_pushinteger(L, s->st_nlink);
- lua_setfield(L, -2, "nlink");
- lua_pushinteger(L, s->st_uid);
- lua_setfield(L, -2, "uid");
- lua_pushinteger(L, s->st_gid);
- lua_setfield(L, -2, "gid");
- lua_pushinteger(L, s->st_rdev);
- lua_setfield(L, -2, "rdev");
- lua_pushinteger(L, s->st_ino);
- lua_setfield(L, -2, "ino");
- lua_pushinteger(L, s->st_size);
- lua_setfield(L, -2, "size");
- lua_pushinteger(L, s->st_blksize);
- lua_setfield(L, -2, "blksize");
- lua_pushinteger(L, s->st_blocks);
- lua_setfield(L, -2, "blocks");
- lua_pushinteger(L, s->st_flags);
- lua_setfield(L, -2, "flags");
- lua_pushinteger(L, s->st_gen);
- lua_setfield(L, -2, "gen");
- luv_push_timespec_table(L, &s->st_atim);
- lua_setfield(L, -2, "atime");
- luv_push_timespec_table(L, &s->st_mtim);
- lua_setfield(L, -2, "mtime");
- luv_push_timespec_table(L, &s->st_ctim);
- lua_setfield(L, -2, "ctime");
- luv_push_timespec_table(L, &s->st_birthtim);
- lua_setfield(L, -2, "birthtime");
- if (S_ISREG(s->st_mode)) {
- type = "file";
- }
- else if (S_ISDIR(s->st_mode)) {
- type = "directory";
- }
- else if (S_ISLNK(s->st_mode)) {
- type = "link";
- }
- else if (S_ISFIFO(s->st_mode)) {
- type = "fifo";
- }
-#ifdef S_ISSOCK
- else if (S_ISSOCK(s->st_mode)) {
- type = "socket";
- }
-#endif
- else if (S_ISCHR(s->st_mode)) {
- type = "char";
- }
- else if (S_ISBLK(s->st_mode)) {
- type = "block";
- }
- if (type) {
- lua_pushstring(L, type);
- lua_setfield(L, -2, "type");
- }
-}
-
-static int luv_check_flags(lua_State* L, int index) {
- const char* string;
- if (lua_isnumber(L, index)) {
- return lua_tointeger(L, index);
- }
- else if (!lua_isstring(L, index)) {
- return luaL_argerror(L, index, "Expected string or integer for file open mode");
- }
- string = lua_tostring(L, index);
-
- if (strcmp(string, "r") == 0) return O_RDONLY;
-#ifdef O_SYNC
- if (strcmp(string, "rs") == 0 ||
- strcmp(string, "sr") == 0) return O_RDONLY | O_SYNC;
-#endif
- if (strcmp(string, "r+") == 0) return O_RDWR;
-#ifdef O_SYNC
- if (strcmp(string, "rs+") == 0 ||
- strcmp(string, "sr+") == 0) return O_RDWR | O_SYNC;
-#endif
- if (strcmp(string, "w") == 0) return O_TRUNC | O_CREAT | O_WRONLY;
- if (strcmp(string, "wx") == 0 ||
- strcmp(string, "xw") == 0) return O_TRUNC | O_CREAT | O_WRONLY | O_EXCL;
- if (strcmp(string, "w+") == 0) return O_TRUNC | O_CREAT | O_RDWR;
- if (strcmp(string, "wx+") == 0 ||
- strcmp(string, "xw+") == 0) return O_TRUNC | O_CREAT | O_RDWR | O_EXCL;
- if (strcmp(string, "a") == 0) return O_APPEND | O_CREAT | O_WRONLY;
- if (strcmp(string, "ax") == 0 ||
- strcmp(string, "xa") == 0) return O_APPEND | O_CREAT | O_WRONLY | O_EXCL;
- if (strcmp(string, "a+") == 0) return O_APPEND | O_CREAT | O_RDWR;
- if (strcmp(string, "ax+") == 0 ||
- strcmp(string, "xa+") == 0) return O_APPEND | O_CREAT | O_RDWR | O_EXCL;
-
- return luaL_error(L, "Unknown file open flag '%s'", string);
-}
-
-static int luv_check_amode(lua_State* L, int index) {
- size_t i;
- int mode;
- const char* string;
- if (lua_isnumber(L, index)) {
- return lua_tointeger(L, index);
- }
- else if (!lua_isstring(L, index)) {
- return luaL_argerror(L, index, "Expected string or integer for file access mode check");
- }
- string = lua_tostring(L, index);
- mode = 0;
- for (i = 0; i < strlen(string); ++i) {
- switch (string[i]) {
- case 'r': case 'R':
- mode |= R_OK;
- break;
- case 'w': case 'W':
- mode |= W_OK;
- break;
- case 'x': case 'X':
- mode |= X_OK;
- break;
- default:
- return luaL_argerror(L, index, "Unknown character in access mode string");
- }
- }
- return mode;
-}
-
-/* Processes a result and pushes the data onto the stack
- returns the number of items pushed */
-static int push_fs_result(lua_State* L, uv_fs_t* req) {
- luv_req_t* data = req->data;
-
- if (req->fs_type == UV_FS_ACCESS) {
- lua_pushboolean(L, req->result >= 0);
- return 1;
- }
-
- if (req->result < 0) {
- lua_pushnil(L);
- if (req->path) {
- lua_pushfstring(L, "%s: %s: %s", uv_err_name(req->result), uv_strerror(req->result), req->path);
- }
- else {
- lua_pushfstring(L, "%s: %s", uv_err_name(req->result), uv_strerror(req->result));
- }
- return 2;
- }
-
- switch (req->fs_type) {
- case UV_FS_CLOSE:
- case UV_FS_RENAME:
- case UV_FS_UNLINK:
- case UV_FS_RMDIR:
- case UV_FS_MKDIR:
- case UV_FS_FTRUNCATE:
- case UV_FS_FSYNC:
- case UV_FS_FDATASYNC:
- case UV_FS_LINK:
- case UV_FS_SYMLINK:
- case UV_FS_CHMOD:
- case UV_FS_FCHMOD:
- case UV_FS_CHOWN:
- case UV_FS_FCHOWN:
- case UV_FS_UTIME:
- case UV_FS_FUTIME:
- lua_pushboolean(L, 1);
- return 1;
-
- case UV_FS_OPEN:
- case UV_FS_SENDFILE:
- case UV_FS_WRITE:
- lua_pushinteger(L, req->result);
- return 1;
-
- case UV_FS_STAT:
- case UV_FS_LSTAT:
- case UV_FS_FSTAT:
- luv_push_stats_table(L, &req->statbuf);
- return 1;
-
- case UV_FS_MKDTEMP:
- lua_pushstring(L, req->path);
- return 1;
-
- case UV_FS_READLINK:
- case UV_FS_REALPATH:
- lua_pushstring(L, (char*)req->ptr);
- return 1;
-
- case UV_FS_READ:
- lua_pushlstring(L, data->data, req->result);
- return 1;
-
- case UV_FS_SCANDIR:
- // Expose the userdata for the request.
- lua_rawgeti(L, LUA_REGISTRYINDEX, data->req_ref);
- return 1;
-
- default:
- lua_pushnil(L);
- lua_pushfstring(L, "UNKNOWN FS TYPE %d\n", req->fs_type);
- return 2;
- }
-
-}
-
-static void luv_fs_cb(uv_fs_t* req) {
- lua_State* L = luv_state(req->loop);
-
- int nargs = push_fs_result(L, req);
- if (nargs == 2 && lua_isnil(L, -nargs)) {
- // If it was an error, convert to (err, value) format.
- lua_remove(L, -nargs);
- nargs--;
- }
- else {
- // Otherwise insert a nil in front to convert to (err, value) format.
- lua_pushnil(L);
- lua_insert(L, -nargs - 1);
- nargs++;
- }
- luv_fulfill_req(L, req->data, nargs);
- if (req->fs_type != UV_FS_SCANDIR) {
- luv_cleanup_req(L, req->data);
- req->data = NULL;
- uv_fs_req_cleanup(req);
- }
-}
-
-#define FS_CALL(func, req, ...) { \
- int ret, sync; \
- luv_req_t* data = req->data; \
- sync = data->callback_ref == LUA_NOREF; \
- ret = uv_fs_##func(luv_loop(L), req, __VA_ARGS__, \
- sync ? NULL : luv_fs_cb); \
- if (req->fs_type != UV_FS_ACCESS && ret < 0) { \
- lua_pushnil(L); \
- if (req->path) { \
- lua_pushfstring(L, "%s: %s: %s", uv_err_name(req->result), uv_strerror(req->result), req->path); \
- } \
- else { \
- lua_pushfstring(L, "%s: %s", uv_err_name(req->result), uv_strerror(req->result)); \
- } \
- lua_pushstring(L, uv_err_name(req->result)); \
- luv_cleanup_req(L, req->data); \
- req->data = NULL; \
- uv_fs_req_cleanup(req); \
- return 3; \
- } \
- if (sync) { \
- int nargs = push_fs_result(L, req); \
- if (req->fs_type != UV_FS_SCANDIR) { \
- luv_cleanup_req(L, req->data); \
- req->data = NULL; \
- uv_fs_req_cleanup(req); \
- } \
- return nargs; \
- } \
- lua_rawgeti(L, LUA_REGISTRYINDEX, data->req_ref); \
- return 1; \
-}
-
-static int luv_fs_close(lua_State* L) {
- uv_file file = luaL_checkinteger(L, 1);
- int ref = luv_check_continuation(L, 2);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(close, req, file);
-}
-
-static int luv_fs_open(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- int flags = luv_check_flags(L, 2);
- int mode = luaL_checkinteger(L, 3);
- int ref = luv_check_continuation(L, 4);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(open, req, path, flags, mode);
-}
-
-static int luv_fs_read(lua_State* L) {
- uv_file file = luaL_checkinteger(L, 1);
- int64_t len = luaL_checkinteger(L, 2);
- int64_t offset = luaL_checkinteger(L, 3);
- uv_buf_t buf;
- int ref;
- uv_fs_t* req;
- char* data = malloc(len);
- if (!data) return luaL_error(L, "Failure to allocate buffer");
- buf = uv_buf_init(data, len);
- ref = luv_check_continuation(L, 4);
- req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- // TODO: find out why we can't just use req->ptr for the base
- ((luv_req_t*)req->data)->data = buf.base;
- FS_CALL(read, req, file, &buf, 1, offset);
-}
-
-static int luv_fs_unlink(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- int ref = luv_check_continuation(L, 2);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(unlink, req, path);
-}
-
-static int luv_fs_write(lua_State* L) {
- uv_file file = luaL_checkinteger(L, 1);
- uv_buf_t buf;
- int64_t offset;
- int ref;
- uv_fs_t* req;
- size_t count;
- uv_buf_t *bufs = NULL;
-
- if (lua_istable(L, 2)) {
- bufs = luv_prep_bufs(L, 2, &count);
- buf.base = NULL;
- }
- else if (lua_isstring(L, 2)) {
- luv_check_buf(L, 2, &buf);
- count = 1;
- }
- else {
- return luaL_argerror(L, 2, "data must be string or table of strings");
- }
-
- offset = luaL_checkinteger(L, 3);
- ref = luv_check_continuation(L, 4);
- req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- req->ptr = buf.base;
- ((luv_req_t*)req->data)->data = bufs;
- FS_CALL(write, req, file, bufs ? bufs : &buf, count, offset);
-}
-
-static int luv_fs_mkdir(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- int mode = luaL_checkinteger(L, 2);
- int ref = luv_check_continuation(L, 3);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(mkdir, req, path, mode);
-}
-
-static int luv_fs_mkdtemp(lua_State* L) {
- const char* tpl = luaL_checkstring(L, 1);
- int ref = luv_check_continuation(L, 2);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(mkdtemp, req, tpl);
-}
-
-static int luv_fs_rmdir(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- int ref = luv_check_continuation(L, 2);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(rmdir, req, path);
-}
-
-static int luv_fs_scandir(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- int flags = 0; // TODO: find out what these flags are.
- int ref = luv_check_continuation(L, 2);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(scandir, req, path, flags);
-}
-
-static int luv_fs_scandir_next(lua_State* L) {
- uv_fs_t* req = luv_check_fs(L, 1);
- uv_dirent_t ent;
- int ret = uv_fs_scandir_next(req, &ent);
- const char* type;
- if (ret == UV_EOF) {
- luv_cleanup_req(L, req->data);
- req->data = NULL;
- uv_fs_req_cleanup(req);
- return 0;
- }
- if (ret < 0) return luv_error(L, ret);
- lua_pushstring(L, ent.name);
- switch (ent.type) {
- case UV_DIRENT_UNKNOWN: return 1;
- case UV_DIRENT_FILE: type = "file"; break;
- case UV_DIRENT_DIR: type = "directory"; break;
- case UV_DIRENT_LINK: type = "link"; break;
- case UV_DIRENT_FIFO: type = "fifo"; break;
- case UV_DIRENT_SOCKET: type = "socket"; break;
- case UV_DIRENT_CHAR: type = "char"; break;
- case UV_DIRENT_BLOCK: type = "block"; break;
- default: assert(0);
- }
- lua_pushstring(L, type);
- return 2;
-}
-
-static int luv_fs_stat(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- int ref = luv_check_continuation(L, 2);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(stat, req, path);
-}
-
-static int luv_fs_fstat(lua_State* L) {
- uv_file file = luaL_checkinteger(L, 1);
- int ref = luv_check_continuation(L, 2);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(fstat, req, file);
-}
-
-static int luv_fs_lstat(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- int ref = luv_check_continuation(L, 2);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(lstat, req, path);
-}
-
-static int luv_fs_rename(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- const char* new_path = luaL_checkstring(L, 2);
- int ref = luv_check_continuation(L, 3);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(rename, req, path, new_path);
-}
-
-static int luv_fs_fsync(lua_State* L) {
- uv_file file = luaL_checkinteger(L, 1);
- int ref = luv_check_continuation(L, 2);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(fsync, req, file);
-}
-
-static int luv_fs_fdatasync(lua_State* L) {
- uv_file file = luaL_checkinteger(L, 1);
- int ref = luv_check_continuation(L, 2);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(fdatasync, req, file);
-}
-
-static int luv_fs_ftruncate(lua_State* L) {
- uv_file file = luaL_checkinteger(L, 1);
- int64_t offset = luaL_checkinteger(L, 2);
- int ref = luv_check_continuation(L, 3);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(ftruncate, req, file, offset);
-}
-
-static int luv_fs_sendfile(lua_State* L) {
- uv_file out_fd = luaL_checkinteger(L, 1);
- uv_file in_fd = luaL_checkinteger(L, 2);
- int64_t in_offset = luaL_checkinteger(L, 3);
- size_t length = luaL_checkinteger(L, 4);
- int ref = luv_check_continuation(L, 5);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(sendfile, req, out_fd, in_fd, in_offset, length);
-}
-
-static int luv_fs_access(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- int amode = luv_check_amode(L, 2);
- int ref = luv_check_continuation(L, 3);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(access, req, path, amode);
-}
-
-static int luv_fs_chmod(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- int mode = luaL_checkinteger(L, 2);
- int ref = luv_check_continuation(L, 3);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(chmod, req, path, mode);
-}
-
-static int luv_fs_fchmod(lua_State* L) {
- uv_file file = luaL_checkinteger(L, 1);
- int mode = luaL_checkinteger(L, 2);
- int ref = luv_check_continuation(L, 3);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(fchmod, req, file, mode);
-}
-
-static int luv_fs_utime(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- double atime = luaL_checknumber(L, 2);
- double mtime = luaL_checknumber(L, 3);
- int ref = luv_check_continuation(L, 4);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(utime, req, path, atime, mtime);
-}
-
-static int luv_fs_futime(lua_State* L) {
- uv_file file = luaL_checkinteger(L, 1);
- double atime = luaL_checknumber(L, 2);
- double mtime = luaL_checknumber(L, 3);
- int ref = luv_check_continuation(L, 4);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(futime, req, file, atime, mtime);
-}
-
-static int luv_fs_link(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- const char* new_path = luaL_checkstring(L, 2);
- int ref = luv_check_continuation(L, 3);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(link, req, path, new_path);
-}
-
-static int luv_fs_symlink(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- const char* new_path = luaL_checkstring(L, 2);
- int flags = 0, ref;
- uv_fs_t* req;
- if (lua_type(L, 3) == LUA_TTABLE) {
- lua_getfield(L, 3, "dir");
- if (lua_toboolean(L, -1)) flags |= UV_FS_SYMLINK_DIR;
- lua_pop(L, 1);
- lua_getfield(L, 3, "junction");
- if (lua_toboolean(L, -1)) flags |= UV_FS_SYMLINK_JUNCTION;
- lua_pop(L, 1);
- }
- ref = luv_check_continuation(L, 4);
- req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
-
- FS_CALL(symlink, req, path, new_path, flags);
-}
-
-static int luv_fs_readlink(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- int ref = luv_check_continuation(L, 2);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(readlink, req, path);
-}
-
-static int luv_fs_realpath(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- int ref = luv_check_continuation(L, 2);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(realpath, req, path);
-}
-
-static int luv_fs_chown(lua_State* L) {
- const char* path = luaL_checkstring(L, 1);
- uv_uid_t uid = luaL_checkinteger(L, 2);
- uv_uid_t gid = luaL_checkinteger(L, 3);
- int ref = luv_check_continuation(L, 4);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(chown, req, path, uid, gid);
-}
-
-static int luv_fs_fchown(lua_State* L) {
- uv_file file = luaL_checkinteger(L, 1);
- uv_uid_t uid = luaL_checkinteger(L, 2);
- uv_uid_t gid = luaL_checkinteger(L, 3);
- int ref = luv_check_continuation(L, 4);
- uv_fs_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- FS_CALL(fchown, req, file, uid, gid);
-}
diff --git a/3rdparty/luv/src/fs_event.c b/3rdparty/luv/src/fs_event.c
deleted file mode 100644
index 52bda788421..00000000000
--- a/3rdparty/luv/src/fs_event.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include "luv.h"
-
-static uv_fs_event_t* luv_check_fs_event(lua_State* L, int index) {
- uv_fs_event_t* handle = luv_checkudata(L, index, "uv_fs_event");
- luaL_argcheck(L, handle->type == UV_FS_EVENT && handle->data, index, "Expected uv_fs_event_t");
- return handle;
-}
-
-static int luv_new_fs_event(lua_State* L) {
- uv_fs_event_t* handle = luv_newuserdata(L, sizeof(*handle));
- int ret = uv_fs_event_init(luv_loop(L), handle);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- handle->data = luv_setup_handle(L);
- return 1;
-}
-
-static void luv_fs_event_cb(uv_fs_event_t* handle, const char* filename, int events, int status) {
- lua_State* L = luv_state(handle->loop);
-
- // err
- luv_status(L, status);
-
- // filename
- lua_pushstring(L, filename);
-
- // events
- lua_newtable(L);
- if (events & UV_RENAME) {
- lua_pushboolean(L, 1);
- lua_setfield(L, -2, "rename");
- }
- if (events & UV_CHANGE) {
- lua_pushboolean(L, 1);
- lua_setfield(L, -2, "change");
- }
-
- luv_call_callback(L, handle->data, LUV_FS_EVENT, 3);
-}
-
-static int luv_fs_event_start(lua_State* L) {
- uv_fs_event_t* handle = luv_check_fs_event(L, 1);
- const char* path = luaL_checkstring(L, 2);
- int flags = 0, ret;
- luaL_checktype(L, 3, LUA_TTABLE);
- lua_getfield(L, 3, "watch_entry");
- if (lua_toboolean(L, -1)) flags |= UV_FS_EVENT_WATCH_ENTRY;
- lua_pop(L, 1);
- lua_getfield(L, 3, "stat");
- if (lua_toboolean(L, -1)) flags |= UV_FS_EVENT_STAT;
- lua_pop(L, 1);
- lua_getfield(L, 3, "recursive");
- if (lua_toboolean(L, -1)) flags |= UV_FS_EVENT_RECURSIVE;
- lua_pop(L, 1);
- luv_check_callback(L, handle->data, LUV_FS_EVENT, 4);
- ret = uv_fs_event_start(handle, luv_fs_event_cb, path, flags);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_fs_event_stop(lua_State* L) {
- uv_fs_event_t* handle = luv_check_fs_event(L, 1);
- int ret = uv_fs_event_stop(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_fs_event_getpath(lua_State* L) {
- uv_fs_event_t* handle = luv_check_fs_event(L, 1);
- size_t len = 2*PATH_MAX;
- char buf[2*PATH_MAX];
- int ret = uv_fs_event_getpath(handle, buf, &len);
- if (ret < 0) return luv_error(L, ret);
- lua_pushlstring(L, buf, len);
- return 1;
-}
diff --git a/3rdparty/luv/src/fs_poll.c b/3rdparty/luv/src/fs_poll.c
deleted file mode 100644
index 7ead32f322c..00000000000
--- a/3rdparty/luv/src/fs_poll.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include "luv.h"
-
-static uv_fs_poll_t* luv_check_fs_poll(lua_State* L, int index) {
- uv_fs_poll_t* handle = luv_checkudata(L, index, "uv_fs_poll");
- luaL_argcheck(L, handle->type == UV_FS_POLL && handle->data, index, "Expected uv_fs_poll_t");
- return handle;
-}
-
-static int luv_new_fs_poll(lua_State* L) {
- uv_fs_poll_t* handle = luv_newuserdata(L, sizeof(*handle));
- int ret = uv_fs_poll_init(luv_loop(L), handle);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- handle->data = luv_setup_handle(L);
- return 1;
-}
-
-static void luv_fs_poll_cb(uv_fs_poll_t* handle, int status, const uv_stat_t* prev, const uv_stat_t* curr) {
- lua_State* L = luv_state(handle->loop);
-
- // err
- luv_status(L, status);
-
- // prev
- if (prev) {
- luv_push_stats_table(L, prev);
- }
- else {
- lua_pushnil(L);
- }
-
- // curr
- if (curr) {
- luv_push_stats_table(L, curr);
- }
- else {
- lua_pushnil(L);
- }
-
- luv_call_callback(L, handle->data, LUV_FS_POLL, 3);
-}
-
-static int luv_fs_poll_start(lua_State* L) {
- uv_fs_poll_t* handle = luv_check_fs_poll(L, 1);
- const char* path = luaL_checkstring(L, 2);
- unsigned int interval = luaL_checkinteger(L, 3);
- int ret;
- luv_check_callback(L, handle->data, LUV_FS_POLL, 4);
- ret = uv_fs_poll_start(handle, luv_fs_poll_cb, path, interval);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_fs_poll_stop(lua_State* L) {
- uv_fs_poll_t* handle = luv_check_fs_poll(L, 1);
- int ret = uv_fs_poll_stop(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_fs_poll_getpath(lua_State* L) {
- uv_fs_poll_t* handle = luv_check_fs_poll(L, 1);
- size_t len = 2*PATH_MAX;
- char buf[2*PATH_MAX];
- int ret = uv_fs_poll_getpath(handle, buf, &len);
- if (ret < 0) return luv_error(L, ret);
- lua_pushlstring(L, buf, len);
- return 1;
-}
diff --git a/3rdparty/luv/src/handle.c b/3rdparty/luv/src/handle.c
deleted file mode 100644
index 3efd2982641..00000000000
--- a/3rdparty/luv/src/handle.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static void* luv_newuserdata(lua_State* L, size_t sz) {
- void* handle = malloc(sz);
- if (handle) {
- *(void**)lua_newuserdata(L, sizeof(void*)) = handle;
- }
- return handle;
-}
-
-static void* luv_checkudata(lua_State* L, int ud, const char* tname) {
- return *(void**) luaL_checkudata(L, ud, tname);
-}
-
-static uv_handle_t* luv_check_handle(lua_State* L, int index) {
- int isHandle;
- uv_handle_t* handle;
- if (!(handle = *(void**)lua_touserdata(L, index))) { goto fail; }
- lua_getfield(L, LUA_REGISTRYINDEX, "uv_handle");
- lua_getmetatable(L, index < 0 ? index - 1 : index);
- lua_rawget(L, -2);
- isHandle = lua_toboolean(L, -1);
- lua_pop(L, 2);
- if (isHandle) { return handle; }
- fail: luaL_argerror(L, index, "Expected uv_handle userdata");
- return NULL;
-}
-
-// Show the libuv type instead of generic "userdata"
-static int luv_handle_tostring(lua_State* L) {
- uv_handle_t* handle = luv_check_handle(L, 1);
- switch (handle->type) {
-#define XX(uc, lc) case UV_##uc: lua_pushfstring(L, "uv_"#lc"_t: %p", handle); break;
- UV_HANDLE_TYPE_MAP(XX)
-#undef XX
- default: lua_pushfstring(L, "uv_handle_t: %p", handle); break;
- }
- return 1;
-}
-
-static int luv_is_active(lua_State* L) {
- uv_handle_t* handle = luv_check_handle(L, 1);
- int ret = uv_is_active(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushboolean(L, ret);
- return 1;
-}
-
-static int luv_is_closing(lua_State* L) {
- uv_handle_t* handle = luv_check_handle(L, 1);
- int ret = uv_is_closing(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushboolean(L, ret);
- return 1;
-}
-
-static void luv_close_cb(uv_handle_t* handle) {
- lua_State* L = luv_state(handle->loop);
- luv_handle_t* data = handle->data;
- if (!data) return;
- luv_call_callback(L, data, LUV_CLOSED, 0);
- luv_cleanup_handle(L, data);
- handle->data = NULL;
-}
-
-static int luv_close(lua_State* L) {
- uv_handle_t* handle = luv_check_handle(L, 1);
- if (uv_is_closing(handle)) {
- luaL_error(L, "handle %p is already closing", handle);
- }
- if (!lua_isnoneornil(L, 2)) {
- luv_check_callback(L, handle->data, LUV_CLOSED, 2);
- }
- uv_close(handle, luv_close_cb);
- return 0;
-}
-
-static void luv_gc_cb(uv_handle_t* handle) {
- luv_close_cb(handle);
- free(handle);
-}
-
-static int luv_handle_gc(lua_State* L) {
- void** udata = lua_touserdata(L, 1);
- uv_handle_t* handle = *udata;
- if (handle != NULL) {
- if (!uv_is_closing(handle))
- uv_close(handle, luv_gc_cb);
- else
- free(*udata);
-
- *udata = NULL;
- }
-
- return 0;
-}
-
-static int luv_ref(lua_State* L) {
- uv_handle_t* handle = luv_check_handle(L, 1);
- uv_ref(handle);
- return 0;
-}
-
-static int luv_unref(lua_State* L) {
- uv_handle_t* handle = luv_check_handle(L, 1);
- uv_unref(handle);
- return 0;
-}
-
-static int luv_has_ref(lua_State* L) {
- uv_handle_t* handle = luv_check_handle(L, 1);
- int ret = uv_has_ref(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushboolean(L, ret);
- return 1;
-}
-
-static int luv_send_buffer_size(lua_State* L) {
- uv_handle_t* handle = luv_check_handle(L, 1);
- int value;
- int ret;
- if (lua_isnoneornil(L, 2)) {
- value = 0;
- }
- else {
- value = luaL_checkinteger(L, 2);
- }
- ret = uv_send_buffer_size(handle, &value);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_recv_buffer_size(lua_State* L) {
- uv_handle_t* handle = luv_check_handle(L, 1);
- int value;
- int ret;
- if (lua_isnoneornil(L, 2)) {
- value = 0;
- }
- else {
- value = luaL_checkinteger(L, 2);
- }
- ret = uv_recv_buffer_size(handle, &value);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_fileno(lua_State* L) {
- uv_handle_t* handle = luv_check_handle(L, 1);
- uv_os_fd_t fd;
- int ret = uv_fileno(handle, &fd);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, (LUA_INTEGER)(ptrdiff_t)fd);
- return 1;
-}
diff --git a/3rdparty/luv/src/idle.c b/3rdparty/luv/src/idle.c
deleted file mode 100644
index 132cbe43c33..00000000000
--- a/3rdparty/luv/src/idle.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static uv_idle_t* luv_check_idle(lua_State* L, int index) {
- uv_idle_t* handle = luv_checkudata(L, index, "uv_idle");
- luaL_argcheck(L, handle->type == UV_IDLE && handle->data, index, "Expected uv_idle_t");
- return handle;
-}
-
-static int luv_new_idle(lua_State* L) {
- uv_idle_t* handle = luv_newuserdata(L, sizeof(*handle));
- int ret = uv_idle_init(luv_loop(L), handle);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- handle->data = luv_setup_handle(L);
- return 1;
-}
-
-static void luv_idle_cb(uv_idle_t* handle) {
- lua_State* L = luv_state(handle->loop);
- luv_handle_t* data = handle->data;
- luv_call_callback(L, data, LUV_IDLE, 0);
-}
-
-static int luv_idle_start(lua_State* L) {
- uv_idle_t* handle = luv_check_idle(L, 1);
- int ret;
- luv_check_callback(L, handle->data, LUV_IDLE, 2);
- ret = uv_idle_start(handle, luv_idle_cb);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_idle_stop(lua_State* L) {
- uv_idle_t* handle = luv_check_idle(L, 1);
- int ret = uv_idle_stop(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
diff --git a/3rdparty/luv/src/lhandle.c b/3rdparty/luv/src/lhandle.c
deleted file mode 100644
index c8cf294504e..00000000000
--- a/3rdparty/luv/src/lhandle.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "lhandle.h"
-
-static luv_handle_t* luv_setup_handle(lua_State* L) {
- luv_handle_t* data;
- const uv_handle_t* handle = *(void**)lua_touserdata(L, -1);
- luaL_checktype(L, -1, LUA_TUSERDATA);
-
- data = malloc(sizeof(*data));
- if (!data) luaL_error(L, "Can't allocate luv handle");
-
- #define XX(uc, lc) case UV_##uc: \
- luaL_getmetatable(L, "uv_"#lc); \
- break;
- switch (handle->type) {
- UV_HANDLE_TYPE_MAP(XX)
- default:
- luaL_error(L, "Unknown handle type");
- return NULL;
- }
- #undef XX
-
- lua_setmetatable(L, -2);
-
- lua_pushvalue(L, -1);
-
- data->ref = luaL_ref(L, LUA_REGISTRYINDEX);
- data->callbacks[0] = LUA_NOREF;
- data->callbacks[1] = LUA_NOREF;
- data->extra = NULL;
- return data;
-}
-
-static void luv_check_callback(lua_State* L, luv_handle_t* data, luv_callback_id id, int index) {
- luaL_checktype(L, index, LUA_TFUNCTION);
- luaL_unref(L, LUA_REGISTRYINDEX, data->callbacks[id]);
- lua_pushvalue(L, index);
- data->callbacks[id] = luaL_ref(L, LUA_REGISTRYINDEX);
-}
-
-static int traceback (lua_State *L) {
- if (!lua_isstring(L, 1)) /* 'message' not a string? */
- return 1; /* keep it intact */
- lua_pushglobaltable(L);
- lua_getfield(L, -1, "debug");
- lua_remove(L, -2);
- if (!lua_istable(L, -1)) {
- lua_pop(L, 1);
- return 1;
- }
- lua_getfield(L, -1, "traceback");
- if (!lua_isfunction(L, -1)) {
- lua_pop(L, 2);
- return 1;
- }
- lua_pushvalue(L, 1); /* pass error message */
- lua_pushinteger(L, 2); /* skip this function and traceback */
- lua_call(L, 2, 1); /* call debug.traceback */
- return 1;
-}
-
-static void luv_call_callback(lua_State* L, luv_handle_t* data, luv_callback_id id, int nargs) {
- int ref = data->callbacks[id];
- if (ref == LUA_NOREF) {
- lua_pop(L, nargs);
- }
- else {
- // Get the traceback function in case of error
- lua_pushcfunction(L, traceback);
- // And insert it before the args if there are any.
- if (nargs) {
- lua_insert(L, -1 - nargs);
- }
- // Get the callback
- lua_rawgeti(L, LUA_REGISTRYINDEX, ref);
- // And insert it before the args if there are any.
- if (nargs) {
- lua_insert(L, -1 - nargs);
- }
-
- if (lua_pcall(L, nargs, 0, -2 - nargs)) {
- fprintf(stderr, "Uncaught Error: %s\n", lua_tostring(L, -1));
- exit(-1);
- }
- // Remove the traceback function
- lua_pop(L, 1);
- }
-}
-
-static void luv_cleanup_handle(lua_State* L, luv_handle_t* data) {
- luaL_unref(L, LUA_REGISTRYINDEX, data->ref);
- luaL_unref(L, LUA_REGISTRYINDEX, data->callbacks[0]);
- luaL_unref(L, LUA_REGISTRYINDEX, data->callbacks[1]);
- if (data->extra)
- free(data->extra);
- free(data);
-}
-
-static void luv_find_handle(lua_State* L, luv_handle_t* data) {
- lua_rawgeti(L, LUA_REGISTRYINDEX, data->ref);
-}
diff --git a/3rdparty/luv/src/lhandle.h b/3rdparty/luv/src/lhandle.h
deleted file mode 100644
index f6c0733719b..00000000000
--- a/3rdparty/luv/src/lhandle.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#ifndef LUV_LHANDLE_H
-#define LUV_LHANDLE_H
-
-#include "luv.h"
-
-/* There are two slots for holding callbacks. One is for the CLOSED event.
- The other slot is for all others since they never conflict in practice.
-*/
-#define luv_callback_id int
-#define LUV_CLOSED 0
-#define LUV_TIMEOUT 1
-#define LUV_PREPARE 1
-#define LUV_IDLE 1
-#define LUV_CHECK 1
-#define LUV_ASYNC 1
-#define LUV_POLL 1
-#define LUV_SIGNAL 1
-#define LUV_EXIT 1
-#define LUV_CONNECTION 1
-#define LUV_READ 1
-#define LUV_RECV 1
-#define LUV_FS_EVENT 1
-#define LUV_FS_POLL 1
-
-/* Ref for userdata and event callbacks */
-typedef struct {
- int ref;
- int callbacks[2];
- void* extra;
-} luv_handle_t;
-
-/* Setup the handle at the top of the stack */
-static luv_handle_t* luv_setup_handle(lua_State* L);
-
-/* Store a lua callback in a luv_handle for future callbacks.
- Either replace an existing callback by id or append a new one at the end.
-*/
-static void luv_check_callback(lua_State* L, luv_handle_t* data, luv_callback_id id, int index);
-
-/* Lookup a function and call it with nargs
- If there is no such function, pop the args.
-*/
-static void luv_call_callback(lua_State* L, luv_handle_t* data, luv_callback_id id, int nargs);
-
-/* Push a userdata on the stack from a handle */
-static void luv_find_handle(lua_State* L, luv_handle_t* data);
-
-/* Recursivly free the luv_handle and all event handlers */
-static void luv_cleanup_handle(lua_State* L, luv_handle_t* data);
-
-#endif
diff --git a/3rdparty/luv/src/loop.c b/3rdparty/luv/src/loop.c
deleted file mode 100644
index 33c49d3f64c..00000000000
--- a/3rdparty/luv/src/loop.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static int luv_loop_close(lua_State* L) {
- int ret = uv_loop_close(luv_loop(L));
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-// These are the same order as uv_run_mode which also starts at 0
-static const char *const luv_runmodes[] = {
- "default", "once", "nowait", NULL
-};
-
-static int luv_run(lua_State* L) {
- int mode = luaL_checkoption(L, 1, "default", luv_runmodes);
- int ret = uv_run(luv_loop(L), mode);
- if (ret < 0) return luv_error(L, ret);
- lua_pushboolean(L, ret);
- return 1;
-}
-
-static int luv_loop_alive(lua_State* L) {
- int ret = uv_loop_alive(luv_loop(L));
- if (ret < 0) return luv_error(L, ret);
- lua_pushboolean(L, ret);
- return 1;
-}
-
-static int luv_stop(lua_State* L) {
- uv_stop(luv_loop(L));
- return 0;
-}
-
-static int luv_backend_fd(lua_State* L) {
- int ret = uv_backend_fd(luv_loop(L));
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_backend_timeout(lua_State* L) {
- int ret = uv_backend_timeout(luv_loop(L));
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_now(lua_State* L) {
- uint64_t now = uv_now(luv_loop(L));
- lua_pushinteger(L, now);
- return 1;
-}
-
-static int luv_update_time(lua_State* L) {
- uv_update_time(luv_loop(L));
- return 0;
-}
-
-static void luv_walk_cb(uv_handle_t* handle, void* arg) {
- lua_State* L = arg;
- luv_handle_t* data = handle->data;
-
- // Sanity check
- // Most invalid values are large and refs are small, 0x1000000 is arbitrary.
- assert(data && data->ref < 0x1000000);
-
- lua_pushvalue(L, 1); // Copy the function
- luv_find_handle(L, data); // Get the userdata
- lua_call(L, 1, 0); // Call the function
-}
-
-static int luv_walk(lua_State* L) {
- luaL_checktype(L, 1, LUA_TFUNCTION);
- uv_walk(luv_loop(L), luv_walk_cb, L);
- return 0;
-}
diff --git a/3rdparty/luv/src/lreq.c b/3rdparty/luv/src/lreq.c
deleted file mode 100644
index 38ed6a77eb0..00000000000
--- a/3rdparty/luv/src/lreq.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "lreq.h"
-
-
-static int luv_check_continuation(lua_State* L, int index) {
- if (lua_isnoneornil(L, index)) return LUA_NOREF;
- luaL_checktype(L, index, LUA_TFUNCTION);
- lua_pushvalue(L, index);
- return luaL_ref(L, LUA_REGISTRYINDEX);
-}
-
-// Store a lua callback in a luv_req for the continuation.
-// The uv_req_t is assumed to be at the top of the stack
-static luv_req_t* luv_setup_req(lua_State* L, int callback_ref) {
- luv_req_t* data;
-
- luaL_checktype(L, -1, LUA_TUSERDATA);
-
- data = malloc(sizeof(*data));
- if (!data) luaL_error(L, "Problem allocating luv request");
-
- luaL_getmetatable(L, "uv_req");
- lua_setmetatable(L, -2);
-
- lua_pushvalue(L, -1);
- data->req_ref = luaL_ref(L, LUA_REGISTRYINDEX);
- data->callback_ref = callback_ref;
- data->data_ref = LUA_NOREF;
- data->data = NULL;
-
- return data;
-}
-
-
-static void luv_fulfill_req(lua_State* L, luv_req_t* data, int nargs) {
- if (data->callback_ref == LUA_NOREF) {
- lua_pop(L, nargs);
- }
- else {
- // Get the callback
- lua_rawgeti(L, LUA_REGISTRYINDEX, data->callback_ref);
- // And insert it before the args if there are any.
- if (nargs) {
- lua_insert(L, -1 - nargs);
- }
- lua_call(L, nargs, 0);
- }
-}
-
-static void luv_cleanup_req(lua_State* L, luv_req_t* data) {
- luaL_unref(L, LUA_REGISTRYINDEX, data->req_ref);
- luaL_unref(L, LUA_REGISTRYINDEX, data->callback_ref);
- luaL_unref(L, LUA_REGISTRYINDEX, data->data_ref);
- free(data->data);
- free(data);
-}
diff --git a/3rdparty/luv/src/lreq.h b/3rdparty/luv/src/lreq.h
deleted file mode 100644
index a8b147e057b..00000000000
--- a/3rdparty/luv/src/lreq.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#ifndef LUV_LREQ_H
-#define LUV_LREQ_H
-
-#include "luv.h"
-
-typedef struct {
- int req_ref; /* ref for uv_req_t's userdata */
- int callback_ref; /* ref for callback */
- int data_ref; /* ref for write data */
- void* data; /* extra data */
-} luv_req_t;
-
-/* Used in the top of a setup function to check the arg
- and ref the callback to an integer.
-*/
-static int luv_check_continuation(lua_State* L, int index);
-
-/* setup a luv_req_t. The userdata is assumed to be at the
- top of the stack.
-*/
-static luv_req_t* luv_setup_req(lua_State* L, int ref);
-
-static void luv_fulfill_req(lua_State* L, luv_req_t* data, int nargs);
-
-static void luv_cleanup_req(lua_State* L, luv_req_t* data);
-
-#endif
diff --git a/3rdparty/luv/src/lthreadpool.h b/3rdparty/luv/src/lthreadpool.h
deleted file mode 100644
index 0994746bc52..00000000000
--- a/3rdparty/luv/src/lthreadpool.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-* Copyright 2014 The Luvit Authors. All Rights Reserved.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-*/
-#ifndef LUV_LTHREADPOOL_H
-#define LUV_LTHREADPOOL_H
-
-#include "luv.h"
-
-#define LUV_THREAD_MAXNUM_ARG 9
-
-typedef struct {
- /* only support LUA_TNIL, LUA_TBOOLEAN, LUA_TLIGHTUSERDATA, LUA_TNUMBER, LUA_TSTRING*/
- int type;
- union
- {
- lua_Number num;
- int boolean;
- void* userdata;
- struct {
- const char* base;
- size_t len;
- } str;
- } val;
-} luv_val_t;
-
-typedef struct {
- int argc;
- luv_val_t argv[LUV_THREAD_MAXNUM_ARG];
-} luv_thread_arg_t;
-
-static int luv_thread_arg_set(lua_State* L, luv_thread_arg_t* args, int idx, int top, int flag);
-static int luv_thread_arg_push(lua_State* L, const luv_thread_arg_t* args);
-static void luv_thread_arg_clear(luv_thread_arg_t* args);
-
-#endif //LUV_LTHREADPOOL_H
diff --git a/3rdparty/luv/src/luv.c b/3rdparty/luv/src/luv.c
deleted file mode 100644
index 7b552d68d53..00000000000
--- a/3rdparty/luv/src/luv.c
+++ /dev/null
@@ -1,519 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include "luv.h"
-#include "util.c"
-#include "lhandle.c"
-#include "lreq.c"
-#include "loop.c"
-#include "req.c"
-#include "handle.c"
-#include "timer.c"
-#include "prepare.c"
-#include "check.c"
-#include "idle.c"
-#include "async.c"
-#include "poll.c"
-#include "signal.c"
-#include "process.c"
-#include "stream.c"
-#include "tcp.c"
-#include "pipe.c"
-#include "tty.c"
-#include "udp.c"
-#include "fs_event.c"
-#include "fs_poll.c"
-#include "fs.c"
-#include "dns.c"
-#include "thread.c"
-#include "work.c"
-#include "misc.c"
-#include "constants.c"
-
-static const luaL_Reg luv_functions[] = {
- // loop.c
- {"loop_close", luv_loop_close},
- {"run", luv_run},
- {"loop_alive", luv_loop_alive},
- {"stop", luv_stop},
- {"backend_fd", luv_backend_fd},
- {"backend_timeout", luv_backend_timeout},
- {"now", luv_now},
- {"update_time", luv_update_time},
- {"walk", luv_walk},
-
- // req.c
- {"cancel", luv_cancel},
-
- // handle.c
- {"is_active", luv_is_active},
- {"is_closing", luv_is_closing},
- {"close", luv_close},
- {"ref", luv_ref},
- {"unref", luv_unref},
- {"has_ref", luv_has_ref},
- {"send_buffer_size", luv_send_buffer_size},
- {"recv_buffer_size", luv_recv_buffer_size},
- {"fileno", luv_fileno},
-
- // timer.c
- {"new_timer", luv_new_timer},
- {"timer_start", luv_timer_start},
- {"timer_stop", luv_timer_stop},
- {"timer_again", luv_timer_again},
- {"timer_set_repeat", luv_timer_set_repeat},
- {"timer_get_repeat", luv_timer_get_repeat},
-
- // prepare.c
- {"new_prepare", luv_new_prepare},
- {"prepare_start", luv_prepare_start},
- {"prepare_stop", luv_prepare_stop},
-
- // check.c
- {"new_check", luv_new_check},
- {"check_start", luv_check_start},
- {"check_stop", luv_check_stop},
-
- // idle.c
- {"new_idle", luv_new_idle},
- {"idle_start", luv_idle_start},
- {"idle_stop", luv_idle_stop},
-
- // async.c
- {"new_async", luv_new_async},
- {"async_send", luv_async_send},
-
- // poll.c
- {"new_poll", luv_new_poll},
- {"new_socket_poll", luv_new_socket_poll},
- {"poll_start", luv_poll_start},
- {"poll_stop", luv_poll_stop},
-
- // signal.c
- {"new_signal", luv_new_signal},
- {"signal_start", luv_signal_start},
- {"signal_stop", luv_signal_stop},
-
- // process.c
- {"disable_stdio_inheritance", luv_disable_stdio_inheritance},
- {"spawn", luv_spawn},
- {"process_kill", luv_process_kill},
- {"kill", luv_kill},
-
- // stream.c
- {"shutdown", luv_shutdown},
- {"listen", luv_listen},
- {"accept", luv_accept},
- {"read_start", luv_read_start},
- {"read_stop", luv_read_stop},
- {"write", luv_write},
- {"write2", luv_write2},
- {"try_write", luv_try_write},
- {"is_readable", luv_is_readable},
- {"is_writable", luv_is_writable},
- {"stream_set_blocking", luv_stream_set_blocking},
-
- // tcp.c
- {"new_tcp", luv_new_tcp},
- {"tcp_open", luv_tcp_open},
- {"tcp_nodelay", luv_tcp_nodelay},
- {"tcp_keepalive", luv_tcp_keepalive},
- {"tcp_simultaneous_accepts", luv_tcp_simultaneous_accepts},
- {"tcp_bind", luv_tcp_bind},
- {"tcp_getpeername", luv_tcp_getpeername},
- {"tcp_getsockname", luv_tcp_getsockname},
- {"tcp_connect", luv_tcp_connect},
- {"tcp_write_queue_size", luv_write_queue_size},
-
- // pipe.c
- {"new_pipe", luv_new_pipe},
- {"pipe_open", luv_pipe_open},
- {"pipe_bind", luv_pipe_bind},
- {"pipe_connect", luv_pipe_connect},
- {"pipe_getsockname", luv_pipe_getsockname},
- {"pipe_getpeername", luv_pipe_getpeername},
- {"pipe_pending_instances", luv_pipe_pending_instances},
- {"pipe_pending_count", luv_pipe_pending_count},
- {"pipe_pending_type", luv_pipe_pending_type},
-
- // tty.c
- {"new_tty", luv_new_tty},
- {"tty_set_mode", luv_tty_set_mode},
- {"tty_reset_mode", luv_tty_reset_mode},
- {"tty_get_winsize", luv_tty_get_winsize},
-
- // udp.c
- {"new_udp", luv_new_udp},
- {"udp_open", luv_udp_open},
- {"udp_bind", luv_udp_bind},
- {"udp_getsockname", luv_udp_getsockname},
- {"udp_set_membership", luv_udp_set_membership},
- {"udp_set_multicast_loop", luv_udp_set_multicast_loop},
- {"udp_set_multicast_ttl", luv_udp_set_multicast_ttl},
- {"udp_set_multicast_interface", luv_udp_set_multicast_interface},
- {"udp_set_broadcast", luv_udp_set_broadcast},
- {"udp_set_ttl", luv_udp_set_ttl},
- {"udp_send", luv_udp_send},
- {"udp_try_send", luv_udp_try_send},
- {"udp_recv_start", luv_udp_recv_start},
- {"udp_recv_stop", luv_udp_recv_stop},
-
- // fs_event.c
- {"new_fs_event", luv_new_fs_event},
- {"fs_event_start", luv_fs_event_start},
- {"fs_event_stop", luv_fs_event_stop},
- {"fs_event_getpath", luv_fs_event_getpath},
-
- // fs_poll.c
- {"new_fs_poll", luv_new_fs_poll},
- {"fs_poll_start", luv_fs_poll_start},
- {"fs_poll_stop", luv_fs_poll_stop},
- {"fs_poll_getpath", luv_fs_poll_getpath},
-
- // fs.c
- {"fs_close", luv_fs_close},
- {"fs_open", luv_fs_open},
- {"fs_read", luv_fs_read},
- {"fs_unlink", luv_fs_unlink},
- {"fs_write", luv_fs_write},
- {"fs_mkdir", luv_fs_mkdir},
- {"fs_mkdtemp", luv_fs_mkdtemp},
- {"fs_rmdir", luv_fs_rmdir},
- {"fs_scandir", luv_fs_scandir},
- {"fs_scandir_next", luv_fs_scandir_next},
- {"fs_stat", luv_fs_stat},
- {"fs_fstat", luv_fs_fstat},
- {"fs_lstat", luv_fs_lstat},
- {"fs_rename", luv_fs_rename},
- {"fs_fsync", luv_fs_fsync},
- {"fs_fdatasync", luv_fs_fdatasync},
- {"fs_ftruncate", luv_fs_ftruncate},
- {"fs_sendfile", luv_fs_sendfile},
- {"fs_access", luv_fs_access},
- {"fs_chmod", luv_fs_chmod},
- {"fs_fchmod", luv_fs_fchmod},
- {"fs_utime", luv_fs_utime},
- {"fs_futime", luv_fs_futime},
- {"fs_link", luv_fs_link},
- {"fs_symlink", luv_fs_symlink},
- {"fs_readlink", luv_fs_readlink},
- {"fs_realpath", luv_fs_realpath},
- {"fs_chown", luv_fs_chown},
- {"fs_fchown", luv_fs_fchown},
-
- // dns.c
- {"getaddrinfo", luv_getaddrinfo},
- {"getnameinfo", luv_getnameinfo},
-
- // misc.c
- {"chdir", luv_chdir},
- {"os_homedir", luv_os_homedir},
- {"cpu_info", luv_cpu_info},
- {"cwd", luv_cwd},
- {"exepath", luv_exepath},
- {"get_process_title", luv_get_process_title},
- {"get_total_memory", luv_get_total_memory},
- {"get_free_memory", luv_get_free_memory},
- {"getpid", luv_getpid},
-#ifndef _WIN32
- {"getuid", luv_getuid},
- {"setuid", luv_setuid},
- {"getgid", luv_getgid},
- {"setgid", luv_setgid},
-#endif
- {"getrusage", luv_getrusage},
- {"guess_handle", luv_guess_handle},
- {"hrtime", luv_hrtime},
- {"interface_addresses", luv_interface_addresses},
- {"loadavg", luv_loadavg},
- {"resident_set_memory", luv_resident_set_memory},
- {"set_process_title", luv_set_process_title},
- {"uptime", luv_uptime},
- {"version", luv_version},
- {"version_string", luv_version_string},
-
- // thread.c
- {"new_thread", luv_new_thread},
- {"thread_equal", luv_thread_equal},
- {"thread_self", luv_thread_self},
- {"thread_join", luv_thread_join},
- {"sleep", luv_thread_sleep},
-
- // work.c
- {"new_work", luv_new_work},
- {"queue_work", luv_queue_work},
-
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_handle_methods[] = {
- // handle.c
- {"is_active", luv_is_active},
- {"is_closing", luv_is_closing},
- {"close", luv_close},
- {"ref", luv_ref},
- {"unref", luv_unref},
- {"has_ref", luv_has_ref},
- {"send_buffer_size", luv_send_buffer_size},
- {"recv_buffer_size", luv_recv_buffer_size},
- {"fileno", luv_fileno},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_async_methods[] = {
- {"send", luv_async_send},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_check_methods[] = {
- {"start", luv_check_start},
- {"stop", luv_check_stop},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_fs_event_methods[] = {
- {"start", luv_fs_event_start},
- {"stop", luv_fs_event_stop},
- {"getpath", luv_fs_event_getpath},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_fs_poll_methods[] = {
- {"start", luv_fs_poll_start},
- {"stop", luv_fs_poll_stop},
- {"getpath", luv_fs_poll_getpath},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_idle_methods[] = {
- {"start", luv_idle_start},
- {"stop", luv_idle_stop},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_stream_methods[] = {
- {"shutdown", luv_shutdown},
- {"listen", luv_listen},
- {"accept", luv_accept},
- {"read_start", luv_read_start},
- {"read_stop", luv_read_stop},
- {"write", luv_write},
- {"write2", luv_write2},
- {"try_write", luv_try_write},
- {"is_readable", luv_is_readable},
- {"is_writable", luv_is_writable},
- {"set_blocking", luv_stream_set_blocking},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_pipe_methods[] = {
- {"open", luv_pipe_open},
- {"bind", luv_pipe_bind},
- {"connect", luv_pipe_connect},
- {"getsockname", luv_pipe_getsockname},
- {"getpeername", luv_pipe_getpeername},
- {"pending_instances", luv_pipe_pending_instances},
- {"pending_count", luv_pipe_pending_count},
- {"pending_type", luv_pipe_pending_type},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_poll_methods[] = {
- {"start", luv_poll_start},
- {"stop", luv_poll_stop},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_prepare_methods[] = {
- {"start", luv_prepare_start},
- {"stop", luv_prepare_stop},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_process_methods[] = {
- {"kill", luv_process_kill},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_tcp_methods[] = {
- {"open", luv_tcp_open},
- {"nodelay", luv_tcp_nodelay},
- {"keepalive", luv_tcp_keepalive},
- {"simultaneous_accepts", luv_tcp_simultaneous_accepts},
- {"bind", luv_tcp_bind},
- {"getpeername", luv_tcp_getpeername},
- {"getsockname", luv_tcp_getsockname},
- {"connect", luv_tcp_connect},
- {"write_queue_size", luv_write_queue_size},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_timer_methods[] = {
- {"start", luv_timer_start},
- {"stop", luv_timer_stop},
- {"again", luv_timer_again},
- {"set_repeat", luv_timer_set_repeat},
- {"get_repeat", luv_timer_get_repeat},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_tty_methods[] = {
- {"set_mode", luv_tty_set_mode},
- {"get_winsize", luv_tty_get_winsize},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_udp_methods[] = {
- {"open", luv_udp_open},
- {"bind", luv_udp_bind},
- {"bindgetsockname", luv_udp_getsockname},
- {"set_membership", luv_udp_set_membership},
- {"set_multicast_loop", luv_udp_set_multicast_loop},
- {"set_multicast_ttl", luv_udp_set_multicast_ttl},
- {"set_multicast_interface", luv_udp_set_multicast_interface},
- {"set_broadcast", luv_udp_set_broadcast},
- {"set_ttl", luv_udp_set_ttl},
- {"send", luv_udp_send},
- {"try_send", luv_udp_try_send},
- {"recv_start", luv_udp_recv_start},
- {"recv_stop", luv_udp_recv_stop},
- {NULL, NULL}
-};
-
-static const luaL_Reg luv_signal_methods[] = {
- {"start", luv_signal_start},
- {"stop", luv_signal_stop},
- {NULL, NULL}
-};
-
-static void luv_handle_init(lua_State* L) {
-
- lua_newtable(L);
-#define XX(uc, lc) \
- luaL_newmetatable (L, "uv_"#lc); \
- lua_pushcfunction(L, luv_handle_tostring); \
- lua_setfield(L, -2, "__tostring"); \
- lua_pushcfunction(L, luv_handle_gc); \
- lua_setfield(L, -2, "__gc"); \
- luaL_newlib(L, luv_##lc##_methods); \
- luaL_setfuncs(L, luv_handle_methods, 0); \
- lua_setfield(L, -2, "__index"); \
- lua_pushboolean(L, 1); \
- lua_rawset(L, -3);
-
- UV_HANDLE_TYPE_MAP(XX)
-#undef XX
- lua_setfield(L, LUA_REGISTRYINDEX, "uv_handle");
-
- lua_newtable(L);
-
- luaL_getmetatable(L, "uv_pipe");
- lua_getfield(L, -1, "__index");
- luaL_setfuncs(L, luv_stream_methods, 0);
- lua_pop(L, 1);
- lua_pushboolean(L, 1);
- lua_rawset(L, -3);
-
- luaL_getmetatable(L, "uv_tcp");
- lua_getfield(L, -1, "__index");
- luaL_setfuncs(L, luv_stream_methods, 0);
- lua_pop(L, 1);
- lua_pushboolean(L, 1);
- lua_rawset(L, -3);
-
- luaL_getmetatable(L, "uv_tty");
- lua_getfield(L, -1, "__index");
- luaL_setfuncs(L, luv_stream_methods, 0);
- lua_pop(L, 1);
- lua_pushboolean(L, 1);
- lua_rawset(L, -3);
-
- lua_setfield(L, LUA_REGISTRYINDEX, "uv_stream");
-}
-
-LUALIB_API lua_State* luv_state(uv_loop_t* loop) {
- return loop->data;
-}
-
-// TODO: find out if storing this somehow in an upvalue is faster
-LUALIB_API uv_loop_t* luv_loop(lua_State* L) {
- uv_loop_t* loop;
- lua_pushstring(L, "uv_loop");
- lua_rawget(L, LUA_REGISTRYINDEX);
- loop = lua_touserdata(L, -1);
- lua_pop(L, 1);
- return loop;
-}
-
-static void walk_cb(uv_handle_t *handle, void *arg)
-{
- (void)arg;
- if (!uv_is_closing(handle)) {
- uv_close(handle, luv_close_cb);
- }
-}
-
-static int loop_gc(lua_State *L) {
- uv_loop_t* loop = luv_loop(L);
- // Call uv_close on every active handle
- uv_walk(loop, walk_cb, NULL);
- // Run the event loop until all handles are successfully closed
- while (uv_loop_close(loop)) {
- uv_run(loop, UV_RUN_DEFAULT);
- }
- return 0;
-}
-
-LUALIB_API int luaopen_luv (lua_State *L) {
-
- uv_loop_t* loop;
- int ret;
-
- // Setup the uv_loop meta table for a proper __gc
- luaL_newmetatable(L, "uv_loop.meta");
- lua_pushstring(L, "__gc");
- lua_pushcfunction(L, loop_gc);
- lua_settable(L, -3);
-
- loop = lua_newuserdata(L, sizeof(*loop));
- ret = uv_loop_init(loop);
- if (ret < 0) {
- return luaL_error(L, "%s: %s\n", uv_err_name(ret), uv_strerror(ret));
- }
- // setup the metatable for __gc
- luaL_getmetatable(L, "uv_loop.meta");
- lua_setmetatable(L, -2);
- // Tell the state how to find the loop.
- lua_pushstring(L, "uv_loop");
- lua_insert(L, -2);
- lua_rawset(L, LUA_REGISTRYINDEX);
- lua_pop(L, 1);
-
- // Tell the loop how to find the state.
- loop->data = L;
-
- luv_req_init(L);
- luv_handle_init(L);
- luv_thread_init(L);
- luv_work_init(L);
-
- luaL_newlib(L, luv_functions);
- luv_constants(L);
- lua_setfield(L, -2, "constants");
-
- return 1;
-}
diff --git a/3rdparty/luv/src/luv.h b/3rdparty/luv/src/luv.h
deleted file mode 100644
index 681384da363..00000000000
--- a/3rdparty/luv/src/luv.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#ifndef LUV_H
-#define LUV_H
-#include <lua.h>
-#include <lualib.h>
-#include <lauxlib.h>
-#include "uv.h"
-
-#include <string.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#if defined(_WIN32)
-# include <fcntl.h>
-# include <sys/types.h>
-# include <sys/stat.h>
-# ifndef __MINGW32__
-# define S_ISREG(x) (((x) & _S_IFMT) == _S_IFREG)
-# define S_ISDIR(x) (((x) & _S_IFMT) == _S_IFDIR)
-# define S_ISFIFO(x) (((x) & _S_IFMT) == _S_IFIFO)
-# define S_ISCHR(x) (((x) & _S_IFMT) == _S_IFCHR)
-# define S_ISBLK(x) 0
-# endif
-# define S_ISLNK(x) (((x) & S_IFLNK) == S_IFLNK)
-# define S_ISSOCK(x) 0
-#else
-# include <unistd.h>
-#endif
-
-#ifndef PATH_MAX
-#define PATH_MAX (8096)
-#endif
-
-#ifndef MAX_TITLE_LENGTH
-#define MAX_TITLE_LENGTH (8192)
-#endif
-
-#if LUA_VERSION_NUM < 502
-# define lua_rawlen lua_objlen
-/* lua_...uservalue: Something very different, but it should get the job done */
-# define lua_getuservalue lua_getfenv
-# define lua_setuservalue lua_setfenv
-# define luaL_newlib(L,l) (lua_newtable(L), luaL_register(L,NULL,l))
-# define luaL_setfuncs(L,l,n) (assert(n==0), luaL_register(L,NULL,l))
-# define lua_resume(L,F,n) lua_resume(L,n)
-# define lua_pushglobaltable(L) lua_pushvalue(L, LUA_GLOBALSINDEX)
-#endif
-
-/* There is a 1-1 relation between a lua_State and a uv_loop_t
- These helpers will give you one if you have the other
- These are exposed for extensions built with luv
- This allows luv to be used in multithreaded applications.
-*/
-LUALIB_API lua_State* luv_state(uv_loop_t* loop);
-/* All libuv callbacks will lua_call directly from this root-per-thread state
-*/
-LUALIB_API uv_loop_t* luv_loop(lua_State* L);
-
-/* This is the main hook to load the library.
- This can be called multiple times in a process as long
- as you use a different lua_State and thread for each.
-*/
-LUALIB_API int luaopen_luv (lua_State *L);
-
-#include "util.h"
-#include "lhandle.h"
-#include "lreq.h"
-
-/* From stream.c */
-static uv_stream_t* luv_check_stream(lua_State* L, int index);
-static void luv_alloc_cb(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf);
-static void luv_check_buf(lua_State *L, int idx, uv_buf_t *pbuf);
-static uv_buf_t* luv_prep_bufs(lua_State* L, int index, size_t *count);
-
-/* from tcp.c */
-static void parse_sockaddr(lua_State* L, struct sockaddr_storage* address, int addrlen);
-static void luv_connect_cb(uv_connect_t* req, int status);
-
-/* From fs.c */
-static void luv_push_stats_table(lua_State* L, const uv_stat_t* s);
-
-/* from constants.c */
-static int luv_af_string_to_num(const char* string);
-static const char* luv_af_num_to_string(const int num);
-static int luv_sock_string_to_num(const char* string);
-static const char* luv_sock_num_to_string(const int num);
-static int luv_sig_string_to_num(const char* string);
-static const char* luv_sig_num_to_string(const int num);
-
-typedef lua_State* (*luv_acquire_vm)();
-typedef void (*luv_release_vm)(lua_State* L);
-LUALIB_API void luv_set_thread_cb(luv_acquire_vm acquire, luv_release_vm release);
-
-#endif
diff --git a/3rdparty/luv/src/misc.c b/3rdparty/luv/src/misc.c
deleted file mode 100644
index 64c9e3d5822..00000000000
--- a/3rdparty/luv/src/misc.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include "luv.h"
-#ifdef _WIN32
-#include <process.h>
-#endif
-
-static int luv_guess_handle(lua_State* L) {
- uv_file file = luaL_checkinteger(L, 1);
- switch (uv_guess_handle(file)) {
-#define XX(uc, lc) case UV_##uc: lua_pushstring(L, #lc); break;
- UV_HANDLE_TYPE_MAP(XX)
-#undef XX
- case UV_FILE: lua_pushstring(L, "file"); break;
- default: return 0;
- }
- return 1;
-}
-
-static int luv_version(lua_State* L) {
- lua_pushinteger(L, uv_version());
- return 1;
-}
-
-static int luv_version_string(lua_State* L) {
- lua_pushstring(L, uv_version_string());
- return 1;
-}
-
-static int luv_get_process_title(lua_State* L) {
- char title[MAX_TITLE_LENGTH];
- int ret = uv_get_process_title(title, MAX_TITLE_LENGTH);
- if (ret < 0) return luv_error(L, ret);
- lua_pushstring(L, title);
- return 1;
-}
-
-static int luv_set_process_title(lua_State* L) {
- const char* title = luaL_checkstring(L, 1);
- int ret = uv_set_process_title(title);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_resident_set_memory(lua_State* L) {
- size_t rss;
- int ret = uv_resident_set_memory(&rss);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, rss);
- return 1;
-}
-
-static int luv_uptime(lua_State* L) {
- double uptime;
- int ret = uv_uptime(&uptime);
- if (ret < 0) return luv_error(L, ret);
- lua_pushnumber(L, uptime);
- return 1;
-}
-
-static void luv_push_timeval_table(lua_State* L, const uv_timeval_t* t) {
- lua_createtable(L, 0, 2);
- lua_pushinteger(L, t->tv_sec);
- lua_setfield(L, -2, "sec");
- lua_pushinteger(L, t->tv_usec);
- lua_setfield(L, -2, "usec");
-}
-
-static int luv_getrusage(lua_State* L) {
- uv_rusage_t rusage;
- int ret = uv_getrusage(&rusage);
- if (ret < 0) return luv_error(L, ret);
- lua_createtable(L, 0, 16);
- // user CPU time used
- luv_push_timeval_table(L, &rusage.ru_utime);
- lua_setfield(L, -2, "utime");
- // system CPU time used
- luv_push_timeval_table(L, &rusage.ru_stime);
- lua_setfield(L, -2, "stime");
- // maximum resident set size
- lua_pushinteger(L, rusage.ru_maxrss);
- lua_setfield(L, -2, "maxrss");
- // integral shared memory size
- lua_pushinteger(L, rusage.ru_ixrss);
- lua_setfield(L, -2, "ixrss");
- // integral unshared data size
- lua_pushinteger(L, rusage.ru_idrss);
- lua_setfield(L, -2, "idrss");
- // integral unshared stack size
- lua_pushinteger(L, rusage.ru_isrss);
- lua_setfield(L, -2, "isrss");
- // page reclaims (soft page faults)
- lua_pushinteger(L, rusage.ru_minflt);
- lua_setfield(L, -2, "minflt");
- // page faults (hard page faults)
- lua_pushinteger(L, rusage.ru_majflt);
- lua_setfield(L, -2, "majflt");
- // swaps
- lua_pushinteger(L, rusage.ru_nswap);
- lua_setfield(L, -2, "nswap");
- // block input operations
- lua_pushinteger(L, rusage.ru_inblock);
- lua_setfield(L, -2, "inblock");
- // block output operations
- lua_pushinteger(L, rusage.ru_oublock);
- lua_setfield(L, -2, "oublock");
- // IPC messages sent
- lua_pushinteger(L, rusage.ru_msgsnd);
- lua_setfield(L, -2, "msgsnd");
- // IPC messages received
- lua_pushinteger(L, rusage.ru_msgrcv);
- lua_setfield(L, -2, "msgrcv");
- // signals received
- lua_pushinteger(L, rusage.ru_nsignals);
- lua_setfield(L, -2, "nsignals");
- // voluntary context switches
- lua_pushinteger(L, rusage.ru_nvcsw);
- lua_setfield(L, -2, "nvcsw");
- // involuntary context switches
- lua_pushinteger(L, rusage.ru_nivcsw);
- lua_setfield(L, -2, "nivcsw");
- return 1;
-}
-
-static int luv_cpu_info(lua_State* L) {
- uv_cpu_info_t* cpu_infos;
- int count, i;
- int ret = uv_cpu_info(&cpu_infos, &count);
- if (ret < 0) return luv_error(L, ret);
- lua_newtable(L);
-
- for (i = 0; i < count; i++) {
- lua_newtable(L);
- lua_pushstring(L, cpu_infos[i].model);
- lua_setfield(L, -2, "model");
- lua_pushnumber(L, cpu_infos[i].speed);
- lua_setfield(L, -2, "speed");
- lua_newtable(L);
- lua_pushnumber(L, cpu_infos[i].cpu_times.user);
- lua_setfield(L, -2, "user");
- lua_pushnumber(L, cpu_infos[i].cpu_times.nice);
- lua_setfield(L, -2, "nice");
- lua_pushnumber(L, cpu_infos[i].cpu_times.sys);
- lua_setfield(L, -2, "sys");
- lua_pushnumber(L, cpu_infos[i].cpu_times.idle);
- lua_setfield(L, -2, "idle");
- lua_pushnumber(L, cpu_infos[i].cpu_times.irq);
- lua_setfield(L, -2, "irq");
- lua_setfield(L, -2, "times");
- lua_rawseti(L, -2, i + 1);
- }
-
- uv_free_cpu_info(cpu_infos, count);
- return 1;
-}
-
-static int luv_interface_addresses(lua_State* L) {
- uv_interface_address_t* interfaces;
- int count, i;
- char ip[INET6_ADDRSTRLEN];
- char netmask[INET6_ADDRSTRLEN];
-
- uv_interface_addresses(&interfaces, &count);
-
- lua_newtable(L);
-
- for (i = 0; i < count; i++) {
- lua_getfield(L, -1, interfaces[i].name);
- if (!lua_istable(L, -1)) {
- lua_pop(L, 1);
- lua_newtable(L);
- lua_pushvalue(L, -1);
- lua_setfield(L, -3, interfaces[i].name);
- }
- lua_newtable(L);
- lua_pushboolean(L, interfaces[i].is_internal);
- lua_setfield(L, -2, "internal");
-
- lua_pushlstring(L, interfaces[i].phys_addr, sizeof(interfaces[i].phys_addr));
- lua_setfield(L, -2, "mac");
-
- if (interfaces[i].address.address4.sin_family == AF_INET) {
- uv_ip4_name(&interfaces[i].address.address4, ip, sizeof(ip));
- uv_ip4_name(&interfaces[i].netmask.netmask4, netmask, sizeof(netmask));
- } else if (interfaces[i].address.address4.sin_family == AF_INET6) {
- uv_ip6_name(&interfaces[i].address.address6, ip, sizeof(ip));
- uv_ip6_name(&interfaces[i].netmask.netmask6, netmask, sizeof(netmask));
- } else {
- strncpy(ip, "<unknown sa family>", INET6_ADDRSTRLEN);
- strncpy(netmask, "<unknown sa family>", INET6_ADDRSTRLEN);
- }
- lua_pushstring(L, ip);
- lua_setfield(L, -2, "ip");
- lua_pushstring(L, netmask);
- lua_setfield(L, -2, "netmask");
-
- lua_pushstring(L, luv_af_num_to_string(interfaces[i].address.address4.sin_family));
- lua_setfield(L, -2, "family");
- lua_rawseti(L, -2, lua_rawlen (L, -2) + 1);
- lua_pop(L, 1);
- }
- uv_free_interface_addresses(interfaces, count);
- return 1;
-}
-
-static int luv_loadavg(lua_State* L) {
- double avg[3];
- uv_loadavg(avg);
- lua_pushnumber(L, avg[0]);
- lua_pushnumber(L, avg[1]);
- lua_pushnumber(L, avg[2]);
- return 3;
-}
-
-static int luv_exepath(lua_State* L) {
- size_t size = 2*PATH_MAX;
- char exe_path[2*PATH_MAX];
- int ret = uv_exepath(exe_path, &size);
- if (ret < 0) return luv_error(L, ret);
- lua_pushlstring(L, exe_path, size);
- return 1;
-}
-
-static int luv_cwd(lua_State* L) {
- size_t size = 2*PATH_MAX;
- char path[2*PATH_MAX];
- int ret = uv_cwd(path, &size);
- if (ret < 0) return luv_error(L, ret);
- lua_pushlstring(L, path, size);
- return 1;
-}
-
-static int luv_chdir(lua_State* L) {
- int ret = uv_chdir(luaL_checkstring(L, 1));
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_os_homedir(lua_State* L) {
- size_t size = 2*PATH_MAX;
- char homedir[2*PATH_MAX];
- int ret = uv_os_homedir(homedir, &size);
- if (ret < 0) return luv_error(L, ret);
- lua_pushlstring(L, homedir, size);
- return 1;
-}
-
-static int luv_get_total_memory(lua_State* L) {
- lua_pushnumber(L, uv_get_total_memory());
- return 1;
-}
-
-static int luv_get_free_memory(lua_State* L) {
- lua_pushnumber(L, uv_get_free_memory());
- return 1;
-}
-
-static int luv_hrtime(lua_State* L) {
- lua_pushnumber(L, uv_hrtime());
- return 1;
-}
-
-static int luv_getpid(lua_State* L){
- int pid = getpid();
- lua_pushinteger(L, pid);
- return 1;
-}
-
-#ifndef _WIN32
-static int luv_getuid(lua_State* L){
- int uid = getuid();
- lua_pushinteger(L, uid);
- return 1;
-}
-
-static int luv_getgid(lua_State* L){
- int gid = getgid();
- lua_pushinteger(L, gid);
- return 1;
-}
-
-static int luv_setuid(lua_State* L){
- int uid = luaL_checkinteger(L, 1);
- int r = setuid(uid);
- if (-1 == r) {
- luaL_error(L, "Error setting UID");
- }
- return 0;
-}
-
-static int luv_setgid(lua_State* L){
- int gid = luaL_checkinteger(L, 1);
- int r = setgid(gid);
- if (-1 == r) {
- luaL_error(L, "Error setting GID");
- }
- return 0;
-}
-#endif
diff --git a/3rdparty/luv/src/pipe.c b/3rdparty/luv/src/pipe.c
deleted file mode 100644
index b490c1597b3..00000000000
--- a/3rdparty/luv/src/pipe.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static uv_pipe_t* luv_check_pipe(lua_State* L, int index) {
- uv_pipe_t* handle = luv_checkudata(L, index, "uv_pipe");
- luaL_argcheck(L, handle->type == UV_NAMED_PIPE && handle->data, index, "Expected uv_pipe_t");
- return handle;
-}
-
-static int luv_new_pipe(lua_State* L) {
- uv_pipe_t* handle;
- int ipc, ret;
- luaL_checktype(L, 1, LUA_TBOOLEAN);
- ipc = lua_toboolean(L, 1);
- handle = luv_newuserdata(L, sizeof(*handle));
- ret = uv_pipe_init(luv_loop(L), handle, ipc);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- handle->data = luv_setup_handle(L);
- return 1;
-}
-
-static int luv_pipe_open(lua_State* L) {
- uv_pipe_t* handle = luv_check_pipe(L, 1);
- uv_file file = luaL_checkinteger(L, 2);
- int ret = uv_pipe_open(handle, file);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_pipe_bind(lua_State* L) {
- uv_pipe_t* handle = luv_check_pipe(L, 1);
- const char* name = luaL_checkstring(L, 2);
- int ret = uv_pipe_bind(handle, name);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_pipe_connect(lua_State* L) {
- uv_pipe_t* handle = luv_check_pipe(L, 1);
- const char* name = luaL_checkstring(L, 2);
- int ref = luv_check_continuation(L, 3);
- uv_connect_t* req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- uv_pipe_connect(req, handle, name, luv_connect_cb);
- return 1;
-}
-
-static int luv_pipe_getsockname(lua_State* L) {
- uv_pipe_t* handle = luv_check_pipe(L, 1);
- size_t len = 2*PATH_MAX;
- char buf[2*PATH_MAX];
- int ret = uv_pipe_getsockname(handle, buf, &len);
- if (ret < 0) return luv_error(L, ret);
- lua_pushlstring(L, buf, len);
- return 1;
-}
-
-static int luv_pipe_getpeername(lua_State* L) {
- uv_pipe_t* handle = luv_check_pipe(L, 1);
- size_t len = 2*PATH_MAX;
- char buf[2*PATH_MAX];
- int ret = uv_pipe_getpeername(handle, buf, &len);
- if (ret < 0) return luv_error(L, ret);
- lua_pushlstring(L, buf, len);
- return 1;
-}
-
-static int luv_pipe_pending_instances(lua_State* L) {
- uv_pipe_t* handle = luv_check_pipe(L, 1);
- int count = luaL_checkinteger(L, 2);
- uv_pipe_pending_instances(handle, count);
- return 0;
-}
-
-static int luv_pipe_pending_count(lua_State* L) {
- uv_pipe_t* handle = luv_check_pipe(L, 1);
- lua_pushinteger(L, uv_pipe_pending_count(handle));
- return 1;
-}
-
-static int luv_pipe_pending_type(lua_State* L) {
- uv_pipe_t* handle = luv_check_pipe(L, 1);
- uv_handle_type type = uv_pipe_pending_type(handle);
- const char* type_name;
- switch (type) {
-#define XX(uc, lc) \
- case UV_##uc: type_name = #lc; break;
- UV_HANDLE_TYPE_MAP(XX)
-#undef XX
- default: return 0;
- }
- lua_pushstring(L, type_name);
- return 1;
-}
diff --git a/3rdparty/luv/src/poll.c b/3rdparty/luv/src/poll.c
deleted file mode 100644
index e007c9f9634..00000000000
--- a/3rdparty/luv/src/poll.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static uv_poll_t* luv_check_poll(lua_State* L, int index) {
- uv_poll_t* handle = luv_checkudata(L, index, "uv_poll");
- luaL_argcheck(L, handle->type == UV_POLL && handle->data, index, "Expected uv_poll_t");
- return handle;
-}
-
-static int luv_new_poll(lua_State* L) {
- int fd = luaL_checkinteger(L, 1);
- uv_poll_t* handle = luv_newuserdata(L, sizeof(*handle));
- int ret = uv_poll_init(luv_loop(L), handle, fd);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- handle->data = luv_setup_handle(L);
- return 1;
-}
-
-static int luv_new_socket_poll(lua_State* L) {
- int fd = luaL_checkinteger(L, 1);
- uv_poll_t* handle = luv_newuserdata(L, sizeof(*handle));
- int ret = uv_poll_init_socket(luv_loop(L), handle, fd);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- handle->data = luv_setup_handle(L);
- return 1;
-}
-
-// These are the same order as uv_run_mode which also starts at 0
-static const char *const luv_pollevents[] = {
- "r", "w", "rw", NULL
-};
-
-static void luv_poll_cb(uv_poll_t* handle, int status, int events) {
- lua_State* L = luv_state(handle->loop);
- luv_handle_t* data = handle->data;
- const char* evtstr;
-
- if (status < 0) {
- fprintf(stderr, "%s: %s\n", uv_err_name(status), uv_strerror(status));
- lua_pushstring(L, uv_err_name(status));
- }
- else {
- lua_pushnil(L);
- }
-
- switch (events) {
- case UV_READABLE: evtstr = "r"; break;
- case UV_WRITABLE: evtstr = "w"; break;
- case UV_READABLE|UV_WRITABLE: evtstr = "rw"; break;
- default: evtstr = ""; break;
- }
- lua_pushstring(L, evtstr);
-
- luv_call_callback(L, data, LUV_POLL, 2);
-}
-
-static int luv_poll_start(lua_State* L) {
- uv_poll_t* handle = luv_check_poll(L, 1);
- int events, ret;
- switch (luaL_checkoption(L, 2, "rw", luv_pollevents)) {
- case 0: events = UV_READABLE; break;
- case 1: events = UV_WRITABLE; break;
- case 2: events = UV_READABLE | UV_WRITABLE; break;
- default: events = 0; /* unreachable */
- }
- luv_check_callback(L, handle->data, LUV_POLL, 3);
- ret = uv_poll_start(handle, events, luv_poll_cb);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_poll_stop(lua_State* L) {
- uv_poll_t* handle = luv_check_poll(L, 1);
- int ret = uv_poll_stop(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
diff --git a/3rdparty/luv/src/prepare.c b/3rdparty/luv/src/prepare.c
deleted file mode 100644
index 6577439a466..00000000000
--- a/3rdparty/luv/src/prepare.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static uv_prepare_t* luv_check_prepare(lua_State* L, int index) {
- uv_prepare_t* handle = luv_checkudata(L, index, "uv_prepare");
- luaL_argcheck(L, handle->type == UV_PREPARE && handle->data, index, "Expected uv_prepare_t");
- return handle;
-}
-
-static int luv_new_prepare(lua_State* L) {
- uv_prepare_t* handle = luv_newuserdata(L, sizeof(*handle));
- int ret = uv_prepare_init(luv_loop(L), handle);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- handle->data = luv_setup_handle(L);
- return 1;
-}
-
-static void luv_prepare_cb(uv_prepare_t* handle) {
- lua_State* L = luv_state(handle->loop);
- luv_handle_t* data = handle->data;
- luv_call_callback(L, data, LUV_PREPARE, 0);
-}
-
-static int luv_prepare_start(lua_State* L) {
- uv_prepare_t* handle = luv_check_prepare(L, 1);
- int ret;
- luv_check_callback(L, handle->data, LUV_PREPARE, 2);
- ret = uv_prepare_start(handle, luv_prepare_cb);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_prepare_stop(lua_State* L) {
- uv_prepare_t* handle = luv_check_prepare(L, 1);
- int ret = uv_prepare_stop(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
diff --git a/3rdparty/luv/src/process.c b/3rdparty/luv/src/process.c
deleted file mode 100644
index d939503868b..00000000000
--- a/3rdparty/luv/src/process.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static int luv_disable_stdio_inheritance(lua_State* L) {
- (void)L;
- uv_disable_stdio_inheritance();
- return 0;
-}
-
-static uv_process_t* luv_check_process(lua_State* L, int index) {
- uv_process_t* handle = luv_checkudata(L, index, "uv_process");
- luaL_argcheck(L, handle->type == UV_PROCESS && handle->data, index, "Expected uv_process_t");
- return handle;
-}
-
-static void exit_cb(uv_process_t* handle, int64_t exit_status, int term_signal) {
- lua_State* L = luv_state(handle->loop);
- luv_handle_t* data = handle->data;
- lua_pushinteger(L, exit_status);
- lua_pushinteger(L, term_signal);
- luv_call_callback(L, data, LUV_EXIT, 2);
-}
-
-static void luv_spawn_close_cb(uv_handle_t* handle) {
- lua_State *L = luv_state(handle->loop);
- luv_cleanup_handle(L, handle->data);
-}
-
-static void luv_clean_options(uv_process_options_t* options) {
- free(options->args);
- free(options->stdio);
- free(options->env);
-}
-
-static int luv_spawn(lua_State* L) {
- uv_process_t* handle;
- uv_process_options_t options;
- size_t i, len = 0;
- int ret;
-
- memset(&options, 0, sizeof(options));
- options.exit_cb = exit_cb;
- options.file = luaL_checkstring(L, 1);
- options.flags = 0;
-
- // Make sure the 2nd argument is a table
- luaL_checktype(L, 2, LUA_TTABLE);
-
- // get the args list
- lua_getfield(L, 2, "args");
- // +1 for inserted command at front
- if (lua_type(L, -1) == LUA_TTABLE) {
- len = 1 + lua_rawlen(L, -1);
- }
- else if (lua_type(L, -1) != LUA_TNIL) {
- luv_clean_options(&options);
- return luaL_argerror(L, 3, "args option must be table");
- }
- else {
- len = 1;
- }
- // +1 for null terminator at end
- options.args = malloc((len + 1) * sizeof(*options.args));
- if (!options.args) {
- luv_clean_options(&options);
- return luaL_error(L, "Problem allocating args");
- }
- options.args[0] = (char*)options.file;
- for (i = 1; i < len; ++i) {
- lua_rawgeti(L, -1, i);
- options.args[i] = (char*)lua_tostring(L, -1);
- lua_pop(L, 1);
- }
- options.args[len] = NULL;
- lua_pop(L, 1);
-
- // get the stdio list
- lua_getfield(L, 2, "stdio");
- if (lua_type(L, -1) == LUA_TTABLE) {
- options.stdio_count = len = lua_rawlen(L, -1);
- options.stdio = malloc(len * sizeof(*options.stdio));
- if (!options.stdio) {
- luv_clean_options(&options);
- return luaL_error(L, "Problem allocating stdio");
- }
- for (i = 0; i < len; ++i) {
- lua_rawgeti(L, -1, i + 1);
- // integers are assumed to be file descripters
- if (lua_type(L, -1) == LUA_TNUMBER) {
- options.stdio[i].flags = UV_INHERIT_FD;
- options.stdio[i].data.fd = lua_tointeger(L, -1);
- }
- // userdata is assumed to be a uv_stream_t instance
- else if (lua_type(L, -1) == LUA_TUSERDATA) {
- uv_os_fd_t fd;
- uv_stream_t* stream = luv_check_stream(L, -1);
- int err = uv_fileno((uv_handle_t*)stream, &fd);
- if (err == UV_EINVAL || err == UV_EBADF) {
- // stdin (fd 0) is read-only, stdout and stderr (fds 1 & 2) are
- // write-only, and all fds > 2 are read-write
- int flags = UV_CREATE_PIPE;
- if (i == 0 || i > 2)
- flags |= UV_READABLE_PIPE;
- if (i != 0)
- flags |= UV_WRITABLE_PIPE;
- options.stdio[i].flags = flags;
- }
- else {
- options.stdio[i].flags = UV_INHERIT_STREAM;
- }
- options.stdio[i].data.stream = stream;
- }
- else if (lua_type(L, -1) == LUA_TNIL) {
- options.stdio[i].flags = UV_IGNORE;
- }
- else {
- luv_clean_options(&options);
- return luaL_argerror(L, 2, "stdio table entries must be nil, uv_stream_t, or integer");
- }
- lua_pop(L, 1);
- }
- }
- else if (lua_type(L, -1) != LUA_TNIL) {
- luv_clean_options(&options);
- return luaL_argerror(L, 2, "stdio option must be table");
- }
- lua_pop(L, 1);
-
- // Get the env
- lua_getfield(L, 2, "env");
- if (lua_type(L, -1) == LUA_TTABLE) {
- len = lua_rawlen(L, -1);
- options.env = malloc((len + 1) * sizeof(*options.env));
- if (!options.env) {
- luv_clean_options(&options);
- return luaL_error(L, "Problem allocating env");
- }
- for (i = 0; i < len; ++i) {
- lua_rawgeti(L, -1, i + 1);
- options.env[i] = (char*)lua_tostring(L, -1);
- lua_pop(L, 1);
- }
- options.env[len] = NULL;
- }
- else if (lua_type(L, -1) != LUA_TNIL) {
- luv_clean_options(&options);
- return luaL_argerror(L, 2, "env option must be table");
- }
- lua_pop(L, 1);
-
- // Get the cwd
- lua_getfield(L, 2, "cwd");
- if (lua_type(L, -1) == LUA_TSTRING) {
- options.cwd = (char*)lua_tostring(L, -1);
- }
- else if (lua_type(L, -1) != LUA_TNIL) {
- luv_clean_options(&options);
- return luaL_argerror(L, 2, "cwd option must be string");
- }
- lua_pop(L, 1);
-
- // Check for uid
- lua_getfield(L, 2, "uid");
- if (lua_type(L, -1) == LUA_TNUMBER) {
- options.uid = lua_tointeger(L, -1);
- options.flags |= UV_PROCESS_SETUID;
- }
- else if (lua_type(L, -1) != LUA_TNIL) {
- luv_clean_options(&options);
- return luaL_argerror(L, 2, "uid option must be number");
- }
- lua_pop(L, 1);
-
- // Check for gid
- lua_getfield(L, 2, "gid");
- if (lua_type(L, -1) == LUA_TNUMBER) {
- options.gid = lua_tointeger(L, -1);
- options.flags |= UV_PROCESS_SETGID;
- }
- else if (lua_type(L, -1) != LUA_TNIL) {
- luv_clean_options(&options);
- return luaL_argerror(L, 2, "gid option must be number");
- }
- lua_pop(L, 1);
-
- // Check for the boolean flags
- lua_getfield(L, 2, "verbatim");
- if (lua_toboolean(L, -1)) {
- options.flags |= UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS;
- }
- lua_pop(L, 1);
- lua_getfield(L, 2, "detached");
- if (lua_toboolean(L, -1)) {
- options.flags |= UV_PROCESS_DETACHED;
- }
- lua_pop(L, 1);
- lua_getfield(L, 2, "hide");
- if (lua_toboolean(L, -1)) {
- options.flags |= UV_PROCESS_WINDOWS_HIDE;
- }
- lua_pop(L, 1);
-
- handle = luv_newuserdata(L, sizeof(*handle));
- handle->type = UV_PROCESS;
- handle->data = luv_setup_handle(L);
-
- if (!lua_isnoneornil(L, 3)) {
- luv_check_callback(L, handle->data, LUV_EXIT, 3);
- }
-
- ret = uv_spawn(luv_loop(L), handle, &options);
-
- luv_clean_options(&options);
- if (ret < 0) {
- /* The async callback is required here because luajit GC may reclaim the
- * luv handle before libuv is done closing it down.
- */
- uv_close((uv_handle_t*)handle, luv_spawn_close_cb);
- return luv_error(L, ret);
- }
- lua_pushinteger(L, handle->pid);
- return 2;
-}
-
-static int luv_parse_signal(lua_State* L, int slot) {
- if (lua_isnumber(L, slot)) {
- return lua_tonumber(L, slot);
- }
- if (lua_isstring(L, slot)) {
- return luv_sig_string_to_num(lua_tostring(L, slot));
- }
- return SIGTERM;
-}
-
-static int luv_process_kill(lua_State* L) {
- uv_process_t* handle = luv_check_process(L, 1);
- int signum = luv_parse_signal(L, 2);
- int ret = uv_process_kill(handle, signum);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_kill(lua_State* L) {
- int pid = luaL_checkinteger(L, 1);
- int signum = luv_parse_signal(L, 2);
- int ret = uv_kill(pid, signum);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
diff --git a/3rdparty/luv/src/req.c b/3rdparty/luv/src/req.c
deleted file mode 100644
index 6d7b7e4a30b..00000000000
--- a/3rdparty/luv/src/req.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static uv_req_t* luv_check_req(lua_State* L, int index) {
- uv_req_t* req = luaL_checkudata(L, index, "uv_req");
- luaL_argcheck(L, req->data, index, "Expected uv_req_t");
- return req;
-}
-
-static int luv_req_tostring(lua_State* L) {
- uv_req_t* req = luaL_checkudata(L, 1, "uv_req");
- switch (req->type) {
-#define XX(uc, lc) case UV_##uc: lua_pushfstring(L, "uv_"#lc"_t: %p", req); break;
- UV_REQ_TYPE_MAP(XX)
-#undef XX
- default: lua_pushfstring(L, "uv_req_t: %p", req); break;
- }
- return 1;
-}
-
-static void luv_req_init(lua_State* L) {
- luaL_newmetatable (L, "uv_req");
- lua_pushcfunction(L, luv_req_tostring);
- lua_setfield(L, -2, "__tostring");
- lua_pop(L, 1);
-}
-
-// Metamethod to allow storing anything in the userdata's environment
-static int luv_cancel(lua_State* L) {
- uv_req_t* req = luv_check_req(L, 1);
- int ret = uv_cancel(req);
- if (ret < 0) return luv_error(L, ret);
- luv_cleanup_req(L, req->data);
- req->data = NULL;
- lua_pushinteger(L, ret);
- return 1;
-}
diff --git a/3rdparty/luv/src/schema.c b/3rdparty/luv/src/schema.c
deleted file mode 100644
index e7b82e11d66..00000000000
--- a/3rdparty/luv/src/schema.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
diff --git a/3rdparty/luv/src/signal.c b/3rdparty/luv/src/signal.c
deleted file mode 100644
index 48ace2bf601..00000000000
--- a/3rdparty/luv/src/signal.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static uv_signal_t* luv_check_signal(lua_State* L, int index) {
- uv_signal_t* handle = luv_checkudata(L, index, "uv_signal");
- luaL_argcheck(L, handle->type == UV_SIGNAL && handle->data, index, "Expected uv_signal_t");
- return handle;
-}
-
-static int luv_new_signal(lua_State* L) {
- uv_signal_t* handle = luv_newuserdata(L, sizeof(*handle));
- int ret = uv_signal_init(luv_loop(L), handle);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- handle->data = luv_setup_handle(L);
- return 1;
-}
-
-static void luv_signal_cb(uv_signal_t* handle, int signum) {
- lua_State* L = luv_state(handle->loop);
- luv_handle_t* data = handle->data;
- lua_pushstring(L, luv_sig_num_to_string(signum));
- luv_call_callback(L, data, LUV_SIGNAL, 1);
-}
-
-static int luv_signal_start(lua_State* L) {
- uv_signal_t* handle = luv_check_signal(L, 1);
- int signum, ret;
- if (lua_isnumber(L, 2)) {
- signum = lua_tointeger(L, 2);
- }
- else if (lua_isstring(L, 2)) {
- signum = luv_sig_string_to_num(luaL_checkstring(L, 2));
- luaL_argcheck(L, signum, 2, "Invalid Signal name");
- }
- else {
- return luaL_argerror(L, 2, "Missing Signal name");
- }
-
- if (!lua_isnoneornil(L, 3)) {
- luv_check_callback(L, handle->data, LUV_SIGNAL, 3);
- }
- ret = uv_signal_start(handle, luv_signal_cb, signum);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_signal_stop(lua_State* L) {
- uv_signal_t* handle = luv_check_signal(L, 1);
- int ret = uv_signal_stop(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
diff --git a/3rdparty/luv/src/stream.c b/3rdparty/luv/src/stream.c
deleted file mode 100644
index 5009e04f097..00000000000
--- a/3rdparty/luv/src/stream.c
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static void luv_check_buf(lua_State *L, int idx, uv_buf_t *pbuf) {
- size_t len;
- pbuf->base = (char*)luaL_checklstring(L, idx, &len);
- pbuf->len = len;
-}
-
-static uv_stream_t* luv_check_stream(lua_State* L, int index) {
- int isStream;
- uv_stream_t* handle;
- if (!(handle = *(void**) lua_touserdata(L, index))) { goto fail; }
- lua_getfield(L, LUA_REGISTRYINDEX, "uv_stream");
- lua_getmetatable(L, index < 0 ? index - 1 : index);
- lua_rawget(L, -2);
- isStream = lua_toboolean(L, -1);
- lua_pop(L, 2);
- if (isStream) { return handle; }
- fail: luaL_argerror(L, index, "Expected uv_stream userdata");
- return NULL;
-}
-
-static void luv_shutdown_cb(uv_shutdown_t* req, int status) {
- lua_State* L = luv_state(req->handle->loop);
- luv_status(L, status);
- luv_fulfill_req(L, req->data, 1);
- luv_cleanup_req(L, req->data);
- req->data = NULL;
-}
-
-static int luv_shutdown(lua_State* L) {
- uv_stream_t* handle = luv_check_stream(L, 1);
- int ref = luv_check_continuation(L, 2);
- uv_shutdown_t* req = lua_newuserdata(L, sizeof(*req));
- int ret;
- req->data = luv_setup_req(L, ref);
- ret = uv_shutdown(req, handle, luv_shutdown_cb);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- return 1;
-}
-
-static void luv_connection_cb(uv_stream_t* handle, int status) {
- lua_State* L = luv_state(handle->loop);
- luv_status(L, status);
- luv_call_callback(L, handle->data, LUV_CONNECTION, 1);
-}
-
-static int luv_listen(lua_State* L) {
- uv_stream_t* handle = luv_check_stream(L, 1);
- int backlog = luaL_checkinteger(L, 2);
- int ret;
- luv_check_callback(L, handle->data, LUV_CONNECTION, 3);
- ret = uv_listen(handle, backlog, luv_connection_cb);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_accept(lua_State* L) {
- uv_stream_t* server = luv_check_stream(L, 1);
- uv_stream_t* client = luv_check_stream(L, 2);
- int ret = uv_accept(server, client);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static void luv_alloc_cb(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf) {
- (void)handle;
- buf->base = malloc(suggested_size);
- assert(buf->base);
- buf->len = suggested_size;
-}
-
-static void luv_read_cb(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf) {
- lua_State* L = luv_state(handle->loop);
- int nargs;
-
- if (nread > 0) {
- lua_pushnil(L);
- lua_pushlstring(L, buf->base, nread);
- nargs = 2;
- }
-
- free(buf->base);
- if (nread == 0) return;
-
- if (nread == UV_EOF) {
- nargs = 0;
- }
- else if (nread < 0) {
- luv_status(L, nread);
- nargs = 1;
- }
-
- luv_call_callback(L, handle->data, LUV_READ, nargs);
-}
-
-static int luv_read_start(lua_State* L) {
- uv_stream_t* handle = luv_check_stream(L, 1);
- int ret;
- luv_check_callback(L, handle->data, LUV_READ, 2);
- ret = uv_read_start(handle, luv_alloc_cb, luv_read_cb);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_read_stop(lua_State* L) {
- uv_stream_t* handle = luv_check_stream(L, 1);
- int ret = uv_read_stop(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static void luv_write_cb(uv_write_t* req, int status) {
- lua_State* L = luv_state(req->handle->loop);
- luv_status(L, status);
- luv_fulfill_req(L, req->data, 1);
- luv_cleanup_req(L, req->data);
- req->data = NULL;
-}
-
-static uv_buf_t* luv_prep_bufs(lua_State* L, int index, size_t *count) {
- uv_buf_t *bufs;
- size_t i;
- *count = lua_rawlen(L, index);
- bufs = malloc(sizeof(uv_buf_t) * *count);
- for (i = 0; i < *count; ++i) {
- lua_rawgeti(L, index, i + 1);
- luv_check_buf(L, -1, &bufs[i]);
- lua_pop(L, 1);
- }
- return bufs;
-}
-
-static int luv_write(lua_State* L) {
- uv_stream_t* handle = luv_check_stream(L, 1);
- uv_write_t* req;
- int ret, ref;
- ref = luv_check_continuation(L, 3);
- req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- if (lua_istable(L, 2)) {
- size_t count;
- uv_buf_t *bufs = luv_prep_bufs(L, 2, &count);
- ret = uv_write(req, handle, bufs, count, luv_write_cb);
- free(bufs);
- }
- else if (lua_isstring(L, 2)) {
- uv_buf_t buf;
- luv_check_buf(L, 2, &buf);
- ret = uv_write(req, handle, &buf, 1, luv_write_cb);
- }
- else {
- return luaL_argerror(L, 2, "data must be string or table of strings");
- }
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- lua_pushvalue(L, 2);
- ((luv_req_t*)req->data)->data_ref = luaL_ref(L, LUA_REGISTRYINDEX);
- return 1;
-}
-
-static int luv_write2(lua_State* L) {
- uv_stream_t* handle = luv_check_stream(L, 1);
- uv_write_t* req;
- int ret, ref;
- uv_stream_t* send_handle;
- send_handle = luv_check_stream(L, 3);
- ref = luv_check_continuation(L, 4);
- req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- if (lua_istable(L, 2)) {
- size_t count;
- uv_buf_t *bufs = luv_prep_bufs(L, 2, &count);
- ret = uv_write2(req, handle, bufs, count, send_handle, luv_write_cb);
- free(bufs);
- }
- else if (lua_isstring(L, 2)) {
- uv_buf_t buf;
- luv_check_buf(L, 2, &buf);
- ret = uv_write2(req, handle, &buf, 1, send_handle, luv_write_cb);
- }
- else {
- return luaL_argerror(L, 2, "data must be string or table of strings");
- }
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- lua_pushvalue(L, 2);
- ((luv_req_t*)req->data)->data_ref = luaL_ref(L, LUA_REGISTRYINDEX);
- return 1;
-}
-
-static int luv_try_write(lua_State* L) {
- uv_stream_t* handle = luv_check_stream(L, 1);
- int ret;
- if (lua_istable(L, 2)) {
- size_t count;
- uv_buf_t *bufs = luv_prep_bufs(L, 2, &count);
- ret = uv_try_write(handle, bufs, count);
- free(bufs);
- }
- else if (lua_isstring(L, 2)) {
- uv_buf_t buf;
- luv_check_buf(L, 2, &buf);
- ret = uv_try_write(handle, &buf, 1);
- }
- else {
- return luaL_argerror(L, 2, "data must be string or table of strings");
- }
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_is_readable(lua_State* L) {
- uv_stream_t* handle = luv_check_stream(L, 1);
- lua_pushboolean(L, uv_is_readable(handle));
- return 1;
-}
-
-static int luv_is_writable(lua_State* L) {
- uv_stream_t* handle = luv_check_stream(L, 1);
- lua_pushboolean(L, uv_is_writable(handle));
- return 1;
-}
-
-static int luv_stream_set_blocking(lua_State* L) {
- uv_stream_t* handle = luv_check_stream(L, 1);
- int blocking, ret;
- luaL_checktype(L, 2, LUA_TBOOLEAN);
- blocking = lua_toboolean(L, 2);
- ret = uv_stream_set_blocking(handle, blocking);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
diff --git a/3rdparty/luv/src/tcp.c b/3rdparty/luv/src/tcp.c
deleted file mode 100644
index 7ffef5ae763..00000000000
--- a/3rdparty/luv/src/tcp.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static uv_tcp_t* luv_check_tcp(lua_State* L, int index) {
- uv_tcp_t* handle = luv_checkudata(L, index, "uv_tcp");
- luaL_argcheck(L, handle->type == UV_TCP && handle->data, index, "Expected uv_tcp_t");
- return handle;
-}
-
-static int luv_new_tcp(lua_State* L) {
- uv_tcp_t* handle = luv_newuserdata(L, sizeof(*handle));
- int ret = uv_tcp_init(luv_loop(L), handle);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- handle->data = luv_setup_handle(L);
- return 1;
-}
-
-static int luv_tcp_open(lua_State* L) {
- uv_tcp_t* handle = luv_check_tcp(L, 1);
- uv_os_sock_t sock = luaL_checkinteger(L, 2);
- int ret = uv_tcp_open(handle, sock);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_tcp_nodelay(lua_State* L) {
- uv_tcp_t* handle = luv_check_tcp(L, 1);
- int ret, enable;
- luaL_checktype(L, 2, LUA_TBOOLEAN);
- enable = lua_toboolean(L, 2);
- ret = uv_tcp_nodelay(handle, enable);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_tcp_keepalive(lua_State* L) {
- uv_tcp_t* handle = luv_check_tcp(L, 1);
- int ret, enable;
- unsigned int delay = 0;
- luaL_checktype(L, 2, LUA_TBOOLEAN);
- enable = lua_toboolean(L, 2);
- if (enable) {
- delay = luaL_checkinteger(L, 3);
- }
- ret = uv_tcp_keepalive(handle, enable, delay);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_tcp_simultaneous_accepts(lua_State* L) {
- uv_tcp_t* handle = luv_check_tcp(L, 1);
- int ret, enable;
- luaL_checktype(L, 2, LUA_TBOOLEAN);
- enable = lua_toboolean(L, 2);
- ret = uv_tcp_simultaneous_accepts(handle, enable);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_tcp_bind(lua_State* L) {
- uv_tcp_t* handle = luv_check_tcp(L, 1);
- const char* host = luaL_checkstring(L, 2);
- int port = luaL_checkinteger(L, 3);
- unsigned int flags = 0;
- struct sockaddr_storage addr;
- int ret;
- if (uv_ip4_addr(host, port, (struct sockaddr_in*)&addr) &&
- uv_ip6_addr(host, port, (struct sockaddr_in6*)&addr)) {
- return luaL_error(L, "Invalid IP address or port [%s:%d]", host, port);
- }
- if (lua_type(L, 4) == LUA_TTABLE) {
- lua_getfield(L, 4, "ipv6only");
- if (lua_toboolean(L, -1)) flags |= UV_TCP_IPV6ONLY;
- lua_pop(L, 1);
- }
- ret = uv_tcp_bind(handle, (struct sockaddr*)&addr, flags);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static void parse_sockaddr(lua_State* L, struct sockaddr_storage* address, int addrlen) {
- char ip[INET6_ADDRSTRLEN];
- int port = 0;
- lua_newtable(L);
- if (address->ss_family == AF_INET) {
- struct sockaddr_in* addrin = (struct sockaddr_in*)address;
- uv_inet_ntop(AF_INET, &(addrin->sin_addr), ip, addrlen);
- port = ntohs(addrin->sin_port);
- } else if (address->ss_family == AF_INET6) {
- struct sockaddr_in6* addrin6 = (struct sockaddr_in6*)address;
- uv_inet_ntop(AF_INET6, &(addrin6->sin6_addr), ip, addrlen);
- port = ntohs(addrin6->sin6_port);
- }
-
- lua_pushstring(L, luv_af_num_to_string(address->ss_family));
- lua_setfield(L, -2, "family");
- lua_pushinteger(L, port);
- lua_setfield(L, -2, "port");
- lua_pushstring(L, ip);
- lua_setfield(L, -2, "ip");
-}
-
-static int luv_tcp_getsockname(lua_State* L) {
- uv_tcp_t* handle = luv_check_tcp(L, 1);
- struct sockaddr_storage address;
- int addrlen = sizeof(address);
- int ret = uv_tcp_getsockname(handle, (struct sockaddr*)&address, &addrlen);
- if (ret < 0) return luv_error(L, ret);
- parse_sockaddr(L, &address, addrlen);
- return 1;
-}
-
-static int luv_tcp_getpeername(lua_State* L) {
- uv_tcp_t* handle = luv_check_tcp(L, 1);
- struct sockaddr_storage address;
- int addrlen = sizeof(address);
- int ret = uv_tcp_getpeername(handle, (struct sockaddr*)&address, &addrlen);
- if (ret < 0) return luv_error(L, ret);
- parse_sockaddr(L, &address, addrlen);
- return 1;
-}
-
-
-static void luv_connect_cb(uv_connect_t* req, int status) {
- lua_State* L = luv_state(req->handle->loop);
- luv_status(L, status);
- luv_fulfill_req(L, req->data, 1);
- luv_cleanup_req(L, req->data);
- req->data = NULL;
-}
-
-static int luv_write_queue_size(lua_State* L) {
- uv_tcp_t* handle = luv_check_tcp(L, 1);
- lua_pushinteger(L, handle->write_queue_size);
- return 1;
-}
-
-static int luv_tcp_connect(lua_State* L) {
- uv_tcp_t* handle = luv_check_tcp(L, 1);
- const char* host = luaL_checkstring(L, 2);
- int port = luaL_checkinteger(L, 3);
- struct sockaddr_storage addr;
- uv_connect_t* req;
- int ret, ref;
- if (uv_ip4_addr(host, port, (struct sockaddr_in*)&addr) &&
- uv_ip6_addr(host, port, (struct sockaddr_in6*)&addr)) {
- return luaL_error(L, "Invalid IP address or port [%s:%d]", host, port);
- }
- ref = luv_check_continuation(L, 4);
-
- req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- ret = uv_tcp_connect(req, handle, (struct sockaddr*)&addr, luv_connect_cb);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- return 1;
-}
diff --git a/3rdparty/luv/src/thread.c b/3rdparty/luv/src/thread.c
deleted file mode 100644
index cc53011e6ed..00000000000
--- a/3rdparty/luv/src/thread.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
-* Copyright 2014 The Luvit Authors. All Rights Reserved.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-*/
-#include "luv.h"
-#include "lthreadpool.h"
-
-typedef struct {
- uv_thread_t handle;
- char* code;
- int len;
- int argc;
- luv_thread_arg_t arg;
-} luv_thread_t;
-
-static luv_acquire_vm acquire_vm_cb = NULL;
-static luv_release_vm release_vm_cb = NULL;
-
-static lua_State* luv_thread_acquire_vm() {
- lua_State* L = luaL_newstate();
-
- // Add in the lua standard libraries
- luaL_openlibs(L);
-
- // Get package.loaded, so we can store uv in it.
- lua_getglobal(L, "package");
- lua_getfield(L, -1, "loaded");
- lua_remove(L, -2); // Remove package
-
- // Store uv module definition at loaded.uv
- luaopen_luv(L);
- lua_setfield(L, -2, "luv");
- lua_pop(L, 1);
-
- return L;
-}
-
-static void luv_thread_release_vm(lua_State* L) {
- lua_close(L);
-}
-
-static int luv_thread_arg_set(lua_State* L, luv_thread_arg_t* args, int idx, int top, int flag)
-{
- int i;
- idx = idx > 0 ? idx : 1;
- i = idx;
- while (i <= top && i <= LUV_THREAD_MAXNUM_ARG + idx)
- {
- luv_val_t *arg = args->argv + i - idx;
- arg->type = lua_type(L, i);
- switch (arg->type)
- {
- case LUA_TNIL:
- break;
- case LUA_TBOOLEAN:
- arg->val.boolean = lua_toboolean(L, i);
- break;
- case LUA_TNUMBER:
- arg->val.num = lua_tonumber(L, i);
- break;
- case LUA_TLIGHTUSERDATA:
- arg->val.userdata = lua_touserdata(L, i);
- break;
- case LUA_TSTRING:
- {
- const char* p = lua_tolstring(L, i, &arg->val.str.len);
- arg->val.str.base = malloc(arg->val.str.len);
- if (arg->val.str.base == NULL)
- {
- perror("out of memory");
- return 0;
- }
- memcpy((void*)arg->val.str.base, p, arg->val.str.len);
- break;
- }
- case LUA_TUSERDATA:
- if (flag == 1) {
- arg->val.userdata = luv_check_handle(L, i);
- break;
- }
- default:
- fprintf(stderr, "Error: thread arg not support type '%s' at %d",
- luaL_typename(L, arg->type), i);
- exit(-1);
- break;
- }
- i++;
- }
- args->argc = i - idx;
- return args->argc;
-}
-
-static void luv_thread_arg_clear(luv_thread_arg_t* args) {
- int i;
- for (i = 0; i < args->argc; i++)
- {
- if (args->argv[i].type == LUA_TSTRING)
- {
- free((void*)args->argv[i].val.str.base);
- }
- }
- memset(args, 0, sizeof(*args));
- args->argc = 0;
-}
-
-static void luv_thread_setup_handle(lua_State* L, uv_handle_t* handle) {
- *(void**) lua_newuserdata(L, sizeof(void*)) = handle;
-
-#define XX(uc, lc) case UV_##uc: \
- luaL_getmetatable(L, "uv_"#lc); \
- break;
- switch (handle->type) {
- UV_HANDLE_TYPE_MAP(XX)
- default:
- luaL_error(L, "Unknown handle type");
- }
-#undef XX
-
- lua_setmetatable(L, -2);
-}
-
-static int luv_thread_arg_push(lua_State* L, const luv_thread_arg_t* args) {
- int i = 0;
- while (i < args->argc)
- {
- const luv_val_t* arg = args->argv + i;
- switch (arg->type)
- {
- case LUA_TNIL:
- lua_pushnil(L);
- break;
- case LUA_TBOOLEAN:
- lua_pushboolean(L, arg->val.boolean);
- break;
- case LUA_TLIGHTUSERDATA:
- lua_pushlightuserdata(L, arg->val.userdata);
- break;
- case LUA_TNUMBER:
- lua_pushnumber(L, arg->val.num);
- break;
- case LUA_TSTRING:
- lua_pushlstring(L, arg->val.str.base, arg->val.str.len);
- break;
- case LUA_TUSERDATA:
- luv_thread_setup_handle(L, arg->val.userdata);
- break;
- default:
- fprintf(stderr, "Error: thread arg not support type %s at %d",
- luaL_typename(L, arg->type), i + 1);
- }
- i++;
- };
- return i;
-}
-
-int thread_dump(lua_State* L, const void* p, size_t sz, void* B)
-{
- (void)L;
- luaL_addlstring((luaL_Buffer*) B, (const char*) p, sz);
- return 0;
-}
-
-static const char* luv_thread_dumped(lua_State* L, int idx, size_t* l) {
- if (lua_isstring(L, idx)) {
- return lua_tolstring(L, idx, l);
- } else {
- const char* buff = NULL;
- int top = lua_gettop(L);
- luaL_Buffer b;
- luaL_checktype(L, idx, LUA_TFUNCTION);
- lua_pushvalue(L, idx);
- luaL_buffinit(L, &b);
-#if LUA_VERSION_NUM>=503
- int test_lua_dump = (lua_dump(L, thread_dump, &b, 1) == 0);
-#else
- int test_lua_dump = (lua_dump(L, thread_dump, &b) == 0);
-#endif
- if (test_lua_dump) {
- luaL_pushresult(&b);
- buff = lua_tolstring(L, -1, l);
- } else
- luaL_error(L, "Error: unable to dump given function");
- lua_settop(L, top);
-
- return buff;
- }
-}
-
-static luv_thread_t* luv_check_thread(lua_State* L, int index)
-{
- luv_thread_t* thread = luaL_checkudata(L, index, "uv_thread");
- return thread;
-}
-
-static int luv_thread_gc(lua_State* L) {
- luv_thread_t* tid = luv_check_thread(L, 1);
- free(tid->code);
- tid->code = NULL;
- tid->len = 0;
- luv_thread_arg_clear(&tid->arg);
- return 0;
-}
-
-static int luv_thread_tostring(lua_State* L)
-{
- luv_thread_t* thd = luv_check_thread(L, 1);
- lua_pushfstring(L, "uv_thread_t: %p", thd->handle);
- return 1;
-}
-
-static void luv_thread_cb(void* varg) {
- luv_thread_t* thd = (luv_thread_t*)varg;
- lua_State* L = acquire_vm_cb();
- if (luaL_loadbuffer(L, thd->code, thd->len, "=thread") == 0)
- {
- int top = lua_gettop(L);
- int i = luv_thread_arg_push(L, &thd->arg);
-
- for (i = 0; i < thd->arg.argc; i++) {
- if (thd->arg.argv[i].type == LUA_TUSERDATA) {
- lua_pushlightuserdata(L, thd->arg.argv[i].val.userdata);
- lua_pushvalue(L, top + i + 1);
- lua_rawset(L, LUA_REGISTRYINDEX);
- }
- }
-
- if (lua_pcall(L, i, 0, 0)) {
- fprintf(stderr, "Uncaught Error in thread: %s\n", lua_tostring(L, -1));
- }
-
- for (i = 0; i < thd->arg.argc; i++) {
- if (thd->arg.argv[i].type == LUA_TUSERDATA) {
- lua_pushlightuserdata(L, thd->arg.argv[i].val.userdata);
- lua_rawget(L, LUA_REGISTRYINDEX);
- lua_pushnil(L);
- lua_setmetatable(L, -2);
- lua_pop(L, 1);
-
- lua_pushlightuserdata(L, thd->arg.argv[i].val.userdata);
- lua_pushnil(L);
- lua_rawset(L, LUA_REGISTRYINDEX);
- }
- }
-
- } else {
- fprintf(stderr, "Uncaught Error: %s\n", lua_tostring(L, -1));
- }
- release_vm_cb(L);
-}
-
-static int luv_new_thread(lua_State* L) {
- int ret;
- size_t len;
- const char* buff;
- luv_thread_t* thread;
- thread = lua_newuserdata(L, sizeof(*thread));
- memset(thread, 0, sizeof(*thread));
- luaL_getmetatable(L, "uv_thread");
- lua_setmetatable(L, -2);
-
- buff = luv_thread_dumped(L, 1, &len);
-
- thread->argc = luv_thread_arg_set(L, &thread->arg, 2, lua_gettop(L) - 1, 1);
- thread->len = len;
- thread->code = malloc(thread->len);
- memcpy(thread->code, buff, len);
-
- ret = uv_thread_create(&thread->handle, luv_thread_cb, thread);
- if (ret < 0) return luv_error(L, ret);
-
- return 1;
-}
-
-static int luv_thread_join(lua_State* L) {
- luv_thread_t* tid = luv_check_thread(L, 1);
- int ret = uv_thread_join(&tid->handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushboolean(L, 1);
- return 1;
-}
-
-static int luv_thread_self(lua_State* L)
-{
- luv_thread_t* thread;
- uv_thread_t t = uv_thread_self();
- thread = lua_newuserdata(L, sizeof(*thread));
- memset(thread, 0, sizeof(*thread));
- memcpy(&thread->handle, &t, sizeof(t));
- luaL_getmetatable(L, "uv_thread");
- lua_setmetatable(L, -2);
- return 1;
-}
-
-static int luv_thread_equal(lua_State* L) {
- luv_thread_t* t1 = luv_check_thread(L, 1);
- luv_thread_t* t2 = luv_check_thread(L, 2);
- int ret = uv_thread_equal(&t1->handle, &t2->handle);
- lua_pushboolean(L, ret);
- return 1;
-}
-
-/* Pause the calling thread for a number of milliseconds. */
-static int luv_thread_sleep(lua_State* L) {
-#ifdef _WIN32
- DWORD msec = luaL_checkinteger(L, 1);
- Sleep(msec);
-#else
- lua_Integer msec = luaL_checkinteger(L, 1);
- usleep(msec * 1000);
-#endif
- return 0;
-}
-
-static const luaL_Reg luv_thread_methods[] = {
- {"equal", luv_thread_equal},
- {"join", luv_thread_join},
- {NULL, NULL}
-};
-
-static void luv_thread_init(lua_State* L) {
- luaL_newmetatable(L, "uv_thread");
- lua_pushcfunction(L, luv_thread_tostring);
- lua_setfield(L, -2, "__tostring");
- lua_pushcfunction(L, luv_thread_equal);
- lua_setfield(L, -2, "__eq");
- lua_pushcfunction(L, luv_thread_gc);
- lua_setfield(L, -2, "__gc");
- lua_newtable(L);
- luaL_setfuncs(L, luv_thread_methods, 0);
- lua_setfield(L, -2, "__index");
- lua_pop(L, 1);
-
- if (acquire_vm_cb == NULL) acquire_vm_cb = luv_thread_acquire_vm;
- if (release_vm_cb == NULL) release_vm_cb = luv_thread_release_vm;
-}
-
-LUALIB_API void luv_set_thread_cb(luv_acquire_vm acquire, luv_release_vm release)
-{
- acquire_vm_cb = acquire;
- release_vm_cb = release;
-}
diff --git a/3rdparty/luv/src/timer.c b/3rdparty/luv/src/timer.c
deleted file mode 100644
index b283f1fc8b2..00000000000
--- a/3rdparty/luv/src/timer.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static uv_timer_t* luv_check_timer(lua_State* L, int index) {
- uv_timer_t* handle = luv_checkudata(L, index, "uv_timer");
- luaL_argcheck(L, handle->type == UV_TIMER && handle->data, index, "Expected uv_timer_t");
- return handle;
-}
-
-static int luv_new_timer(lua_State* L) {
- uv_timer_t* handle = luv_newuserdata(L, sizeof(*handle));
- int ret = uv_timer_init(luv_loop(L), handle);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- handle->data = luv_setup_handle(L);
- return 1;
-}
-
-static void luv_timer_cb(uv_timer_t* handle) {
- lua_State* L = luv_state(handle->loop);
- luv_handle_t* data = handle->data;
- luv_call_callback(L, data, LUV_TIMEOUT, 0);
-}
-
-static int luv_timer_start(lua_State* L) {
- uv_timer_t* handle = luv_check_timer(L, 1);
- uint64_t timeout;
- uint64_t repeat;
- int ret;
- timeout = luaL_checkinteger(L, 2);
- repeat = luaL_checkinteger(L, 3);
- luv_check_callback(L, handle->data, LUV_TIMEOUT, 4);
- ret = uv_timer_start(handle, luv_timer_cb, timeout, repeat);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_timer_stop(lua_State* L) {
- uv_timer_t* handle = luv_check_timer(L, 1);
- int ret = uv_timer_stop(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_timer_again(lua_State* L) {
- uv_timer_t* handle = luv_check_timer(L, 1);
- int ret = uv_timer_again(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_timer_set_repeat(lua_State* L) {
- uv_timer_t* handle = luv_check_timer(L, 1);
- uint64_t repeat = luaL_checkinteger(L, 2);
- uv_timer_set_repeat(handle, repeat);
- return 0;
-}
-
-static int luv_timer_get_repeat(lua_State* L) {
- uv_timer_t* handle = luv_check_timer(L, 1);
- uint64_t repeat = uv_timer_get_repeat(handle);
- lua_pushinteger(L, repeat);
- return 1;
-}
diff --git a/3rdparty/luv/src/tty.c b/3rdparty/luv/src/tty.c
deleted file mode 100644
index 9232dc07603..00000000000
--- a/3rdparty/luv/src/tty.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static uv_tty_t* luv_check_tty(lua_State* L, int index) {
- uv_tty_t* handle = luv_checkudata(L, index, "uv_tty");
- luaL_argcheck(L, handle->type == UV_TTY && handle->data, index, "Expected uv_tty_t");
- return handle;
-}
-
-static int luv_new_tty(lua_State* L) {
- int readable, ret;
- uv_tty_t* handle;
- uv_file fd = luaL_checkinteger(L, 1);
- luaL_checktype(L, 2, LUA_TBOOLEAN);
- readable = lua_toboolean(L, 2);
- handle = luv_newuserdata(L, sizeof(*handle));
- ret = uv_tty_init(luv_loop(L), handle, fd, readable);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- handle->data = luv_setup_handle(L);
- return 1;
-}
-
-static int luv_tty_set_mode(lua_State* L) {
- uv_tty_t* handle = luv_check_tty(L, 1);
- int mode = luaL_checkinteger(L, 2);
- int ret = uv_tty_set_mode(handle, mode);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_tty_reset_mode(lua_State* L) {
- int ret = uv_tty_reset_mode();
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_tty_get_winsize(lua_State* L) {
- uv_tty_t* handle = luv_check_tty(L, 1);
- int width, height;
- int ret = uv_tty_get_winsize(handle, &width, &height);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, width);
- lua_pushinteger(L, height);
- return 2;
-}
diff --git a/3rdparty/luv/src/udp.c b/3rdparty/luv/src/udp.c
deleted file mode 100644
index 9cc25555559..00000000000
--- a/3rdparty/luv/src/udp.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-static uv_udp_t* luv_check_udp(lua_State* L, int index) {
- uv_udp_t* handle = luv_checkudata(L, index, "uv_udp");
- luaL_argcheck(L, handle->type == UV_UDP && handle->data, index, "Expected uv_udp_t");
- return handle;
-}
-
-static int luv_new_udp(lua_State* L) {
- uv_udp_t* handle = luv_newuserdata(L, sizeof(*handle));
- int ret = uv_udp_init(luv_loop(L), handle);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- handle->data = luv_setup_handle(L);
- return 1;
-}
-
-static int luv_udp_open(lua_State* L) {
- uv_udp_t* handle = luv_check_udp(L, 1);
- uv_os_sock_t sock = luaL_checkinteger(L, 2);
- int ret = uv_udp_open(handle, sock);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_udp_bind(lua_State* L) {
- uv_udp_t* handle = luv_check_udp(L, 1);
- const char* host = luaL_checkstring(L, 2);
- int port = luaL_checkinteger(L, 3);
- unsigned int flags = 0;
- struct sockaddr_storage addr;
- int ret;
- if (uv_ip4_addr(host, port, (struct sockaddr_in*)&addr) &&
- uv_ip6_addr(host, port, (struct sockaddr_in6*)&addr)) {
- return luaL_error(L, "Invalid IP address or port [%s:%d]", host, port);
- }
- if (lua_type(L, 4) == LUA_TTABLE) {
- luaL_checktype(L, 4, LUA_TTABLE);
- lua_getfield(L, 4, "reuseaddr");
- if (lua_toboolean(L, -1)) flags |= UV_UDP_REUSEADDR;
- lua_pop(L, 1);
- lua_getfield(L, 4, "ipv6only");
- if (lua_toboolean(L, -1)) flags |= UV_UDP_IPV6ONLY;
- lua_pop(L, 1);
- }
- ret = uv_udp_bind(handle, (struct sockaddr*)&addr, flags);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_udp_getsockname(lua_State* L) {
- uv_udp_t* handle = luv_check_udp(L, 1);
- struct sockaddr_storage address;
- int addrlen = sizeof(address);
- int ret = uv_udp_getsockname(handle, (struct sockaddr*)&address, &addrlen);
- if (ret < 0) return luv_error(L, ret);
- parse_sockaddr(L, &address, addrlen);
- return 1;
-}
-
-// These are the same order as uv_membership which also starts at 0
-static const char *const luv_membership_opts[] = {
- "leave", "join", NULL
-};
-
-static int luv_udp_set_membership(lua_State* L) {
- uv_udp_t* handle = luv_check_udp(L, 1);
- const char* multicast_addr = luaL_checkstring(L, 2);
- const char* interface_addr = luaL_checkstring(L, 3);
- uv_membership membership = luaL_checkoption(L, 4, NULL, luv_membership_opts);
- int ret = uv_udp_set_membership(handle, multicast_addr, interface_addr, membership);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_udp_set_multicast_loop(lua_State* L) {
- uv_udp_t* handle = luv_check_udp(L, 1);
- int on, ret;
- luaL_checktype(L, 2, LUA_TBOOLEAN);
- on = lua_toboolean(L, 2);
- ret = uv_udp_set_multicast_loop(handle, on);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_udp_set_multicast_ttl(lua_State* L) {
- uv_udp_t* handle = luv_check_udp(L, 1);
- int ttl, ret;
- ttl = luaL_checkinteger(L, 2);
- ret = uv_udp_set_multicast_ttl(handle, ttl);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_udp_set_multicast_interface(lua_State* L) {
- uv_udp_t* handle = luv_check_udp(L, 1);
- const char* interface_addr = luaL_checkstring(L, 2);
- int ret = uv_udp_set_multicast_interface(handle, interface_addr);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_udp_set_broadcast(lua_State* L) {
- uv_udp_t* handle = luv_check_udp(L, 1);
- int on, ret;
- luaL_checktype(L, 2, LUA_TBOOLEAN);
- on = lua_toboolean(L, 2);
- ret =uv_udp_set_broadcast(handle, on);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_udp_set_ttl(lua_State* L) {
- uv_udp_t* handle = luv_check_udp(L, 1);
- int ttl, ret;
- ttl = luaL_checknumber(L, 2);
- ret = uv_udp_set_ttl(handle, ttl);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static void luv_udp_send_cb(uv_udp_send_t* req, int status) {
- lua_State* L = luv_state(req->handle->loop);
- luv_status(L, status);
- luv_fulfill_req(L, req->data, 1);
- luv_cleanup_req(L, req->data);
- req->data = NULL;
-}
-
-static int luv_udp_send(lua_State* L) {
- uv_udp_t* handle = luv_check_udp(L, 1);
- uv_udp_send_t* req;
- uv_buf_t buf;
- int ret, port, ref;
- const char* host;
- struct sockaddr_storage addr;
- luv_check_buf(L, 2, &buf);
- host = luaL_checkstring(L, 3);
- port = luaL_checkinteger(L, 4);
- if (uv_ip4_addr(host, port, (struct sockaddr_in*)&addr) &&
- uv_ip6_addr(host, port, (struct sockaddr_in6*)&addr)) {
- return luaL_error(L, "Invalid IP address or port [%s:%d]", host, port);
- }
- ref = luv_check_continuation(L, 5);
- req = lua_newuserdata(L, sizeof(*req));
- req->data = luv_setup_req(L, ref);
- ret = uv_udp_send(req, handle, &buf, 1, (struct sockaddr*)&addr, luv_udp_send_cb);
- if (ret < 0) {
- lua_pop(L, 1);
- return luv_error(L, ret);
- }
- return 1;
-
-}
-
-static int luv_udp_try_send(lua_State* L) {
- uv_udp_t* handle = luv_check_udp(L, 1);
- uv_buf_t buf;
- int ret, port;
- const char* host;
- struct sockaddr_storage addr;
- luv_check_buf(L, 2, &buf);
- host = luaL_checkstring(L, 3);
- port = luaL_checkinteger(L, 4);
- if (uv_ip4_addr(host, port, (struct sockaddr_in*)&addr) &&
- uv_ip6_addr(host, port, (struct sockaddr_in6*)&addr)) {
- return luaL_error(L, "Invalid IP address or port [%s:%d]", host, port);
- }
- ret = uv_udp_try_send(handle, &buf, 1, (struct sockaddr*)&addr);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static void luv_udp_recv_cb(uv_udp_t* handle, ssize_t nread, const uv_buf_t* buf, const struct sockaddr* addr, unsigned flags) {
- lua_State* L = luv_state(handle->loop);
-
- // err
- if (nread < 0) {
- luv_status(L, nread);
- }
- else {
- lua_pushnil(L);
- }
-
- // data
- if (nread == 0) {
- if (addr) {
- lua_pushstring(L, "");
- }
- else {
- lua_pushnil(L);
- }
- }
- else if (nread > 0) {
- lua_pushlstring(L, buf->base, nread);
- }
- if (buf) free(buf->base);
-
- // address
- if (addr) {
- parse_sockaddr(L, (struct sockaddr_storage*)addr, sizeof *addr);
- }
- else {
- lua_pushnil(L);
- }
-
- // flags
- lua_newtable(L);
- if (flags & UV_UDP_PARTIAL) {
- lua_pushboolean(L, 1);
- lua_setfield(L, -2, "partial");
- }
-
- luv_call_callback(L, handle->data, LUV_RECV, 4);
-}
-
-static int luv_udp_recv_start(lua_State* L) {
- uv_udp_t* handle = luv_check_udp(L, 1);
- int ret;
- luv_check_callback(L, handle->data, LUV_RECV, 2);
- ret = uv_udp_recv_start(handle, luv_alloc_cb, luv_udp_recv_cb);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
-static int luv_udp_recv_stop(lua_State* L) {
- uv_udp_t* handle = luv_check_udp(L, 1);
- int ret = uv_udp_recv_stop(handle);
- if (ret < 0) return luv_error(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
diff --git a/3rdparty/luv/src/util.c b/3rdparty/luv/src/util.c
deleted file mode 100644
index c7b98c1759a..00000000000
--- a/3rdparty/luv/src/util.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include "luv.h"
-
-void luv_stack_dump(lua_State* L, const char* name) {
- int i, l;
- fprintf(stderr, "\nAPI STACK DUMP %p %d: %s\n", L, lua_status(L), name);
- for (i = 1, l = lua_gettop(L); i <= l; i++) {
- int type = lua_type(L, i);
- switch (type) {
- case LUA_TSTRING:
- fprintf(stderr, " %d %s \"%s\"\n", i, lua_typename(L, type), lua_tostring(L, i));
- break;
- case LUA_TNUMBER:
- fprintf(stderr, " %d %s %ld\n", i, lua_typename(L, type), (long int) lua_tointeger(L, i));
- break;
- case LUA_TUSERDATA:
- fprintf(stderr, " %d %s %p\n", i, lua_typename(L, type), lua_touserdata(L, i));
- break;
- default:
- fprintf(stderr, " %d %s\n", i, lua_typename(L, type));
- break;
- }
- }
- assert(l == lua_gettop(L));
-}
-
-static int luv_error(lua_State* L, int status) {
- lua_pushnil(L);
- lua_pushfstring(L, "%s: %s", uv_err_name(status), uv_strerror(status));
- lua_pushstring(L, uv_err_name(status));
- return 3;
-}
-
-static void luv_status(lua_State* L, int status) {
- if (status < 0) {
- lua_pushstring(L, uv_err_name(status));
- }
- else {
- lua_pushnil(L);
- }
-}
diff --git a/3rdparty/luv/src/util.h b/3rdparty/luv/src/util.h
deleted file mode 100644
index c669c0430db..00000000000
--- a/3rdparty/luv/src/util.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2014 The Luvit Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#ifndef LUV_UTIL_H
-#define LUV_UTIL_H
-
-#include "luv.h"
-
-void luv_stack_dump(lua_State* L, const char* name);
-static int luv_error(lua_State* L, int ret);
-static void luv_status(lua_State* L, int status);
-
-#endif
diff --git a/3rdparty/luv/src/work.c b/3rdparty/luv/src/work.c
deleted file mode 100644
index e40212f1e7c..00000000000
--- a/3rdparty/luv/src/work.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
-* Copyright 2014 The Luvit Authors. All Rights Reserved.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-*/
-#include "luv.h"
-
-#include "lthreadpool.h"
-
-typedef struct {
- lua_State* L; /* vm in main */
- char* code; /* thread entry code */
- size_t len;
-
- uv_async_t async;
- int async_cb; /* ref, run in main, call when async message received, NYI */
- int after_work_cb; /* ref, run in main ,call after work cb*/
-} luv_work_ctx_t;
-
-typedef struct {
- uv_work_t work;
- luv_work_ctx_t* ctx;
-
- luv_thread_arg_t arg;
-} luv_work_t;
-
-static uv_key_t L_key;
-
-static luv_work_ctx_t* luv_check_work_ctx(lua_State* L, int index)
-{
- luv_work_ctx_t* ctx = luaL_checkudata(L, index, "luv_work_ctx");
- return ctx;
-}
-
-static int luv_work_ctx_gc(lua_State *L)
-{
- luv_work_ctx_t* ctx = luv_check_work_ctx(L, 1);
- free(ctx->code);
- luaL_unref(L, LUA_REGISTRYINDEX, ctx->after_work_cb);
- luaL_unref(L, LUA_REGISTRYINDEX, ctx->async_cb);
-
- return 0;
-}
-
-static int luv_work_ctx_tostring(lua_State* L)
-{
- luv_work_ctx_t* ctx = luv_check_work_ctx(L, 1);
- lua_pushfstring(L, "luv_work_ctx_t: %p", ctx);
- return 1;
-}
-
-static void luv_work_cb(uv_work_t* req)
-{
- luv_work_t* work = req->data;
- luv_work_ctx_t* ctx = work->ctx;
- lua_State *L = uv_key_get(&L_key);
- int top;
- if (L == NULL) {
- /* vm reuse in threadpool */
- L = acquire_vm_cb();
- uv_key_set(&L_key, L);
- }
-
- top = lua_gettop(L);
- lua_pushlstring(L, ctx->code, ctx->len);
- lua_rawget(L, LUA_REGISTRYINDEX);
- if (lua_isnil(L, -1))
- {
- lua_pop(L, 1);
-
- lua_pushlstring(L, ctx->code, ctx->len);
- if (luaL_loadbuffer(L, ctx->code, ctx->len, "=pool") != 0)
- {
- fprintf(stderr, "Uncaught Error: %s\n", lua_tostring(L, -1));
- lua_pop(L, 2);
-
- lua_pushnil(L);
- } else
- {
- lua_pushvalue(L, -1);
- lua_insert(L, lua_gettop(L) - 2);
- lua_rawset(L, LUA_REGISTRYINDEX);
- }
- }
-
- if (lua_isfunction(L, -1))
- {
- int i = luv_thread_arg_push(L, &work->arg);
- if (lua_pcall(L, i, LUA_MULTRET, 0)) {
- fprintf(stderr, "Uncaught Error in thread: %s\n", lua_tostring(L, -1));
- }
- luv_thread_arg_clear(&work->arg);
- luv_thread_arg_set(L, &work->arg, top + 1, lua_gettop(L), 0);
- lua_settop(L, top);
- } else {
- fprintf(stderr, "Uncaught Error: %s can't be work entry\n",
- lua_typename(L, lua_type(L,-1)));
- }
-}
-
-static void luv_after_work_cb(uv_work_t* req, int status) {
- luv_work_t* work = req->data;
- luv_work_ctx_t* ctx = work->ctx;
- lua_State*L = ctx->L;
- int i;
- (void)status;
- lua_rawgeti(L, LUA_REGISTRYINDEX, ctx->after_work_cb);
- i = luv_thread_arg_push(L, &work->arg);
- if (lua_pcall(L, i, 0, 0))
- {
- fprintf(stderr, "Uncaught Error in thread: %s\n", lua_tostring(L, -1));
- }
-
- //ref down to ctx
- lua_pushlightuserdata(L, work);
- lua_pushnil(L);
- lua_rawset(L, LUA_REGISTRYINDEX);
-
- luv_thread_arg_clear(&work->arg);
- free(work);
-}
-
-static void async_cb(uv_async_t *handle)
-{
- luv_work_t*work = handle->data;
- luv_work_ctx_t* ctx = work->ctx;
- lua_State*L = ctx->L;
- int i;
- lua_rawgeti(L, LUA_REGISTRYINDEX, ctx->async_cb);
- i = luv_thread_arg_push(L, &work->arg);
- if (lua_pcall(L, i, 0, 0))
- {
- fprintf(stderr, "Uncaught Error in thread: %s\n", lua_tostring(L, -1));
- }
-}
-
-static int luv_new_work(lua_State* L) {
- size_t len;
- const char* buff;
- luv_work_ctx_t* ctx;
-
- buff = luv_thread_dumped(L, 1, &len);
- luaL_checktype(L, 2, LUA_TFUNCTION);
- if(!lua_isnoneornil(L, 3))
- luaL_checktype(L, 3, LUA_TFUNCTION);
-
- ctx = lua_newuserdata(L, sizeof(*ctx));
- memset(ctx, 0, sizeof(*ctx));
-
- ctx->len = len;
- ctx->code = malloc(ctx->len);
- memcpy(ctx->code, buff, len);
-
- lua_pushvalue(L, 2);
- ctx->after_work_cb = luaL_ref(L, LUA_REGISTRYINDEX);
- if (lua_gettop(L) == 4) {
- lua_pushvalue(L, 3);
- ctx->async_cb = luaL_ref(L, LUA_REGISTRYINDEX);
- uv_async_init(luv_loop(L), &ctx->async, async_cb);
- } else
- ctx->async_cb = LUA_REFNIL;
- ctx->L = L;
- luaL_getmetatable(L, "luv_work_ctx");
- lua_setmetatable(L, -2);
- return 1;
-}
-
-static int luv_queue_work(lua_State* L) {
- int top = lua_gettop(L);
- luv_work_ctx_t* ctx = luv_check_work_ctx(L, 1);
- luv_work_t* work = malloc(sizeof(*work));
- int ret;
-
- luv_thread_arg_set(L, &work->arg, 2, top, 0);
- work->ctx = ctx;
- work->work.data = work;
- ret = uv_queue_work(luv_loop(L), &work->work, luv_work_cb, luv_after_work_cb);
- if (ret < 0) {
- free(work);
- return luv_error(L, ret);
- }
-
- //ref up to ctx
- lua_pushlightuserdata(L, work);
- lua_pushvalue(L, 1);
- lua_rawset(L, LUA_REGISTRYINDEX);
-
- lua_pushboolean(L, 1);
- return 1;
-}
-
-static const luaL_Reg luv_work_ctx_methods[] = {
- {"queue", luv_queue_work},
- {NULL, NULL}
-};
-
-static int key_inited = 0;
-static void luv_work_init(lua_State* L) {
- luaL_newmetatable(L, "luv_work_ctx");
- lua_pushcfunction(L, luv_work_ctx_tostring);
- lua_setfield(L, -2, "__tostring");
- lua_pushcfunction(L, luv_work_ctx_gc);
- lua_setfield(L, -2, "__gc");
- lua_newtable(L);
- luaL_setfuncs(L, luv_work_ctx_methods, 0);
- lua_setfield(L, -2, "__index");
- lua_pop(L, 1);
-
- if (key_inited==0) {
- key_inited = 1;
- uv_key_create(&L_key);
- }
-}
diff --git a/3rdparty/luv/tests/manual-test-cluster.lua b/3rdparty/luv/tests/manual-test-cluster.lua
deleted file mode 100644
index 304e4be634d..00000000000
--- a/3rdparty/luv/tests/manual-test-cluster.lua
+++ /dev/null
@@ -1,213 +0,0 @@
--- This is quite the involved test. Basically it binds
--- to a tcp port, spawns n children (one per CPU core)
--- who all listen on the same shared port and act as a
--- load balancing cluster.
--- Then N clients are spawned that connect to the cluster
--- The application itself kills the worker upon connection
--- All N workers should accept exactly one request and all close.
-
-return require('lib/tap')(function (test)
-
- -- This function will be run in a child process
- local worker_code = string.dump(function ()
- local dump = require('lib/utils').dump
-
- local function print(...)
- local n = select('#', ...)
- local arguments = {...}
- for i = 1, n do
- arguments[i] = tostring(arguments[i])
- end
-
- local text = table.concat(arguments, "\t")
- text = " " .. string.gsub(text, "\n", "\n ")
- _G.print(text)
- end
-
- local function p(...)
- local n = select('#', ...)
- local arguments = { ... }
-
- for i = 1, n do
- arguments[i] = dump(arguments[i])
- end
-
- print(table.concat(arguments, "\t"))
- end
-
- local uv = require('luv')
- local answer = -1
-
- -- The parent is going to pass us the server handle over a pipe
- -- This will be our local file descriptor at PIPE_FD
- local pipe = uv.new_pipe(true)
- local pipe_fd = tonumber(os.getenv("PIPE_FD"))
- assert(uv.pipe_open(pipe, pipe_fd))
-
- -- Configure the server handle
- local server = uv.new_tcp()
- local done = false
- local function onconnection()
- print("NOT ACCEPTING, already done")
- if done then return end
- local client = uv.new_tcp()
- assert(uv.accept(server, client))
- p("New TCP", client, "on", server)
- p{client=client}
- assert(uv.write(client, "BYE!\n"));
- assert(uv.shutdown(client, function ()
- uv.close(client)
- uv.unref(server)
- done = true
- answer = 42
- end))
- end
-
- -- Read the server handle from the parent
- local function onread(err, data)
- p("onread", {err=err,data=data})
- assert(not err, err)
- if uv.pipe_pending_count(pipe) > 0 then
- local pending_type = uv.pipe_pending_type(pipe)
- p("pending_type", pending_type)
- assert(pending_type == "tcp")
- assert(uv.accept(pipe, server))
- assert(uv.listen(server, 0, onconnection))
- p("Received server handle from parent process", server)
- elseif data then
- p("ondata", data)
- else
- p("onend", data)
- end
- end
- uv.read_start(pipe, onread)
-
- -- Start the event loop!
- uv.run()
-
- os.exit(answer)
- end)
-
- local client_code = string.dump(function ()
- local dump = require('lib/utils').dump
-
- local function print(...)
- local n = select('#', ...)
- local arguments = {...}
- for i = 1, n do
- arguments[i] = tostring(arguments[i])
- end
-
- local text = table.concat(arguments, "\t")
- text = " " .. string.gsub(text, "\n", "\n ")
- _G.print(text)
- end
-
- local function p(...)
- local n = select('#', ...)
- local arguments = { ... }
-
- for i = 1, n do
- arguments[i] = dump(arguments[i])
- end
-
- print(table.concat(arguments, "\t"))
- end
-
- local uv = require('luv')
-
- local host = os.getenv("HOST")
- local port = tonumber(os.getenv("PORT"))
-
- local socket = uv.new_tcp()
-
- assert(uv.tcp_connect(socket, host, port, function (err)
- p("client connected", {err=err})
- assert(not err, err)
- end))
-
- -- Start the event loop!
- uv.run()
- end)
-
- test("tcp cluster", function (print, p, expect, uv)
-
- local exepath = assert(uv.exepath())
- local cpu_count = # assert(uv.cpu_info())
- local left = cpu_count
-
- local server = uv.new_tcp()
- assert(uv.tcp_bind(server, "::1", 0))
-
- local address = uv.tcp_getsockname(server)
- p{server=server,address=address}
-
- print("Master process bound to TCP port " .. address.port .. " on " .. address.ip)
-
- local function spawnWorker()
- local pipe = uv.new_pipe(true)
- local input = uv.new_pipe(false)
- local child, pid
- child, pid = assert(uv.spawn(exepath, {
- cwd = uv.cwd(),
- stdio = {input,1,2,pipe},
- env= {"PIPE_FD=3"}
- }, expect(function (status, signal)
- p("Worker exited", {status=status,signal=signal})
- assert(status == 42, "worker should return 42")
- assert(signal == 0)
- left = left - 1
- uv.close(child)
- uv.close(input)
- uv.close(pipe)
- if left == 0 then
- p("All workers are now dead")
- uv.close(server)
- end
- end)))
- p("Spawned worker", pid, "and sending handle", server)
- assert(uv.write(input, worker_code))
- assert(uv.write2(pipe, "123", server))
- assert(uv.shutdown(input))
- assert(uv.shutdown(pipe))
- end
-
- local function spawnClient()
- local input = uv.new_pipe(false)
- local child, pid
- child, pid = assert(uv.spawn(exepath, {
- stdio = {input,1,2},
- cwd = uv.cwd(),
- env= {
- "HOST=" .. address.ip,
- "PORT=" .. address.port,
- }
- }, expect(function (status, signal)
- p("Client exited", {status=status,signal=signal})
- assert(status == 0)
- assert(signal == 0)
- uv.close(child)
- end, left)))
- p("Spawned client", pid)
- assert(uv.write(input, client_code))
- assert(uv.shutdown(input))
- uv.close(input)
- end
-
- -- Spawn a child process for each CPU core
- for _ = 1, cpu_count do
- spawnWorker()
- end
-
- -- Spawn the clients after a short delay
- local timer = uv.new_timer()
- uv.timer_start(timer, 1000, 0, expect(function ()
- for _ = 1, cpu_count do
- spawnClient()
- end
- uv.close(timer)
- end))
-
- end)
-end)
-
diff --git a/3rdparty/luv/tests/run.lua b/3rdparty/luv/tests/run.lua
deleted file mode 100644
index ea94e9bd58b..00000000000
--- a/3rdparty/luv/tests/run.lua
+++ /dev/null
@@ -1,33 +0,0 @@
--- Run this from the parent directory as
---
--- luajit tests/run.lua
---
-
-local tap = require("lib/tap")
-local uv = require("luv")
-
-local isWindows
-if jit and jit.os then
- -- Luajit provides explicit platform detection
- isWindows = jit.os == "Windows"
-else
- -- Normal lua will only have \ for path separator on windows.
- isWindows = package.config:find("\\") and true or false
-end
-_G.isWindows = isWindows
-
-local req = uv.fs_scandir("tests")
-
-while true do
- local name = uv.fs_scandir_next(req)
- if not name then break end
- local match = string.match(name, "^test%-(.*).lua$")
- if match then
- local path = "tests/test-" .. match
- tap(match)
- require(path)
- end
-end
-
--- run the tests!
-tap(true)
diff --git a/3rdparty/luv/tests/test-async.lua b/3rdparty/luv/tests/test-async.lua
deleted file mode 100644
index 88527cdb88d..00000000000
--- a/3rdparty/luv/tests/test-async.lua
+++ /dev/null
@@ -1,32 +0,0 @@
-return require('lib/tap')(function (test)
-
- test("test pass async between threads", function(p, p, expect, uv)
- local before = os.time()
- local async
- async = uv.new_async(expect(function (a,b,c)
- p('in async notify callback')
- p(a,b,c)
- assert(a=='a')
- assert(b==true)
- assert(c==250)
- uv.close(async)
- end))
- local args = {500, 'string', nil, false, 5, "helloworld",async}
- local unpack = unpack or table.unpack
- uv.new_thread(function(num,s,null,bool,five,hw,asy)
- local uv = require'luv'
- assert(type(num) == "number")
- assert(type(s) == "string")
- assert(null == nil)
- assert(bool == false)
- assert(five == 5)
- assert(hw == 'helloworld')
- assert(type(asy)=='userdata')
- assert(uv.async_send(asy,'a',true,250)==0)
- uv.sleep(1000)
- end, unpack(args)):join()
- local elapsed = (os.time() - before) * 1000
- assert(elapsed >= 1000, "elapsed should be at least delay ")
- end)
-
-end)
diff --git a/3rdparty/luv/tests/test-conversions.lua b/3rdparty/luv/tests/test-conversions.lua
deleted file mode 100644
index f14056ddfb5..00000000000
--- a/3rdparty/luv/tests/test-conversions.lua
+++ /dev/null
@@ -1,6 +0,0 @@
-return require('lib/tap')(function (test)
- test("basic 64bit conversions", function (print, p, expect, uv)
- assert(string.format("%x", 29913653248) == "6f6fe2000")
- assert(string.format("%x", 32207650816) == "77fb9c000")
- end)
-end)
diff --git a/3rdparty/luv/tests/test-dns.lua b/3rdparty/luv/tests/test-dns.lua
deleted file mode 100644
index c24adba7164..00000000000
--- a/3rdparty/luv/tests/test-dns.lua
+++ /dev/null
@@ -1,125 +0,0 @@
-return require('lib/tap')(function (test)
-
- test("Get all local http addresses", function (print, p, expect, uv)
- assert(uv.getaddrinfo(nil, "http", nil, expect(function (err, res)
- p(res, #res)
- assert(not err, err)
- assert(res[1].port == 80)
- end)))
- end)
-
- test("Get all local http addresses sync", function (print, p, expect, uv)
- local res = assert(uv.getaddrinfo(nil, "http"))
- p(res, #res)
- assert(res[1].port == 80)
- end)
-
- test("Get only ipv4 tcp adresses for luvit.io", function (print, p, expect, uv)
- assert(uv.getaddrinfo("luvit.io", nil, {
- socktype = "stream",
- family = "inet",
- }, expect(function (err, res)
- assert(not err, err)
- p(res, #res)
- assert(#res == 1)
- end)))
- end)
-
- -- FIXME: this test always fails on AppVeyor for some reason
- if _G.isWindows and not os.getenv'APPVEYOR' then
- test("Get only ipv6 tcp adresses for luvit.io", function (print, p, expect, uv)
- assert(uv.getaddrinfo("luvit.io", nil, {
- socktype = "stream",
- family = "inet6",
- }, expect(function (err, res)
- assert(not err, err)
- p(res, #res)
- assert(#res == 1)
- end)))
- end)
- end
-
- test("Get ipv4 and ipv6 tcp adresses for luvit.io", function (print, p, expect, uv)
- assert(uv.getaddrinfo("luvit.io", nil, {
- socktype = "stream",
- }, expect(function (err, res)
- assert(not err, err)
- p(res, #res)
- assert(#res > 0)
- end)))
- end)
-
- test("Get all adresses for luvit.io", function (print, p, expect, uv)
- assert(uv.getaddrinfo("luvit.io", nil, nil, expect(function (err, res)
- assert(not err, err)
- p(res, #res)
- assert(#res > 0)
- end)))
- end)
-
- test("Lookup local ipv4 address", function (print, p, expect, uv)
- assert(uv.getnameinfo({
- family = "inet",
- }, expect(function (err, hostname, service)
- p{err=err,hostname=hostname,service=service}
- assert(not err, err)
- assert(hostname)
- assert(service)
- end)))
- end)
-
- test("Lookup local ipv4 address sync", function (print, p, expect, uv)
- local hostname, service = assert(uv.getnameinfo({
- family = "inet",
- }))
- p{hostname=hostname,service=service}
- assert(hostname)
- assert(service)
- end)
-
- test("Lookup local 127.0.0.1 ipv4 address", function (print, p, expect, uv)
- assert(uv.getnameinfo({
- ip = "127.0.0.1",
- }, expect(function (err, hostname, service)
- p{err=err,hostname=hostname,service=service}
- assert(not err, err)
- assert(hostname)
- assert(service)
- end)))
- end)
-
- test("Lookup local ipv6 address", function (print, p, expect, uv)
- assert(uv.getnameinfo({
- family = "inet6",
- }, expect(function (err, hostname, service)
- p{err=err,hostname=hostname,service=service}
- assert(not err, err)
- assert(hostname)
- assert(service)
- end)))
- end)
-
- test("Lookup local ::1 ipv6 address", function (print, p, expect, uv)
- assert(uv.getnameinfo({
- ip = "::1",
- }, expect(function (err, hostname, service)
- p{err=err,hostname=hostname,service=service}
- assert(not err, err)
- assert(hostname)
- assert(service)
- end)))
- end)
-
- test("Lookup local port 80 service", function (print, p, expect, uv)
- assert(uv.getnameinfo({
- port = 80,
- family = "inet6",
- }, expect(function (err, hostname, service)
- p{err=err,hostname=hostname,service=service}
- assert(not err, err)
- assert(hostname)
- assert(service == "http")
- end)))
- end)
-
-end)
diff --git a/3rdparty/luv/tests/test-fs.lua b/3rdparty/luv/tests/test-fs.lua
deleted file mode 100644
index 4bfd67e6578..00000000000
--- a/3rdparty/luv/tests/test-fs.lua
+++ /dev/null
@@ -1,90 +0,0 @@
-return require('lib/tap')(function (test)
-
- test("read a file sync", function (print, p, expect, uv)
- local fd = assert(uv.fs_open('README.md', 'r', tonumber('644', 8)))
- p{fd=fd}
- local stat = assert(uv.fs_fstat(fd))
- p{stat=stat}
- local chunk = assert(uv.fs_read(fd, stat.size, 0))
- assert(#chunk == stat.size)
- assert(uv.fs_close(fd))
- end)
-
- test("read a file async", function (print, p, expect, uv)
- uv.fs_open('README.md', 'r', tonumber('644', 8), expect(function (err, fd)
- assert(not err, err)
- p{fd=fd}
- uv.fs_fstat(fd, expect(function (err, stat)
- assert(not err, err)
- p{stat=stat}
- uv.fs_read(fd, stat.size, 0, expect(function (err, chunk)
- assert(not err, err)
- p{chunk=#chunk}
- assert(#chunk == stat.size)
- uv.fs_close(fd, expect(function (err)
- assert(not err, err)
- end))
- end))
- end))
- end))
- end)
-
- test("fs.write", function (print, p, expect, uv)
- local path = "_test_"
- local fd = assert(uv.fs_open(path, "w", 438))
- uv.fs_write(fd, "Hello World\n", -1)
- uv.fs_write(fd, {"with\n", "more\n", "lines\n"}, -1)
- uv.fs_close(fd)
- uv.fs_unlink(path)
- end)
-
- test("fs.stat sync", function (print, p, expect, uv)
- local stat = assert(uv.fs_stat("README.md"))
- assert(stat.size)
- end)
-
- test("fs.stat async", function (print, p, expect, uv)
- assert(uv.fs_stat("README.md", expect(function (err, stat)
- assert(not err, err)
- assert(stat.size)
- end)))
- end)
-
- test("fs.stat sync error", function (print, p, expect, uv)
- local stat, err, code = uv.fs_stat("BAD_FILE!")
- p{err=err,code=code,stat=stat}
- assert(not stat)
- assert(err)
- assert(code == "ENOENT")
- end)
-
- test("fs.stat async error", function (print, p, expect, uv)
- assert(uv.fs_stat("BAD_FILE@", expect(function (err, stat)
- p{err=err,stat=stat}
- assert(err)
- assert(not stat)
- end)))
- end)
-
- test("fs.scandir", function (print, p, expect, uv)
- local req = uv.fs_scandir('.')
- local function iter()
- return uv.fs_scandir_next(req)
- end
- for name, ftype in iter do
- p{name=name, ftype=ftype}
- assert(name)
- -- ftype is not available in all filesystems; for example it's
- -- provided for HFS+ (OSX), NTFS (Windows) but not for ext4 (Linux).
- end
- end)
-
- test("fs.realpath", function (print, p, expect, uv)
- p(assert(uv.fs_realpath('.')))
- assert(uv.fs_realpath('.', expect(function (err, path)
- assert(not err, err)
- p(path)
- end)))
- end)
-
-end)
diff --git a/3rdparty/luv/tests/test-leaks.lua b/3rdparty/luv/tests/test-leaks.lua
deleted file mode 100644
index 06c6e49a0cf..00000000000
--- a/3rdparty/luv/tests/test-leaks.lua
+++ /dev/null
@@ -1,186 +0,0 @@
-return require('lib/tap')(function (test)
-
- local function bench(uv, p, count, fn)
- collectgarbage()
- local before
- local notify = count / 8
- for i = 1, count do
- fn()
- if i % notify == 0 then
- uv.run()
- collectgarbage()
- local now = uv.resident_set_memory()
- if not before then before = now end
- p(i, now)
- end
- end
- uv.run()
- collectgarbage()
- local after = uv.resident_set_memory()
- p{
- before = before,
- after = after,
- }
- assert(after < before * 1.5)
- end
-
- test("fs-write", function (print, p, expect, uv)
- bench(uv, p, 0x7000, function ()
- local path = "_test_"
- local fd = assert(uv.fs_open(path, "w", 438))
- uv.fs_write(fd, "Hello World\n", -1)
- uv.fs_write(fd, {"with\n", "more\n", "lines\n"}, -1)
- uv.fs_close(fd)
- uv.fs_unlink(path)
- end)
- end)
-
- test("lots-o-timers", function (print, p, expect, uv)
- bench(uv, p, 0x10000, function ()
- local timer = uv.new_timer()
- uv.close(timer)
- end)
- end)
-
- test("lots-o-timers with canceled callbacks", function (print, p, expect, uv)
- bench(uv, p, 0x10000, function ()
- local timer = uv.new_timer()
- uv.timer_start(timer, 100, 100, function ()
- end)
- uv.timer_stop(timer)
- uv.close(timer, function ()
- end)
- uv.run()
- end)
- end)
-
- test("lots-o-timers with real timeouts", function (print, p, expect, uv)
- bench(uv, p, 0x500, function ()
- local timer = uv.new_timer()
- uv.timer_start(timer, 10, 0, expect(function ()
- uv.timer_stop(timer)
- uv.close(timer, function ()
- end)
- end))
- end)
- end)
-
- test("reading file async", function (print, p, expect, uv)
- local mode = tonumber("644", 8)
- bench(uv, p, 0x500, function ()
- local onOpen, onStat, onRead, onClose
- local fd, stat
-
- onOpen = expect(function (err, result)
- assert(not err, err)
- fd = result
- uv.fs_fstat(fd, onStat)
- end)
-
- onStat = expect(function (err, result)
- assert(not err, err)
- stat = result
- uv.fs_read(fd, stat.size, 0, onRead)
- end)
-
- onRead = expect(function (err, data)
- assert(not err, err)
- assert(#data == stat.size)
- uv.fs_close(fd, onClose)
- end)
-
- onClose = expect(function (err)
- assert(not err, err)
- end)
-
- assert(uv.fs_open("README.md", "r", mode, onOpen))
- end)
- end)
-
- test("reading file sync", function (print, p, expect, uv)
- local mode = tonumber("644", 8)
- bench(uv, p, 0x2000, function ()
- local fd = assert(uv.fs_open("README.md", "r", mode))
- local stat = assert(uv.fs_fstat(fd))
- local data = assert(uv.fs_read(fd, stat.size, 0))
- assert(#data == stat.size)
- assert(uv.fs_close(fd))
- end)
- end)
-
- test("invalid file", function (print, p, expect, uv)
- local mode = tonumber("644", 8)
- bench(uv, p, 0x1500, function ()
- local req = uv.fs_open("BAD_FILE", "r", mode, expect(function (err, fd)
- assert(not fd)
- assert(err)
- end))
- end)
- end)
-
- test("invalid file sync", function (print, p, expect, uv)
- local mode = tonumber("644", 8)
- bench(uv, p, 0x20000, function ()
- local fd, err = uv.fs_open("BAD_FILE", "r", mode)
- assert(not fd)
- assert(err)
- end)
- end)
-
- test("invalid spawn args", function (print, p, expect, uv)
- -- Regression test for #73
- bench(uv, p, 0x10000, function ()
- local ret, err = pcall(function ()
- return uv.spawn("ls", {
- args = {"-l", "-h"},
- stdio = {0, 1, 2},
- env = {"EXTRA=true"},
- gid = false, -- Should be integer
- })
- end)
- assert(not ret)
- assert(err)
- end)
- end)
-
- test("stream writing with string and array", function (print, p, expect, uv)
- local port = 0
- local server = uv.new_tcp()
- local data
- local count = 0x800
- server:unref()
- server:bind("127.0.0.1", port)
- server:listen(128, expect(function (err)
- assert(not err, err)
- local client = uv.new_tcp()
- server:accept(client)
- client:write(data)
- client:read_start(expect(function (err, data)
- assert(not err, err)
- assert(data)
- client:close()
- end))
- end, count))
- local address = server:getsockname()
- bench(uv, p, count, function ()
- data = string.rep("Hello", 500)
- local socket = uv.new_tcp()
- socket:connect(address.ip, address.port, expect(function (err)
- assert(not err, err)
- socket:read_start(expect(function (err, chunk)
- assert(not err, err)
- assert(chunk)
- local data = {}
- for i = 0, 100 do
- data[i + 1] = string.rep(string.char(i), 100)
- end
- socket:write(data)
- socket:close()
- end))
- end))
- uv.run()
- end)
- server:close()
- end)
-
-end)
diff --git a/3rdparty/luv/tests/test-misc.lua b/3rdparty/luv/tests/test-misc.lua
deleted file mode 100644
index 72a7b30785e..00000000000
--- a/3rdparty/luv/tests/test-misc.lua
+++ /dev/null
@@ -1,85 +0,0 @@
-return require('lib/tap')(function (test)
-
- test("uv.guess_handle", function (print, p, expect, uv)
- local types = {
- [0] = assert(uv.guess_handle(0)),
- assert(uv.guess_handle(1)),
- assert(uv.guess_handle(2)),
- }
- p("stdio fd types", types)
- end)
-
- test("uv.version and uv.version_string", function (print, p, expect, uv)
- local version = assert(uv.version())
- local version_string = assert(uv.version_string())
- p{version=version, version_string=version_string}
- assert(type(version) == "number")
- assert(type(version_string) == "string")
- end)
-
- test("memory size", function (print, p, expect, uv)
- local rss = uv.resident_set_memory()
- local total = uv.get_total_memory()
- local free = uv.get_free_memory()
- p{rss=rss,total=total,free=free}
- assert(rss < total)
- end)
-
- test("uv.uptime", function (print, p, expect, uv)
- local uptime = assert(uv.uptime())
- p{uptime=uptime}
- end)
-
- test("uv.getrusage", function (print, p, expect, uv)
- local rusage = assert(uv.getrusage())
- p(rusage)
- end)
-
- test("uv.cpu_info", function (print, p, expect, uv)
- local info = assert(uv.cpu_info())
- p(info)
- end)
-
- test("uv.interface_addresses", function (print, p, expect, uv)
- local addresses = assert(uv.interface_addresses())
- for name, info in pairs(addresses) do
- p(name, addresses[name])
- end
- end)
-
- test("uv.loadavg", function (print, p, expect, uv)
- local avg = {assert(uv.loadavg())}
- p(avg)
- assert(#avg == 3)
- end)
-
- test("uv.exepath", function (print, p, expect, uv)
- local path = assert(uv.exepath())
- p(path)
- end)
-
- test("uv.os_homedir", function (print, p, expect, uv)
- local path = assert(uv.os_homedir())
- p(path)
- end)
-
- test("uv.cwd and uv.chdir", function (print, p, expect, uv)
- local old = assert(uv.cwd())
- p(old)
- assert(uv.chdir("/"))
- local cwd = assert(uv.cwd())
- p(cwd)
- assert(cwd ~= old)
- assert(uv.chdir(old))
- end)
-
- test("uv.hrtime", function (print, p, expect, uv)
- local time = assert(uv.hrtime())
- p(time)
- end)
-
- test("test_getpid", function (print, p, expect, uv)
- assert(uv.getpid())
- end)
-
-end)
diff --git a/3rdparty/luv/tests/test-prepare-check-idle-async.lua b/3rdparty/luv/tests/test-prepare-check-idle-async.lua
deleted file mode 100644
index 389c2633efb..00000000000
--- a/3rdparty/luv/tests/test-prepare-check-idle-async.lua
+++ /dev/null
@@ -1,49 +0,0 @@
-return require('lib/tap')(function (test)
-
- test("simple prepare", function (print, p, expect, uv)
- local prepare = uv.new_prepare()
- uv.prepare_start(prepare, expect(function ()
- p("prepare", prepare)
- uv.prepare_stop(prepare)
- uv.close(prepare, expect(function ()
- end))
- end))
- end)
-
- test("simple check", function (print, p, expect, uv)
- local check = uv.new_check()
- uv.check_start(check, expect(function ()
- p("check", check)
- uv.check_stop(check)
- uv.close(check, expect(function ()
- end))
- end))
-
- -- Trigger with a timer
- local timer = uv.new_timer()
- uv.timer_start(timer, 10, 0, expect(function()
- p("timeout", timer)
- uv.timer_stop(timer)
- uv.close(timer)
- end))
- end)
-
- test("simple idle", function (print, p, expect, uv)
- local idle = uv.new_idle()
- uv.idle_start(idle, expect(function ()
- p("idle", idle)
- uv.idle_stop(idle)
- uv.close(idle, expect(function ()
- end))
- end))
- end)
-
- test("simple async", function (print, p, expect, uv)
- local async
- async = uv.new_async(expect(function ()
- uv.close(async)
- end))
- uv.async_send(async)
- end)
-
-end)
diff --git a/3rdparty/luv/tests/test-process.lua b/3rdparty/luv/tests/test-process.lua
deleted file mode 100644
index 4d2b6fbfdab..00000000000
--- a/3rdparty/luv/tests/test-process.lua
+++ /dev/null
@@ -1,101 +0,0 @@
-return require('lib/tap')(function (test)
-
- test("test disable_stdio_inheritance", function (print, p, expect, uv)
- uv.disable_stdio_inheritance()
- end)
-
- test("process stdout", function (print, p, expect, uv)
- local stdout = uv.new_pipe(false)
-
- local handle, pid
- handle, pid = uv.spawn(uv.exepath(), {
- args = {"-e", "print 'Hello World'"},
- stdio = {nil, stdout},
- }, expect(function (code, signal)
- p("exit", {code=code, signal=signal})
- uv.close(handle)
- end))
-
- p{
- handle=handle,
- pid=pid
- }
-
- uv.read_start(stdout, expect(function (err, chunk)
- p("stdout", {err=err,chunk=chunk})
- assert(not err, err)
- uv.close(stdout)
- end))
-
- end)
-
- if _G.isWindows then return end
-
- test("spawn and kill by pid", function (print, p, expect, uv)
- local handle, pid
- handle, pid = uv.spawn("sleep", {
- args = {1},
- }, expect(function (status, signal)
- p("exit", handle, {status=status,signal=signal})
- assert(status == 0)
- assert(signal == 2)
- uv.close(handle)
- end))
- p{handle=handle,pid=pid}
- uv.kill(pid, "sigint")
- end)
-
- test("spawn and kill by handle", function (print, p, expect, uv)
- local handle, pid
- handle, pid = uv.spawn("sleep", {
- args = {1},
- }, expect(function (status, signal)
- p("exit", handle, {status=status,signal=signal})
- assert(status == 0)
- assert(signal == 15)
- uv.close(handle)
- end))
- p{handle=handle,pid=pid}
- uv.process_kill(handle, "sigterm")
- end)
-
- test("invalid command", function (print, p, expect, uv)
- local handle, err
- handle, err = uv.spawn("ksjdfksjdflkjsflksdf", {}, function(exit, code)
- assert(false)
- end)
- assert(handle == nil)
- assert(err)
- end)
-
- test("process stdio", function (print, p, expect, uv)
- local stdin = uv.new_pipe(false)
- local stdout = uv.new_pipe(false)
-
- local handle, pid
- handle, pid = uv.spawn("cat", {
- stdio = {stdin, stdout},
- }, expect(function (code, signal)
- p("exit", {code=code, signal=signal})
- uv.close(handle)
- end))
-
- p{
- handle=handle,
- pid=pid
- }
-
- uv.read_start(stdout, expect(function (err, chunk)
- p("stdout", {err=err,chunk=chunk})
- assert(not err, err)
- uv.close(stdout)
- end))
-
- uv.write(stdin, "Hello World")
- uv.shutdown(stdin, expect(function ()
- uv.close(stdin)
- end))
-
- end)
-
-end)
diff --git a/3rdparty/luv/tests/test-sigchld-after-lua_close.sh b/3rdparty/luv/tests/test-sigchld-after-lua_close.sh
deleted file mode 100644
index e7d22d3df36..00000000000
--- a/3rdparty/luv/tests/test-sigchld-after-lua_close.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/sh
-# Verifies that luv will cleanup libuv process handles correctly even if
-# not done by "userspace".
-# Details: https://github.com/luvit/luv/issues/193
-
-# This test modifies one of the examples to skip libuv process cleanup,
-# purposely making it leave SIGCHLD signal handler.
-#
-patch -p1 << "EOF"
-diff --git a/examples/talking-to-children.lua b/examples/talking-to-children.lua
-index 10a53ef..6c6c53f 100644
---- a/examples/talking-to-children.lua
-+++ b/examples/talking-to-children.lua
-@@ -41,7 +41,3 @@ uv.read_start(stdout, onread)
- uv.read_start(stderr, onread)
- uv.write(stdin, "Hello World")
- uv.shutdown(stdin, onshutdown)
--
--uv.run()
--uv.walk(uv.close)
--uv.run()
-EOF
-
-# It also requires a patched lua standalone interpreter that sends SIGCHLD to
-# itself after calling lua_close, which would have freed all memory of the libuv
-# event loop associated with the lua state.
-(
-cd deps/lua
-patch -p1 << "EOF"
-diff --git a/src/lua.c b/src/lua.c
-index 7a47582..4dc19d5 100644
---- a/src/lua.c
-+++ b/src/lua.c
-@@ -608,6 +608,7 @@ int main (int argc, char **argv) {
- result = lua_toboolean(L, -1); /* get result */
- report(L, status);
- lua_close(L);
-+ kill(0, SIGCHLD);
- return (result && status == LUA_OK) ? EXIT_SUCCESS : EXIT_FAILURE;
- }
-EOF
-)
-
-WITH_LUA_ENGINE=Lua make
-./build/lua examples/talking-to-children.lua
diff --git a/3rdparty/luv/tests/test-signal.lua b/3rdparty/luv/tests/test-signal.lua
deleted file mode 100644
index c05db77c888..00000000000
--- a/3rdparty/luv/tests/test-signal.lua
+++ /dev/null
@@ -1,40 +0,0 @@
-local child_code = string.dump(function ()
- local uv = require('luv')
- local signal = uv.new_signal()
- uv.ref(signal)
- uv.signal_start(signal, "sigint", function ()
- uv.unref(signal)
- end)
- uv.run()
- os.exit(7)
-end)
-
-return require('lib/tap')(function (test)
-
- if _G.isWindows then return end
-
- test("Catch SIGINT", function (print, p, expect, uv)
- local child, pid
- local input = uv.new_pipe(false)
- child, pid = assert(uv.spawn(uv.exepath(), {
- args = {"-"},
- -- cwd = uv.cwd(),
- stdio = {input,1,2}
- }, expect(function (code, signal)
- p("exit", {pid=pid,code=code,signal=signal})
- assert(code == 7)
- assert(signal == 0)
- uv.close(input)
- uv.close(child)
- end)))
- uv.write(input, child_code)
- uv.shutdown(input)
- local timer = uv.new_timer()
- uv.timer_start(timer, 200, 0, expect(function ()
- print("Sending child SIGINT")
- uv.process_kill(child, "sigint")
- uv.close(timer)
- end))
- end)
-
-end)
diff --git a/3rdparty/luv/tests/test-tcp.lua b/3rdparty/luv/tests/test-tcp.lua
deleted file mode 100644
index 885d381ebce..00000000000
--- a/3rdparty/luv/tests/test-tcp.lua
+++ /dev/null
@@ -1,114 +0,0 @@
-return require('lib/tap')(function (test)
- test("basic tcp server and client", function (print, p, expect, uv)
- local server = uv.new_tcp()
- uv.tcp_bind(server, "::", 0)
- uv.listen(server, 128, expect(function (err)
- p("server on connection", server)
- assert(not err, err)
- uv.close(server)
- end))
-
- local address = uv.tcp_getsockname(server)
- p{server=server,address=address}
-
- local client = uv.new_tcp()
- local req = uv.tcp_connect(client, "::1", address.port, expect(function (err)
- p("client on connect", client, err)
- assert(not err, err)
- uv.shutdown(client, expect(function (err)
- p("client on shutdown", client, err)
- assert(not err, err)
- uv.close(client, expect(function ()
- p("client on close", client)
- end))
- end))
- end))
- p{client=client,req=req}
- end)
-
- test("tcp echo server and client", function (print, p, expect, uv)
- local server = uv.new_tcp()
- assert(uv.tcp_bind(server, "127.0.0.1", 0))
- assert(uv.listen(server, 1, expect(function ()
- local client = uv.new_tcp()
- assert(uv.accept(server, client))
- assert(uv.read_start(client, expect(function (err, data)
- p("server read", {err=err,data=data})
- assert(not err, err)
- if data then
- assert(uv.write(client, data))
- else
- assert(uv.read_stop(client))
- uv.close(client)
- uv.close(server)
- end
- end, 2)))
- end)))
-
- local address = uv.tcp_getsockname(server)
- p{server=server,address=address}
-
- local socket = assert(uv.new_tcp())
- assert(uv.tcp_connect(socket, "127.0.0.1", address.port, expect(function ()
- assert(uv.read_start(socket, expect(function (err, data)
- p("client read", {err=err,data=data})
- assert(not err, err)
- assert(uv.read_stop(socket))
- uv.close(socket)
- end)))
- local req = assert(uv.write(socket, "Hello", function (err)
- p("client onwrite", socket, err)
- assert(not err, err)
- end))
- p{socket=socket,req=req}
- end)))
- end)
-
- test("tcp echo server and client with methods", function (print, p, expect, uv)
- local server = uv.new_tcp()
- assert(server:bind("127.0.0.1", 0))
- assert(server:listen(1, expect(function ()
- local client = uv.new_tcp()
- assert(server:accept(client))
- assert(client:read_start(expect(function (err, data)
- p("server read", {err=err,data=data})
- assert(not err, err)
- if data then
- assert(client:write(data))
- else
- assert(client:read_stop())
- client:close()
- server:close()
- end
- end, 2)))
- end)))
-
- local address = server:getsockname()
- p{server=server,address=address}
-
- local socket = assert(uv.new_tcp())
- assert(socket:connect("127.0.0.1", address.port, expect(function ()
- assert(socket:read_start(expect(function (err, data)
- p("client read", {err=err,data=data})
- assert(not err, err)
- assert(socket:read_stop())
- socket:close()
- end)))
- local req = assert(socket:write("Hello", function (err)
- p("client onwrite", socket, err)
- assert(not err, err)
- end))
- p{socket=socket,req=req}
- end)))
- end)
-
- test("tcp invalid ip address", function (print, p, expect, uv)
- local ip = '127.0.0.100005'
- local server = uv.new_tcp()
- local status, err = pcall(function() uv.tcp_bind(server, ip, 1000) end)
- assert(not status)
- p(err)
- assert(err:find(ip))
- uv.close(server)
- end)
-end)
diff --git a/3rdparty/luv/tests/test-thread.lua b/3rdparty/luv/tests/test-thread.lua
deleted file mode 100644
index 838b51e4fff..00000000000
--- a/3rdparty/luv/tests/test-thread.lua
+++ /dev/null
@@ -1,47 +0,0 @@
-return require('lib/tap')(function (test)
-
- test("test thread create", function(print, p, expect, uv)
- local delay = 1000
- local before = os.time()
- local thread = uv.new_thread(function(delay)
- require('luv').sleep(delay)
- end,delay)
- uv.thread_join(thread)
- local elapsed = (os.time() - before) * 1000
- p({
- delay = delay,
- elapsed = elapsed
- })
- assert(elapsed >= delay, "elapsed should be at least delay ")
- end)
-
- test("test thread create with arguments", function(print, p, expect, uv)
- local before = os.time()
- local args = {500, 'string', nil, false, 5, "helloworld"}
- local unpack = unpack or table.unpack
- uv.new_thread(function(num,s,null,bool,five,hw)
- assert(type(num) == "number")
- assert(type(s) == "string")
- assert(null == nil)
- assert(bool == false)
- assert(five == 5)
- assert(hw == 'helloworld')
- require('luv').sleep(1000)
- end, unpack(args)):join()
- local elapsed = (os.time() - before) * 1000
- assert(elapsed >= 1000, "elapsed should be at least delay ")
- end)
-
- test("test thread sleep msecs in main thread", function(print, p, expect, uv)
- local delay = 1000
- local before = os.time()
- uv.sleep(delay)
- local elapsed = (os.time() - before) * 1000
- p({
- delay = delay,
- elapsed = elapsed
- })
- assert(elapsed >= delay, "elapsed should be at least delay ")
- end)
-
-end)
diff --git a/3rdparty/luv/tests/test-timer.lua b/3rdparty/luv/tests/test-timer.lua
deleted file mode 100644
index f9eb9d89c5f..00000000000
--- a/3rdparty/luv/tests/test-timer.lua
+++ /dev/null
@@ -1,87 +0,0 @@
-return require('lib/tap')(function (test)
-
- -- This tests using timers for a simple timeout.
- -- It also tests the handle close callback and
- test("simple timeout", function (print, p, expect, uv)
- local timer = uv.new_timer()
- local function onclose()
- p("closed", timer)
- end
- local function ontimeout()
- p("timeout", timer)
- uv.close(timer, expect(onclose))
- end
- uv.timer_start(timer, 10, 0, expect(ontimeout))
- end)
-
- -- This is like the previous test, but using repeat.
- test("simple interval", function (print, p, expect, uv)
- local timer = uv.new_timer()
- local count = 3
- local onclose = expect(function ()
- p("closed", timer)
- end)
- local function oninterval()
- p("interval", timer)
- count = count - 1
- if count == 0 then
- uv.close(timer, onclose)
- end
- end
- uv.timer_start(timer, 10, 10, oninterval)
- end)
-
- -- Test two concurrent timers
- -- There is a small race condition, but there are 100ms of wiggle room.
- -- 400ms is halfway between 100+200ms and 100+400ms
- test("timeout with interval", function (print, p, expect, uv)
- local a = uv.new_timer()
- local b = uv.new_timer()
- uv.timer_start(a, 400, 0, expect(function ()
- p("timeout", a)
- uv.timer_stop(b)
- uv.close(a)
- uv.close(b)
- end))
- uv.timer_start(b, 100, 200, expect(function ()
- p("interval", b)
- end, 2))
- end)
-
- -- This advanced test uses the rest of the uv_timer_t functions
- -- to create an interval that shrinks over time.
- test("shrinking interval", function (print, p, expect, uv)
- local timer = uv.new_timer()
- uv.timer_start(timer, 10, 0, expect(function ()
- local r = uv.timer_get_repeat(timer)
- p("interval", timer, r)
- if r == 0 then
- uv.timer_set_repeat(timer, 8)
- uv.timer_again(timer)
- elseif r == 2 then
- uv.timer_stop(timer)
- uv.close(timer)
- else
- uv.timer_set_repeat(timer, r / 2)
- end
- end, 4))
- end)
-
- test("shrinking interval using methods", function (print, p, expect, uv)
- local timer = uv.new_timer()
- timer:start(10, 0, expect(function ()
- local r = timer:get_repeat()
- p("interval", timer, r)
- if r == 0 then
- timer:set_repeat(8)
- timer:again()
- elseif r == 2 then
- timer:stop()
- timer:close()
- else
- timer:set_repeat(r / 2)
- end
- end, 4))
- end)
-
-end)
diff --git a/3rdparty/luv/tests/test-work.lua b/3rdparty/luv/tests/test-work.lua
deleted file mode 100644
index 3a98b15e6bc..00000000000
--- a/3rdparty/luv/tests/test-work.lua
+++ /dev/null
@@ -1,48 +0,0 @@
-return require('lib/tap')(function (test)
- test("test threadpool", function(print,p,expect,_uv)
- p('Please be patient, the test cost a lots of time')
- local count = 1000 --for memleaks dected
- local step = 0
- local ctx
- ctx = _uv.new_work(
- function(n,s) --work,in threadpool
- local uv = require('luv')
- local t = uv.thread_self()
- uv.sleep(100)
- return n,n*n, tostring(uv.thread_self()),s
- end,
- function(n,r,id, s)
- assert(n*n==r)
- if step < count then
- _uv.queue_work(ctx,n,s)
- step = step + 1
- if (step % 100==0) then
- p(string.format('run %d%%', math.floor(step*100/count)))
- end
- end
- end --after work, in loop thread
- )
- local ls = string.rep('-',4096)
-
- _uv.queue_work(ctx,2,ls)
- _uv.queue_work(ctx,4,ls)
- _uv.queue_work(ctx,6,ls)
- _uv.queue_work(ctx,-2,ls)
- _uv.queue_work(ctx,-11,ls)
- _uv.queue_work(ctx,2,ls)
- _uv.queue_work(ctx,4,ls)
- _uv.queue_work(ctx,6,ls)
- _uv.queue_work(ctx,-2,ls)
- _uv.queue_work(ctx,-11,ls)
- _uv.queue_work(ctx,2,ls)
- _uv.queue_work(ctx,4,ls)
- _uv.queue_work(ctx,6,ls)
- _uv.queue_work(ctx,-2,ls)
- _uv.queue_work(ctx,-11,ls)
- _uv.queue_work(ctx,2,ls)
- _uv.queue_work(ctx,4,ls)
- _uv.queue_work(ctx,6,ls)
- _uv.queue_work(ctx,-2,ls)
- _uv.queue_work(ctx,-11,ls)
- end)
-end)
diff --git a/3rdparty/rapidjson/.gitattributes b/3rdparty/rapidjson/.gitattributes
new file mode 100644
index 00000000000..6f598bb7f91
--- /dev/null
+++ b/3rdparty/rapidjson/.gitattributes
@@ -0,0 +1,22 @@
+# Set the default behavior, in case people don't have core.autocrlf set.
+* text=auto
+
+# Explicitly declare text files you want to always be normalized and converted
+# to native line endings on checkout.
+*.cpp text
+*.h text
+*.txt text
+*.md text
+*.cmake text
+*.svg text
+*.dot text
+*.yml text
+*.in text
+*.sh text
+*.autopkg text
+Dockerfile text
+
+# Denote all files that are truly binary and should not be modified.
+*.png binary
+*.jpg binary
+*.json binary \ No newline at end of file
diff --git a/3rdparty/rapidjson/.travis.yml b/3rdparty/rapidjson/.travis.yml
index 78fe1d54615..9266277b606 100644
--- a/3rdparty/rapidjson/.travis.yml
+++ b/3rdparty/rapidjson/.travis.yml
@@ -1,54 +1,175 @@
language: cpp
+sudo: false
+cache:
+ - ccache
-compiler:
- - clang
- - gcc
+addons:
+ apt:
+ packages: &default_packages
+ - cmake
+ - valgrind
env:
- matrix:
- - CONF=debug ARCH=x86_64 CXX11=ON
- - CONF=release ARCH=x86_64 CXX11=ON
- - CONF=debug ARCH=x86 CXX11=ON
- - CONF=release ARCH=x86 CXX11=ON
- - CONF=debug ARCH=x86_64 CXX11=OFF
- - CONF=debug ARCH=x86 CXX11=OFF
- global:
+global:
+ - USE_CCACHE=1
+ - CCACHE_SLOPPINESS=pch_defines,time_macros
+ - CCACHE_COMPRESS=1
+ - CCACHE_MAXSIZE=100M
- ARCH_FLAGS_x86='-m32' # #266: don't use SSE on 32-bit
- ARCH_FLAGS_x86_64='-msse4.2' # use SSE4.2 on 64-bit
- GITHUB_REPO='miloyip/rapidjson'
- secure: "HrsaCb+N66EG1HR+LWH1u51SjaJyRwJEDzqJGYMB7LJ/bfqb9mWKF1fLvZGk46W5t7TVaXRDD5KHFx9DPWvKn4gRUVkwTHEy262ah5ORh8M6n/6VVVajeV/AYt2C0sswdkDBDO4Xq+xy5gdw3G8s1A4Inbm73pUh+6vx+7ltBbk="
-before_install:
- - sudo apt-get update -qq
- - sudo apt-get install -qq cmake valgrind
- - sudo apt-get --no-install-recommends install doxygen # Don't install LaTeX stuffs
- - if [ "$ARCH" = "x86" ]; then sudo apt-get install -qq g++-multilib libc6-dbg:i386; fi
- - if [ "$CC" = "gcc" ] && [ "$CONF" = "debug" ]; then sudo pip install cpp-coveralls; export GCOV_FLAGS='--coverage'; fi
-
-install: true
+matrix:
+ include:
+ # gcc
+ - env: CONF=release ARCH=x86 CXX11=ON
+ compiler: gcc
+ addons:
+ apt:
+ packages:
+ - *default_packages
+ - g++-multilib
+ - libc6-dbg:i386
+ - env: CONF=release ARCH=x86_64 CXX11=ON
+ compiler: gcc
+ - env: CONF=debug ARCH=x86 CXX11=OFF
+ compiler: gcc
+ addons:
+ apt:
+ packages:
+ - *default_packages
+ - g++-multilib
+ - libc6-dbg:i386
+ - env: CONF=debug ARCH=x86_64 CXX11=OFF
+ compiler: gcc
+ # clang
+ - env: CONF=debug ARCH=x86 CXX11=ON CCACHE_CPP2=yes
+ compiler: clang
+ addons:
+ apt:
+ sources:
+ - llvm-toolchain-precise-3.7
+ - ubuntu-toolchain-r-test
+ packages:
+ - *default_packages
+ - g++-multilib
+ - libc6-dbg:i386
+ - clang-3.7
+ - env: CONF=debug ARCH=x86_64 CXX11=ON CCACHE_CPP2=yes
+ compiler: clang
+ addons:
+ apt:
+ sources:
+ - llvm-toolchain-precise-3.7
+ - ubuntu-toolchain-r-test
+ packages:
+ - *default_packages
+ - clang-3.7
+ - env: CONF=debug ARCH=x86 CXX11=OFF CCACHE_CPP2=yes
+ compiler: clang
+ addons:
+ apt:
+ sources:
+ - llvm-toolchain-precise-3.7
+ - ubuntu-toolchain-r-test
+ packages:
+ - *default_packages
+ - g++-multilib
+ - libc6-dbg:i386
+ - clang-3.7
+ - env: CONF=debug ARCH=x86_64 CXX11=OFF CCACHE_CPP2=yes
+ compiler: clang
+ addons:
+ apt:
+ sources:
+ - llvm-toolchain-precise-3.7
+ - ubuntu-toolchain-r-test
+ packages:
+ - *default_packages
+ - clang-3.7
+ - env: CONF=release ARCH=x86 CXX11=ON CCACHE_CPP2=yes
+ compiler: clang
+ addons:
+ apt:
+ sources:
+ - llvm-toolchain-precise-3.7
+ - ubuntu-toolchain-r-test
+ packages:
+ - *default_packages
+ - g++-multilib
+ - libc6-dbg:i386
+ - clang-3.7
+ - env: CONF=release ARCH=x86_64 CXX11=ON CCACHE_CPP2=yes
+ compiler: clang
+ addons:
+ apt:
+ sources:
+ - llvm-toolchain-precise-3.7
+ - ubuntu-toolchain-r-test
+ packages:
+ - *default_packages
+ - clang-3.7
+ # coverage report
+ - env: CONF=debug ARCH=x86 CXX11=ON GCOV_FLAGS='--coverage'
+ compiler: gcc
+ cache:
+ - ccache
+ - pip
+ addons:
+ apt:
+ packages:
+ - *default_packages
+ - g++-multilib
+ - libc6-dbg:i386
+ after_success:
+ - pip install --user cpp-coveralls
+ - coveralls -r .. --gcov-options '\-lp' -e thirdparty -e example -e test -e build/CMakeFiles -e include/rapidjson/msinttypes -e include/rapidjson/internal/meta.h -e include/rapidjson/error/en.h
+ - env: CONF=debug ARCH=x86_64 GCOV_FLAGS='--coverage'
+ compiler: gcc
+ cache:
+ - ccache
+ - pip
+ addons:
+ apt:
+ packages:
+ - *default_packages
+ - g++-multilib
+ - libc6-dbg:i386
+ after_success:
+ - pip install --user cpp-coveralls
+ - coveralls -r .. --gcov-options '\-lp' -e thirdparty -e example -e test -e build/CMakeFiles -e include/rapidjson/msinttypes -e include/rapidjson/internal/meta.h -e include/rapidjson/error/en.h
+ - script: # Documentation task
+ - cd build
+ - cmake .. -DRAPIDJSON_HAS_STDSTRING=ON -DCMAKE_VERBOSE_MAKEFILE=ON
+ - make travis_doc
+ cache: false
+ addons:
+ apt:
+ packages:
+ - doxygen
before_script:
-# hack to avoid Valgrind bug (https://bugs.kde.org/show_bug.cgi?id=326469),
-# exposed by merging PR#163 (using -march=native)
+ - ccache -s
+ # hack to avoid Valgrind bug (https://bugs.kde.org/show_bug.cgi?id=326469),
+ # exposed by merging PR#163 (using -march=native)
+ # TODO: Since this bug is already fixed. Remove this when valgrind can be upgraded.
- sed -i "s/-march=native//" CMakeLists.txt
- - mkdir build
- - >
- eval "ARCH_FLAGS=\${ARCH_FLAGS_${ARCH}}" ;
- (cd build && cmake
- -DRAPIDJSON_HAS_STDSTRING=ON
- -DRAPIDJSON_BUILD_CXX11=$CXX11
- -DCMAKE_VERBOSE_MAKEFILE=ON
- -DCMAKE_BUILD_TYPE=$CONF
- -DCMAKE_CXX_FLAGS="$ARCH_FLAGS $GCOV_FLAGS"
- -DCMAKE_EXE_LINKER_FLAGS=$GCOV_FLAGS
- ..)
+ - mkdir build
script:
+ - if [ "$CXX" = "clang++" ]; then export CXX="clang++-3.7" CC="clang-3.7"; fi
+ - >
+ eval "ARCH_FLAGS=\${ARCH_FLAGS_${ARCH}}" ;
+ (cd build && cmake
+ -DRAPIDJSON_HAS_STDSTRING=ON
+ -DRAPIDJSON_BUILD_CXX11=$CXX11
+ -DCMAKE_VERBOSE_MAKEFILE=ON
+ -DCMAKE_BUILD_TYPE=$CONF
+ -DCMAKE_CXX_FLAGS="$ARCH_FLAGS $GCOV_FLAGS"
+ -DCMAKE_EXE_LINKER_FLAGS=$GCOV_FLAGS
+ ..)
- cd build
- - make tests
- - make examples
- - ctest -V `[ "$CONF" = "release" ] || echo "-E perftest"`
- - make travis_doc
-
-after_success:
- - coveralls -r .. --gcov-options '\-lp' -e thirdparty -e example -e test -e build/CMakeFiles -e include/rapidjson/msinttypes -e include/rapidjson/internal/meta.h -e include/rapidjson/error/en.h
+ - make tests -j 2
+ - make examples -j 2
+ - ctest -j 2 -V `[ "$CONF" = "release" ] || echo "-E perftest"`
diff --git a/3rdparty/rapidjson/CMakeLists.txt b/3rdparty/rapidjson/CMakeLists.txt
index fcacbd3c5ec..fa2bdcfef7c 100644
--- a/3rdparty/rapidjson/CMakeLists.txt
+++ b/3rdparty/rapidjson/CMakeLists.txt
@@ -29,6 +29,15 @@ if(RAPIDJSON_HAS_STDSTRING)
add_definitions(-DRAPIDJSON_HAS_STDSTRING)
endif()
+find_program(CCACHE_FOUND ccache)
+if(CCACHE_FOUND)
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
+ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments -fcolor-diagnostics")
+ endif()
+endif(CCACHE_FOUND)
+
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -Wall -Wextra -Werror")
if (RAPIDJSON_BUILD_CXX11)
diff --git a/3rdparty/rapidjson/appveyor.yml b/3rdparty/rapidjson/appveyor.yml
index 7d586e83a48..13d8b94dbb3 100644
--- a/3rdparty/rapidjson/appveyor.yml
+++ b/3rdparty/rapidjson/appveyor.yml
@@ -1,3 +1,4 @@
+os: Visual Studio 2015 CTP
version: 1.0.2.{build}
configuration:
@@ -6,13 +7,25 @@ configuration:
environment:
matrix:
- - VS_VERSION: 11
+ # - VS_VERSION: 9 2008
+ # VS_PLATFORM: win32
+ # - VS_VERSION: 9 2008
+ # VS_PLATFORM: x64
+ - VS_VERSION: 10 2010
VS_PLATFORM: win32
- - VS_VERSION: 11
+ - VS_VERSION: 10 2010
VS_PLATFORM: x64
- - VS_VERSION: 12
+ - VS_VERSION: 11 2012
VS_PLATFORM: win32
- - VS_VERSION: 12
+ - VS_VERSION: 11 2012
+ VS_PLATFORM: x64
+ - VS_VERSION: 12 2013
+ VS_PLATFORM: win32
+ - VS_VERSION: 12 2013
+ VS_PLATFORM: x64
+ - VS_VERSION: 14 2015
+ VS_PLATFORM: win32
+ - VS_VERSION: 14 2015
VS_PLATFORM: x64
before_build:
diff --git a/3rdparty/rapidjson/bin/data/glossary.json b/3rdparty/rapidjson/bin/data/glossary.json
index d5ca56d1950..d6e6ca15077 100644
--- a/3rdparty/rapidjson/bin/data/glossary.json
+++ b/3rdparty/rapidjson/bin/data/glossary.json
@@ -1,22 +1,22 @@
-{
- "glossary": {
- "title": "example glossary",
- "GlossDiv": {
- "title": "S",
- "GlossList": {
- "GlossEntry": {
- "ID": "SGML",
- "SortAs": "SGML",
- "GlossTerm": "Standard Generalized Markup Language",
- "Acronym": "SGML",
- "Abbrev": "ISO 8879:1986",
- "GlossDef": {
- "para": "A meta-markup language, used to create markup languages such as DocBook.",
- "GlossSeeAlso": ["GML", "XML"]
- },
- "GlossSee": "markup"
- }
- }
- }
- }
+{
+ "glossary": {
+ "title": "example glossary",
+ "GlossDiv": {
+ "title": "S",
+ "GlossList": {
+ "GlossEntry": {
+ "ID": "SGML",
+ "SortAs": "SGML",
+ "GlossTerm": "Standard Generalized Markup Language",
+ "Acronym": "SGML",
+ "Abbrev": "ISO 8879:1986",
+ "GlossDef": {
+ "para": "A meta-markup language, used to create markup languages such as DocBook.",
+ "GlossSeeAlso": ["GML", "XML"]
+ },
+ "GlossSee": "markup"
+ }
+ }
+ }
+ }
} \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/data/menu.json b/3rdparty/rapidjson/bin/data/menu.json
index acdf930ea5f..539c3af2013 100644
--- a/3rdparty/rapidjson/bin/data/menu.json
+++ b/3rdparty/rapidjson/bin/data/menu.json
@@ -1,27 +1,27 @@
-{"menu": {
- "header": "SVG Viewer",
- "items": [
- {"id": "Open"},
- {"id": "OpenNew", "label": "Open New"},
- null,
- {"id": "ZoomIn", "label": "Zoom In"},
- {"id": "ZoomOut", "label": "Zoom Out"},
- {"id": "OriginalView", "label": "Original View"},
- null,
- {"id": "Quality"},
- {"id": "Pause"},
- {"id": "Mute"},
- null,
- {"id": "Find", "label": "Find..."},
- {"id": "FindAgain", "label": "Find Again"},
- {"id": "Copy"},
- {"id": "CopyAgain", "label": "Copy Again"},
- {"id": "CopySVG", "label": "Copy SVG"},
- {"id": "ViewSVG", "label": "View SVG"},
- {"id": "ViewSource", "label": "View Source"},
- {"id": "SaveAs", "label": "Save As"},
- null,
- {"id": "Help"},
- {"id": "About", "label": "About Adobe CVG Viewer..."}
- ]
+{"menu": {
+ "header": "SVG Viewer",
+ "items": [
+ {"id": "Open"},
+ {"id": "OpenNew", "label": "Open New"},
+ null,
+ {"id": "ZoomIn", "label": "Zoom In"},
+ {"id": "ZoomOut", "label": "Zoom Out"},
+ {"id": "OriginalView", "label": "Original View"},
+ null,
+ {"id": "Quality"},
+ {"id": "Pause"},
+ {"id": "Mute"},
+ null,
+ {"id": "Find", "label": "Find..."},
+ {"id": "FindAgain", "label": "Find Again"},
+ {"id": "Copy"},
+ {"id": "CopyAgain", "label": "Copy Again"},
+ {"id": "CopySVG", "label": "Copy SVG"},
+ {"id": "ViewSVG", "label": "View SVG"},
+ {"id": "ViewSource", "label": "View Source"},
+ {"id": "SaveAs", "label": "Save As"},
+ null,
+ {"id": "Help"},
+ {"id": "About", "label": "About Adobe CVG Viewer..."}
+ ]
}} \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/data/sample.json b/3rdparty/rapidjson/bin/data/sample.json
index 30930e765dc..80e26c1f79e 100644
--- a/3rdparty/rapidjson/bin/data/sample.json
+++ b/3rdparty/rapidjson/bin/data/sample.json
@@ -1,3315 +1,3315 @@
-{
- "a": {
- "6U閆崬밺뀫颒myj츥휘:$è–ˆmYí–š#rzé£+玭V㭢뾿愴Yî°‘ê–šX亥ᮉ푊\u0006åž¡ã­ë£\"厓ᔧḅ^Sqpv媫\"⤽걒\"˽Ἆ?ꇆ䬔未tv{DV鯀Tἆl凸g\\㈭ĭ즿UH㽤": null,
- "b茤z\\î¨.N": [[
- "ZL:ᅣዎ*Y|çŒ«åŠæ«•è¾Oj为1糕쪥æ³S룂w࡛á²â¸¥èš™)",
- {
- "\"䬰á»wDæ¾V`邀⠕VDãºsH6[칑.:醥葹*뻵倻aD\"": true,
- "e浱uî¿£p蔽Crà· JK軵xCʨ<뜡癙Yç©ï½¹é½ˆX/螗唻?<蘡+뷄㩤쳖3å‘犾&\\첊xzå崦ݻé´\"åµ¥B3㰃詤豺嚼aqJ⑆∥韼@\u000b㢊\u0015L臯.샥": false,
- "l?Ǩ喳e6㔡$M꼄I,(3á縢,䊀疅뉲B㴔傳䂴\u0088㮰钘ꜵ!ᅛ韽>": -5514085325291784739,
- "o㮚?\"춛㵉<\/﬊ࠃ䃪ä£wp6ἀ䱄[s*S嬈貒pᛥ㰉'ë€": [{
- "(QP윤懊FI<ꃣ『䕷[\"ç’å¶®?%Ḭå£à²»ä‡Ÿ0è¤!è—²ë¹bdæµ¶tl\u2049#쯀@僞": {"î—i妾8홫": {
- ",Mï£ë§ƒäž›K5nAㆴVNã’Ší–¬$n꩑&êŽæ¤žî·é˜«?/á¹ì„¸ë‰ª1x쥼㻤㪙`\"$쟒薟B煌܀ì¨à­2掳7㙟鴙Xå©¢\u0002": "Vዉèˆï ’᧷⦌kîŒï®žà°ˆnz*<?੃'ahhCFX(\u0007⮊Eã­ä±¾Gxꥩrâ£.æ´Ž",
- "ë»´5bDDí¯O傆盓왻U?êž…êŠNé­á§¢Ï„\"迳豲8\u001b䃥ꂻ䴺ྸHç­´,": {
- "\"L鸔SE㬡XV&~ÍŽ'놅蔞눶l匛?'.Kæ°\\ƢẨ疇má¿›'ê½³&!é¹ m'|{Pç—Š ç§„ì’¿u\u00111ä‹§î´¼gÏ©x7t丗D䊨䠻z0.A0": -1.50139930144708198E18,
- "8é‹‚ë›·ïž”?ì²’B☚>ï·œFM\"è­7ê€-VR<\/';ä™E9$䩉\f @s?íªo3^è¡´cî˜à¶Žä§ªaK鼟q䆨c{ä³ 5mᒲՙ蘹ᮩ": {
- "Fã²·JGoâ¯Pëµxë’³p䘧☔\"+ꨲå¿JfR㔹)4nç´¬G练Qáž!C|": true,
- "p^㫮솎ocî’£.೚A㤠??r\u000f)⾽⌲們M2.䴘䩳:⫭胃\\á¾@Fá­Œ\\K": false,
- "蟌Tk愙潦伩": {
- "aï‘<\/@ᾛ慂侇瘎": -7271305752851720826,
- "艓藬/>á„ṯ,XW~㲆w": {"Eç—§î–郶)㜓ha朗!N赻瞉駠uC\u20adè¾ <Ve?í±!ImäŽî­Ÿæ„:*s 9諚Prᵾ뒰髶B̌qWA8梸vS⫊⢳{t㺲q㺈랊뮣RqK밢쳪": [
- false,
- {
- "\u000b=>x퓮⣫P1à «LMMX'M刼唳ë¤": null,
- "P쓫晥%k覛ዩIUᇸ滨:å™í˜²lMR5䋈V梗>%å¹½ué –\\)쟟": null,
- "eg+昉~矠䧞难\b?gQì­·ç­\\eê® Nl{ಢ哭|]Mn銌╥zê–˜zⱷ⭤ᮜ^": [
- -1.30142114406914976E17,
- -1.7555215491128452E-19,
- null,
- "渾ã¨ß牄귛r?ëŒ?w[âšžÓ»~廩輫㼧/",
- -4.5737191805302129E18,
- null,
- "xyà¿‘M[ocì…’ç«“â’ºx?뜓y䊦>-Dì¼(&&?XKkc꩖ﺸá‹ëµžK伕6à§€)딀PæœyWæ™îž¢?훻魢傎EG碸9類៌g踲C⟌aEX舲:z꒸许",
- 3808159498143417627,
- null,
- {"m試\u20df1{G8&뚈h홯J<\/": {
- "3ஸ厠zs#1K7:rᥞoꅔꯧ&ë‡éµ¼éž«6è·œ#赿5l'8{7㕳(b/j\"厢aqç±€êš\u0015厼稥": [
- -2226135764510113982,
- true,
- null,
- {
- "h%'ë§žï–±Sì‹…Hs&dï”l슾W0jé¿M×D놯L~S-㇡Rì­¬%": null,
- "⟓咔謡칲\u0000孺ꛭx旑檉㶆?": null,
- "æ‡I転;￸B2Y`z\\ç“w,ë†æ¿æ’埵䂄)!ä¶¢D=à´­ã´ŸjyY": {
- "$ࡘt厛毣ൢIèŠ<겿骫⫦6tr惺a": [
- 6.385779736989334E-20,
- false,
- true,
- true,
- [
- -6.891946211462334E-19,
- null,
- {
- "]-\\êŸ1/è–“â§á½Š\\l牑\u0007A郃)阜ᇒᓌ-塯`W峬G}SDb㬨Q臉⮻빌O鞟톴첂B㺱<ƈmu챑J㴹㷳픷Oㆩs": {
- "\"â—‰B\"pᶉt骔J꩸ᄇá›iâ•°æ ›K쉷㉯é©!ãˆnì¹äŸ…難>盥yé“¿eà­”è’M貹ヅ8å˜‹í€¯ä‰¶áŒ¥ã¢æ®Šë»³\"絧╿ꉑ䠥?∃蓊{}㣣Gk긔H1哵峱": false,
- "6.瀫cN䇮F㧺?\\椯=ÚˆT䘆4â˜ïšŒ8qv": -3.5687501019676885E-19,
- "Q?yऴr혴{஀䳘p惭f1ﹸ䅷䕋贲<ྃᄊ繲hq\\b|#QSTî“¶s1c-7(äµ¢\u2069åŒçµ˜ê¯‰:læ¯´ï›æ±žt戀oà·Ÿáµ¶ë®±á£-醇Jx䙬äí–¢0࣫á¡grã„›": "\u0011_xM/蘇Chv;dhA5.嗀绱V爤ﰦiëµ²M",
- "â‘[\"ugoy^儣횎~U\\섯겜ï¥l2jw஌yD腅̂\u0019": true,
- "ⵯɇä²á«¿à¢š!㯢l샅笶戮1꣖0Xe": null,
- "劅fë„€ï‹ï§¼bå®ç„ŠE찓橵G!ʱç“뭔雩괛": [{"p⹣켙[q>燣äƒãž½î›œá©²x:쓤삘7玑퇼0<\/qç’‚á‘[ï ™Z\\3䅵䧳\u0011㤧|妱緒C['ì·“Yꞟ3Z鳱雼P錻BUì”§U`ᢶg蓱>.1Ó§è­«'L_5VäµÐ¦": [
- false,
- false,
- {"22ä‚盥N霂얢<F8î±ê¼µ7Gà°¸yhë€g᦭ꄢx硴嬢\u001a?Eê´†T|;7犟\"Wt%ä©O⨵t&#ᬋK'èœá²«æ”⾠鲂Të©·éƒ\u0018䓞cE": {"f=ä츜瞾zw?å­¡é£\\铀᫞yẆg(\u0011M6(s2]`ਫ": [[[{
- "'y몱纣4S@\\,i㷯럹Ua充Tᣢ9躘Zଞ쥿äŠs<\/刎\\\"뉦-8/": "蜑.X0꭛낢륹iì ¨êš<8?s볕è¡|Q✬᯦@\\G㑢屿Mn졾J굤⥟JW뤵苑rì•툄嵵?â¾¥O",
- "^1挲~[n귆誈央碠멪gI洷": -8214236471236116548,
- "sሣ%娌暡clr蟜㑓2\u000bSâŸ_X㨔⚴5~蔷ꀇ|Xu㬖,꤭å¹îµ¿r(g믇ì©ïЍ%췸앙|æ £U\\2]䤉+å• è¡ê¯ŽT鉹m\n/`SzDᅼ鞶": 1.1217523390167132E-19,
- "u톇=黚\\ ꂮ췵L>躰îe9â‘©_뵜斌n@B}$ê´»Yá±@ä§‹î´½V\"☒-諯cVë¯Ê ": true,
- "Ű螧ᔼæªéŽë•’딜qꄃH뜣<ç§à¥‚CYå“â¸>XQ㵡趌oë¬k픀빯a(ܵç”ë†à­¯/6Nᪧ}æšá†šì§ŒP牰泱鈷^d꣟#Lì‚€\"㕹襻;k㸊\\f+": true,
- "쎣\",|⫝̸阊x庿k잣v庅$éˆê´Žç‚”k쬪O_": [
- "ìž©AzZGz3v愠ꉈⵎ?㊱}Så°³à¯p\r2>ì·IP䘈M)w|\u000eE",
- -9222726055990423201,
- null,
- [
- false,
- {"´킮'뮤쯽Wxè®V,6ᩪ1ç´²aႈ\u205czD": [
- -930994432421097536,
- 3157232031581030121,
- "l貚PY䃛5@䭄<nW\u001e",
- [
- 3.801747732605161E18,
- [
- null,
- false,
- {
- "": 4.0442013775147072E16,
- "2J[sᡪ㞿|n'#廲꯬乞": true,
- "B[ç¹°`\\ãa̼㨀å›ã½“<\/꥖ᵈO让\r43⡩徑ﬓ๨ﮕx:㣜oçŽê‰Ÿã¢Cçµï›‰á½†á“žì‡“Qs氯였9é§µq혃Ljê‚”<\/昺+tä‹à¼»çŒ™c沪~櫆bpJ9Uá:칣妙!çš—F4㑄탎䕀櫳振讓": 7.3924182188256287E18,
- "H磵ai委曷n柋T<\/å‹¿F&:ꣴfU@㿗榻Lb+?í„sp\"᪟~>ê·»m㎮ç¸fî§¡": 1.0318894506812084E-19,
- "࢜⩢Ш䧔1肽씮+༎ᣰ闺馺窃䕨8Mƶqè…½xc(៯å¤J5굄ä•Qj_훨/~価.䢵慯틠퇱豠㼇Qﵘ$DuSp(8Uà¸<\/ಟ룴𥳐ݩ$": 8350772684161555590,
- "ㆎQ䄾\u001bpᩭ${[諟^^骴᤮b^ㅥI┧T㉇⾞\"绦<AYJ⒃-oF<\/蛎mm;obh婃ᦢ": false,
- "䔤䣈?æ±.p襟&dã±…\\Jᚠ@?Oì²à¢½íœ”VR蔩|㒢柺": [[
- "-ꕨ岓棻r@鿆^3~䪤Ѐ狼︌ﹲ\\á¸MlEìµ Q+",
- null,
- false,
- 3346674396990536343,
- null,
- {
- "": null,
- "/ä¨S쨑,&繷㉥8C엮赸3馢|뇲{鄎ꗇqFﶉ雕UD躢?Ꟛအï–꽡[hᕱᗅ㦋쭞MユèŒ?L槽암V#성å”%㣕嘵\\Ú¹(å˜èº¿&q": [
- -1364715155337673920,
- false,
- -8197733031775379251,
- "E팗鮲JwH\\觡܈áœ\"+뉞娂N휗vå™™á‚ê¹¼\u001dD帒l%-æ–”N",
- -3.844267973858711E-20,
- [{"쬯(褈Q 蟚뿢 /ⱖ㻥\u0017/?v邘䃡0U.Z1î­­x?鯔Vå° 8Emï•<": [[[
- null,
- [
- null,
- -5841406347577698873,
- "í‚·\"S⋄籞繗솸ᵣ浵w쑿ퟗ7náŽx3ì•™z㘌쿸I葥覯ã¬0á†b汆狺뷘ႀnꋋ",
- -1227911573141158702,
- {
- "u㉮PᾺV鵸A\\g*à¡—9슟晭+ͧↀ쿅H\u001c꾣犓}癇æ›á—¬é»©äŸ˜X梑é†e>rä°‚f矩'-î½7ä¡­æ¡¥Dz兔V9è°¶å±…ãºá”Šä©¯ë².\u001eL0ὅㅷ釣": [{
- "<쯬Jå·^숞u࠯䌗艞R9닪gã¾ë³Ža䂈歖æ„:%é”|ﵤ|y}î¡»>;2,覂⶚啵tb*ä»›8ä¹’ã“¶B࿠㯉戩oX 貘5V嗆렽ë‚߼4hä§›êºM空\\b꿋貼": 8478577078537189402,
- "VD*|吝z~h譺aᯒ": {
- "YIì·¢K<\/濳xNne玗rJo쾘3í•°é´Š\"↱AR:ࢷ\"9?\"è‡ï¦¡)?誚êŠe)_D翾W?&F6J@뺾ê°NZ醊Z쾈വHï±å¶¿?炫㷱鬰M겈<bïž²S}㎥l|刖k": {"H7鷮퇢_k": [
- true,
- "s㟑瀭좾쮀â‘î¬Yì°ºk맢戲쀸俻àº6å„®ë—æ‰–puߖꜻ馶rꈞ痘?3ྚ畊惘䎗\"vv)*臔웅鿈䧲^v,껛㰙J <áš¶5",
- 7950276470944656796,
- 4.9392301536234746E17,
- -4796050478201554639,
- "yꬴc<3㻚",
- "oå¡\u20a4蒵鮬裢Cá´§nBã­±f.",
- false,
- [
- false,
- "ã¡å¼‘V?瀆䰺q!출㇞yᘪ꼼(IS~Ka 烿ꟿ샕桤\u0005HQҹ㯪罂qè¾âš‡æ‡‹â¦•ë‘¡v",
- 1862560050083946970,
- "\u20b6[|(ë­¹gê’펉O轄Dl묽]ﯨ髯QEbAã’¾m@롴礠㕓2ë•«n6ْ엘঵篳R잷꙲m색摪|@ã¿«5aK设f胭r8/NI4ì¶«æ µ\\꯬2]",
- false,
- {
- "\u000b7*ã™›ç‡.~?䔊pæ•e_拺艿ë·f{ê”»1sé©™`$Ė戧?q⋬沭?å¡·á­šè¹€unoa5": {
- "Sê·¯o紞㾕ᅶä¾î—¶éЇ12|ÊŸç•´ï–iNAo?|Sw$M拲գ㭄紧螆+,梔": null,
- "ã­š0?xB疱敻ேBPwv뾃熉(Ó pJ]ê°¢\"Bj'\u0016GE椱<\/zgៅx黢礇h},M9ï´¦?LḨ": "Si ïŸB%~㬒E",
- "핇㉊살ã¢ìˆ¨~ȪRo䦅D桺0z]﬽蠆c9ᣨyPP㿷U~ãž?쯟í¸å®’뉆U|}㉓郾ࣻ*櫎꼪ä—s?~7\u001e㘔h9{aáž‹}:ã¶’P8": [{"\\R囡ì¬nNæŸ‹çØ›7ì¹¾ :㶃衇徜V æ·±f1æ·â™ i?3Sè§’íž^ᆞ\u20e8á¹°D\u0007ç§¡+躒臔&-6": {
- "䨑g.fhã”—=8!\"狿ൻLU^ë»±g䲚ã»'W}k欤?๒鲇S꧗䫾$ĥ피": -794055816303360636,
- "外頮詋~텡竆î™ç¹ƒä©è‹¨ë¾ºæœê¼ƒç˜¹f*㉀枙NH/\u2027ê¢}j묎ïƒvペq︉ì‹ëœ¡Od5 N顯ି烅仟Qfㆤ嚢(i䬅c;ë§§?嶰㩼츱ç¡?-": {
- "e݆ã¡â¬¬î›–'2ã»’?U篲鿄\"隻Ҭ5NꭰꤺBꀈ拾᩺îº[刯î…5곑Na램ﴦ዆]ã“qwé’„\u001b\"Yæ´Šä—¿î¼ç¥å¡¥è¿µ[⼞⠳P$ê ±5먃0ï¦`": [{"ç°Eè³ï«šb먭N긆Ⰹå²2逶ꜛ?H짉~?P}jj}ä¾·ç¿_T>á­¨b,â»éˆµP䕡䀠८ⱄ홎鄣": {
- "@?k2é¶–ã‹®\"Oರ K㨇廪儲\u0017ä¾î¿‚J?);\b*묀㗠섳햭1MC V": null,
- "UIICP!BUA`î€á¢ˆã‹¸~袩㗪⾒=fBï®´l1ꡛ죘R辂여ҳ7쮡<䩲`熕8é ": 4481809488267626463,
- "Y?+8먙ᚔ鋳蜩ï–럶1㥔y璜౩`": [
- null,
- 1.2850335807501874E-19,
- "~V2",
- 2035406654801997866,
- {
- "<숻1>\"": -8062468865199390827,
- "Mã¿£ï€E]}qwG莎Gná¶(ê”™\\D⬲iꇲs寢t駇S뀡ꢜ": false,
- "pê¤ãŽ9W%>M;-Uç’fî£(^j1?&RBéš§ å¿“b똊îƒE": "#G?C8.躬ꥯ'?냪#< 渟&헿란zpo왓Kj}é·§XﻘMツbä•–;㪻",
- "vE풤幉xz뱕쫥Ug㦲aH} ᣟp:鬼Yá°Ÿ<Fɋ잣緂頒âºä‰²ç‘‘ä…‚,C~Þ…G!f熢-B7~9Pqà¡¢[츑#3ꕎ,Öඳèâ©…ãµ§ì¶€ë¿xyäŒÍ‚tdj!箧᳆|9èš¡ë¬": -2.54467378964089632E17,
- "䵈䅦5ë¹–,궆-:໿댾仫î»0ᙚyá¦hqáš„": null,
- "侯Y\"湛졯劇Uì…ŽYXçâ…¸2ä¼´|ç­§\\ä’ã¶¶á·ì‘WaᦵᗱãœëŠ¾è† <Jc63<G\u20fe䇹66僣k0O\"_@U": null,
- "姪y$#sæ¼´JH璌Ӊ脛Jã¾íŽ”ï¹´oꈶ㚸PD:薠ì–%說ážè¹‚1]⾕5튄": {
- "á¾Huw3䮅如쿺äŸå«]<鰨ݷ?꯯䫓傩|á¶à·ƒåª½\\澒≡闢": "Mm\"ì‡á¯„졽\"楇<\/ꥆí­å±€néš´@é¿£wâ Š4Pï«å¾ŽW㊋;䤞'.팇è’ä¡´egpxå—Žwà®…ç—å ®á›nË︖䀤4å™™?໚éƒá±‹Þ˜à¥Žtæ‘姫籕殥ï­é™ƒ\"4[ê¬qL4Wê Žx",
- "ℇjéŒïš›5Bë’š\" U": "ç¡„ê˜{憠êµ:&t䌨m Cઌ쿣鞛XFê Ÿsä­ï¶ƒ\"æ ¼a0x闊昵å²L\\æšèˆaê¸j싹ç…\"î ²çŸï±¡é¦†*êµ–ç³ <ê”躎",
- "톌賠弳êŸb\"èž–X50sĶ晠3fç§‚å¯Iⓟ:è˜": 5.573183333596288E18,
- "%䴺": [[[[
- -6957233336860166165,
- false,
- null,
- {
- "\"ïŸ\\௮茒袀ᕥ23ୃ괶?䕎.嚲◉ãžL+ᵡ艱hL콇붆@": null,
- "%螥9ꭌ<\/-t": true,
- ",9|î«è€¢æ¤¸ä“Xk죱\u0015$Ώ鲞[ï’—?ì—¢á²í˜ªì¦ˆâ´‚â–‚â„´ã—¯\"gî´ëº˜\\êœ#\u0002ヮ}ሎ芲P[鹮轧@냲䃦=#(": 2.78562909315899616E17,
- "R?H䧰ⵇ<,憰쮼Q總iR>H3镔ᴚ斦\\é‘r*2橱Gâ¼”F/.j": true,
- "RK좬뎂aí™ f*f㱉á®â¦‹æ½™ã¨‹Gu곌SGI3Ië¿\\F',)t`è蘯囯ﮉ裲뇟쥼_ገ驪▵æ’ᕤV": 1.52738225997956557E18,
- "^k굲䪿꠹B逤%F㱢漥O披M㽯镞竇霒i꼂焅륓\u00059=皫之눃\u2047娤é–銤唫á•b<\/w踲䔼u솆맚,ä’á³'/it": "B餹饴is権ꖪ怯ꦂẉဎt\"!凢谵⧿ï™0\\<=(uLä·åˆ¨ì‘ª>俆æ“Cy襸Q힆䆭涷<\/á±0î É§îŠ‹䗾䚹\\ኜ?ꄢᇘ`ä´¢{囇}᠈䴥X4퓪檄]ꥷ/3謒ሴn+gé¨X",
- "GgG꽬[(å«“ëª6\u0004ê¶宩㙻/>\u0011^è¾dTè…ªhxÇ‘%ꊇk,8(Wâ§‚çµP鬜O": [{
- "Mã´¾c>\\ᓲ\u0019V{>ꤩ혙넪㭪躂TS-痴໸闓âµ/徯O.Mã¥Ê·D囎⧔ì³íœ¤T??鉬뇙=#ꢫ숣BXä­¼<\/d똬졬g榿)eꨋﯪ좇첻<?2K)": null,
- "Z17縬z]愀䖌 ᾋBCg5ë”’êµ­æ†ê¾“aâ²·í„·u:U촳驿?雺楶\u0001\u001c{q*á°—è‹‘B@kæ°z.*è“—7ረIm\"Oá±@7?_": true,
- "㺃Z<": -4349275766673120695,
- "휃䠂fa塆ffixKe'ë¬é—੄뺾w࠾鑎kë•¢m*á‚‘î§·í–žé®6攊&虜h黚,Yä±³Sﭼ둺pN6": [
- false,
- "IΎ䣲,\"ᬮ˪癘P~Qlnxå–Sᮔ༬˨IçŒm䜛酛\u0003iê¸ã¦§cQ帲晼D' \\(粋ï›wQcN\\ëµ°è·ˆ",
- [
- "D0\\L?M1ì¥KaêŒsd+盌귤憊tz䌣ëŒ×‘Oå‚wÏ¢%á½’gpî•—,Aiï™âŽ§á¶†Iî«˜é¤¾ê¦æ£©å˜…᳉怴%m]á¶is纖D凜镧o심b Uî»·",
- {
- "?଼\u0011Rv&^[+匚I趈T媫\u0010.䥤ᆯ1q僤HydⲰl㒽K'ᅾiౕ豲초딨@\u0013J'쪪VD౼P4Ezg#8*㋤W馓]c쿯8": false,
- "c/擯X5~JmKäµ¶^ìŽà´š|B|u[ì†(X뚤6v}W㤘⠛aR弌臌쾭諦eⒷ僡-;㩩⭖ⷴ徆龄갬{䱓ᥩ!ï¯âŠšá‡¨<v燡露`:볉癮꨽り★Ax7Ꮀ譥~舑\\Vê‹\"$)v": "e&sFF쬘OBï–†d슊寮f蠛জ봞mn~锆竒Gè„\"è¶µG刕䕳&L唽붵<\/I,X팚Bâ¥î¼¶X,kԇҗ眄_æ…¡:U附ᓚAè•§>\u001a\u0011\";~쓆BH4勿”Š7힪",
- "iT:L闞椕윚*æ»›gI≀Wਟඊ'ꢆ縺뱹鮚Nê©á§¬è•¼21줧\\䋯``â\\ã±é³¨": 1927052677739832894,
- "ì®ç¼¦è…ƒg]礿Y㬙 fî¼ãƒºSɪ꾾N㞈": [
- null,
- null,
- {
- "!t,çY 1䗉罵?c饃호䉂Cá­ì’˜z(즽sZG㬣sഖE4ï‚뢜㓕äžä¸®Qpç°6EZឪ겛fx'ꩱQ0ç½£i{k锩*㤴㯞r迎jTⲤ渔m炅肳": [
- -3.3325685522591933E18,
- [{"ã“5]A䢕1룥Bï²C?Ꙍ`r룔Ⳛ䙡uä¼²+\u0001àµo": [
- null,
- 4975309147809803991,
- null,
- null,
- {"T팘8Dﯲ稟MM☻㧚䥧/8ﻥ⥯aXLaH\"顾S☟耲ît7fSà·‰ë†ë®”/ꕼ䓈ìº4\\霶䠴ᩢ<\/t4?죵>uDï›5➶༆쉌럮⢀秙䘥\u20972ETR3æ¿¡æ†vB? ~鸆\u0005": {
- "`é––mç’㥉b뜴?Wf;?DV콜\u2020í‰à±“æ“å®ZMj3mJ먡-å‚·ë±™yח㸷꥿ ໘u=Mì!5å­L4v\\?ÇŽ7C홫": null,
- "|": false,
- "~Ztᛋ䚘\\æ“­ã—傪Wé™–+ã—¶qᵿ蘥ᙄp%䫎)}=â ”6ᮢS湟-èž¾-mXH?cp": 448751162044282216,
- "\u209fad놹j檋䇌ᶾ梕ã‰bוּ<dä—±:줰Mé…„\u0000X#_rç¢A饓ê—ÙKo_è·”?ᪧ嵜鼲<": null,
- "ꆘ)ubI@h@洭Ai㜎ä±k\u0003?Tä‰3é—´%j6jæ£j=â\\U毮ᬹ*8䀔v6cpjâ­¬~Q꿾뺶ï‰íŽµæ‚¡!ì©­åŽl六㽫6퇓ޭ2>": {"?è‹´ê© D䋓帘5騱qï±–PF?☸ç—é¡’yU á¡«cb䫎 S@㥚gꮒ쎘泴멖\\:Ié®±TZ듒ᶨQ3+f7캙\"?\fí’¾\\oæžç´Ÿï»½M.âŽï˜¸é‘OP": [
- -2.6990368911551596E18,
- [{"ä’–@<á°¿<\/⽬tTrè…ž&G%᳊秩蜰擻f㎳?Sãµ§\r*k뎾-乢겹隷j軛겷0ë£é®ï µ": {")DO0è…¦:ì¶é€¿:1㥨่!è›æ¨‹2": [{
- ",ꌣf侴笾m๫ꆽ?1?U?\u0011ꌈꂇ": {
- "xæ—ç” nVqä…¦w`CD⦂惺嘴0I#vỵ} \\ê·‚Së´Dì–¾?Ô’j溯\"v餄a": {
- "@ç¿™c⢃趚痋i\u0015OQâlqë†Y0pࢥ3쉨䜩^<8g懥0w)]䊑næ´ºo5ì­QL댊랖L镈Qnt⪟㒅십q헎鳒⮤眉ᔹ梠@O縠u泌ㄘb榚癸Xî©­Þ”Ftj;iC": false,
- "I&뱋゘|ï£è“”䔕측瓯%6á—»HW\\N1貇#?åƒá—œghá­ªo'䗈꽹Rcìš/蔳迄à¼!0邔䨷푪8ç–©)[쭶緄㇈୧á": {
- "B+:ꉰ`sì¾­)ë¹¼Cç¾A䫊pMgjdxäHf9᥸W0!C樃'ï¤f䫤סи\u0017Jve? è¦f둀⬣퓉Whk\"஼=չï³î•¤çš†ç¬BIW虨쫓F廰饞": -642906201042308791,
- "sb,XcZ<\/m㉹ ;䑷@c䵀s奤⬷7`ꘖ蕘戚?Feb#輜}p4nH⬮eKL트}": [
- "RK鳗z=袤Pf|[,u욺",
- "Ẏá»ç½¯ë‰‹âº–锅젯㷻{H䰞쬙-ì©“D]~\u0013Oã³¢gb@æ¶è”‰|kᦂâ—!\u001ebMè¤sca쨜襒y⺉룓",
- null,
- null,
- true,
- -1.650777344339075E-19,
- false,
- "☑lꄆs힨꤇]'uTന⌳ë†].1â‹”ê´æ²°\"IWà´©\u0019æ°œ8쟇䔻;3衲æ‹,窌zíŽå–íš—?4?Cë„é—®?ᥙ橭{稻Ⴗ_ì”",
- "n?]讇빽å—}1å­…9#ê­¨é¶v\u0014å–ˆ)vw祔}룼쮿I",
- -2.7033457331882025E18,
- {
- ";⚃^㱋x:饬ኡj'ê§µT☽O㔬RO婎?향ᒭæ©$渣y4i;(Q>꿘e8q": "j~錘}0g;Lèº*;á•­ê„®0l潛烢5H▄쳂ê’ï­‹ê™¶T犘≫x閦웧v",
- "~î¢æ¯\u2018c4è·ë E~ᑅቚꈂ?nq뎤.:æ…¹`F햘+%鉎Oç€œìŸæ•›è®âŒæµ¢<\/㮺紿P鳆ࠉ8I-o?#jﮨîŸ7v3Dt赻J9": null,
- "à£W䌈0êŽqC逖,íš…î·Žcáƒswj;jJSæ«5æ§—OaB>D踾Y": {"ã’°äµF%î©®?59.î„„ãˆcᕨï†í•틎á¸ã‹©B=9IÛⓌ{:9.ywï½å‘°ã†®è‚’᎒tIã¾´62\"ዃ抡C﹬B<\/<EO꽓ᇕu&é‹«\\禞í¹uê’.7훯ಶ2䩦͉ᶱf깵ᷣ늎": [
- 5.5099570884646902E18,
- "uQNæ¿¿m臇<%?谣鮢s]]x0躩慌闋<;(î³¥ 鋤.0á µd1#벘a:Gs?í–·'.)ㅴ䞟ç¯å´ˆFS@O㌛ᓬ抢íŒáž¾ëƒ·ì¿Ÿíˆ¥IZn[惵ê§3ë™[&v憙J>ì´‹jo朣",
- [
- -7675533242647793366,
- {"ᙧ呃ï£:[㒺쳀쌡ì‚H稈㢤\u001dá¶—GG-{GHྻຊꡃ哸䵬;$?&d\\⥬ã“Nåœ´ë¤æŒ¨-'ê•®$î“‹PU%?冕눖ié­q騎Q": [
- false,
- [[
- 7929823049157504248,
- [[
- true,
- "Zè™\u0017'eꕤ᱕l,0\\X\u001c[=雿8è ¬L<\/낲긯W99g톉4ퟋbãº\u0007åŠ'!麕Q궈oW:@XáŽïœ¬z蘻m絙璩귓죉+3柚怫tSæ‡è’£ä -æ“¶D[0=퉿8)q0ÙŸ",
- "唉\nFA椭穒巯\\䥴䅺鿤S#bè¿…ç˜ ï¶—ê¬˜\\?q1qN犠pX꜅^䤊⛤㢌[⬛휖岺q唻ⳡí‹\"ã™™Eh@oA賑㗠yå¿…Nꊑᗘ",
- -2154220236962890773,
- -3.2442003245397908E18,
- "Wᄿ筠:瘫퀩?o貸q⊻(᎞KWf宛尨h^残3[U(='橄",
- -7857990034281549164,
- 1.44283696979059942E18,
- null,
- {"ꫯAwè·­å–€ ?_ï““9\"Aty背F=9缉ྦྷ@;?^鞀w:uN㘢Rá»": [
- 7.393662029337442E15,
- 3564680942654233068,
- [
- false,
- -5253931502642112194,
- "ç…‰\\îš¶î¶è¾Žî›¢à³†ç½5â’­1äªäƒ‘s䎢:[e5}峳ﴱn騎3?è…³Hyêƒè†¼N潭錖,Yá‹ËœYAá“㬠bG렣䰣:",
- true,
- null,
- {
- "⒛'P&%죮|:⫶춞": -3818336746965687085,
- "钖m<\/0ݎMtF2Pk=瓰୮洽겎.": [[
- -8757574841556350607,
- -3045234949333270161,
- null,
- {
- "áœî…½rè¼³>⫇9hU#î¦#w@ê·ªA\\Cî’¢ é‹ºã˜“ê–æ¢’뒬묹㹻+郸å¬ìœ¤'+g<\/碴,}ꙫ>ì†;情d齆Jä¬àº©æ’›ì±íƒ¹/R澡7剌tꤼ?ặ!`â²ç¤\u00002똥଴âŸ": null,
- "\u20f2ܹe\\tAê¥Æ°\\x当뿖ï»ë ‰ç¦›;G檳ﯪï…Sà«°3~㘠#[J<}{奲 5箉⨔{ë†<\/釿抋,åš /曳m&WaOvT赋皺璑ï“í…": [[
- false,
- null,
- true,
- -5.7131445659795661E18,
- "è­m䓪D5|3å©à°ž>î‰è ‡æ™¼6nï´ºPp禽羱î¤DS<ç“닫屚ì‚å§¿",
- true,
- [
- -8759747687917306831,
- {
- ">ⓛ\t,odKr{䘠?b퓸C嶈=DyEᙬï¿@ᴔ쨺芛髿UT퓻春<\/yê¸>豚W釺N뜨^?꽴﨟5殺ᗃç¿%>í‚ဿ䄸沂Ea;A_\u0005閹殀W+窊?Ꭼd\u0013Pæ±´G5ì“æ˜": 4.342729067882445E-18,
- "Q^즾眆@AN\u0011Kb榰냎Y#ä€ê€’ᳺ'q暇çµs\"!3#I⊆畼寤@HxJ9": false,
- "⿾D[)袨㇩i]웪䀤ᛰMvR<èŸã£¨": {"v퇓L㪱ꖣ豛톤î£\\ê³±#ï–©kDTN": [{
- "(ì¾´ä¡£,寴ph(C\"ã³¶w\"憳2s馆E!n!&柄<\/0Pꈗſ?㿳Qdéµ”": {"娇堰孹L錮h嵅⛤èºé¡’?CglNæŸ+쨣ﺜ\\MrH": {"çžäŽ‡ë‘ƒá‰²å¼­íŒ­^ꄞ踦涟XK錆쳞ឌ`;੶S炥騞ଋ褂B៎{Ú’ä­·á¶¼éœpIè—è™¶K$": [{"â—–S~躘蒉꫿輜è­Qã½™é—@ᢗ¥Eæ¦iØ¡5┄^B[絮跉ᰥé™PWi3wㄾⵀDJ9!w㞣ᄎ{ë“’ê““b6\\篴??c⼰鶹⟧\\鮇ꮇ": [[
- 654120831325413520,
- -1.9562073916357608E-19,
- {
- "DC(æ˜è¡µá¼¡ê¸™ê°µå§­|Ö›[t": 7.6979110359897907E18,
- "Jâ…))嫼â³9Xfd飉j7猬ᩉ+⤻î®çœ—벎Eé°‰Zï¾¶63zá69}Zá¶L崭ᦥ⡦éšâ‹›êŽ¨î´µ~i㨃咊ꧭo䰠阀3C(": -3.5844809362512589E17,
- "p꣑팱쒬ꎑ뛡Ꙩ挴æèƒ”&7ᔈ묒4Hdç¡¶í›ãŽ–zꢼè±ã¿¢aሃ=<\/湉鵲Eî„¡Ó…%$F!í¶æ£Œå­¼{Oé§à¨ºgeu+": ")\u001bìž“kÅ€Xì©«Aë°Â®Ú£ç™¦ç‹¢)扔弒p}k縕ꩋ,䃉tࣼi",
- "ã‚¡F肿輸<솄G-䢹䛸êŠl`Tqê•—îŠè’ža氷⸅ᴉ蠰]S/{J왲m5{9.uá½³~㕚㣹u>x8Uè®Bëºè¥ªç›ŽQhVS맅킃i识{벂磄Ià·„ä™…xZy/æŠà«­Zï–Šé²î¦š-霳Væ®æŒ¦â„’": null,
- "㯛|Nî½™ê¸b7âµb?æ‹ O\u0014Þ†?-(EꞨ4ꕷᄤYᯕï‘OW瞺~螸\"욿ќ<u鵵઎⸊î˜å€¾ì‘·à·»rT⪄牤銱;W殆͢芄ਰåší›šìƒ¢î™‡âŠ¿+ã²½": null,
- "å˜ïƒé€†àº»%_ë§›d)zJ%3ì¹§_릟#95䌨怡\u001ci턠ॣî’i冘4èµ–'à¨ä§_æ ”!": {
- "*?2~4㲌᭳ì¯ftá‚·1#oJ\bäŠ‡é•‡ë” \u2079xä›ãŠá®‚N;穽跖s휇ᣄ홄傷z⸷(霸!3yëºMì’¿í–Û½v㳉tở心3黎vì­» Rp཮Vr~T?&Ë´k糒븥쩩r*D": null,
- "8@~홟ꔘk1[": -5570970366240640754,
- "BZté¦ê¡¬c餖 s(má›´\u0000◄dè…‘t84CâŸå¯VṊ뉙'å™±ê”ç½GCé¡€?허0êž¹&ë‡ä›­Cä·«](": 2.4303828213012387E-20,
- "yæ’”Z외放+}ḑ骈á™&\u0016`G便2|-e]঳?QF㜹YF\"ã¿’ç·„í–·ï€ãˆŸïƒ¦ï¨ä·¦à­€áŒ¤lM蘸N㾆▛럪㞂tᕬ镈ì‡å– l amcxPnm\u001a᱋<\/]_]ﻹïª?H": false,
- "áæ°ë¬¢뜚I[♺뽛x?0Hë´¬Wpn꨹Raä¿ïŒ›ìŒ‘{㴂ni祻윸A'y|⺴ᚘ庌9{$æ²{톽=m#@ï–—6ᨧfgs44陎J#<Ễ쨓瀵â©a୛㷉㙉ܸ◠냔嬯~å‘„ç±ç¾¥é•³": false,
- "㘱{<é ¬22?IF@곊I겂嶻Lá›D{@rì’‚?IAᣧ洪惒誸b徂zì·ºê¾ã ­\\刊%禨ìŒâ¶£ä»µ\\P[:47;<ᇅ<\/": {
- "^U釳-v㢈ê—â—„è˜rᜨi;èµ·kR犺䵫\u0000é”ì™m-Ô™!lḃ꛸뻾F(Wê·›y": "#á ºH㸢5v8_æ´‘C",
- "䔵໳$á™ 6èž\u206e摎q圩P|æ…sV4:㜾(I溞I?": -6569206717947549676,
- "é€êž‚ç·µí‡8 >e㺰\"'㌢ÆW\u0004çž•>0?V鷵엳": true,
- "뤥G\\î¡‹è¿‹ä ¿[庩'꼡\u001aiá©®Vì¯á³ªä¦ªÃ”î²…;倱ନë›èªˆ": null,
- "쥹䄆䚟Qæ¦äŽá¢­<\/2ã•£p}HW蟔|äƒî‚꿈ꚉ锳2Pb7㙑Tⅹᵅ": {
- "Y?Ö­$>#cVBꩨ:>ï†eLè’å‹™": {
- "86柡0po äš&-æ‘Ћ祌<\/휃-G*㶢הּì©s㶟餇c걺yu꽎還5*í„§ç°•Ogå©¥Sê": null,
- "a+葞h٥ࠆ裈嗫ﵢ5輙퀟ᛜ,QDﹼ⟶Y騠锪E_|x죗j侵;m蜫轘趥?븅w5+mi콛L": {
- ";⯭ﱢ!ä¹°Fâ½æŸ¤é¶‚näµ£V㫚墱2ë ¾ELEl⣆": [
- true,
- -3.6479311868339015E-18,
- -7270785619461995400,
- 3.334081886177621E18,
- 2.581457786298155E18,
- -6.605252412954115E-20,
- -3.9232347037744167E-20,
- {
- "B6㊕.k1": null,
- "ZAꄮJ鮷ᳱo갘硥鈠䠒츼": {
- "á•…}럡}.@y陪é¶r業'æ´î‰°í€‰x䉴ﵴlí˜):씭脴ᥞhiꃰblﲂ䡲엕8߇Mã¶­0燋標æŒ-?PCwe⾕J碻Ᾱ䬈䈥뷰憵賣뵓痬+": {"aì·©v礗X⋈耓áŠfç½…é®!㔽YYᣓwæ¾33⎔芲F|\"äœT↮輦挑6ᓘL侘?ᅥ]ë†1R௯✎餘6ê½<\/௨\\?qå–·ê«j~@ulq": {"嗫欆뾔Xꆹ4H㌋Fåµ§]à Ž]ã –1ꞤT<$më«O i댳0ä²iï—Œ": {"?à·©?\u20cd슮|ꯆjs{?îž…d7?eNs⢚嫥氂䡮쎱:鑵롟2hJꎒﯭ鱢3춲亄:ë¼£v䊭諱Yj択cVmR䩃㘬T\"Ní™*ै%x^F\\_s9ë³´zz4æ·—?q": [
- null,
- "?",
- 2941869570821073737,
- "{5{殇0ä¾ïž¢g6ë°–í‹è‡©ç¶¹R$ä–­j紋釰7î‹‘sXI繳漪행y",
- false,
- "aH磂?뛡#惇då©…?Fe,ì˜+늵ä˜\"3r瘆唊å‹ï¢Šj⳧࠴ꇓ<\/唕윈x⬌讣䋵%拗ᛆⰿ妴á”M2ã³—å¿…ê§‚æ·²?ゥ젯檢<8ë’ï¶MidXä’3á³»Qî”â–®ä½UT|⤪봦éâŠ",
- [[{
- "颉(&뜸귙{yîš’^\"P퟉ì¶á²Ÿä®­î‹ºDé¡¡9=?}Y誱<$bë±£RvO8cH煉@tk~4ǂ⤧â©å±‹Sî›ïž¢S;J{vV#剤餓ᯅc?#a6D,s": [
- -7.8781018564821536E16,
- true,
- [
- -2.28770899315832371E18,
- false,
- -1.0863912140143876E-20,
- -6282721572097446995,
- 6767121921199223078,
- -2545487755405567831,
- false,
- null,
- -9065970397975641765,
- [
- -5.928721243413937E-20,
- {"6ì´Š\u001a홯kB0w撨燠룉{绎6⳹!í„è´‘y▾鱧ժ[;7ᨷ∀*땒䪮1x霆Hᩭ☔\"rî¹›ä7毟á°r惃3ꉭE+>僒æ¾": [
- "Ta쎩aÆt쵯ⰪVb",
- [
- -5222472249213580702,
- null,
- -2851641861541559595,
- null,
- 4808804630502809099,
- 5657671602244269874,
- "5犲﨣4mᥣ?yf젫꾯|䋬ìž$`Iⳉﴷ扳å…,'î±c",
- false,
- [
- null,
- {
- "DyUIN쎾M仼惀⮥裎岶泭lh扠\u001e礼.tEC癯튻@_Qd4cï…«5S熯A<\/ï¼¼6U윲蹴Q=%푫汹\\\u20614b[௒Câ’¥Xe⊇囙b,ï®æœ3ss땊ë¢i~逇PA쇸1": -2.63273619193485312E17,
- "Mq꺋貘k휕=nKç¡ë«žè¼©>㾆~á¼žà¡¹ê¸æ¦µlâ‹™Hw뮢帋M엳뢯î¹…vâ…ƒ^": 1877913476688465125,
- "á¶´ë»—`~ç­—å…⚽টW˃â½b犳䓺Iz篤p;乨A\u20efì©?ç–Šmã€ì»©ë«¡b탔鄃ᾈV(é¢ç³=뎲ିeF仢䆡谨8t0醄7㭧瘵⻰컆r厡궥d)a阄á·Ed&c﯄伮1p": null,
- "â¯w4曢\"(欷輡": "\"Má­«]䣒頳B\\燧ࠃN㡇j姈g⊸⺌忉ꡥF矉স%^",
- "㣡Oᄦ昵⫮Y祎Sì級㭻撥>{I$": -378474210562741663,
- "䛒掷留Q%ì“—1*1J*ë“헩ᦢ﫫哉쩧EↅIcê…¡\\?â´Šl귛顮4": false,
- "寔愆샠5]ä—„IHï©¥=d﯊/å¶?ॊn%晥D視Nò—˜ˆ'᫂⚦|X쵩넽z질tsî¦kxDQ莮Aoﱻ뛓": true,
- "钣xp?&\u001e侉/y䴼~?U篔蘚缣/I畚�Q绊": -3034854258736382234,
- "꺲໣眀)â¿·J暘î©pИfAVì‚•ì³­Nꯗ4々'唄ⶑ伻㷯騑倭D*Okï¯ê§3bâ½_ï„¡<\/ì±£Xm톰á•䆄`*fl㭀暮滠毡?": [
- "Dç”·p`V뙸擨å¿ë¸ª9c麺`淂⢦Yw⡢+kzÜ–\fY1䬡Hæ­)ë²¾Z♤溊-혰셢?1ï”<-\u0005;æ¢Tále\\ᛵߓﭩ榩<QF;t=?Qꀞ",
- [
- null,
- [{"-ì·«æ²î«§á¬¨å¢Šè‡¸<à ’Hè·¥ 㔭쥃㫯W=z[wধ╌<~yW楄S!â‘»h즓lÄ–N￧篌W듷튗乵᪪템먵Pf悥ᘀk䷭焼\\讄ræ“é¬y6VF<\/6ëž¿p)麡ê ãª\"pà®´e": [
- "#幎æ´é¢’嶈)ã„›J.嶤26_⋌东챯ꠉ⤋ؚ/âš%ç§¼Q룠QGztᄎ㎷អIç¿°Xpç”éœê¨",
- {",T?": [
- false,
- [[
- true,
- 7974824014498027996,
- false,
- [
- 4.3305464880956252E18,
- {
- "᱿W^A]'rᮢ)é¥zï­é¤;Hu\\Fk?ï´º?IGæµ…-ä™§>è¨-xJ;å·¡8깊è ï»“U$K": {
- "Vê•¡è«…æ“W=斸s︪vﲜ츧$)iꡟ싉eî®å¯³?ጭムVથ嵬iæ¥Fg<\/Z|៪ꩆ-5'@ꃱ80!燱R쇤tç³³]罛逇dṌ֣XHiͦ{": true,
- "Ya矲Cë©—Q9膲墅æºíœ»c\\ë”¶Gç””<\/.齵휴": -1.1456247877031811E-19,
- "z#.OOï¿J": -8263224695871959017,
- "å´_3夼ᮟ1Fë¸ë½¯á¦“é´­V豈Ь": [{
- "Nè’¬74": null,
- "yuB?厅vK笗!ᔸcXQ旦컶P-ë…«mᄉ麟_": "1R@ 톘xa_|﩯é˜î¥§sæ§žd!d껀筤⬫è–焵먑D{\\ïƒïŽ¿6k共倌☀G~AS_D\"딟쬚뮥馲렓쓠攥WTMÜ­8nX㩴䕅檹E\u0007ï­¨N 2 ℆æ¶ê¥ê µï“3▙玽|ë¨_\u2048",
- "æA Cä§©G": {":Mí£5e들\\ê€æ¼á”„é¸|Iï¨$)n": {
- "|U䬫㟯SKV6ꛤ㗮\bn봻䲄fXT:㾯쳤'笓0b/à³¢Cì³–?2浓uO.ä°´": "à½ê¼‹e?``,ᚇæ…^8ꜙNM䂱\u0001Iá–™ê§M'vKdꌊH牮r\\O@䊷ᓵ쀆(fî »yè»i툺\"?<\/峧ࣞ⓺ᤤ쵒߯ꎺ騬?)刦\u2072læ…ªy꺜ﲖTjî’•+u",
- "뽫<G;稳UL⸙q2n쵿C396炿Jè“¡zâ£zဩSOU?<\/ë™oEí¸Oé¿…à·´êˆEm#\"[瑦⤫á†glâ¡—q8\"í˜ë¥ä¿‚@ᆤ=\u0001爖ç¾ì·€ã¸©b9\\jeqt㟿㮸龾m㳳긄": {
- "9\"î²–V霟釜{/o0嫲Cå’€-饷äˆ[ë…©î)\r䤴tMW\\龟ϣ^ي㪙忩䞞N湆Y笕)è¨ê–¤èª¥ç…½:14â«»57U$æ“’ä²è–¡Qvↇ櫲현誧?nà®·6": {"l웾䌵.ä…‹ä¦ic碳g[糲Ƿ-ឈᚱ4ì‘§\u0004C࿼\u0018&쬑?멲<\/fD_檼픃pd쪼n㕊渪V䛉mæˆW儅톳뗳䓆7㭽諤Tç… ï–ŠNey?î¼…0᪵鈑&": [
- false,
- null,
- {
- "\rî´’;é¼¶já ‚ê¼RLz~â™”9gf?Ó¡æµ": -1.4843072575250897E-19,
- "&ꊒ\"ꋟä­E诮ﯚO?SWë’훪mb旙⎕ᗕ⶙|á·¤5y4甥": "j5|庠t铱?v íš‹0\"'rxz䃢æºêž«!\u0002",
- "Q á©ãŸ§": {"Hﬔ\u2058䪠틙izZㅛ탟H^ﶲA??R6å‘ Z솋R.à¿¶g8": [
- -8762672252886298799,
- -1.9486830507000208E17,
- null,
- -7157359405410123024,
- null,
- null,
- -995856734219489233,
- "呧㫹A4!",
- null,
- -1.9105609358624648E-19,
- 5888184370445333848,
- 2.25460605078245E-19,
- 2.5302739297121987E18,
- "뢹sbEfæµ2丯ï‡?뗾耸(Wdë™SବꭖrtU?ç­¤P똙Qpbbï‘¡KqaE$æ¥Vì›°3i/lK퉜,8︸e= gèž“t竦컼?.寋8éµ—",
- 7377742975895263424,
- 2.4218442017790503E-19,
- {
- "y꒚ཫ쨘醬킃糟}î‘yTSt䡀⇂뿽4ൢ戰U": [[
- 3600537227234741875,
- 4435474101760273035,
- -1.42274517007951795E18,
- -5567915915496026866,
- null,
- null,
- [
- -3204084299154861161,
- {
- "7梧慸æ†.a瘎\u00041Uéµ®CkÖ¨d惥è€â³¡Y,â­ì¨EåžFFI鱑ⳬ줢7â§µBﴠ耘줕햸qì»´~*ç‘W.떛ࡆ@'á€+è½³": -961121410259132975,
- "⥅]l黭㣓绶;!!⎃=朼ã¿e&ἂ繤C﯀lä£ãŒ€6TMì‘®w懃ꡡ#ᤆ䰓,墼湼゙뽸㲿䧽쫨xᵖ듨<\/ T0峸iQ:溫è„\\\"쎪ὴ砇宖^Mæ³¼í¥âž…鈫@ᄟ༩\u2008⥼": true,
- "â©\"籽汎P싯鲘蟼sRá¯ä…©\u0019R(kRá–&ಌ 0\"é³¶!馼YH": null,
- "鮼ꚇ싋։刟\rRLd步Nⴗ5Eࡆ訛갚[I醵NC(郴ṉy5D뤺౳QY壯5苴y훨(W\\Cଇ姚C艄깹\u001c歷㋵ZC᥂": [
- -6806235313106257498,
- null,
- "}N⸿讽sꚪ;ï‘¶\\p繇jè‹„î¡ä«¨\u20e7%5x?î•¥t#",
- {
- "O〗k<墻yV$à°rs-c1ఌ唪.C7_Yobᦜ褷'b帰mã„‘l⌅": {"qB뗗擄3éš‚5ëºæ«‚䱟eì´¸P/é©,3æŽê—©=冉棓㑉|ËžF襴뿴,:㞦<퓂⧙礞♗g뚎ᛩ<\/뉽ⶳ⸻A?_x2Iã½å‹’*Ií™±î¢é§ç²¿~曟㤙2绥Ly6+ìƒuu鿜בfí˜|æ­à£–É": [
- ">hh䈵î”w>1â²ì­V[â…Ž\\헑벑F_ã–⠗㫇hæ½;á¿æ±°á±¼ç€–J옆9RRì…vsZ柺鶶툤r뢱橾/ꉇ囦FGm\"謗ꉦ⨶쒿⥡%]鵩#ᖣ_蹎 u5|祥?O",
- null,
- 2.0150326776036215E-19,
- null,
- true,
- false,
- true,
- {"\faá­¶Pæ¤WWcá Ÿf뚉á¬í“—â³€Wç¹5:HXH=q7xì°™X$)모r뚥ᆟ!Jﳸf": [
- -2995806398034583407,
- [
- 6441377066589744683,
- "Mﶒ醹i)Gἦ廃s6몞 KJ౹礎VZ螺费힀\u0000冺업{è°¥'꡾뱻:.ꘘ굄奉攼Diá·‘Ké¶²y繈욊阓v㻘}枭캗e矮1c?íœ\"4\u0005厑莔뀾墓ë‚⽴洗ṹ䇃糞@b1\u0016즽Yè½¹",
- {
- "1⽕⌰鉟í”M㤭n⧴ỼD#%é˜âŠ¯ì¿¼ç¨ë¸£ëªç´§á…‡ã“•ᛖcw嬀~ഌ㖓(0r⧦Qä‘•é«à´°é“‚㓻Rå„®\"@ꇱmâˆà¯¿á¦¯é Œ8}㿹犴?xn잆꥽R": 2.07321075750427366E18,
- "˳b18㗈䃟柵Z曆VTAu7+㛂cb0﯑Wp執<\/臋뭡뚋刼틮è‹ë²²î·´TLP预庰܈G\\O@VD'鱃#ä¹–ëº*鑪ꬳ?MÞždï­¹{â‡åœ¯ì‡œã¼ž顄︖Y홡g": [{
- "0a,FZ": true,
- "2z̬è£î’®ê§¦é©¸\u0006L↛Ḣ4๚뿀'?lcwá„§ã®!蓚䃦-|7.飑挴.樵*+1ﮊ\u0010ꛌ%貨啺/JdM:ë˜ïˆ!FBe?鰴㨗0Oè´¢I藻ʔWAá«“Gì³›u`<\/I": [{
- "$Ï„5Vé´a뾆両環iZp頻යn븃v": -4869131188151215571,
- "*즢[⦃b礞R◚nΰꕢH=귰燙[yc誘g䆌?ଜ臛": {
- "洤湌鲒)⟻\\䥳va}PeAMnï¼®[": "ã³Éª/(軆lZR,Cpæ®È®Nå•·\"3Bå©´?i=r$펽á¤ì€¸",
- "阄R4㒿㯔ڀ69ZᲦ2ç™í•Œå™—På´œîž#\\-ì­è¢›îˆµ&é‘/$4ç«¥Vê©‘_ZHAæ¾¢fZ3": {"x;P{긳:Gé–‰:9?æ´»H": [
- "繺漮6?z犞焃슳\">á»[Ⳛ䌜ë…䂹>èµâ¼¶ç…œï’˜Yæ¡¥[泥뚩MvK$4ï‰jtï¾›",
- "E#갶霠좭㦻ୗ먵F+䪀oè’ba쮎4X㣵 h",
- -335836610224228782,
- null,
- null,
- [
- "r1᫩0>danjY짿bs{",
- [
- -9.594464059325631E-23,
- 1.0456894622831624E-20,
- null,
- 5.803973284253454E-20,
- -8141787905188892123,
- true,
- -4735305442504973382,
- 9.513150514479281E-20,
- "7넳$螔忷㶪}䪪lì§´\u0007é¹Pé°šHFéŠZJﳴ/âŽ1ᷓ忉ç‡áœ‹ì“ˆxëµ mä·çª¥á”^\u0019á¶Œå­#ヂt☆áƒpáŽè‡¶äŸ±5ï‰$ä°µ&๵分ìˆ]äˆë‰â™‚åŽ\u0011<>",
- "C蒑貑è—lï°°}X喇몛;të°¿O7/᯹f\u0015îµ¼kI嘦<ዴ㟮ᗎZ`GWퟩ瑹࡮ᅴB꿊칈??Ræ ¡s脚",
- {
- "9çµæˆ¬+AU^洘拻ቒy柭床'ç²™XG鞕᠜繀伪%]hï ¾C,$è¼™?Utä¹–Qmë–šWï¶8઼}~qâ ªrU䤶CQ痗ig@#≲t샌f㈥酧l;yé—¥ZHæ–¦e⸬]j⸗?ঢ拻퀆滌": null,
- "畯}ã§¢J罚å¸VX㨑>1ꢶkT⿄蘥ã‘o|<嗸層沈挄GEOM@-äžšä§°$만峬è¼ä ±V✩5宸-æ‚î¡§D'ã—ªyP掶7bâ ŸJã•»SfP?d}v㼂á…'猘": {
- "陓y잀v>╪": null,
- "鬿L+7:ë‘Y=ç„ U;킻䯌잫!韎ஔ\f": {
- "駫WmGጶ": {
- "\\~m6ç‹©K": -2586304199791962143,
- "ႜࠀ%Í‘lâ¿…D.ç‘¢Dk%0ç´ªdḨTI픸%뗜☓s榗኉\"?V籄7w髄♲쟗翛歂E䤓皹t ?)ᄟ鬲éœ6Cî³´": {
- "_ì·¤a圷1\u000eB-XOy缿請∎$`쳌eZ~æï€§íŠ»/蜞`塣৙\"⪰\"æ²’l}蕌\\ë¡ƒè«æ°Œ.望wZ|o!)Hnçqg}": null,
- "kOSܧ䖨钨:಼é‰ê­O醧Sî…¨`ì‹­`ꓭì­ï¯¢N&Et㺪馻ã¢â…³ã¢ºå´¡àºŠèœšé”«\\%ahx켨|ż劻ꎄ㢄ìŸA躊᰹p譞綨Ir쿯\u0016ﵚOd럂*僨郀N*bã•·63z": {
- ":L5r+T㡲": [{
- "VK泓ë²á®™Ry㓤➙Ⱗ38oi}LJቨ7Ó㹡৘*q)1豢⛃e᫛뙪壥镇æž7Gè—¯g㨛oI䄽 孂L缊ꋕ'EN`": -2148138481412096818,
- "`â›á˜‘$(खꊲ⤖á„ꤒ䦦3=)]Y㢌跨NĴ驳줟秠++då­³>8ᎊ떩Eê¡£Sv룃 쯫أ?#Eî·°|á­™ãŽ?zv:5ï©^â‹‘V": [
- -1.4691944435285607E-19,
- 3.4128661569395795E17,
- "ãƒì´—^G9ä½­é¾¶n募8R厞eEw⺡_ㆱ%⼨D뉄퉠2ê©µá›…â³æ¿L팹Là·€n=\"æ…‰ë…á›®y>!`g!í’²î¦ï¨’[/;?[vï®ê²è»‡}⤳â¤í•∌Tã½²R홓é‰ã“¥",
- "æ„°_⮹T䓒妒閤둥?0î°šaB@㈧gç„»-#~è·¬x<\/èˆPÝ„ê¡=\\׳P\u0015jᳪá¢qï‹¶;ã¯l%á­—;砢觨â–,è¬ê°Gy?躤O黩í‹Yã’a擯\n7覌똟_䔡]fJ晋IAS",
- 4367930106786121250,
- -4.9421193149720582E17,
- null,
- {
- ";ᄌ똾柉곟ⰺKpá‡ä±»à¸ºä–{o~h!ï½…ê¿àª»ìš„Úš\u0002y?xUd\u207c悜ꌭ": [
- 1.6010824122815255E-19,
- [
- "宨︩9앉檥pr쇷?WxLb",
- "æ°‡9】J玚\u000f옛呲~ è¼ 1D嬛,î•*mW3?n휂糊γ虻*á´«ê¾ ?qîžå‡è¶—Ko↦GTé“®",
- "ã¶¢ážmOã”k'诔栀Z蛟}GZé’¹D",
- false,
- -6.366995517736813E-20,
- -4894479530745302899,
- null,
- "V%᫡IIç’…ï»ä…›ä“Ží’¹ï±¢/pU9seë˜ë›žx梔~C)䨧䩻蜺(g㘚R?/á»°[å¿“C뾠ࢤc왈邠买?嫥挤풜隊枕",
- ",vç¢å–”㌲쟚蔚톬៓ꭶ",
- 3.9625444752577524E-19,
- null,
- [
- "kO8란뿒䱕馔b臻âŸéš¨\"㜮鲣Yq5mí”<u뷆cè­†\u001bN?<",
- [{
- ";涉c蒀ᴧN䘱䤳 ÿꭷ,핉dSTDB>K#ꢘug㼈á¦=P^6탲@ä§”%$CqSw铜랊0&m⟭<\/a逎ym\u0013îš¡vᯗ": true,
- "æ´«`|XN뤮\u0018詞=ç´©é´˜_sX)㯅鿻á»ì‹¹": 7.168252736947373E-20,
- "ꛊ饤ï´è¢(逊+~⽫얢鈮ï«è‰¬O힉7Dç­—S곯wæ“I斞᠈븘蓷x": [[[[
- -7.3136069426336952E18,
- -2.13572396712722688E18,
- {
- "ç¡¢3㇩R:o칢行E<=\u0018á¬YuH!\u00044U%å炼2>\u001eSi$â“·ê’ˆ'ï‘¿ë ¢gᙫ番ꯒ㛹럥嶀澈v;è‘·é„•x蓎\\惩+稘Uî“´Eᖸﳊ㊈壋Nå«¿â¾æŒŽ,袯苷ኢ\\x|3c": 7540762493381776411,
- "?!*^á¢çª¯?\u0001ڔꙃw虜ë³îšFgJ?&⨫*uo籤:?}ꃹ=ٴ惨瓜Z媊@ત戹ã”똩Ԛ耦Wtè½\\æž’^\\ꩵ}}}ꀣD\\]6M_⌫)Hè±£:36섘㑜": {
- ";í™—á°°U஋㙛`D왔ཿЃS회çˆ\u001b-㢈`ë´†?盂㛣듿ᦾ蒽_AD~EEຆ㊋(eNwk=RÉ å³­qï’«\"5Ἠ婾^>'ls\n8QAK<l_⭨穟": [
- true,
- true,
- {"ﳷm箅6qⷈ?ﲈ憟b۷⫉἞V뚴少U呡瓴ꉆs~嘵得㌶4XR漊": [
- "í†ä»‹fM暪$9K[ㄇìƒí³æ’¦gæ’Ÿæ¸jÒFã¹¹aj bHᘀ踉êŽï¼£ç²„ a?\u000fKì¦‰î¶¯éƒ å¹¨9D舢槷Xh뵎u훩Ꜿ턾ƅ埂P埆kë©€{䢹~?D<\/ê¼¢XR\u001b〱ä½ê¼¨i㘀ḟ㚺A-挸",
- false,
- null,
- -1.1710758021294953E-20,
- 3996737830256461142,
- true,
- null,
- -8271596984134071193,
- "_1Gí‰í…‘m䮔鰼6멲Nmꇩſt쓟íŠN许FDï¡€j+3^ﶜ⎸\u0019⤕橥!\"sî•—-뾞lz北׸êšëž¬)?l⻮고iä‘°\u001f䪬",
- 4.459124464204517E-19,
- -4.0967172848578447E18,
- 5643211135841796287,
- -9.482336221192844E-19,
- "౪å†é‡¶9D?sèž­X榈枸j2ç§€vï ˜î ]泌鰚岒èµè½€ìŒ¶ïŠ›ií…½qMbL]R,",
- null,
- [
- null,
- {"M쪊ꯪ@;\u0011罙ꕅ<eáº|爑Yâµ<\/&ᩎ<腊ሑᮔ੃Fè±­": [
- "^0࡟1ë³Pí‹áæˆF⨥Iê‚´\"z磣Vâ…¡=8í€2]䢹h1\u0017{jT<Iç…›5%Dì…Sâ‘™â…J*ìƒ å·™àº”ï€¢;᧡䙞",
- [{
- "'ã¶¡í¾é„§`è·Š\"gV[?u᭒Ʊ髷%葉굵aë¦Nì¼§Qﯳy%y䩟髒L䯜Säµ³r絅肾킂á'ꔦg긓a'@혔যWè°á¬F栩ŷ+7wéžš": 6.3544416675584832E17,
- "苎脷v改hmìµ|㋊g_ᔠ뒨蹨峟ìŽã·¸|Ο刢?Gͨ옛-?î¨Gꦱî«î“©IEYUX4?%ꘋᆊ㱺": -2.8418378709165287E-19,
- "誰?(H]N맘]kæ´³\"qï±è’§è˜ž!Rí«\\(Q$T5Nå â«£ìœ¿6|럦ì†ï¸…ï­—(": [
- "峩_\u0003A瘘?✓[硫䎯á½uጭ\"@Y綅첞m榾=è´®9R벿῜Zï §",
- null,
- "䰉㗹㷾Iaáƒqcp쓘὾൫Q|ﵓ<\/ḙ>)- Q䲌mo펹L_îŽ¦ì¹æ¨–庫9ê©ìª¹á˜¹ä‘–ç€aK îž?*趤fë­“å»p=磕",
- "î“å“‘z懅á¤-ê¹ux쀭",
- [
- true,
- 3998739591332339511,
- "ጻ㙙?᳸aK<\/囩U`B3袗ﱱ?\"/ké”ä§2ï…¤l@쿎VZ쨎/6ꃭ脥|B?31+on颼-ê®§,O嫚m à¡­`KH葦:粘i]aSUì“™$ì‚f+詛頖b",
- [{"^<9<ç®&絡;%iï«¡2攑紴\\켉hì“™-柂äšven\u20f7浯-Ꮏ\r^í›ä“ší—¬\u000e?\\ã…¡ÖºJë–·VOt": [{
- "-௄å¶k㘆í˜à®½y⎱㢬sS઄+^瞥h;á¾·jî­;抭\u0003ë°«f<\/5â°§ï§§ï¡™_朻ï—%*[-撵䷮彈-芈": {
- "㩩p3篊G|宮hz䑊o곥j^Co0": [
- 653239109285256503,
- {"ê¶²?|\":N1Û¿æ°ƒNZ#깩:쇡o8킗ࡊ[\"ë¸Po핇1(6é°$膓}â½*)渽J'DN<ì™ê¸˜æ¯¦ë²Ysì¹–": {
- "2Pr?Xjㆠ?æ®/?㓦柖馃5뚣Nᦼ|é“¢rè¡´ã©–\"ç”æ¹—Üæ†": "\"뾯ië‡ç­ç‰»$ç²/4ka $åŒíœ´ï‹è¯‘zbAá©ê‡¸ç‘…&뵲衯ꎀᆿ7@ꈋ'ᶨH@á ´l+",
- "7뢽ëšv?4^ꊥ_⪛.>pởr渲<\/⢕疻c\"g䇘vU剺dஔ鮥꒚(dïŸv祴Xâ¼¹\\îºa8y5å†": true,
- "o뼄Bìšžç¾hrï·”í˜ë’šâ¿›U5pꪴfg!6\\\"爑ì䢱W<ï¶•î\\í…£ç‡oI/BK뺡'谑♟[Ut븷亮g(\"t⡎有?ꬊ躺ç¿è‰©nl F⤿蠜": 1695826030502619742,
- "ÛŠê¹–>ࡹ햹^ⵕ쌾BnN〳2C䌕tʬ]ì° ?ݾ2饺蹳ã¶êŒ­è¨\"â—¹á¬D鯎4e滨T輀ﵣ੃3\u20f3í‚™D瘮g\\擦+泙᧠鬹ﯨַ肋7놷郟lPå†{ß’hà§œr5,ê“‹": null,
- "ΉN$y{}2\\N﹯ⱙK'8ɜͣwt,.钟廣䎘ꆚk媄_": null,
- "䎥eᾆá¦î‘§ì‰,JÞªn岪ã¥sî­•æ–謽䚔5tã¯ï–µï£šã°³ã±ŠZhD䃭f絕s鋡篟îža`Q鬃┦鸳n_é‚(E4è¿ _è§…ë·_宪D(NLî²ç–¶hL追V熑%]vè‚«=惂!㇫5⬒\u001fï²å–º4랪옑": {
- "2aè¼85먙R㮧㚪Sm}E2yîŠê†£ê«¨rRymã±è†¶á”¨\\tç¶¾A☰.ç„„ë™—9<쫷챻䒵셴᭛䮜.<\/慌꽒9å»Okä°ŠZ㥪幸k": [
- null,
- true,
- {"쌞ì": {
- "â–ŸGL K2ië›±iï¼±\"Ì .옛1X$}涺]éŽæ‡ Ú¦ëŠ·?tfçŸÝžã‚Ÿ{": 1.227740268699265E-19,
- "ê’¶]퓚%ฬKâ…": [{
- "(à·›@Ç®ã£ä§¼äµ¤[aテൖvEnAdUë –ë—ˆ@볓yꈪ,mÔ´|꟢ìº(而첸죕CX4Y믅": "2⯩㳿ꢚ훀~迯?᪑\\啚;4X\u20c2è¥B箹)ä¿£eá»»w䇄",
- "75༂f詳䅫ê§é¿ }3\u20b5'∓ä±è™€fè¼î‘”Iq鈆﨤gí©)BFa왢d0뮪痮Mé‹¡nw∵謊;ê§f美箈ḋ*\u001cî±ïœŸ`퇚í‹ä³«$!V#N㹲抗ⱉçŽ(V嵟ï«_bã³…\u0019": null,
- "e_m@(i㜀3ꦗ䕯䭰Oc+-ë ¨0뭦⢹苿蟰ê‚SVä°­å‹¢ë¥.ྈ爑Vd,á•¥=í€)vz뱊ꈊB_6듯\"?{ã’²&㵞뵫ç–ë¡ë¯ˆ%Qwé™,?\ræž®\"? N~癃ruà¡—dn&": null,
- "㉹&'Pfs䑜공j<\/?|8oc᧨L7\\pX᭠9᪘": -2.423073789014103E18,
- "ä„瑄䢸穊f盈᥸,Bî§§ë¾§í‘—íšµB1쟢f\u001f凄": "é­–âš2儉j꼂긾껢嗎0ࢇ纬xI4]ï„(à©“`蕞;픬\fC\"æ–’\")2æ«·I﹥迧",
- "ퟯ詔xæ‚ë ¹+T?Bg⥄섅kOeQí¼ã»´*{Eé¼6æ°¿L缋\u001c둌๶-㥂2==-츫I즃ã ï–˜Lg踞ꙂEG貨鞠\"\u0014d'.ç¼—ï¡gI-lIb䋱ᎂDy缦?": null,
- "î’¢ç´Mã¦çŠ¿w浴詟棓쵫G:äœ?V2íž½7N*n&ã–ŠNd-'ຊ?-樹DIv⊜)g䑜9뉂ㄹí‘阉~ê…쵃#R^\u000bïž®B䌎䦾]p.䀳": [{"ϒ爛\"ꄱ︗竒G䃓-î†ã¾å¸³ã‚.j)qguæ‰å¾£à¨Zé¼—A9A鸦甈!kè”å–™:3Tî†%&ã ˜+,ä·ž|ì±½v䚞문H<\/醯rì…“ã¶¾\\a볜åºzEä·_죤ဵ뿰᎟CB": [
- 6233512720017661219,
- null,
- -1638543730522713294,
- false,
- -8901187771615024724,
- [
- 3891351109509829590,
- true,
- false,
- -1.03836679125188032E18,
- {
- "<?起HCᷭ죎åŠîŒŽèއ逰/{gs\u0014⽛㰾愫tï¿–<솞ڢëŒç…²è†ºà¨»9x닳xà¡­Q訽,ᶭඦtt掾\"秧㺌d˪䙻꫗:á­ˆh4ç·žç—䤴c뫚떩త<?ᕢ謚6]í›Oé°é‹›é• è´©èµŸ\"<Gâ™·1'": true,
- "቙ht4ßBqꦤ+\u0006멲趫ç”)椾": -1100102890585798710,
- "ç·å…Žê³‡ë‡¸ç²ŸF醇;朠?厱楛㶆â¶7râ¾›o꯬᳡F\\머幖 㜦\f[æ¦á¥½ã®£0䕊?J㊳뀄e㔔+?<n↴å¤î§·": [
- "4~ê‰ç¾\\å®(泤å•빜\u0014>j랎:g曞ѕᘼ}链N",
- -1.1103819473845426E-19,
- true,
- [
- true,
- null,
- -7.9091791735309888E17,
- true,
- {"}蔰鋈+ê¨å•µ0?g*사%`J?*": [{
- "\"2wG?yn,癷BK\\龞䑞x?蠢": -3.7220345009853505E-19,
- ";饹়â€)çš‹`噿焒j(3â¿w>å5X<np?<줯<Y]æ˜!J೸UⳂNे7v௸㛃ᄧ톿䨷鯻v焇=烻TQ!F⦰䣣눿Ké·šëˆ'â­²mæ (äš»": [
- "蹕 淜੃b\"+몾ⴕ",
- null,
- 35892237756161615,
- {
- " 듹ã)5æ…ç®±&$~:é°ì®<\/å ‹?% \\勽唅zì†å¸‹ä˜ºH髀麡M퇖uz\u0012m諦d᳤콌æ¨\rX싹̡á²": -433791617729505482,
- "-j溗ࢵcz!:î€}✽5à´‡,욨Ýs#ë«=å—æµº^}E\\Y\\T*뼈cdêºcÛ˜ïµëŽä¨¸ë±K䠴㉿æ¿é€³îŽœ@wî·¿fì¢<\/[L[": -9.3228549642908109E17,
- "Ms킭uà®—%\\uâŽ/家欲ἅ答㓽/꯳齳|㭘Pr\"v<\/禇䔆$GA䊻˔-:틊[h?倬è¤á¾žà§³.Gw\u000b": [
- "0宜塙I@ä´è‰\\Uyë’…=2<hæš’ï…£K._è´¡ç’Yi檻_⮵uá㘗è [f\u0015힢Hê”®}጑;ï´èªyf0\"\u20cc?(=qæ– âž½5ꎾ鞘kⲃ",
- -2.9234211354411E-19,
- false,
- true,
- {
- "\u0011⟴GH_;#怵:\u001c\u0002nîž»1U\\p/ì™”(┫]hêšî·ƒ7\r0䵷첗岷O௷?î·°ãŽ[殇|J=?韷pᶟ儜犆?5კ1kê–iH竧뛈ପdmk游y(콪팱ê¾k慧 yè¾£": [
- false,
- "O\"ëp覈ykv磂㢠ãµ~뀬íŠlC&4솎䇃:Mj",
- -7.009964654003924E-20,
- false,
- -49306078522414046,
- null,
- null,
- 2160432477732354319,
- true,
- "4íš¡h+!踹ê¬P鮄{0&ë±¥M?ìƒéž…n㮞ᨹ?쒆毪l'ç®…^ꚥ頛`e㻨52柳⮙嫪࡟딯a.ï‘„~äµ®1få˜N&zÈ­L榓ۃ鳠5d㟆M@㣥ï Ó‹AÎq0縶$",
- -3.848996532974368E16,
- true,
- null,
- -3.5240055580952525E18,
- {
- " vï­·áµ#ce乃5僞?Z D`묨粇á”ç» vWLè­¢uë½€\\J|tâ“™tâ„–\"ꨋnT凮ᒩè‚ç¯b騩:䢭Hbvì»å³¨z㹚T趗햆귣학津Xiï¼¹@á–¥K": true,
- "!F 醌yï䉸W2ꇬ\u0006/ä’7~%9擛햀徉9â›°+?㌘;ê “X䇻Dfië¼§ì’’\u0012F謞Õ絺+臕kà¤LSQìŒX쎬幦HZ98è’Šæž³": "澤令#\u001dæŠâ›³@Næ•퀂[5,✄ꘇ~䘷?\u0011Xꈺ[硸⠘⛯X醪è¡x\u0007쌇MiX/|ï¾ëšK8ä¡î¿¥W)銀q僞綂蔕E",
- "6â²ä£–Rà§ž@ငg?<\/à³´xé™™Xꈺ崸⠅ᇾ\\0X,H쟴셭A稂ힿã‚F\\쑞\u0012懦(Aᯕç­~î½”\u0001ê»®X?逊": 5.7566819207732864E17,
- "[c?椓": false,
- "kä’‡": 2583824107104166717,
- "꙯N훙ã…ﮒ燣㨊瞯咽jî™Mxby뻭뵫װ[\"1畈?à§±L": "ë£á”‚魠羓犴ꚃ+|rY",
- "ë…ºZ?îˆä¬ï“©é‰‰îˆ­:?â³™ç˜Cኯ.Vs[釿䨉ì§\\\\*쵢猒$\\y溔^,㑳": {"藶꺟": [{
- "\"d훣N2zq]?'檿죸忷篇ﮟ擤m'9!죶≓pë­»\\ᇷ\f퇶_ä°¸hà¹Q嵃訾㘑従ꯦ䞶jL틊ræ¾µOmᾫ!H䱤팼/;|á­ºI7슎YhuXiâš¼": -1.352716906472438E-19,
- "M⽇倻5Jä‚«à¤”á”æ¥¸#î „î¾–J[Fﹱ쫮W誻bWz?}1\"9硪뻶fe": "盬:Ѹ砿íšë•£T凊(mç¦å‘œï»R㿎艴䂵h",
- "Rë¾k힪CHé’™_i苮ⰵoᾨ紑퉎7h؉\"柀è½z0့\"<?嘭$èœ?礲7岇槀묡?Vé’¿T⣜v+솒çšÔ›2ç±³mH?>è–™å©è¿3aFÆÃ": "2,ê“´g?_섦_>Y쪥션钺;=趘F~?D㨫\bX?㹤+>/믟kᠪ멅쬂Uzỵ]$ç§`mé›ç‘Šî’ඖ鯬cꙉ梢f묛bB",
- "♽n$YjKiXX*GOè´©éƒè±®ç¥´éžK醞眡}ê—¨v嵎꼷0à­¸+Mè‹eH徸Jîžê£†:â¼æ‚¥B켽迚㯃bè«‚\u000bjꠜ碱逮m8": [
- "푷᣺ﻯd8ﱖ嬇ភHîªé¹Žâ¡±á±…0g:æžœ6$GQ췎{vá·§Yy-è„•xå¹ç ¡ï¨¬â®¸Cï§‚êš=軄H犠Gè°–ES詤Zè ‚3î§™lë´Ÿhï¿’7䦹1GPQG癸숟~[#é§¥8zQ뛣J소obg,",
- null,
- 1513751096373485652,
- null,
- -6.851466660824754E-19,
- {"ä©‚-â´®2Ù°K솖풄꾚ႻP앳1Hî³é·›wmR䗂皎칄?醜<\/&à §ã¬X濬䵈K`vJ륒Q/IC묛!;$vÏ‘": {
- "@-êš—xྐྵ@m瘬\u0010U絨ﮌé©\\켑寛넆T=tQã­¤Lì—°@脸삯e-ï–…î–‘:⩼u㎳VQ㋱襗ຓ<Ⅶ䌸cML3+\u001e_C)r\\9+Jn\\Pﺔ8蠱檾è…Pqé³è¯î¦§Tä„I": -1.80683891195530061E18,
- "á·­á‹»U~ཷsgSJ`᪅'%ã–”n5픆桪砳峣3ç®æž¾äŒ·âа呀ïŒ": {
- "Ş੉䓰邟自~X耤pl7间懑徛s첦5ਕXexh⬖鎥á€nNr(J컗|ૃF\"Q겮葲놔엞^겄+㈆è¯ã€¾í¬ç´G'E?飕1fâ¼í…¬æ‚šï•¦æ³¬ë¨Uç¬í›¶Qs": false,
- "î³…(\u20dag8í½íŠ£>^Y{뤋.袊䂓î†;_ïg]S\u202a꽬L;^'#î—™ë•bႌ?Cç·¡<ä²ä²æ–­ê6\u001asD7IK5Wxo8\u0006på¼Šâ¼‚ê¯æ‰µ\u0003`뵂픋%ꄰ⫙ë¶lå›å°›ïˆ®+ä—…E쟇\\": [
- true,
- {
- "\n鱿aKã¡â’ã¼™2ì´¹f;`ì¾qIà¡”G}ã·äç“°w늮*ç²…9뒪ㄊCj倡翑閳R渚MiUO~仨䜶RꙀA僈㉋⦋n{ã–¥0딿벑î§é€¦â¥»0î¾®h薓쯴ê»": [
- 5188716534221998369,
- 2579413015347802508,
- 9.010794400256652E-21,
- -6.5327297761238093E17,
- 1.11635352494065523E18,
- -6656281618760253655,
- {
- "": ")?",
- "TWKLꑙ裑꺔UE俸塑炌Ũ᜕-ï’‚o\"徚#": {"M/癟6!oI51niíš=댡>xê¨\u0004 ?": {
- "çš­": {"⢫䋖>u%wî²´ìž¼<ä•ê˜P䋵$é­‹æ‹U䮎緧皇Y훂&|羋ꋕ잿cJ䨈跓齳5\u001a삱籷I꿾뤔S8㌷繖_Yឯ䲱B턼Oæ­µF\\l醴o_欬6ç±=D": [
- false,
- true,
- {"Mt|êžD|Fê¶£MQ뵕T,ëºk+?ãµi": [
- 7828094884540988137,
- false,
- {
- "!༦鯠,&aﳑ>[euJê½ç¶·æB.h": -7648546591767075632,
- "-n켧嘰{7æŒæ¯„Y,>â螵煫乌pv醑Qå¶š!|âŒè²¬0왾ë¢ê…蛨S\\)ç«°'舓Q}A釡5#v": 3344849660672723988,
- "8é–ªéºV=鈢1녈幬6棉⪮둌\u207d᚛驉ꛃ'r䆉æƒà¥ˆ|bἧﺢᒙ<=穊强s혧eꮿ慩⌡ \\æ§³W븧J檀C,ᘉì˜0俯퀉M;筷ࣴ瓿{늊埂鄧_4æ¸Nn阼Jੵ˥(社": true,
- "oë¼€vwï…®)4A뢵(î¼±a䵢)p姃뛸\u000fK#KiQp\u0005ê…芅ì…îª": null,
- "ç ¥$ꥸ┇耽uæ–®Gc{z빔깎밇\\숰\u001eê´·å„㶇쵿_á´„+hç©¢p촀Ნ䃬zäé…³Ó‚31xꔄ1_ç šWë ˜G#2葊P ": [
- -3709692921720865059,
- null,
- [
- 6669892810652602379,
- -135535375466621127,
- "뎴iO}Z? 馢녱稹ᄾä©rSt帤넆&7ié¨ë©—ç•–ï”9誧鄜'w{Ͻ^2窭외b㑎粖i矪ꦨ탪跣)KEㆹ\u0015V8[W?⽉>'kc$䨘ᮛ뉻٬M5",
- 1.10439588726055846E18,
- false,
- -4349729830749729097,
- null,
- [
- false,
- "_è ¢ã ^䟪/D녒㡋ỎCä’ˆíŒïŒ¢\u0006àªq@O펢%;é¹ìŒo戥~A[ꡉ濽ỳ&虃᩾è£å”™ï¤£èŒ¨Ig楡꒻M窓冉?",
- true,
- 2.17220752996421728E17,
- -5079714907315156164,
- -9.960375974658589E-20,
- "ᾎ戞༒",
- true,
- false,
- [[
- "ⶉᖌX⧕홇)g엃⹪xëšç™Ÿ\u0002",
- -5185853871623955469,
- {
- "L㜤9ợㇶKé°â‹“V뽋˖!æ–«as|9"á¬ä†ª?î¾¶7胜&n薑~": -2.11545634977136992E17,
- "O8뀩D}캖qè‚6༣ã—䈓煮å½à¨†á޼Dᣘí›;": false,
- "YTá¡…^ï—Lã—ŽcbY$pᣞ縿#fh!ꘂb삵玊颟샞ဢ$ä—é¼’ëª~rkH^:닮먖츸륈⪺쒉砉?㙓扫㆕꣒`R䢱Bé…‚?C뇞<5Iޚ讳騕S瞦z": null,
- "\\RB?`mG댵鉡å¹ç‰©äµŽæœ‰5*e骄T㌓ᛪç¾é§’Ku\u001a[柆jUq8⋈5鿋츿myï»—?é›ux঴?": 5828963951918205428,
- "n0æ™…:黯 î¶·xu씪^퓞cB㎊á¬âº˜Ù¤Öƒ~B岚3㥕擄vᲂ~F?Cä¶–@$mï›~å¿”S왖㲚?챴⊟W#벌{'ã°Iä ç¸s樘\\X뢻9í•¡I6èㄛî‚î«8쯶]wॽ0L\"q": null,
- "x增줖j⦦tä¢áŽ™ïŠ­ã›¿Yf鼘~ê«“æ„4惊\u209c": "oOhbᤃ᛽z&Bi犑\\3B㩬劇䄑oÅ쨅孥ë©àº–acA㖫借ãžvg싰샂ãœ#譞⢤@k]鋰嘘䜾L熶塥_<\/â¾å±ˆï®Š_mYè¹t뙺}Ox=wé®®4S1ê©ï¬¾'å·‘",
- "㗓蟵ꂾe蠅匳(JPä—à·¸\u0089耀왲": [{
- "ᤃ㵥韎뤽\r?挥O쯡⇔㞚3ä¼–\u0005Pî•⋪\"Dê¶£QLn(⚘罩䩢Ŏv䤘尗뼤ë›O淽鋋î¡é—šrå´©a{4ç®™{煷m6〈": {
- "l곺1L": {
- "T'ਤ?ç …|੬Km]ä„©\"(à¿¶<\/6U爢䫈倔郴l2ã´±^줣k'Læµ–Lé°„Rp今鎗⒗Cì–¨Mí›ã¡§Î˜X粜뫈N꤇輊㌻켑#㮮샶-ä—룲è ç™œã±V>=\\I尬癤t=": 7648082845323511446,
- "鋞EP:<\/_`á§e混ㇹBd⯢㮂驋\\q碽饩跓྿ᴜ+j箿ë ã—‘yK毢宸p謹h䦹乕U媣\\炤": [[
- "3",
- [
- true,
- 3.4058271399411134E-20,
- true,
- "æ€+憱f逮@먻BpW曉\u001aã£âŽŠ$n劈D枤㡞좾\u001aá›ïŒƒè‹”౩é—1B䷒Ṋ݋âžê€žêƒç£$t੤_:蘺⮼(#N",
- 697483894874368636,
- [
- "vᘯ锴)0訶}䳅⩚0O壱韈ߜ\u0018*Ué¾ä–=䧉뽑å•휻ID쿇嘗?ꌸῬ07",
- -5.4858784319382006E18,
- 7.5467775182251151E18,
- -8911128589670029195,
- -7531052386005780140,
- null,
- [
- null,
- true,
- [[{
- "1欯twG<uä®â½ê‡£_ჟﱴଶ-쪋\"?홺k:èŽêœª*⺵꽹댅釔좵}P?=9ë ¿46b\u001c\\S?(筈僦⇶爷谰1ྷa": true,
- "TҫJYxÚª\\鰔℮혡)m_WVi眪1[71><\/ï†Q:0怯押殃탷è«ì‚¬<ỗꕧ蚨ä¡ï¨î³‰nDꌕ\u001cë…¬~è“©<N蹑\"{ä«¥lKcí˜ë«–앺:vⵑ": "gæ§µ?",
- "aꨩ뻃싥렌1`ë¡—}Yg>鲃g儊>ê¡l㻿/â‘·*ì±³6㻜W毤緛ﹺᨪ4\u0013뺚J髬e3쳸䘦伧?æª&{L掾p+꬜MäŠd娘6": {
- "2p첼양棜h䜢﮶aQ*c扦v︥뮓kC寵횂S銩&Ç{O*य़iH`Uí…à¡“rä©•5ꄸ?`\\á§«?ᮼ?t〟崾훈kè–ì/iy꤃뵰z1<\/AQ#ë¿©8jJ1z@u䕥": 1.82135747285215155E18,
- "ZdN &=dë…„á…†'ì‘â…‰:烋5&áŸï”‹á„‚汎æ¥L㯄固{é’§u\\ãŠíŠšeæ‘‘&tå—„ê–„UbâŒ?m䴘熚9EW": [{
- "ଛ{i*a(": -8.0314147546006822E17,
- "⫾ꃆY\u000e+W`௸ \"Më’¶+\\ë·lKE}(NTí‚¶Yjé¸ç¯’î©¥ì¶'jNQ硾(똡\\\"逌â´y? IRꜘ὞鄬﨧:M\\fâ ‹Cꚜ쫊ᚴNV^Dä•—ã…–á¼”Iao꿬Câ8": [
- 287156137829026547,
- {
- "H丞N逕<rO䎗:í…•<\/䶩샌Sd%^ᵯëˆ엑者g䖩똭蕮1U驣?Pâ°°\u001fp(W]67\u0015ï«£6굺OR羸#ì´Fè’ˆ;嘙i✵@_æ’¶yã¤â¤(:᧗뼢༌朆@â°ã¤¨ê­²?-n>⯲": {"": {
- "7-;枮阕梒9ᑄZ": [[[[
- null,
- {
- "": [[[[
- -7.365909561486078E-19,
- 2948694324944243408,
- null,
- [
- true,
- "荒\"并孷䂡쵼9o䀘F\u0002龬7⮹Wz%厖/*? a*R枈㌦ë¾g뒠䤈q딄㺿$쮸tᶎ릑弣^éŽ<\/Y鷇驜L鿽<\/ì¶‹9Mᲆឨ^<\/庲3'lë‚¢",
- "c鮦\u001bë‘\\~?眾ಢu݆綑෪蘛轋◜gȃ<\/â´ƒcpkDt誩܅\"Y",
- [[
- null,
- null,
- [
- 3113744396744005402,
- true,
- "v(y",
- {
- "AQ幆h쾜O+꺷铀ꛉ練A蚗⼺螔jãŒ3꽂楎䥯뎸먩?": null,
- "蠗渗iz鱖w]擪E": 1.2927828494783804E-17,
- "튷|䀭n*曎b✿~æ¤U]î­¡Gz鄭kW|ã´š#㟗ഠ8u擨": [[
- true,
- null,
- null,
- {"⾪壯톽g7?㥜ώQê‘㦀æƒã§½î“¡ä¼“\\î¦*᧰閖樧뢇赸N휶䎈pIæ°‡ï®é•Šmaᬠ탷#X?î³A+kÐM ༑᩟Ø?5꧎鰜ṚY즫궔 =ঈî³;ﳈ?*s|켦蜌wM笙莔": [
- null,
- -3808207793125626469,
- [
- -469910450345251234,
- 7852761921290328872,
- -2.7979740127017492E18,
- 1.4458504352519893E-20,
- true,
- "㽙깹?ë¨ä†¢:ä´ŽÛ»gæ® JBTU⇞}ꄹꗣi#Iî’¡ëµ£é‰r혯~脀ìƒ#釯:场:ä”>ä°®o'ã¼½HZ擓௧nd",
- [
- 974441101787238751,
- null,
- -2.1647718292441327E-19,
- 1.03602824249831488E18,
- [
- null,
- 1.0311977941822604E-17,
- false,
- true,
- {
- "": -3.7019778830816707E18,
- "Eå³¾æ†èŒ6xLIm縂0n2视֯J-ᤜz+ᨣè·mYDè±ç¹¹â¹ºäŠ“ëª“ï´€E(@è©®(!ï’Y膽#᎙2䟓섣A䈀㟎,囪QbKæ’wcG湎ꤧtGì—xâ¥ä¿Žj'A一ᯥ뛙6ㅑ鬀": 8999803005418087004,
- "よ殳\\zDâ§…%Y泥簳Uꈩ*wîRL{3#3FYHା[d岀䉯T稉駅䞘礄P:é—ˆWæ€ElBã¤å–¬èµ”bGä ¼U଄Nw鰯闀楈ePsDꥷ꭬⊊": [
- 6.77723657904486E-20,
- null,
- [
- "ཚ_뷎꾑è¹q'㾱ꂓ钚蘞慵렜떆`ⴹ⎼櫯]J?[t9Ⓢ !컶躔I᮸uz>3aã •i,錃L$æ°°í…°@7ë…«W㸮?ç¾§W뇧ꃞ,î—‘N鋮숪2ɼì½â”ä²6",
- "&y?뢶=킕올Za惻HZk>c\u20b58i?ꦶcfBv잉ETî…9jä¡¡",
- "imçŠÕƒbì¹§<D-è«‚*u2ꡜ췛~䬢(텸ﵦ>æ ¡\\뼾쯀",
- 9.555715121193197E-20,
- true,
- {
- "<㫚v6腓㨭e1ã•”&&V∌ᗈT奄5Lጥ>탤?튣瑦㳆ꉰ!(ᙪ㿬擇_n쌯IMá¿‹î£ã•¨â°æ«ˆá±·5풔蟹&L.ì²½e鰷쯃劼﫭b#ï­¶í“€7ë·„Wr㢈๧Tʴશ㶑澕é%": -1810142373373748101,
- "fg晌o?߲ꗄ;>C>?=鑰監侯Kt굅": true,
- "䫡蓺ꑷ]C蒹㦘\"1à°ƒ@å‘«\u0014NLä¾egå‘®á³,r$裢k>/\\<z": [[
- null,
- "Cä¡>?ㄤᇰﻛ쉕1஥'ÄŠ\" \\_?쨔\"ʾr: 9Sä˜ç¦ºáª§ê„‚㲄",
- [[{
- "*ç¡™^+E쌺I1䀖ju?:⦈Ꞓl๴竣迃xKC/饉:\fl\"XTFᄄ蟭,芢<\/骡軺ëœhê˜\u001f銿<棔햳▨(궆*=ä¹¥b8\\媦ä·€ë«}닶ꇭ(Kej䤑M": [{
- "1á¬?>옿Iâ•…C<ÞŽ?ꊌ冉SV5A㢊㶆z-๎玶绢2F뵨@㉌뀌oå¶”f9-庒茪ç“ë·³4": null,
- ";lá°³": "CbB+è‚»aä„·è‹*/볳+/4fq=ã°h6瘉샴4é“¢Yéª.⌖@哼猎㦞+'gꋸ㒕ߤï—ãž‘(ä¶’è·²tiâ‘´aî¥ç¡‚#Noë³”",
- "t?/jE幸YHT셵⩎Kî¹!Eq糦ꗣv刴w\"l$ο:=6:ç§»": {
- "z]鑪醊嫗J-Xm銌ç¿çµ¨c里ëç‚™Ep㣋é£ë˜¼åšŒä€“GPï¹–cmf4é¹­T䅿꣭姧â¸wy6ꦶ;S&(}ᎧKxᾂQ|tï¹ë»³k\"d6\"|Mlì·†hwLtê¼¼4$&8Պ褵婶鯀9": {"嵃닢ᒯ'î–›dá§«ä³³#Nî‡Xe3-붋鸿î¢à¬¢ë–“î§ž%dK\u0013䲎ê–YV.裸Râ‰rR3蟛\\:ì ¯:å—ĺLʆ넕>|텩鴷矔ꋅⒹ{tå­¶ã“‘4_": [
- true,
- null,
- [
- false,
- "l怨콈lá’",
- {
- "0wä²å¬§-:`䉅쉇漧\\Ü‚yㄨb%㽄j7ᦶ涶<": 3.7899452730383747E-19,
- "ꯛTẀq纤qå¶Vâ¿£?\"g}ი艹(쥯B î­T騠I=仵ë°X": {"KX6颠+&á…ƒ^fç•’y[": {
- "H?뱜^?꤂-⦲1a㋞&î‘®êƒç²¾Ii᤾챪咽쬘唂쫷<땡劈훫놡o㥂\\ Kâ´™Dç§¼Fæ°®[{'좴:례晰Iq+Iì­¥_T綺砸GOç…䟪ᚪ`î‘↹l羉qì¼Dê½áœ…훦: vUV": true,
- "u^yï³0㱓#[y뜌앸ꊬLã·©?蕶蘾â»KӼ": -7931695755102841701,
- "䤬轉車>\u001c鴵惋\"$쯃྆⇻në½€Gæ° Såª]à²²ê¨æ‡Qxኻ椕駔\\9ࣼ﫻ìœç£¡ï©ˆëºªá¶šë³l㕆t+sζ": [[[
- true,
- false,
- [
- null,
- 3363739578828074923,
- true,
- {
- "\"鸣詩 î›ë³°ã‘µgLã¯¦á¿…ì¶æ—«}ED辗ﮈI쀤-ꧤ|ã ¦Z\"娑ᕸ4çˆé¨ã£\"]ì³Af]茛⬻싦oèšk䢯ä©è½3廇喑ޅ": 4.5017999150704666E17,
- "TYႇ7ʠ值4챳唤~Zo&ݛ": false,
- "`å¡„J袛㭆ëºã³€N㺣`ê½å¶¥Kï¯SVᶔ∲퀠ç¾N딂X\"á¤hNﬨvI": {"\u20bbã­˜I䖵䰼?sw䂷쇪]î(泒f\"~;꼪FÔsá¦": {"p,'ꉂ軿=Aèš¶?bƉãµä…°è«¬'LYKL6B깯⋩겦뎙(ᜭ\u0006噣d꾆㗼Z;ä„äš”cd<情@äž‚3苼㸲U{)<6&ꩻ钛\u001au〷N숨囖愙j=BXWìš•^x芜å á¿™çˆ‚ë›·ê’»t✘Q\b": [[
- "ç±›&ଃ䩹.ꃩ㦔\\C颫#暪&!勹ꇶ놽攺J堬镙~軌C'꾖䣹㮅ï¶å²ƒá™´éµ£",
- 4.317829988264744E15,
- 6.013585322002147E-20,
- false,
- true,
- null,
- null,
- -3.084633632357326E-20,
- false,
- null,
- {
- "\"짫愔昻 Xï«\"è—£j\"\"ë¨à½…ѻ㘤㬯0晲DU꟒㸃dë²€î¢ìœ’l䦾cà©»*3": null,
- "è°ˆWm陧阦咟ฯ歖擓Nå–´ã‹éŠ­rCCnVࢥ^♼Ⅾ젲씗刊Sà¼+_tèµ”\\bäšë‰¨ê¬«6펛cL䊘᜼<\/澤pF懽&H": [
- null,
- {
- "W\"HDUuΌ퀟M'P4à¿°H똆ⰱﮯ<\/å‡è˜²\"C鴫ﭒж}ꭩ쥾t5yd诪ﮡí‰â´°@?æ°é†³rj4I6Qt": 6.9090159359219891E17,
- "絛ﳛ⺂": {"è«°Pã—®î˜è¦`ZQ?ꫦh*à´±cbâ§±}埌茥h{棩렛툽o3é’›5é®l7Q榛6_g)ὄ\u0013kj뤬^爖eO4Ⱈ槞鉨ͺ订%qX0Tì—å«·$?\\\"봅늆'%": [
- -2.348150870600346E-19,
- [[
- true,
- -6619392047819511778,
- false,
- [[
- -1.2929189982356161E-20,
- 1.7417192219309838E-19,
- {"?åµ²2à¿2\u0001啑㷳c縯": [
- null,
- [
- false,
- true,
- 2578060295690793218,
- {
- "?\"殃呎ïˆ#ã‘‘F": true,
- "}F炊_æ®›oU헢兔êˆ,èµ­9703.Bæ•°gTz3â¬": {
- "5&t3,í–“Mݸᵣ㴵;꣫ä©â†³#ï¢@ë«·ä …ï¦+W-ࣇzᓃ鿕ಔ梭?T䮑ꥬ旴]u뫵막bBè®:왳둛lEh=숾鱠på’î›î­ˆ$ì§#?gâ¹·á—Švã·µ.æ–ˆu頻\u0018-G.": "ë½™m-ouࣤ஫牷\"`Ksꕞ筼3HlȨvCï¢î›¦å ˆ\"I]㖡玎r먞#'W賜鴇k'c룼髋䆿飉㗆xgå·¤9;芔cáŒ/ax䊨♢í“rå“㸫೼䢗da᩾\"]å±£`",
- ":M딪<䢥喠\u0013ã–…x9è•ã‘‚XO]f*Q呰瞊å­VP@9,㨣 D\\穎vˤƩs㜂-曱唅L걬/롬j㈹EB8g<\/ì„©o渀\"u0y&룣": ">æ°ç·©L/ä•‘ë¯êŸ˜îŸ”蕞^aBë’£+0jK⪄瑨痜LXK^힦1qK{æ·št츔X:Vm{2rçB뾄H첚7æ°¥?쉟䨗ꠂv팳圎è¸é½€\\",
- "D彤5㢷Gꪻ[lㄆ@὜⓰絳[ଃç½ì®¹â˜’[*0ꑚ㜳": 9022717159376231865,
- "Ò–aV銣tW+$é­¿\u20c3ïœäºœ~ë«¡ᙰ禿쨽ã¡fá¹¼zE/h": "5è‡ï’Œã‹‡á²¯ì®º? 昨탰Wム밎#'\"崲钅U?幫뺀â¾@4kh>騧\\0Ò¾EV=çˆî©®ÍŒUæ€%ꉼ 㮋<{j]{R>:gÔ©L\u001c瀈锌ﯲﳡꚒ'â«¿E4æšãŒ—뵉X\"Háœ",
- "ᱚגּ;s醒}çŠSἿ㦣&{T$jkB\\\tḮ앾䤹o<é¿(tW": "vb⯽䴪䮢@|)",
- "⥒í껉%惀뗌+녣迺顀qæ¢g⚯i⤭ë£Mç¹j̈́⽜A": -8385214638503106917,
- "逨ꊶZ<\/W⫟솪㎮ᘇb?ê ”i\"H㧺x෷韒Xꫨฟ|]窽\u001a熑}Agn?Má¶–a<rà°„4Ů䢤슲AxÄ£eê³–ã´¤x竾éƒB謉鸵kè–½M)\"芣眜`è‰ê‰›ä´º": "é¹^ె캫?3耲]|Ü1ä¡’ã®]8e?ä¶^",
- "뿸樅#P㡊1M룮Uꪭ绢ꑮZ9꽸": {"\nJ^Ñ”|3袄ã…7⨆銦yîµ”çâ‹·ä»´ct?[,<\/ã…¬`?갔髞%æA೚C": {
- " 䇞3갫䅪": [{
- "0|â©ã‘‚砕ㅻ": null,
- "D箳᠉`|=â¼­)\"*࣊ã¦LjO誋": "",
- "ࠚDZmê—¥}ᷴ╈r7í—´È¥4Kp5a)o}鎘门Læ°ä†“'✎k俎c#T68Óâ©¶î¶6L鎴<r൦$黊BQYã¼³\\è·¿F慮⡨拵贀!ç”¶Vå–…/": null,
- "âµ£q⳹ﻨLk]晩1*y\\$%}ä–¶P煑㇆䈦E嫿«•Y࣓嫨ä“OL낮梚㸇洛洚BYtgl∛S☕䉓宑⋢粚ꔯ꠼붠": ")ꬑ윤`\"â°£<\/婽*Y䔸ᓰ_ï³t슲å©éš¥&S糧䛮闵诌è±sh쯽邴*ì„´ØÍŽ=㯨\"RVíž³,^t\"ac?䤒ꉀxHa=Uꛕã™î·“TkF껾",
- "å¼¾cUAF?暤cë½.欀nKì•­]r傊䀓ﯳ馽垃[䥛oI0N砊鈥헅Co쟋钄ㅷ㊌뷚7": [
- null,
- "à«“é¨?^ä†{\u0006`X䧵儱&롡尙砡\u0006ë»ì‘¬sjâ–»Xfᬶgcã„¢V >9韲4$3á»´^=ì煤áë·2䣃%ï…Žé· /eQ9頸쥎",
- 2398360204813891033,
- false,
- 3.2658897259932633E-19,
- null,
- "?ꚃ8Nnãž·å¹µd䲳䱲뀙ꪛQ瑓鎴]î’¶ä©‹-é°¾æ¡ï¾ä³¡??掊",
- false,
- -1309779089385483661,
- "ᦲxu_/yecR.6èŠ.áœ‡éŽ ~",
- -5658779764160586501,
- "ì’Œ:æ› =lìœä¢œwk#s蕚\"互㮉m䉤~0ë“䋙#Gîš¿;h숄옥顇෤勹(C7㢅雚ã¯Lâ …VVç°…<",
- null,
- -4.664877097240962E18,
- -4.1931322262828017E18,
- {
- ",": {
- "v㮟麑䄠뤵g{Më®.\u001bzt뢜뵡0Ǥ龍떟Ᾰ怷ϓRT@Lꀌ樂Uã â¾•e扉|bJg(뵒㠶唺~ꂿ(땉x⻫싉ìŠ;%0鎻V(o\f,NéŠ%nk郼螺": -1.73631993428376141E18,
- "쟧摑繮Q@Rᕾ㭚㾣4隅待㓎3蒟": [
- 4971487283312058201,
- 8973067552274458613,
- {
- "`aæ™á£—î\u0015i<S幼訃锭B0&槩✨[Wpçš©[g≊k葾x2ᡆ橲䲢W": true,
- "kH皈Sê±qå‚‘u?솹풑~o^F=ï¦N*reî••J沤wW苯7pã¼¹äŽa=ꮧLã·©냴nWꌑ㞱uuè°lVNç¿á¤»(eè±¶5#L쪉ᅄ઄\u0015숟봊P瀚X蓎": false,
- "䫯דּ〖Scä›­ì Lëµ¾pî«“CꙞ\"엇즓_ﰛ톣ꫀ먩㺣㮠⭴!\\Wâ”tä–°è»…y\u0014~ᇰ렢E7*俜䥪W䀩ä·hë´†vjஉ묣à¼G39.뼳輼:㮿á¦A饕TUL}~": [
- null,
- 8.8648298810470003E17,
- 5.735561205600924E-20,
- null,
- -102555823658171644,
- 1.2674932032973067E-19,
- {
- "D胣O㯨\u0017Ku눓ã’í…nᨊ!Ꚇ廫_>Bo¸": 4.3236479112537999E18,
- "HW&퉡ãåœ<W)6æ‚°ê ‘HEp14xy峑ft\u0005s亘V튉䢮ꦈXåµê¬?lI_ë춇-6Ss噺Nk-ﮥíƒÜ郪*ï“­PR(S6â•‹@ä»™V懸뺵ﯜVç²¹": "9䗌斀4ãˆ^Qséš„ç¡j\u0003",
- "Vké¶…Cæ³¹ç­HX훉朗*r\\z顊誌儖4?n7á¾6몋䎡ﳈ],Hé ¢pèšã‘„P4满Eä©V䬕à¸L廂쒬î®ì‘¨ê†·hè¿¡ê°è­–墎 î‡]鹿ฌ7ﶽ冭༽<ꈓS\\lä‹®?_ユ檒?": -8598528325153980065,
- "t=qí£ç–»Ñ‚Z\\錅J.镎|nfḷ鴒1厰Lç¯çºœîŒ•E]୦⥪]á®'ç¾p/å’©0닳ï³qﳖཽk ?X1Ft%ś뭢v鋋⺃爵⒗": [[
- 5.0824756359232045E-19,
- [
- 7.268480839079619E-19,
- {"탿^굞⧕iјëŠê€›w껩6ꟳXsé…š\\>Y?ç‘¡Qyí›q!帰ï©s舠㫸zêš—aSæ­²v`G株巷Jp6킼 (ê·¶é”â¾î‹¥â¡ˆ>Mæ±ãžá‰´ê™²dv@i㳓ᇆ?é»": [
- null,
- 4997607199327183467,
- "E㻎蠫á¾é«˜ä™Ÿè˜¬æ´¼æ—¾ï« í…›ã‡›?'M$㣒蔸=A_亀绉앭rN帮",
- null,
- [{
- "Eᑞ)8<Zî¿—ã¡¿W镀䛒Cìƒî¿«V?0ꯦ+tL)`é½³AjBå§€Xà³³D빠㻲ƙgn9â‘°à¾á¿œ&\"ãš¹>餧A5u&ã—¾q?": [
- -1.969987519306507E-19,
- null,
- [
- 3.42437673373841E-20,
- true,
- "eê±·Må¢\"割Pâ›í§åŽ€R䱜3ï»´Oí“«r﹉⹊",
- [
- -8164221302779285367,
- [
- true,
- null,
- "爘y^-î¬?蘞Ⲽꪓaâ…ê¨}I",
- 1.4645984996724427E-19,
- [{
- "tY좗⧑mrzïºã¿¥â´–᥷jè«…\u0000q賋è­êž„â®±S\nà¡£B/íƒêµª3ZÉ‘å¤o<\/;ë¡‹": null,
- "彟hæµ _|V4䦭Dᙣ♞uì¿»=ì‚®ã¦\u001e哀鬌": [{"6횣楠,qʎꗇ鎆빙]ã±­R굋鈌%æ ²j分僅ペ䇰wí¦î¼‹p蛃N溈ê¡ê€?@(GI뉬$ﮄ9èªê“š2e甸ڋ[äº,\u0011\u001cࢃ=\\+衪䷨ᯕ鬸K": [[
- "ㅩ拏鈩勥\u000etgWVî–¨Xs陂è¦p狵w퓼{뮵_i\u0002ퟑႢâ¬d6é‹«F~챿æŸ\u0096äš¼1ۼ칥0꣯å„=鋷牋ⅈêžé¾",
- -7283717290969427831,
- true,
- [
- 4911644391234541055,
- {
- "Iî¹éˆ’ì²½P릜朸W徨觘-HᎄíŸâ“º>8kr1{ê²µäƒã€›á¬¡Ì¨Oê·‘oä•'쿡鉕p5": "fvç²–RNçž–è›a?q꤄\u001d⸥}'ꣴ犿ꦼ?뤋?鵆쥴ë‹ä¡«s矷̄?à¶£/;괱絢oWfV<\/\u202cC,ã–¦0䑾%nè³¹g&T;|lj_欂N4w",
- "짨䠗;䌕u i+rà¹0": [{"9ä¥\\à°©8\"馇z䇔<\/á‚¡Y3e狚ì¡\"ุ6ï°†Zé–c\"Ll:ïŠê®¾ç–£<\/᭙O◌납୕湞9⡳Und㫜\u0018^4pj1;ä§å„‚ä—·à­—>@e톬": {
- "aâ‘‚Fé‹»Qèž°'<퇽Qè´ç€§{ᘪ,cP&~䮃Z?gI彃": [
- -1.69158726118025933E18,
- [
- "ê¶‚z簽㔛㮨瘥⤜䛖Gℤ逆Y⪾j08î±²Sn昞ꘔ캻禀鴚P謦b{ê“®mNéMᥙ5\"ç2냑I\u0011.L&=?6á„ ë»·X鸌t刑\"#z)o꫚n쳟줋",
- null,
- 7517598198523963704,
- "ኑQp襟`uᩄr方]*F48ꔵn俺ሙ9뇒",
- null,
- null,
- 6645782462773449868,
- 1219168146640438184,
- null,
- {
- ")ယ넌竀Sdä°¾zqâ«£âŒÊ¥\u0010á¿“' |磪&p牢蔑mï³V蘸૰짬꺵;K": [
- -7.539062290108008E-20,
- [
- true,
- false,
- null,
- true,
- 6574577753576444630,
- [[
- 1.2760162530699766E-19,
- [
- null,
- [
- "顊\\憎zXB,",
- [{
- "㇆{CVC9ï¼MN㜋ઘR눽#{h@ퟨ!鼚׼XOvXS\u0017á£=cS+梽៲綆16së½íœy屬?ᇳG2á´­\u00054쫖y룇nKcW̭炦s/鰘ᬽ?J|퓀髣n勌\u0010í™ P>j": false,
- "ç®´": [
- false,
- "éžj\"ꮾ*엇칬瘫xṬ⭽ì©äƒ³\"-⋵?ᦽ<cਔ↎⩧%鱩涎삧u9K⦈\"á¿á¬‘V绩킯愌ṱv@Gê¾è·¶êš†(?ä–ƒvIá§ŠxV\r哦jã ’?*=S굤紴ꊀ鹭쬈s<DrIu솹꧑?",
- {
- ".}S㸼L?t\u000fK⑤s~hU鱜꘦}ìªC滈4ꓗ蛌):ྦ\"é¡¥ì´â¢·ïš­á¿³YLn\"?fꘌ>댎Ĝ": true,
- "Pg帯佃籛n㔠⭹࠳ë·â‰»à¿Ÿ3ãž±ï“!î—-ì’¾!}쭪䃕!籿næ¶»J5ਲ਼yî˜vy;Rኂ%ᔡጀ裃;M⣼)쵂쑈": 1.80447711803435366E18,
- "ꈑC⡂ᑆ㤉壂뎃Xub<\/쀆༈憓قì¨×§\\": [
- 7706977185172797197,
- {"": {"K╥踮砆NWࡆFy韣7ä밥{|紒︧䃀榫rᩛꦡTSy잺iH8}ퟴ,M?Ʂ勺ᴹ@T@~꾂=I㙕뾰_涀쑜嫴曣8IY?ҿo줫fऒ}\\S\"ᦨ뵼#nDX": {
- "♘k6?଱癫d68?㽚乳䬳-Vé¡·\u0005è•?\u0018䞊V{邾zã˜l]é›k臤~ൖHë’iꢥ]g?.G碄懺䔛p<q꜉Så²—î¥_.%": 7688630934772863849,
- "溗摽嗙Oã§€,⡢⼰呠ꅧ㓲/葇䢛icc@-r\b渂ꌳ뻨饑è§á–œ\\é®­\u0014엙㥀᧺@æµ¹W2꛵{W률G溮킀轡䬆g㨑'Qè¨ï†áŸªç½‘Hd\"Q늴ᱢﶨ邮昕纚枑?â–°hr羌驀[ç—¹<\/": [
- -1.0189902027934687E-19,
- {"窶椸릎뚻shE\"ꪗႥꎳU矖佟{SJ": [{"-æ…œx櫹XYîƒ-æ¾Ü¨â£·àª¢ïŸé¯™%Fu\u0000è¿‹â–’}᥷L嗭臖oញc넨\u0016/迎1b꯸g뢱ã§è“¤ä’8C散삭|\"컪輩鹩\"\\g$zG䥽긷?狸꿭扵ã²:URON&oU8": [
- null,
- true,
- null,
- -2.8907335031148883E17,
- -3864019407187144121,
- {
- "`빬d⵺4H뜳⧈쓑ohஸ*ã¶ï»‡â¸•ä µ!iä¬ï¹‘h夘▥ê—푹갇㵳TA鳠嚵\\B<X}3訒câ‹{*ï«¢w]ç’¨-gæ­\\j໵侠Ei层\u0011": 3.758356090089446E-19,
- "䄘ï®)Y놞씃㾱陰í:{\u2059/Sâ“´": [[
- null,
- [[
- -3.8256602120220546E-20,
- null,
- 7202317607724472882,
- "CWQëš¿",
- null,
- false,
- true,
- null,
- 2857038485417498625,
- 6.191302233218633E-20,
- null,
- -6795250594296208046,
- [
- true,
- {
- "%á‹§é°Yᚯ⚀x莰愒Vᔈ턗BNæ´ê¤ŸA1âŒl콹풪H;OX๫륞ìªá°šÑ†@͎黾a邬<L厒Xb龃7f웨窂二;": [[
- null,
- "耲?䙧㘓F6Xsí‹­ë©¢.v뚌?鄟æ â–½'묺競?WvᆾCî»txo?dZ;䨸疎",
- {
- "@hWê‰&\"빜4礚UO~C;ã†î”殩_ꀥè˜å¥¢^챟k→ᡱKMⵉ<\/Jㅲ붉LÍŸQ": false,
- "tU뢂8é¾°I먽7,.Yî°î»´æ½Z툼=&⨥覽K乫햶㠸%#@Zë–æ„“^âŠâ¾‚몒3E_噆J(廊ឭyd䞜鈬Ћ档'⣘I": {
- "tK*ꔵ銂u艗ԃì¿âˆ³ê„‚霫X3♢9y?=â²­dЊb&xy}": [
- -4.097346784534325E-20,
- null,
- 6016848468610144624,
- -8194387253692332861,
- null,
- {
- "(祬诀譕쯠娣cë´r?ç•„kT뼾⌘⎨?noVä˜ì¥ç¡Žn?": [
- 1.82679422844617293E18,
- [
- false,
- 2.6849944122427694E18,
- true,
- [
- false,
- {
- ";0zâ­†;í™”$bਔ瀓\"衱^ï—´?잢ᢛ⣿~`ꕉ薸⌳໿湘腌'&:ryБꋥá¼ê’¥ç­™ê¬œê¸¨?X": -3536753685245791530,
- "c;Y7釚Uꃣ割J༨Y戣w}c峰뢨㽑㫈0N>R$ä…’X觨lë´œA刊8R梒',}u邩퉕?;91Eî¦a䈈ë¯G⊶芔h袪&廣㺄j;ã¡ç¶½\u001bN頸쳘橆": -2272208444812560733,
- "æ‹‘Wﵚî²j鵼駳Oࣿ)#ã¾…é¡‚N傓çºy僱栜'Bê-!KF*ꭇK¦?䈴^:啤wG逭w᧯": "xᣱmYe1Û@霄F$ě꧘푫O䤕í€Pq52憬ꀜ兴㑗ᡚ?ï—ƒLé·íŸî—¼ë­zJê‘™}╆ᅨJB]\"袌㺲u8䯆f",
- "꿽á…㔂긱Ǧ?SI": -1669030251960539193,
- "ì‡É¨`!葎>瞺瘡驷錶â¤ï»®é…œ=": -6961311505642101651,
- "?f7♄꫄Jᡔ훮eì‡îª¼í¾á£ä­´KhखT;Qty}O\\|ë«Iá¿’Ne(5æƒê¥¶ã†·Y9ﮡ\\ oyâ­–-䆩å©m#xë´‰>Y鈕Eç–£s驇↙ᙰm<": {"퉻:dê‚&efᅫ쫢[ï„™\"ëˆëŠ–êº™|Ôå‰1Í–-K:Êšá­•/;ì–㷛]Iç—èŒ4g<Oꗢ뫺N쯂륬J╆.`ᇵP轆&fd$?è‹…oê¶“vO侃沲â©åš…æ²— E%â¿°ì–¦wi\\*è¶«": [
- 3504362220185634767,
- false,
- "qzXæœqT3軞T垈ꮲQ览ᚻ⻑쎎b驌䵆ꬠ5Fà­—ä²ç¼¿ê蒇潇Ltᆄ钯蜀W欥ሺ",
- "ë³°É霬)ì é¶¼kwocì—·èr \u001d쒷⎹8{%澡K늒?iﺩd=&皼倚J9s@3å›twὡgjä íª5⭉⨺役&놎cﺉ㺡N5",
- false,
- null,
- "D0st[ni锹r*0k6ꀎë‡UX2⽼৞䃚粭#)Zæ¡·36P]<\/`",
- 4281410120849816730,
- null,
- -3256922126984394461,
- 1.16174580369801549E18,
- {
- " ᆼꤗ~î…‰*TN긂<㡴턱℃酰^蘒涯잰淭傛2rൡetì¾£ä‡m*ã¸y\"\\糮᧺qv쌜镜T@yg1譬ﭧﳭ\f": null,
- "圾ᨿ0xᮛ禵ਗ਼D-㟻ẵ錚e\"赜.˶m)é´‘B(I$<\/轴퉯æ·â‹âº*)宓쓌?*橯Lx\\f쩂㞼⇸\"ﺧ軂é³V\\ë•’\"캘c:G": null,
- "?ïµ_ê³¢î™ç¿¸íˆ8ã¿ hì—´Q2ã­›}RY㯕YT놂⽻e^B<\/맫ﻇ繱\u0017Gц⟊ᢑﵩS:jt櫣嗒⟰Wã´šæ¦á…‰e[w䋺?藂翙Ⲱ芮ä˜â•¢å›¥lpdu7r볺I è¿‘qFyᗊ": [
- "$b脬aᅠ襬育Bگ嵺Pw+'M<\/ï­näššvèžbNâ’‚}褺%lቦ阤\"ꓺá—Mç‰,Ûžï– Ò¶!矬?ke9銊Xê´¦)䈽í‹è„½á¹«äˆžá´†^=Yá—¿é›4I귺⋥%",
- false,
- 2.9444482723232051E18,
- 2072621064799640026,
- "/_뇴뫢jã’=Nꡦâ†Ôºèµ’â¬î»¼í†¥ä¨žç¯su*媸瀳鷔抡oíº-៳è¾å‹·fç»”:äµ¢æ¢2",
- false,
- "ì’œ Eî½·äŒ/í\u0018懺_<\\隺&{wF⤊谼(<죽é ïŸ‡8?@*rá¶ŠGd뻻갇&Ⳇq᣿e࢔t_ꩄ梸O詬Cá§§Kê© í’¤9눙醅ëž}竸rw?滨ӽK⥿ཊGé­²']`๖5ã„°",
- -2375253967958699084,
- {"嗱⿲\"få„„á¬": {"v?䚑킡`â—¤k3,骥曘뒤Oᒱ㲹^圮᠀YTê»›&ì´®P:G/Tâ£#튣k3ç‚©è k@橈ä·Sä§•,ç†œïŒæ™¬ï£žk1鮥玸먚7䤡fç»å—šìƒ´á¥’~îš¼0q拮垑aë»±Lâ°–_": [{
- ":på°¢": -6.688985172863383E17,
- "A0\u0001疠ﻵ爻鼀湶I~W^å²€mZx#ãˆ7r拣$Ꜷ疕≛⦒痋盩Vꬷá­â„¦Qêªï§éˆ‘A(劽詗ꭅo-ç¶é‘º\"Ⓠ@$j탥;": [
- 8565614620787930994,
- [
- "å¶—PC?à¶‹Q㪣$&j幾㾷hæ…‘ 즊慧⪉霄M窊ê·'鮕)äŠé“¨m趦䗲(g罣ЮKVﯦé®î¦®5囗ﰼ鿦",
- -7168038789747526632,
- null,
- -7.8069738975270288E16,
- 2.25819579241348352E17,
- -6.5597416611655936E18,
- {
- "瘕멦핓+?フZê·¢zé›V": {
- "ᕾ": 1.7363275204701887E-19,
- "ã­Œs뎹㳉": {"\u00187Fï–‰I6Yféº+UC쬸éºâ²ä‚¿ê¸•R\\ᆮC?Φ耭\rOத际핅홦*ë² W㸫㯼᡹cㅜ|Gã®—\u0013[o`?jHVì•?蒪꩚!í«áœ¦ãŒ‡äš‡é¿˜:@": [
- "}푛Г콲<äŸCè—呈#2ã“‹#ྕáŸå°¿9qç«“gI%ëž™mê¬oaç•è´¿Jå’¿D_ç†Zz皳験Iè±¼B扳ḢQ≖㻹㱣Dä¦ï©—2'á—㗣▌ç ²8罿%à°¹F姦;0î·æ‚‡<\/\"påš§",
- -710184373154164247,
- "Vo쫬⬾ê«â´·Å»\u0004éŽHBê…¸_aVBHbN>Z4âœkเꛘZ⥺\\Bʫᇩ鄨魢弞&幟ᓮ2̊盜",
- -9006004849098116748,
- -3118404930403695681,
- {
- "_彃Y艘-\"Xx㤩㳷瑃?%2ä¡éµ›o<A?\"顜ᘌΈ;â·…Cæ´ºL蚴蚀voq:,Oo4쪂)": 5719065258177391842,
- "l륪맽耞塻論å€Eã—‘/㲕QM辬I\"qi酨玑㖪5q]尾魨鲡ƞY}⮯蠇%衟ï„Fsf윔äšì°¤iè…³": {"ꢪ'a䣊糈": {"ë°‘/♋S8sã¼´5瓹O{댞\"9Xï°‡lJ近8}q{긧ⓈI᱑꿋腸D瀬H\"ﺬ'3?}\u0014#?丙㑯ᥨ圦',gé‘ (樴턇?": [
- 2.5879275511391145E18,
- null,
- [
- "3㼮ꔌ1Gẃ2Wé¾™jîªÍŠ{1å›ã¦­9xå® ã‘oRä•犽",
- 1268729930083267852,
- "땕軚⿦7C",
- [
- -3.757935946502082E18,
- "\"赌'糬_2ë­¾áb",
- {
- "(a䕎ጽjÒ°D4.á´¡ïž½66ԃ畮<\/l`k癸\\㇋ࣆ욯R㫜픉녬挛;ڴ맺`.;ç„“q淞뮕ٹ趴r蔞ꯔ䟩vç²u5<\/pZ埖Skrvj帛=\u0005aaï”›": null,
- "璄≩ v몛ᘮ%?:1頌챀H㷪뉮k滘e": [
- "ꤾ{`c샬왌펡[俊络vmz㪀悫⸹ᷥ5o'ã¾µ L蹦qjYIYណԠWëƒå‰«<\/W嗂0,}",
- 2.4817616702666762E18,
- false,
- null,
- null,
- -8.6036958071260979E17,
- null,
- -1.2744078022652468E-19,
- -4.4752020268429594E17,
- 1.13672865156637872E17,
- [
- false,
- false,
- null,
- -4.178004168554046E-20,
- true,
- 2927542512798605527,
- {
- ".ꔓ뉤1䵬cHyæ±¼äŠ†è³“á‡Æ©|樷â‡é†Žã¬…4\u0003èµµ}#yD5è†æ™¹ë±“9ê–è™›J㺕 t䊛膎ؤ": {
- "rVtᓸ5^`েNâ¹»Yv᥋lꌫt拘?<é®°ë„¿ZC?ã’½^": {"âªî©k_:>귵옔夘v*탋èŒ&㳈챗|Oé’§": [
- false,
- "daꧺdᗹ羞쯧Hã¤é„³é ³<型孒ン냆㹀f4ã¹°\u000f|C*ሟ鰠(O<ꨭ峹ipຠ*yà³§4VQè””hVæ·¬{?ᵌEfrI_",
- "j;ꗣ밷é‚副]á—“",
- -4299029053086432759,
- -5610837526958786727,
- [
- null,
- [
- -1.3958390678662759E-19,
- {
- "lh좈T_ë¯Y\"伨\u001cꔌG爔겕ꫳ晚è¸â¿»ìT䯎]~e#฽燇\"5hٔ嶰`泯r;ᗜ쮪Q):/tç­‘,榄&5ï¤ëŽ«ç‹(": [{
- "2áâ“›]r3C攟וּ9è³µsâ›”6'ஂ|\"ⵈ鶆ä¹ç¦3\"痰ࢤéœäµ©ì˜†äŒ€?æ •r7Oç°‚Isd?K᫜`^è®¶}zî°’8?zì–°î§T:X倫⨎ꑹ": -6731128077618251511,
- "|︦僰~m漿햭\\Y1'Vvخ굇á‰ì±¢cè¶–": [null]
- }],
- "虌魿閆5⛔煊뎰㞤ᗴꥰF䮥蘦䂪樳-Ká·-(^\u20dd_": 2.11318679791770592E17
- }
- ]
- ]
- ]},
- "묗E䀳㧯᳀逞GMc\bï•¹å¢¹ã“„ë–Æ &U??íŽŒé‘ åª‹k))ᄊ": null,
- "묥7콽벼諌J_DɯﮪMæ®´ä£,煚ྼ`Y:ì”§<\/â©«%yf䦀!1á²¶kì¶ŽQç±³W∠WC跉鬽*á›±i<?,l<崣炂骵*?8í‘៣ⰵ憉⎑.,Nwç½£q+ο컆弎": false
- },
- "e[|଀+î±³lꑸãˆTT?ë¿¿|ê«›9`㱯䊸楋-곳賨?ì³k棽擋wQ餈âŸNq[q霩䵀뷮锅ꚢ": 5753148631596678144,
- "sá“鴻߸d렶ὕ蜗ဟ툑!诉౿": false,
- "|4䕳鵻?䈔(]í‹/Ui#æ¹»{듲ーMá‹€t7潔泄Ch⸨}ì£`î¤èž§éŠšã‹¼å£¯kâ°¥Q戵峉갑xè¾™'ì²›": "jd䘯$䕌茷!auw眶ㅥä£ê†¢æ°‘i",
- "剖駰Ɜî¶sM2]á¾´2ࡷ祅拌Av狔꩛'ê“—í‚§ê£0酜✘O'": false,
- "澩뢣ê€eU~D\\ꮡ킠": "v^YC嚈ί\u0007죋h>ã´•L꘻ê€ì“ª\"_gé¿„'#tâ½™?,Wg㥖|D鑆eâ¥ìª¸åƒ¬h鯔咼ඡ;4TKèŽî¾‘졠嫞"
- }
- ]
- ]
- }
- ]
- ]
- ]}}
- }
- ]}
- },
- "뿋뀾淣截䔲踀&XJ펖꙯^Xb訅ꫥgá¬>棟S\"혧騾밫ê²7-": "擹8C憎W\"ìµ®yR뢩浗絆䠣簿9äˆå¼•Wcy䤶孖ꯥïž;íŒ]輩ä3@{å 뽸0ï€á¡ˆìµ¡î›„Ⲇ\u001dLåŒê§2F~ݕ㪂@W^é½L襒ᦘî¢~沦zZ棸!꒲栬R"
- }
- ]
- ],
- "Z:ëƒàµ›5Iz찇䅄駠㭧蓡K1": "e8᧤좱U%?ⵇ䯿é¿\u0013縮R∱骒EO\u000fg?幤îš@֗퉙vU`",
- "äƒìªˆï‘’埽້=Ij,쭗쓇చ": false
- }]}}
- ]
- }
- ]}
- }
- ]
- ]
- ],
- "咰긖VM]á¼6䓑쇎çºetDÒŒ?ãžê©„퇫밉gj8è ƒ\"â©5䛹1ࣚ㵪": "ക蹊?⎲⧘⾚̀I#\"䈈⦞ë·`wo窭戕෱휾䃼)앷嵃꾞稧,Ⴆ윧9S?೗EMk3Მ3+e{â¹”Te驨7äµ’?타Ulg悳o43ï“¢"
- }
- ],
- "zQᤚ纂땺6#ٽ﹧vï¿¿#ࠫ휊冟蹧텈ꃊʆ?&a䥯Deæ½|ì¿“pt瓞㭻啹^盚2êŠf醪,ì–T窧\\Di䕎谄nn父ꋊE": -2914269627845628872,
- "䉩è·|㨻ᷢã‰B{蓧瞸`î°²I!℄욃힕#ೲᙾ竛ᔺCjk췒늕貭è¯\u0017署?W딚%(pê⤼ë³^=on뺲l䆼bzrﳨ[&j狸䠠=ᜑꦦ\u2061Õµnj=牲攑)Mî»\\é¾": false,
- "뎕y絬᫡⥮Ϙᯑ㌔/NF*Ë“.ïž¿,QEzvK!Iwz?|쥾\"ê©»Lê¼—Bê”§è³´ç·œs뉣隤茛>ロ?(?^îµ­`>冺飒=噸泥⺭Ᲊ婓鎔븜z^å·è£®Ãªâ“…à»—jM7ﶕ找\\O": 1.376745434746303E-19
- },
- "ä›ræ»–wã¤<k;l8ꡔጵ⮂ny辶⋃í¼åƒ®z\"﮲X@t5෼暧퓞猋♅䦖QCé¹®|픨( ,>,|Nዜ": false
- }
- ]],
- "@ê¿™?è–•å°¬ gd晆(ë„5躕ﻫS蔺4)떒錸ç“?~": 1665108992286702624,
- "wë¯ná =`঺ᅥC>'從ë槷ä¤çœ·èž„ãŽ»æ°æ‰°XᅧCè´½uáƒë‚ŸjKD03T!lDV쀉Ӊy뢖,袛!终캨G?鉮Q)â‘—1쾅庅O4ê‰H7?d\u0010蠈줘월Þ粯Q!낇껉6í…|{": null,
- "~˷jg쿤촖쉯y": -5.5527605669177098E18,
- "펅Wᶺzê†ã¨í‘­e?4j仪열[D<鈑皶婆䵽ehS?袪;Hê¨Më—Žã°[(å—M3qíŸg4y╸鰧茀[Bi盤~ï«å”Žé‹†å½ºî½«â¦Šq?î–³B4쉓癚O洙킋툈䶯_?ퟲ": null
- }
- ]
- ]]
- ]],
- "꟱Ԕã¤7æ›ï¦—ಃéŒVä·°?v㪃૦~K\"$%请|ꇹn\"kä«›ã¨é²¨\u2023ä„¢\u0004[<S8á¬ë­©è„¥7U.m࿹:Dè‘┆2蘸^U'w1ì …;䠆ꋪBê»®>︊Vï‹•J?䶟ាꮈ䗱=깘U빩": -4863152493797013264
- }
- ]}]}
- ]
- }}}
- ],
- "ì·ì²Û¹í‰ƒ~aEå”™a챑,9㮹gLHd'ä”|í‚—ãžäŽ¥&KZYTë§µ7䥺N<Hp4ê•­â¹ ê½c~çš½z": "课|á–¾ä¡å»‹è„äªW\u0016&Jnê´b~æ‘“M>â±³åŒèŽžé¿§w\\༌疣n/+ꎥU\"å°ëž¾â—‹íŸ™AJá­Œ?9ä›$?é©”9è®ì§˜é­¡TÖ¯cè—³`虉Cì‡ì¦T"
- }
- ],
- "è°¶ê°œgTRï¿>áµÍšdtæ™‘ä‰‡é™æ»º}9㉸P漄": -3350307268584339381
- }]
- ]
- ]
- ]]
- ]
- ],
- "0y꟭馋X뱔瑇:䌚ï¿å»¿jîžg-懲鸭䷭垤㒬茭u賚찶ಽ+\\mT땱\u20821殑ã„J쩩䭛ꬿNSæ½”*d\\X,壠뒦e殟%LxG9:摸": 3737064585881894882,
- "í’µO^-â§§â…¶vѪ8廸鉵㈉רâ†Q㿴뺟EႳvNM:磇>wî·/៻唎뷭୥!냹D䯙iëµ±è²C#⼉NH6`柴ʗ#\\!2ä‚—â±§f?諳.Pëˆ-è¿”I꘶6?8î“ê˜": -8934657287877777844,
- "溎-è˜å¯ƒi诖ര\"æ±µ\"\ftl,?d⼡쾪⺋h匱[,à·©I8MÒ§F{kç“¿PAî…§'橸ꩯ綷퉲翓": null
- }
- ]
- ],
- "ោ係Øî½<å…ƒ": 1.7926963090826924E-18
- }}]
- }
- ]
- ]]}]
- }]
- ]
- ]
- ]
- ],
- "ጩV<\"ڸsOᤘ": 2.0527167903723048E-19
- }]
- ]}
- ]
- ]],
- "∳㙰3ì ´pá§—ä±™?`<U὇<\/æ„E[ᮚAî›j诂ᒽ阚uv徢ဎ떗尔ê½í›€ì©‘Jä´?âª=륪ᆩ푰ஓã•?럽VK\"X?檨လ齿I/耉A(AWA~â¯ç¨è¹«": false,
- "å’å¦ë¾‡}䀼链i⇃%⋜&ç’ªIx渥5æ¶§qq棩á¥-â «AA낇yY颕A*ïˆè£¦O|n?䭬혗F": null,
- "ç­CLì–­B혆Kॎ`鎃nrî€sZiÕªWç )?p~K~A眱ä²QO妣\u001b\u001b]ᵆᆯ&ã‹á¹è±‰ëº˜$ê­§#j=C)祤⫢歑1o㒙諩": 7028426989382601021,
- "쳱冲&ဤäŒì•§h胺-é½±H忱8왪RDKᅒ䬋ᔶS*J}ስ漵'㼹뮠9ê±¢9p봋경ጕtởꚳT䶽瘙%ì¶´`@nಆ4<d??#僜ᙤ钴=薔ꭂbLXNam蹈": "樭る蹿= Uî ƒurwkn뙧⌲%\"쑃牪\"cq윕o@",
- "溌[H]焎SLã…?뀼䫨ç½W": 1.1714289118497062E-19,
- "ﬢp븇剌燇kĔ尘㶿㴞ç ê¾˜Ia;sâº^)$ç©®?sHᢥíªl": null
- }
- ]
- }
- ]
- },
- "TKnzj5o<\/K㊗ꗣ藠⦪駇î€>yZA8Ez0,^á™›4_0븢\u001ft:~䎼s.bb룦明yNP8弆Cå¯;⪾ì§'蕴뮛": -6976654157771105701,
- "íµê¦€\\㇑:nî‹™v+뒤燻䀪ﴣï·9ᚈ኷K㚊誦撪䚛,ꮪxሲ쳊\u0005HSf?asg昱dqꬌVꙇ㼺'k*'㈈": -5.937042203633044E-20
- }
- ]
- }],
- "?}\u20e0],så¶³è‹@#2uì’´sQSä©—=ꥮ;烌,|ꘔ䘆": "á…©ì˜Nç’ kZ먕眻?2ቲ芋眑D륟渂⸑ﴃIRE]å•—`K'"
- }},
- "쨀jmV賂ﰊå§ä‚¦çŽžã¬™áªM᪟ïՎ씜~`uOn*ॠ8\u000ef6??\\@/?9見d筜ﳋB|Sä¬è‘«ã½o": true
- },
- "즛ꄤ酳艚â‚㺘봿㎨iGà§•à¡¿?1\"䘓您\u001fSáŠâº¿æºzៀ뻤B\u0019?ìœa䳵᭱䉺膷d:<\/": 3935553551038864272
- }
- ]
- ]}
- ]]
- ]]
- ]}
- }
- ]
- }
- ]]}},
- "᥺3h↛!ê‹°y\"攜(ெl䪕oUkc1A㘞ᡲî촾ᣫ<\/ä’ŒEã›æ½¨i{ï  v?Wà±¾H\\RჅpzè¬R脾;v:碽✘↯삞鷱o㸧瑠jcmK7㶧뾥찲n": true,
- "ⶸ?x䊺â¬-ä°…â‰!e쩆2ꎿ准G踌XXᩯ1ß}0?.í—€Z馟;稄\baDꟹ{-寪⚈ꉷ鮸_L7ƽᾚ<\u001bጨA䧆송뇵⨔\\ç¤ë—”d设룱㶉cq{Hyã±R㥽å¢ï¬…p": -7985372423148569301,
- "ç·«#ì½®IB6<\/=5Eh礹\t8럭@饹韠r㰛斣$ç”LVì·a갵îŸ'请o0g:^": "䔨(.",
- "ë³â„¡åœ¤pï¾à¯„Ä倧訜BìŸGä™”\"Sbâ“®;$$â–S1J뢙SF|赡gï„€*\"Vu䲌y": "䪈&í‹),\\kT鬜1í’¥;ë·´'Zေ䩹@Jéž½Nã¼M?å¥eWb6榀ƩZڮ淽⺞삳煳xჿ絯8eâ¶ç¾·V}ჿ쎱䄫R뱃9Z>'\u20f1â“•äœé½®"
- }
- ]
- ]]]
- }}
- }
- ]
- ]},
- "펮b.hç²”í¯2npXè©«g錰鷇㇒<ì™S値bBi@?镬矉`剔}c2壧ଭfhY깨R()痩⺃a\\â”?M&ﯟ<劜꺄ï‘멊ᄟA\"_=": null
- },
- "~æ½¹Rqn榢㆓aR鬨侅?䜑亡V_ç¿…ã­”(ä“·w劸á³Dp䀅<\/ï°Žé¶Šm䵱팱긽ꆘ<tD쇋>긓准D3掱;o:_Ñœ)껚콥8곤d矦8nP倥ꃸI": null,
- "뾎/Q㣩㫸벯➡㠦◕挮aé¶§â‹“å¼\u00001뱓fm覞n?㛅\"": 2.8515592202045408E17
- }],
- ",": -5426918750465854828,
- "2æ««@0柡g䢻/gꆑ6演&D稒肩Y?艘/놘p{f투`飷ᒉ챻ëŽîª–<늛ä˜ï´¡ì¤°ì«„": false,
- "8î™–(鸑嵀⵹ퟡ<9㣎Tߗ┘d슒ل蘯&㠦뮮eà kç g ì—»": false,
- "d-\u208b?0ﳮ嵙'(J`蔿d^踅⤔榥\\J⵲v7": 6.8002426206715341E17,
- "ཎ耰í“ê•ï’ã±·\u0013y=詽I\"盈xm{0쾽倻䉚ષso#é°‘/8㸴짯%ꀄ떸b츟*\\鲷礬ZQå…©?np㋄椂榨kc᡹醅3": false,
- "싊j20": false
- }]]
- ]],
- "ä¿›\u0017nç·½Tu뫉èœé¼Ÿçƒ¬.ï‘ꭠIâ°“\"Ἀ᜾uC쎆J@å¤%ê›m뻨ᾀ画è›íœƒT:錖㑸ዚ9죡$": true
- }
- ]
- ],
- "ãµâ‡˜ê¦–辈s}㱮慀밒s`\"㞟j:`ií”»Z<C1衽$\"-饧?℃\u0010⼒{î°p飗%R\"ä²”\")ì¹€\\%": true,
- "苧.8\u00120ݬ仓": 6912164821255417986,
- "ë–Žé¡£ä¿X;.#Qí‹.笂'p쟨唒í랩냆¦aâ±{è°.b我$蜑SH\u000fç¾=äŸ¼â£¼ï©¿áœæ”•B&挰繗ã”ê…‚-Qv\\0ä¶äš¥ãºio[㑮-ᇼ䬰컪ṼiY){ë°\u0010q螰掻~\n輚x\u0014罺)è»´": 3.024364150712629E-20
- }
- ]
- ]
- ]
- ]}
- ]]
- }
- ]
- ]]
- ]
- ]]]],
- "\"凲o肉Iz絾豉J8?i~傠᫽䇂!Wï›—D溊J?á¡’vsè†åµ¹âž’ïŸæ·´î‡…>ì„«^諎0Ok{켿æ­à·£èƒ°a2﨤[탳뚬쎼嫭뉮m": 409440660915023105,
- "w墄#*ᢄ峠밮jLa`ㆪ꺊漓Lã§ëŽ!Agkï¹ï¾'ê›ë¢ƒã¯å²¬D#ã’¦": false,
- "ଦPGI䕺L몥罭ꃑ궩﮶#⮈ᢓӢ䚬p7웼臧%ï‘¥~Sè âŒíž€6îž’&t䳙y㪘ëƒ\\*;é‰ï¿Šé¿µ'å—•pa\"oL쇿꬈Cgî“": "ã¶½1ç¸D⟸䴅ᆤ뉎﷛渤csî¸x ä”цꬃ锚æ¬?ຽ+x~꘩uI࡞\u0007æ ²5呚ẓem?è¢\")=㥴䨃pac!/æŽY",
- "á·±o\\||뎂몷r篙|#X䦜I#딌媸픕åžRDæ–³X4t⯩夬=[ï‹ë­²r=绥jhë·±ì¸âª˜%]⚋܈㖴スHí…¹m(WOæ›åЉ0~K3c柢Õã‰ïªªé€³~": false,
- "ç…½_qb[첑\\륌wEâ½Ztï”´CNï­+餌ᕜOê›­": "{ﳾ쉌&s惧á­âµ†3䢫;䨞팑ï›ê’ªí˜è¤€à¢–Qä ¿V5뭀䎂澻%ë°›u5í…¸oA⮥U㎦;B䳌wzä•™$áž¿\\௅婺ëµâª¾í†\\`Kyौꋟ._\u0006L챯l뇠Hi䧈å’5",
- "艊ä½à£ƒë¡‡ä± çˆ¬ï˜‚!*;⨣æŽïžæ…“qé“|儑ᨋL+è¿¥=6㒺딉6弄3è¾…J-㕎뛄듘SG㆛(\noAzQê±ä°©X*ã¢O퀌%펠낌moí‹®a^<\/F&_눊ᾉ㨦ы4\"8H": 2974648459619059400,
- "鬙@뎣䫳á®ë¡?){y?5K;î§„TA*k溱䫜J汃ꂯ싔ì\u001dA}룖(<\/^,": false,
- "ëª@QꋦFꊩá’뎶î‡lXl垨4î¤^郣|ꮇ;ä´á“}ìµ²zç–": null
- }
- ]]]],
- ":_=ë‹§å¼—D䙋暨é›. 㱻붘ä‚Jå„’&ZK/녩䪜rå›â½¯D喠죥7ï“⹌䪥c\u001a\u2076￞妈朹oLkè®F౟覛ì§ã®7T;}è›™2{9\"å´“bB<\/⡷룀;즮鿹)丒툃୤뷠5W⊢嶜(fb뭳갣": "E{å“1WM"
- }},
- "䘨tjJ驳豨?y輊M*᳑梵瞻઻ofQG瑮e": 2.222802939724948E-19,
- "ä®´=â‘âž¶Tà·‹wäžœ\"垦ꃼUt\u001dx;B$뵣䙶E↌艣ᡥ!á§Ÿ;ä±€[䔯k쬃`à©8饙른ç†î‹”'2_'袻tGfè’­J땟as꯳╖&å•’zWࡇᒫYSá¬\u0014ℑ첥鈤|cG~Pá“®\">\"": "ႆl\f7V儊㦬nHꄬꨧC{ì¢~C⮃⛓嶦vꄎ1w鰠嘩뿠魄&\"_qMâµ–é‡”ë…®îœ¡ê‡ ãš{ç³Jå“‹ cî°¸v?-jkﻯྌ鹑L舟r",
- "龧葆yB✱H盋夔ﶉ?n*0(": "ꧣኆ㢓氥î³qZZ酒ຜ)鮢樛)X䣆gTSî»»Ò‘Gí…žï’˜k.J圬ç–ë¡«ïœì¯­z L:\\ྤ@w炋塜쿖ᾳy뢀䶃ë±N䥨㚔勇ê²#p",
- "ë„畎Q娡\"@S/뼋:äµ!Pè¡…ì´šfVHQs✜á«i㻑殡B䜇%믚k*U#濨낄~": "êŸá‹•ì³¸êˆæ•‹&lå¦\u0005憡멗瘌uPgá…ªm<\/To쯬锩h뒓k"
- }
- ]
- }],
- "墥홞r绚<\/⸹ⰃB}<躅\\Y;๑@䔸>韫䜲뱀X뗩鿥쩗SI%ﴞ㳕䛇?<\/\u00018x\\&侂9é‹™a[LRã‹­W胕)â¡¿8ãž™0JF,}?í—ˆd1cDMáƒâ›é„ⱕ%X)!XQ": "â³ê—³=橇a;3t⦾꼑仈î¥á€°aᚯ⯋ꕃAsé´·Nâ•_䎃ꙎAz\u0016䯷\\<à¿«>8q{}ï½·?ᣰ}'0ᴕ펓B┦lF#趤厃T?㕊#撹圂䆲"
- },
- "Ü‹ë‹é¾«ï¥c웑": false,
- "ㇿ/q\"6-co髨íœCí¦#\u001b4~?3ä¹E삇<<": 7.600917488140322E-20,
- "äE6?㣖êƒé—´t祗*é‘ {ḣV(æµ¾h逇íž=W?ૉ?nꇽ8ꅉຉj으쮺@Ꚅ㰤u]Oyr": "vâ‰á«¸_*όAඤԆl)ۓᦇQ}í zà¼q滚",
- "ソ᥊/넺I": true
- }]]
- ]
- ]
- ]
- ]]
- },
- "䭑Ik攑\u0002QV烄:芩.麑㟴㘨≕": true,
- "å„꿕C쇻풉~å´%碼\\8\"䬦꣙": null,
- "欌L圬䅘Y8c(♺2?ON}o椳s宥2䉀eJ%é—¹rå†O^K諭%凞⺉⡻,掜?$ꥉ?略焕찳㯊艼誜4?\"﯎<ï±ã‚›XáˆINT:è©“ +": -1.0750456770694562E-19,
- "ç’àc뜭싼ﺳ뎤K`ïŸ]p隨LtE": null,
- "ç”™8䵊神EIꩤé¯á¢€,ïµ®Uä‘u疒ử驺䚿≚ഋ梶秓F`覤è­#짾蔀묊4<åªì¬¦éª_Yzgcà¡¶î²§4kç´¥`kc[Lï®—î°£ç°*I瀑[â¾°L殽鑥_mGÈ <\/|囹ç gæ¡°iri": true,
- "챓ꖙꟻì¢è‡ou,å— 0\\jK핻뜠qwQ?ഩ㼕3Y彦b\u009bJ榶N棨f?ë¦é–綃6é³µM[OEë´¨uí–.Ꮁ癜蟳뽲ꩌ뻾rM豈Rï¨ç¾« uDꎚ%": null
- },
- "V傜2<": 7175127699521359521
- }],
- "é“«aG切<\/\"ী⊆e<^g࢛)Dé¡ï½Žï¬®é¥¼\u008c猪繩嵿ﱚCꡬ㻊g엺Aì—¦\u000fæš¿_f꿤ë³ã¦•桦`蒦䎔j甬%å²rj ç³": "䚢åŽëˆ´Au<4箞7礦Iï±”å eȧ䪸uï„€äµp|逹$嗫쨘ꖾï·!胠z寓팢^㨔|u8Nሇe텔ꅦ抷]،鹎ã³#༔繁 ",
- "낂乕ꃻ볨ϱ-ꇋã–fsâ¿«)zꜦ/K?솞♞ꑌ宭hJ᤭瑥Fu": false,
- "쟰ãœé­›G\u0003u?`㾕ℾ㣭5螠烶這趩ꖢ:@å’•ê¶xë’˜ëŠmä°¨bç—ƒë 0鳊喵熬딃$摉_~7*ⱦ녯1錾GKhJ惎秴6'H妈Tᧅ窹㺒疄矤铟wላ": null,
- "쯆q4!3錕ã²âµ†ã‡›ê˜·Zç‘©ë­†\\â—ªNH\u001d\\ã½°U~㯶<\"쑣낞3ᵤ'峉eꢬ;鬹o꣒木X*é•·PXᘱu\"ä ¹n惞": null,
- "ᅸ祊\"&ꥴCjࢼ﴿?䡉`U效5殼㮞V昽êª#ﺸ\\&t6x꠹盥꣰a[\u001aêªSpe鎿蠹": -1.1564713893659811E-19
- }
- ]]
- ]
- ]
- ],
- "羵䥳H,6ⱎ겾|@t\"#í–Šî¦1|稃 ì„­)ëœ=뻔ꡜ???櫎~*ῡ꫌/繣ﻠq": null
- }
- ]}
- ]},
- "츤": false
- }},
- "s": 3.7339341963399598E18
- }
- ],
- "N,I?1+㢓|ࣱ嶃쩥V2\u0012(4EE虪朶$|w颇væ­¥": "~ì¢~_,Mzrã«YB溓Eæ·š\"â…¹äˆ”áºæŠ™ b,nt5Vã’J檶ê¨â»”?",
- "Q껑ꡡ}$넎qHç…”æƒ/ez^!ẳF댙äŒé¦»å‰8": "梲;yté’°$i冄}Aî‘”L%a jëœå¥·ê±³ëš¾d꿽*ሬuDY3î…—?뮟鼯뮟wãªí‹±îŸ‚V",
- "o{Q/K O胟ãzUdê€m&⨺J舕â¾é­¸è¨ŸãŒ¥[T籨櫉å”í‚ aṭ뱫촙莛>碶覆⧬짙쭰ׯdAiH໥벤í¥_æ¸[ 0î­¬e:죃TCå¼¼èŽëµDA:w唵ê£": null,
- "á½æ¨Žäµ®è»§|?à±—aWH쩃1 ê…­su": null
- }
- ]
- },
- "勂\\&m鰈J釮=Ⲽ鳋+䂡郑": null,
- "殣b綊倶5㥗惢⳷è¢á‘€ä¬„é•§M^ï±´3⣢翣næ«»1㨵}ኯ뗙顖Z.Q➷ꮨ뗇\u0004": "ê”™ä¼>n^[GीA䨟AMç¢á’ŠS쨲w?d㶣젊嘶çºéº“+æ„£a%気ྞScë“ᔘ:8bM7Xd8㶑臌]Ꙥ0ê­ì’™ä«£æŒµCè–½î€Dfⵃ떼᷸",
- "?ç´¡.ì…ª_à·¨j\u0013Oxâ” $Xᶨ-á…‡oè–¹-}軫;yæ¯ãªœKã£?.EVì®±4둽⛻䤜'2盡\u001f60(|eì°ã¼Žá¦€ã’§-$l@ﻑå³\u0003ä­±å“å·—WFo5c㧆Tí„Y맸♤(": -2.50917882560589088E17
- }}
- ],
- "侸\\릩.᳠뎠狣살cs项䭩畳H1s瀉븇19?.w骴崖㤊h痠볭㞳㞳ä®Ql怠㦵": "@䟴-=7f",
- "鹟1x௢+d ;viä­´FSDS\u0004hꎹãš?â’â¦Ñž6u,扩@ë·Su)Pag휛Tá’—Vç—©!çžé‡€ê–žè˜¥&ೞè˜ê­°êž‡áŽ": "ah懱Ժ&\u20f7䵅♎඀䞧鿪굛ౕ湚粎蚵ᯋ幌YOE)५襦ãŠY*^\"R+ඈî¶å’·è¶9î—ꥂ榨艦멎헦é–ë¶v좛咊E)K㓷ྭr",
- "æ†q쮦4綱켙ì….f4<\/g<籽늷?#蚴픘:fF\u00051㹉뀭.á°–í’ŽfÖ¦Hv蔎㧤.!ä­½=éž½]ìŒH:?\"-4": 8.740133984938656E-20
- }]}
- }
- ],
- "tVKn딩꘥⊾蹓᤹{\u0003lR꼽ᄲQFá…傅ﱋ猢⤊á”,E㓒秤nTà¶­v`â™›I\u0000]꫔ṞD\"麵cè¸î“²æ°X&æ¿¿ë˜ê£¹ê¹³à±¥è‘‚鿎\\aꡨ?": 3900062609292104525
- }
- ],
- "ਉ샒⊩Lu@S䧰^g": -1.1487677090371648E18,
- "⎢k⑊꬗yá«7^err糎Dt\u000bJç¤¯í™•ã†æ²‘サꋽeèµ”ã¢^J\u0004笲㿋idra剰-᪉C錇/Ĝ䂾ညSì§€?~ì½®gR敉⬹'ä§­": 1901472137232418266,
- "ç—kä¶¥:?ì´½è´ì“‰ê“ˆã’¸gç˜[뵎\\胕?\u0014_榙p.j稶,$`糉妋0>Fá¡°ly㘽$?": "]ê™›O赎&#ã ƒë±å‰³î°·\"<â—†>0誉é½_|z|裵씪>áŒã¼\"Z[ç•}O?G뚇諦cs⠜撺5cuç—‘U圲\u001c?鴴計lì¶¥/╓哼䄗èŒîšªê®…뫈댽AëŒë¡–뤫V窗讬sHd&\nOi;_î´–u"
- }
- ],
- "Uﺗ\\Y\\梷䄬~\u0002": null,
- "k\"Y磓ᗔ휎@U冈<\/w컑)[": false,
- "æ›Jè·âŒ»ë¦\u001f㙳s꥓âŸé‚«P늮쥄c∬ྡྷ舆렮칤Zè¶£5콡넛A쳨\\뀙骫(棻.*&è¼›LiIfi{@EA婳KᬰTXT": -4.3088230431977587E17
- }]}
- ]
- ],
- "곃㲧<\/dఓꂟs其ࡧ&N葶=?c㠤Ჴ'횠숄臼#\u001a~": false
- }
- ]
- ]}]
- }]
- }}
- ],
- "2f`â½°E쵟>Jî•笂裭!〛觬囀ۺ쟰#桊l鹛ⲋ|RA_Vxá­gEë“h﵀mfá»|?juTUæ¡£[d⢼⺻p濚7E峿": 5613688852456817133
- },
- "濘ë¶gå¿®7ãµæ®¬W팕Qæ› ë«°)惃廊5%-î«è¹šzYZ樭ﴷQ锘쯤崫îŸgg": true,
- "絥ᇑâ¦ì’“븣爚H.ã—Šß„o蘵貆ꂚ(쎔O᥉î¼ï®“]姨Wê“!RMA|o퉢THxè½®7Mê»U즨'i뾘舯o": "è·¥f꜃?"
- }}
- ],
- "é·°é¹®K-9k;ï°°?_ݦѷ-ꅣ䩨Zꥱ\"mꠟ屎/콑Y╘2&鸞脇ã¢ê€‡à ºâ°¼æ‹¾å–­í‹®îL꽩bt俸墶 [l/웄\"꾦\u20d3iও-&+\u000fQ+໱뵞": -1.296494662286671E-19
- },
- "HX੹/⨇୕붷Uﮘ旧\\쾜͔3l鄈磣糂̖䟎Eá³wæ©–bá¿€_딕huè‘°î¤çª³é—¹Ð²U颵|染H죶.fPä—®:jä«¢\\b뎖i燕ꜚGâ® W-≚뉗lè¶•": "ଊ칭Oa᡺$IVã·§L\u0019脴셀붿餲햪$迳å‘ì¯ì¼‚PqfT\" ?î¹€I屉鴼쿕@ç¡™z^é•㊵M}ãš›T젣쓌-Wâ©-g%⺵<ë®±~빅╴瑿浂脬\u0005왦燲4áƒb|Då § <\/oEQh",
- "䘶#㥘à©îººìº”ï” f巋ἡAJ䢚쭈ࣨ뫒*mᇊK,ࣺAꑱ\u000bR<\/A\"1a6鵌㯀bh곿w(\"$ê˜*rà²è¶£.dà¿©k/抶면䒎9W⊃9": "漩b挋Swè—Ž\u0000",
- "畀e㨼mK꙼HglKb,\"'䤜": null
- }]}]
- ]
- ]
- }]
- ]}
- ]
- ]}
- ],
- "æ­™>駿ꣂ숰Q`J΋方樛(d鱾뼣(ë«–í„­\u20f9lচ9æ­Œ8o]8윶lì–¶?é•–G摄탗6í‹íµ+g:䱫홊<멀뀿/س|ê­ºsê±è·¶ç¨šW々c㫣⎖": "㣮蔊깚Cꓔ舊|XRfé»ã†šï¸†'쾉ì·\\&言",
- "æ®­\"cÞɨê™äž˜:嬮eæ½½Y펪㳅/\"O@à —ê²´]ì·–YÇž(t>R\"N?梳LDæ­=næ°¯Tè±°2R諸#N}*ç§ï¡§4}ã¶ŠGä£bì–š": null,
- "襞<\/å•§ B|싞W瓇)6簭鼡艆lNì©`|펭佡\\é–“é‚[z릶&쭟愱ꅅ\\Tá°½1靝忠ˆ4̸s윜R7â’/똽?치X": "âŠèº–Cﱰ2Qẫè„&இ?%ëƒæ‚Š",
- ",é°§åµì…£îˆ›ì‹¹xᎹ힨᯳EṬHïŽã¹–9": -4604276727380542356
- }
- }
- ]]]],
- "웺㚑xs}q䭵䪠馯8?LB犯zK'os䚛HZ\"L?셎s^㿧㴘Cv2": null
- }]
- ]
- ]
- ],
- "Kdî©´2Kv+|z": 7367845130646124107,
- "ᦂⶨ?ᢠ祂些ഷ牢㋇æ“\"腭䙾㖪\\(y4cE뽺ㆷ쫺ᔖ%zfÛ»$Ñž1柦,ã¶¢9r漢": -3.133230960444846E-20,
- "ç˜Mç„€q%㢟f鸯Oâ£è“‘맕鯊$Oå™·|)z褫^㢦⠮ꚯ꫞`毕1qꢚ{ĭ䎀বώT\"뱘3G൴?ï¢ï¢^^oï…¯f": null
- }
- ],
- "a8V᯺?:ﺃ/8ꉿBq|9啓댚;*i2": null,
- "cpT瀇Hç°á»ªpೃi鎪Rrâ£ìˆ¬-鹸ҩ䠚z脚цGoN8å…¥y%è¶ŒI┽2ឪЀiJNcN)æ§£/â–Ÿ6S숆牟\"箑X僛G殱娇葱T%æ»:J諹昰qV쨰": 8331037591040855245
- }],
- "G5ᩜ䄗巢껳": true
- }
- },
- "Ồ巢ゕ@_è­™A`碫é„㡥砄㠓(^K": "?܃B혢▦@犑ὺD~Tâ§|é†;o=J牌9냚⢽㨘{4è§èš”9#$∺\u0016p囅\\3Xk阖⪚\"UzA穕롬✎âžã­’춺C㣌ဉ\"2瓑员ᅽê¶ë«}꽚ꞇ鶂舟彺]ê½JCè§éЉ",
- "â†Äšè†\"b-í‰ACR言J謈53~V튥x䜢?ꃽɄY뮩ꚜ": "K/↾eèƒ}]Bs⾿q룅鷦-膋?m+æ­»^魊镲6",
- "粡霦cæž‹AHíŸo礼Ke?qWcA趸㡔ê‚?\u000eì¶‚8iতᦜ婪\u0015㢼nﵿê»!á´é–¢\u001d5j㨻gfá¿©UK5Juä¸tã‹TI'?ã“t>⼟o a>i}á°—;뤕Ü": false,
- "ꄮ匴껢ꂰ涽+䜨B蛹H䛓-k蕞fu7kLè°–,'涃V~챳逋穞cT\"vQ쓕ObaCRQã“¡â²®?轭⫦輢墳?vA餽=h䮇킵ní²í‰…喙?\"'1ç–¬V嬗Qdç—'Lự": "6v!së¯ã­Ÿî€µî¦˜ã£¯çƒ!磸餠ቂh0C뿯봗Fé·­gê–¶~コkK<ᦈTtïŽ\\è·“w㭣횋钘ᆹ듡䑚W䟾X'ê…”4ï€FL勉Vܴ邨y)2'〚쭉⽵-鞣E,Q.?å—",
- "?(˧쩯@å´Ÿå‹æ­„K": null
- },
- "Gc럃녧>?2DYIé´¿\\륨)æ¾”0ᔬlx'è§”7젘⤡縷螩%Sv׫묈/]↱&S ï…h\u0006æ­‹á‘›xi̘}ã²Y蔯_醨鯘煑橾8?䵎쨋z儬ê*@츾:": null
- }
- }
- }
- ]
- ]
- ]}
- },
- "HO츧G": 3.694949578823609E17,
- "QC\u0012(翻曇Tfã·ŸbGBJ옉53\\嚇ᛎDï–/\u001b夾á‰4\"í•€@祎)쫆yD\"i먎Vnî¿ã¿¿V1Wá¨ä¶€": -6150931500380982286,
- "Zã“®P翸é±é‰¼K䋞꘺튿â­Y": -7704503411315138850,
- "]모开ꬖP븣c霤<[3aΠ\"é»ä––䰑뮋ꤦ秽∼㑷冹T+YUt\"싳F↭ä–&鋌": -2.7231911483181824E18,
- "tꎖ": -4.9517948741799555E-19,
- "䋘즊îŽ.⬅IꬃۣQ챢ꄑé»|f?C⾺|å…•ì¯sC鬸섾整腨솷V": "旆柩l<Ké«î–žM戶鯮t:wRî°2ꉱ`9'l픪*í芦㊢Pjjoå ¡^ ì‡ì–›å¶…있ষ0?F",
- "下9T挞\\$yᮇk쌋⼇,ਉ": true,
- "櫨:ㆣ,é‚lî ¬r崕祜ã®çƒœZ,XXD蕼㉴ kM꯽?P0﹉릗": null,
- "îŠgv솠歽閘4镳䗄2æ¾¾>쪦sá–¸My㦅울ì‰ç˜—㎜檵9ï……ê‚駓ૉᚿ/u3ì”…å¾ï¤¥[Z䞸ࡗ1ꆱ&Q풘?Ç‚8\u0011BCDY2볨;é¸": null,
- "幫 nç…¥sì‡íއ 왊-$C\"è¡:\u0014㣯舼.3ë™—Yl⋇\"K迎멎[ê½µs}9鉳UK8ì¥\"掄㹖h㙈!얄સ?Ꜳ봺R伕UTD媚I䜘Wé¨è”®": -4.150842714188901E-17,
- "ﺯ^ã„„\b죵@fྉkf颡팋î¤êž¦{/Pm0V둳⻿/è½éŸ’ꊔᚬ@5螺G\\å’¸a谆⊪ቧ慷绖?è´¢(é·‡uéŒF=ráæ©¢áž³n:^iá´µtD볠覅Nèµ´": null
- }]
- }]
- }
- ]
- ]}
- ]},
- "謯?w厓奰Tï§¡í——èážè²–o⪇弒L!캶$ᆅ": -4299324168507841322,
- "뺊奉_åžæµ¸å»¶ëªå­„Z舰2i$q붿좾껇d▵é¤\"v暜Ҭì„mï¿´g>": -1.60911932510533427E18
- }
- ]
- }
- ]
- ]],
- "í‰êº”㠦楶Pê…±": 7517896876489142899,
- "ï™°": false
- }
- ]},
- "是u&I狻餼|è°–j\"7cë®sï­-踳鉷`䣷쉄_A艣鳞凃*m⯾☦椿q㎭Nîœæº”铉tlㆈ^": 1.93547720203604352E18,
- "ï…µkⲨ\\%vr#\u000bâ’ºY\\t<\/3﬌R訤='﹠8è¤êž´ë ´æ›”r": false
- }
- ]},
- "阨{c?C\u001d~K?鎌Ԭ8烫#뙣Pì´ˆé—tã­±E­ë’䆺}ç”—[R*1!\\~hã•…á°º@<9JêષIä³–æ ­6綘걹ᅩM\"▯是∔v鬽顭⋊譬": "ìš´ï¶Kæ•‚(欖C취پ℄爦賾"
- }
- }}
- }],
- "鷨赼鸙+\\ä­£t圙ڹx᜾ČN<\/踘\"S_ë§¶a鷺漇T彚⎲i㈥LT-xA캔$\u001cUH=a0츺l릦": "溣㣂0æ¿•=鉵氬駘>Pꌢpb솇쬤h힊줎çªãª¬CrQ矠a&è„꼬爼M茴/á¿®\u0017å¼è½¼y#êž c6ë‘´=?Rå´ë· éº–w?"
- },
- "閕ᘜ]CT)䵞l9z'xZF{:ØI/躅匽ì¡:䟇AGF૸\u001cퟗ9)駬慟ꡒꆒRS״툋A<>\u0010\"ꂔ炃7gëšEà§îˆbꅰ輤]oã±_뷕ܘ暂\"u": "芢+U^+㢩^鱆8*1鈶鮀\u0002뺰9⬳ꪮlL䃣괟,G8\u20a8DF㉪錖0ㄤ瓶8Nଷd?眡GLc陓\\_죌Vì°à¤²äºŒ?cë¦æ± \u0019JC\u0011b⤉zẒT볕\"绣蘨뚋cꡉkî« I\u001eé³´",
- "ꃣI'{6u^㡃#཰Kq4逹y൒䧠䵮!㱙ï®/n??{Lí’“ZETã™ í¿X2᩟綳跠葿㚙w཮x캽扳B唕S|å°¾}ì´•%N?o䪨": null,
- "ⰴFjà·Ÿì…ˆ[\u0018è¾·px?椯\\1<ﲻ栘á£ë´¢æ† ë‰´p": -5263694954586507640
- }
- ]
- ]]
- ]}
- ]}]
- ]
- ],
- "?#癘82禩鋆êŠty?&": -1.9419029518535086E-19
- }
- ]
- ]
- ]}
- ]
- ]
- ],
- "훊榲.|῕戄&.ãšZꛦ2\"䢥ሆ⤢fV_æ‘•å©”?â‰Fji冀탆꜕iã¬_ẑKᅢ꫄蔻XWc|饡Siẘ^㲦?羡2ã´1ç¸á™…?ì‰Ou": false
- }]]
- ]}}},
- "æ…‚ë—„å“è“”á“åŒåš–/颹蘯/翻ㆼL?뇊,í…µ<\\ç·ã”Cボ": null
- },
- "p溉ᑟi짣z:䒤棇r^٫%G9缑r砌롧.물农g?0׼ሩ4ƸO㣥㯄쩞ጩ": null,
- "껎繥YxK\"F젷쨹뤤1wq轫o?鱑뜀瘊?뎃hç‘\\ꛣ}Kå³^ኖâ¤ï§´ê‰“hy": null
- }
- ],
- "á±€nè‚“ã„›\"å »2>mæ®®'1橌%êž´êµ°=Ӳ鯨9耛<\/n據0u彘8㬇៩fá¿è¯™]嚊": "䋯쪦S럶åŒã…›#î½)O`ሀX_éªæ¸²â›€ã¨»å®…闩➈ꢙஶDRâª"
- },
- "tAì“龇 â‹¥bj왎录r땽✒롰;羋^\\?툳*┎?ì€ma䵳넅U䳆૘〹䆀LQ0\bç–€U~u$M}(鵸gï­â³¾i抦뛹?䤈땚검.鹆?ê©¡tâ¶¥GÄ’;!ቹHïš©Så³»B츪ì¼f5≺": 2366175040075384032,
- "ì „pJjleb]áž½": -7.5418493141528422E18,
- "n.鎖ጲ\n?,$䪘": true
- },
- "欈Ar㉣螵᪚茩?O)": null
- },
- "쫸M#x}Dç§±æ¬K=侫们ä¸ï‡ª.KꕾxẠ\u001e㿯䣛FÜ캗ï¬qq8꟞ṢFD훎⵳簕꭛^鳜\u205cÙ«~⑟~冫ऊ2ì«°<\/戲윱o<\"": true
- },
- "ã·è¥/T뱂\u0010锕|内䞇xä¾â‰¦ã­–:M?iM᣿IJeç…œdG࣯尃⚩gPt*辂.{磼럾äª@a\\袛?}ᓺBç¼": true
- }
- }
- ]]}]}},
- "tn\"6î´ê«¤ìƒ¾ä„„;銞^%VBPwu묪`Y僑N.↺Ws?3C⤻9唩Sä ®á´m;sᇷ냞඘B/;툥B?lB∤)G+O9m裢0kC햪䪤": -4.5941249382502277E18,
- "áš”t'\\æ„«?éµ€@\\ã³ê‚•Pí <<]ç…¹G-b!S?\nꖽ鼫,Ý›&é ºy踦?Eæ†î¬–릱H}햧캡b@手.p탻>췽㣬ꒅ`qeä½­P>á“‚&?u}毚ᜉ蟶頳졪áŽzl2wO": -2.53561440423275936E17
- }]}
- }
- ]
- ]],
- "潈촒⿂å¡": 5495738871964062986
- }
- ]]
- }
- ]
- ]}
- ]]
- ]]
- ]}
- ]
- ]},
- "á‚qí‚è“…R`謈èŸá¦î’³å„‚æ§åƒ»ï¹¶9å©Œî¬æ«žé‡ˆ~\"%匹躾ɢ뤥>࢟瀴愅?殕节/냔O✬H鲽엢?ᮈà©î“Žâ‹§dâ½ã«zCe*": 2.15062231586689536E17,
- "ã¶µUi曚ç°é‹ªá¾¼è‡§P{ä䷪쨑̟A뼿T渠誈äšD1!ìž¶<\/ã¡7?)2l≣穷᛾ç¨{:;㡹nemיּ訊`Gî¹²": null,
- "䀕\"飕辭påœf#뫆䶷뛮;â›´á©3çšëá°ìŽ“â¦·è©µ%᜖Մfs⇫(\u001e~P|ï­—CⲾផv湟W첋(텪બTî¾·<บSê‰à©—⋲X婵i ӵ⇮?L䬇|êˆ?졸": 1.548341247351782E-19
- }
- ]
- },
- "t;:N\u0015qé¦Rt缆{ê®C?஛㷱敪\\+鲊㉫㓪몗릙ç«(æ°µkYS": "Xá°‚T?൮ô",
- "碕飦幑|+ 㚦é¶`é•¥ê© B<\/加륙": -4314053432419755959,
- "秌孳(p!G?Vå‚«%8ሽ8w;5鲗㦙LI檸\u2098": "zG N볞䆭éŽí˜\\ONK3íš™<\/樚立圌Q튅k쩎Ffì‹aׂJK銆ઘì¦ç‹©6༥✙䩜篥CzP(è»é§‡HHퟲ讃%,ά{ë p而刲vy䦅ክ^톺M楒é¢ã¹³]Mdg2>䤉洞",
- "踛M젧>忔芿㌜Zk": 2215369545966507819,
- "ì”A`$æ§­é °í»^U覒\bG毲aᣴU;8!팲f꜇E⸃_åµ{å«ç¾ƒX쀳C7ë—®m(åš¼u NÜè°ŸD劯9]#": true,
- "ﻩ!뵸-ç­šPá­›}á¼°å±¥lPh?౮ⶹꆛ穉뎃gè‘㑓溢CX뾇Gã–¬A錟]RKï’î´²aꄘ]Yo+@ä˜'s섎襠$^í™°}F": null
- },
- "粘ꪒ4HXᕘ蹵.$å€\r\u001dë¬77pPc^yî¶ç¬²Q<\/ê–¶ è¨äƒá¨•G?*": 1.73773035935040224E17
- },
- "婅拳?bkU;#D矠â´vVN쩆t㜷A풃갮娪a%é®çµª3dAv룒#tm쑬⌛qYwc4|L8KZ;xU⓭㳔밆拓EZ7襨eD|隰ऌ䧼u9Ô¢+]è´´Pè¿": 2.9628516456987075E18
- }]}}]
- ]}
- }}
- ]}]
- ],
- "|g翉F*湹̶\u0005â1脉̀eI쩓ᖂ㫱0碞l䴨ꑅ㵽7AtἈ턧yq䳥塑:z:é€ï¾¼X눔擉)`N3昛oQì…–y-ڨ⾶æ¢êˆµq^<\/": null,
- "è¹\\ëž“G^璬x৴뭸ゆUSê²§ï®·Bꮤ ┉銜᯻0%N7}~fæ´‹å„Xꔼ<\/4妟Vꄟ9:౟곡t킅冩䧉笭裟炂4ë´‹â±³åºæ€Št+怯涗\"0ã–ˆHq": false,
- "졬믟'ﺇফ圪쓬멤m邸QLà¦¬ä—æ„4jvsç¿™ à¾ê§€è‰³H-|": null,
- "컮襱⣱뗠 R毪/鹙꾀%헳8&": -5770986448525107020
- }
- ],
- "î½­B䔚bê»ë™å§“展槰T-똌鷺tcï§ç¿á«½^㓟ä€o3o$꘭趙è¬Ié¡©)뇭Ἑä“\f@{ᣨ`x3è”›": null
- }
- ]
- ]
- }],
- "⦖扚vWꃱ꥙㾠壢輓{-⎳鹷è´ç’¿äœ‘bG倛â‹ç£Žc皇皩7a~ﳫUâ•£Q࠭ꎉS摅姽OW.홌ೞ.": null,
- "蚪eVlH献r}á®ë¯ ï°©ê”„@ç‘„â²±": null,
- "퀭$JWoê©¢gì—­ì䖔㑺h&à­¢tXX愰㱇?㾫I_6 OaB瑈q裿": null,
- "꽦ﲼLyr纛ZduçB絟쬴糔?ã•‚ì§¹äµe": "ḱ\u2009cX9ë©€i䶛簆㳀k"
- }
- ]]]],
- "(_ê®g່澮?ᩑyM<艷\u001aꪽ\\庼뙭Zë§·ã°©Vm\\lYç­º]3㋲2㌩㄀Eਟäµâ¨„ì¨á”ŸgङHné–⤇놋瓇Q탚單oY\"♆臾jHᶈå¾îž«á‰„??uㇰA?#1侓": null
- },
- "è§“^~ሢ&iIë†g륎ḱ캀.ᓡꀮ胙鈉": 1.0664523593012836E-19,
- "yè©­GbᔶऽsëŒU:æœî „⤎ϲì—⮼D醄诿që™°I#즧v蔎xHᵿt᡽[**?崮耖p缫쿃Lè,ë´¬ï–ꤦC쯵#=X1çž»@OZc鱗CQTï‹„x": null
- }
- ]
- }}],
- "剘ç´\u0004\\Xn⊠6,á€×±;嵣崇}讃iႽ)d1\\䔓": null
- },
- "脨z\"{X,1u찜<'k&@?1}Yn$\u0015Rd輲ーa쮂굄+B$l": true,
- "諳>*ì­®ê´äµŸÒ+<ç®}빀䅱⡔æªï€è‡’hIH脟ꩪCí•ଗP좕\"0i<\/C褻DÛžæ—+^5?'ꂱ䚫^7}ã¡ cq6\\쨪ꔞꥢ?纖䫀氮蒫侲빦敶q{Aç…²G": -6880961710038544266
- }}]
- },
- "5s⨲JvಽῶꭂᄢI.a৊": null,
- "?1qê½ì¿»ê›‹DR%Uå¨>DgNä¹­G": -1.2105047302732358E-19
- }
- ]
- ]},
- "qZz`撋뙹둣j碇ì\\ꆥ\u0018@ïœè—´ç–°Wz)O{Fä¶›l᷂绘訥$]ë®å¤»ä¢‹ä©‡è¿ç°æ¨§çŒµâ£­jè¶q)$꬚⵷0馢W:â°!Qoe": -1666634370862219540,
- "t": "=î¹›wp|~碎Q鬳Ó\\l-<\/^ﳊhní–}ä”t碵ḛ혷?é»äŠ—",
- "邙쇡㯇%#=,î‰E4勃驆V繚q[Y댻XV㡸[逹á°è‘¢B@u=JS5?bLRnì–®ã‰â…ï°³?a6[&íŸ!è—ˆ": 1.2722786745736667E-19
- },
- "X블땨4{ph鵋ꉯ웸 5p簂䦭s_E徔濧dç¨~No穔噕뽲)뉈c5M윅>âš‹[岦䲟懷æ?éŽê“†à¸¬çˆ‹ç äœ”s{\u001bméšå„¸ç…›%bﯿXT>ê—˜@8G": 1157841540507770724,
- "媤娪Qæ¸ï‡\u0011SAyᡈ쿯": true,
- "çš^ಸ%ê±<\/蛯<O\"-刷ã R(kO=䢊䅎l䰓팪A絫픧": "è­”\\ãš„ ?R7㔪G㋉⣰渆?\\#|gN⤴;Wì¹·A׫癮଼ೣã³ë’œ7dæ“ê¾²0扬S0ᆵi/贎ྡn䆋武",
- "è‡ç ‡Gã“æœ¦ì¼‹Wq`㞲攊*å†î‘µî¨~霓L剢zI腧튴Tç¹™Cঅ뫬╈뮜ㄾ䦧촄椘B⊬츩r2f㶱厊8eϬ{挚â¯OM焄覤\\(KÓ¡>?\"祴å“\\\\'í": -3.4614808555942579E18,
- "釴U:O湛㴑䀣렑縓\ta)<D8ï­³æ§é«­D.L|xsæ–‹æ• \"ë‹æ—©7wáŽ": true,
- "쵈+쬎簨up䓬?q+~\u0019仇îŒëµˆá«¯3áµ£æ˜æž°åŠ«ãª¢uç˜-퀭:ì»™:u`⌿ï«A(9鄦!<çšnj3:Hà£¨å·‹ä€æ—¸ëŽˆë§»v\"\\(곘vO㤰aZe<\/W鹙鄜;l厮ë‘": null,
- "î–·": -1.2019926774977002E-18,
- "%者Oî–‹7.Nêªs梇接z蕜綛<\/䜭\"죊y<曋漵@Śâ¹sD⟓jݗᢜ?zî–†/9á²Ma쨮긗贎8ᔮ㦛;6p뾥໭䭊0B찛+)(Yã¿ é¸ä•’^옥": "鬃뫤&痽舎Jì½®è—󽸰ᨨMꈫ髿v<N\\î·.ì‚’ê»…Ñ1ê­¼5ä´·5쳬臨wjë¥"
- }],
- "é·Ž'ã³—@帚妇OAj' è°¬f94ǯ(횡ヒ%io쪖ì‚좛>(j:숾å´ä—ŒgCiB뽬Oyuqè¼¥åŽ/7)?今hY︺Q": null
- }
- ]
- ]]]}]
- ],
- "I笔趠Ph!<ཛྷ㸞诘X$畉F\u0005笷èŸ.Esr릙!W☆ï›ä²–뗷莾뒭U\"䀸犜Uo3ï¯Gꯌx4r蔇᡹㧪쨢準<ä‚€%ࡡꟼç‘8ç‚Xs0ä€é”€?fi쥱ê†àª²BB": -8571484181158525797,
- "Lâ¦o#J|\"⽩-ã±¢d㌛8d\\㶤傩儻E[Y熯)r噤὘勇 }": "e(濨쓌K䧚僒ã˜è ¤Vᛸ\"络QJL2,嬓ì™î¿‰ä¼¢ã‹’䴿考澰@(ã¾`kX$ë‘ÑE斡,èœ&~y",
- "vj.|统圪ᵮPL?2oŶ`ë°§\"勃+0ue%⿥绬췈체$6:qaë Q;~晘3㙘鹑": true,
- "à·Ø™4ç„â¶¿c︋iâš…:ã‚“é–Ⳙ苆籦kw{䙞셕pCì·ƒê¬âœêŸ¯êš“é…„bížhwkê­­M鬋8B耳쑘WQ\\å™ac'唀x᪌\u2048*hì§Ž#á‡é® ë¾áž¿ë€Œ": false,
- "⎀jꄒ牺3Ⓝ컴~?親ꕽã¼Ü“å–瘘!@<튋ãŒê¿±â©¦{a?Yv%⪧笯Uܱ栅Eæši뚬:ꄃx7䙳ꦋ&䓹vq☶Iä˜á¾˜æ¶œ\\ì‰ëºŒLr%Bcãœ3?î¤ï…¨ê­ç ¿è£ž]": null,
- "⭤뙓z(㡂%亳K䌽꫿AԾ岺㦦㼴輞낚Vꦴw냟鬓㹈뽈+o3譻K1잞": 2091209026076965894,
- "ㇲ\t⋇轑ꠤ룫X긒\"zoYì‡í¬wjæ¢ì‘l侸`e%s": -9.9240075473576563E17,
- "啸ꮑ㉰!áš“}éŠ": -4.0694813896301194E18,
- "ï‰>]囋੽EK뇜>_ꀣ緳碖{ì裔[<ನ\"䇅\"5L?#îµ³xTwv#ç½\u0005래t应\\N?빗;": "v쮽瞭pë­ƒ"
- }
- ]],
- "æ–´æ§¾?Zç¿\"~æ…弞ﻆ=꜡o5é‹ï’½dw\"?Kè ¡i샾ogDï²°_C*⬟iㇷ4nયèŸ[㟉U꽌娛苸 à§æ“贻洞펻)쿗૊許X⨪VY츚Zä¾ã¶­~튃ᵦ<\/E臭tve猑x嚢": null,
- "锡⛩<\/칥ꈙᬙè€&êšç±¬â– 865?_>Lè©ì¿¨äˆŒæµ¿å¼¥ï©‰Ì«î¾½ï‘lj&zx<\/C쉾?覯n?": null,
- "꾳鑤/꼩ï¨d=ᘈn挫ᑩ䰬ZC": "3錢爋6Ƹ䴗v⪿Wr益G韠[\u0010å±—9ì¡é’u?殢c䳀蓃樄욂NAq赟c튒ç˜ë ¶î‚³Aà«¡Éšæ"
- }
- ]
- ]
- ]}
- ]
- ]
- }]]]}}
- ]}],
- "ï‚’Ejä—³U<\/Q=ç’샎䞦,å °é  @褙g_\u0003ꤾfâ¶½?퇋!łB〙ד3CC䌴鈌U:뭔咎(Qો臃䡬è‹BO7î¼§ã¢äŸ¸\"Yb": 2.36010731779814E-20,
- "逸'0å²”j\u000e눘먷翌C츊秦=ꭣ棭ှ;鳸=麱$XP⩉駚橄A\\좱⛌jqvä°ž3Ь踌v㳆¹gT┌gvLBè³–ïžçƒ¡m?@E঳i": null
- },
- "曺vì°˜×?&绫OáŸ": 9107241066550187880
- }
- ]
- ],
- "(e屄\u0019昜훕ç–b蓘ᬄ0/۲묇Z蘮á€â¨è›˜èƒ¯ë¢ƒ@㘉8ሪWᨮ⦬ᅳ䅴HIá‡ì¨³z囕陻엣1赳o": true,
- ",b刈Z,á æ™Tì†Å•B⩆ou'í¼â‰ƒç»—é›—dè­Š": null,
- "a唥KB\"ï³è‚•$u\n^â…„P䟼냉䞸⩪u윗瀱ꔨ#yÅŸsî««ê’¬=ï‹•1ïš–|ﲤ爢`tà±íмî£ì³«_Az(Ṋ擬㦷좕耈6": 2099309172767331582,
- "?ã´¸U<\/䢔ꯡ阽扆ã¤qé‹?f㔫wM嬙-;UV죫嚔픞G&\"Cá—äªí’ŠQ": "VM7ç–¹+陕枡툩窲}ç¿¡ä–¶8欞ÄsTë®}ç’¤:jﺋ鎴}HfAàµâ§»Zd#Qï¬u茅J髒皣Y-︴[?-~쉜vë”璮㹚䅊﩯<-#\u000eê±€h\u0004u抱﵊㼃U<㱷⊱IC進"
- },
- "숌dee節é½é‚ºp넱蹓+e罕U": true
- }
- ],
- "b⧴ë£??á” 3ã±>%郿劃ç¿ê¬ê ›Wï¡°çž³á«ëˆ„躨狀ໄy੽\"ីuS=㨞馸k乆E": "トz݈^9R䬑<ﮛG<s~<\/?ⵆá¥è€ç†·uë“·"
- }}
- ]
- }
- ]}
- }
- }
- }
- }},
- "宩j鬅쳜Qê–јyç”Zá­µï1væ“–}䨿F%cֲ᫺贴m塼딚NP亪\"ï¿‹sa뺯ꘓ2:9뛓ï à¼‚쌅䊈#>Rꨳ\u000fTT泠纷꽀MR<CBxPñ±’«X쇤": -2.22390568492330598E18,
- "?䯣ᄽ@Z鸅->ᴱ纊:ã ­ë³®?%N56%鈕1ä—äœaä²—j陇=ë¿»å‚衋࿘ᓸ?ᕵZ+<\/}H耢bä€z^f$&ã’LkꢳI脚뙛u": 5.694374481577558E-20
- }]
- }
- ]],
- "obj": {"key": "wrong value"},
- "퓲꽪m{ã¶©/뇿#â¼¢&᭙硞㪔E嚉c樱㬇1aç¶‘á–DḾä©": null
- },
- "key": "6.908319653520691E8",
- "z": {
- "6U閆崬밺뀫颒myj츥휘:$è–ˆmYí–š#rzé£+玭V㭢뾿愴Yî°‘ê–šX亥ᮉ푊\u0006åž¡ã­ë£\"厓ᔧḅ^Sqpv媫\"⤽걒\"˽Ἆ?ꇆ䬔未tv{DV鯀Tἆl凸g\\㈭ĭ즿UH㽤": null,
- "b茤z\\î¨.N": [[
- "ZL:ᅣዎ*Y|çŒ«åŠæ«•è¾Oj为1糕쪥æ³S룂w࡛á²â¸¥èš™)",
- {
- "\"䬰á»wDæ¾V`邀⠕VDãºsH6[칑.:醥葹*뻵倻aD\"": true,
- "e浱uî¿£p蔽Crà· JK軵xCʨ<뜡癙Yç©ï½¹é½ˆX/螗唻?<蘡+뷄㩤쳖3å‘犾&\\첊xzå崦ݻé´\"åµ¥B3㰃詤豺嚼aqJ⑆∥韼@\u000b㢊\u0015L臯.샥": false,
- "l?Ǩ喳e6㔡$M꼄I,(3á縢,䊀疅뉲B㴔傳䂴\u0088㮰钘ꜵ!ᅛ韽>": -5514085325291784739,
- "o㮚?\"춛㵉<\/﬊ࠃ䃪ä£wp6ἀ䱄[s*S嬈貒pᛥ㰉'ë€": [{
- "(QP윤懊FI<ꃣ『䕷[\"ç’å¶®?%Ḭå£à²»ä‡Ÿ0è¤!è—²ë¹bdæµ¶tl\u2049#쯀@僞": {"î—i妾8홫": {
- ",Mï£ë§ƒäž›K5nAㆴVNã’Ší–¬$n꩑&êŽæ¤žî·é˜«?/á¹ì„¸ë‰ª1x쥼㻤㪙`\"$쟒薟B煌܀ì¨à­2掳7㙟鴙Xå©¢\u0002": "Vዉèˆï ’᧷⦌kîŒï®žà°ˆnz*<?੃'ahhCFX(\u0007⮊Eã­ä±¾Gxꥩrâ£.æ´Ž",
- "ë»´5bDDí¯O傆盓왻U?êž…êŠNé­á§¢Ï„\"迳豲8\u001b䃥ꂻ䴺ྸHç­´,": {
- "\"L鸔SE㬡XV&~ÍŽ'놅蔞눶l匛?'.Kæ°\\ƢẨ疇má¿›'ê½³&!é¹ m'|{Pç—Š ç§„ì’¿u\u00111ä‹§î´¼gÏ©x7t丗D䊨䠻z0.A0": -1.50139930144708198E18,
- "8é‹‚ë›·ïž”?ì²’B☚>ï·œFM\"è­7ê€-VR<\/';ä™E9$䩉\f @s?íªo3^è¡´cî˜à¶Žä§ªaK鼟q䆨c{ä³ 5mᒲՙ蘹ᮩ": {
- "Fã²·JGoâ¯Pëµxë’³p䘧☔\"+ꨲå¿JfR㔹)4nç´¬G练Qáž!C|": true,
- "p^㫮솎ocî’£.೚A㤠??r\u000f)⾽⌲們M2.䴘䩳:⫭胃\\á¾@Fá­Œ\\K": false,
- "蟌Tk愙潦伩": {
- "aï‘<\/@ᾛ慂侇瘎": -7271305752851720826,
- "艓藬/>á„ṯ,XW~㲆w": {"Eç—§î–郶)㜓ha朗!N赻瞉駠uC\u20adè¾ <Ve?í±!ImäŽî­Ÿæ„:*s 9諚Prᵾ뒰髶B̌qWA8梸vS⫊⢳{t㺲q㺈랊뮣RqK밢쳪": [
- false,
- {
- "\u000b=>x퓮⣫P1à «LMMX'M刼唳ë¤": null,
- "P쓫晥%k覛ዩIUᇸ滨:å™í˜²lMR5䋈V梗>%å¹½ué –\\)쟟": null,
- "eg+昉~矠䧞难\b?gQì­·ç­\\eê® Nl{ಢ哭|]Mn銌╥zê–˜zⱷ⭤ᮜ^": [
- -1.30142114406914976E17,
- -1.7555215491128452E-19,
- null,
- "渾ã¨ß牄귛r?ëŒ?w[âšžÓ»~廩輫㼧/",
- -4.5737191805302129E18,
- null,
- "xyà¿‘M[ocì…’ç«“â’ºx?뜓y䊦>-Dì¼(&&?XKkc꩖ﺸá‹ëµžK伕6à§€)딀PæœyWæ™îž¢?훻魢傎EG碸9類៌g踲C⟌aEX舲:z꒸许",
- 3808159498143417627,
- null,
- {"m試\u20df1{G8&뚈h홯J<\/": {
- "3ஸ厠zs#1K7:rᥞoꅔꯧ&ë‡éµ¼éž«6è·œ#赿5l'8{7㕳(b/j\"厢aqç±€êš\u0015厼稥": [
- -2226135764510113982,
- true,
- null,
- {
- "h%'ë§žï–±Sì‹…Hs&dï”l슾W0jé¿M×D놯L~S-㇡Rì­¬%": null,
- "⟓咔謡칲\u0000孺ꛭx旑檉㶆?": null,
- "æ‡I転;￸B2Y`z\\ç“w,ë†æ¿æ’埵䂄)!ä¶¢D=à´­ã´ŸjyY": {
- "$ࡘt厛毣ൢIèŠ<겿骫⫦6tr惺a": [
- 6.385779736989334E-20,
- false,
- true,
- true,
- [
- -6.891946211462334E-19,
- null,
- {
- "]-\\êŸ1/è–“â§á½Š\\l牑\u0007A郃)阜ᇒᓌ-塯`W峬G}SDb㬨Q臉⮻빌O鞟톴첂B㺱<ƈmu챑J㴹㷳픷Oㆩs": {
- "\"â—‰B\"pᶉt骔J꩸ᄇá›iâ•°æ ›K쉷㉯é©!ãˆnì¹äŸ…難>盥yé“¿eà­”è’M貹ヅ8å˜‹í€¯ä‰¶áŒ¥ã¢æ®Šë»³\"絧╿ꉑ䠥?∃蓊{}㣣Gk긔H1哵峱": false,
- "6.瀫cN䇮F㧺?\\椯=ÚˆT䘆4â˜ïšŒ8qv": -3.5687501019676885E-19,
- "Q?yऴr혴{஀䳘p惭f1ﹸ䅷䕋贲<ྃᄊ繲hq\\b|#QSTî“¶s1c-7(äµ¢\u2069åŒçµ˜ê¯‰:læ¯´ï›æ±žt戀oà·Ÿáµ¶ë®±á£-醇Jx䙬äí–¢0࣫á¡grã„›": "\u0011_xM/蘇Chv;dhA5.嗀绱V爤ﰦiëµ²M",
- "â‘[\"ugoy^儣횎~U\\섯겜ï¥l2jw஌yD腅̂\u0019": true,
- "ⵯɇä²á«¿à¢š!㯢l샅笶戮1꣖0Xe": null,
- "劅fë„€ï‹ï§¼bå®ç„ŠE찓橵G!ʱç“뭔雩괛": [{"p⹣켙[q>燣äƒãž½î›œá©²x:쓤삘7玑퇼0<\/qç’‚á‘[ï ™Z\\3䅵䧳\u0011㤧|妱緒C['ì·“Yꞟ3Z鳱雼P錻BUì”§U`ᢶg蓱>.1Ó§è­«'L_5VäµÐ¦": [
- false,
- false,
- {"22ä‚盥N霂얢<F8î±ê¼µ7Gà°¸yhë€g᦭ꄢx硴嬢\u001a?Eê´†T|;7犟\"Wt%ä©O⨵t&#ᬋK'èœá²«æ”⾠鲂Të©·éƒ\u0018䓞cE": {"f=ä츜瞾zw?å­¡é£\\铀᫞yẆg(\u0011M6(s2]`ਫ": [[[{
- "'y몱纣4S@\\,i㷯럹Ua充Tᣢ9躘Zଞ쥿äŠs<\/刎\\\"뉦-8/": "蜑.X0꭛낢륹iì ¨êš<8?s볕è¡|Q✬᯦@\\G㑢屿Mn졾J굤⥟JW뤵苑rì•툄嵵?â¾¥O",
- "^1挲~[n귆誈央碠멪gI洷": -8214236471236116548,
- "sሣ%娌暡clr蟜㑓2\u000bSâŸ_X㨔⚴5~蔷ꀇ|Xu㬖,꤭å¹îµ¿r(g믇ì©ïЍ%췸앙|æ £U\\2]䤉+å• è¡ê¯ŽT鉹m\n/`SzDᅼ鞶": 1.1217523390167132E-19,
- "u톇=黚\\ ꂮ췵L>躰îe9â‘©_뵜斌n@B}$ê´»Yá±@ä§‹î´½V\"☒-諯cVë¯Ê ": true,
- "Ű螧ᔼæªéŽë•’딜qꄃH뜣<ç§à¥‚CYå“â¸>XQ㵡趌oë¬k픀빯a(ܵç”ë†à­¯/6Nᪧ}æšá†šì§ŒP牰泱鈷^d꣟#Lì‚€\"㕹襻;k㸊\\f+": true,
- "쎣\",|⫝̸阊x庿k잣v庅$éˆê´Žç‚”k쬪O_": [
- "ìž©AzZGz3v愠ꉈⵎ?㊱}Så°³à¯p\r2>ì·IP䘈M)w|\u000eE",
- -9222726055990423201,
- null,
- [
- false,
- {"´킮'뮤쯽Wxè®V,6ᩪ1ç´²aႈ\u205czD": [
- -930994432421097536,
- 3157232031581030121,
- "l貚PY䃛5@䭄<nW\u001e",
- [
- 3.801747732605161E18,
- [
- null,
- false,
- {
- "": 4.0442013775147072E16,
- "2J[sᡪ㞿|n'#廲꯬乞": true,
- "B[ç¹°`\\ãa̼㨀å›ã½“<\/꥖ᵈO让\r43⡩徑ﬓ๨ﮕx:㣜oçŽê‰Ÿã¢Cçµï›‰á½†á“žì‡“Qs氯였9é§µq혃Ljê‚”<\/昺+tä‹à¼»çŒ™c沪~櫆bpJ9Uá:칣妙!çš—F4㑄탎䕀櫳振讓": 7.3924182188256287E18,
- "H磵ai委曷n柋T<\/å‹¿F&:ꣴfU@㿗榻Lb+?í„sp\"᪟~>ê·»m㎮ç¸fî§¡": 1.0318894506812084E-19,
- "࢜⩢Ш䧔1肽씮+༎ᣰ闺馺窃䕨8Mƶqè…½xc(៯å¤J5굄ä•Qj_훨/~価.䢵慯틠퇱豠㼇Qﵘ$DuSp(8Uà¸<\/ಟ룴𥳐ݩ$": 8350772684161555590,
- "ㆎQ䄾\u001bpᩭ${[諟^^骴᤮b^ㅥI┧T㉇⾞\"绦<AYJ⒃-oF<\/蛎mm;obh婃ᦢ": false,
- "䔤䣈?æ±.p襟&dã±…\\Jᚠ@?Oì²à¢½íœ”VR蔩|㒢柺": [[
- "-ꕨ岓棻r@鿆^3~䪤Ѐ狼︌ﹲ\\á¸MlEìµ Q+",
- null,
- false,
- 3346674396990536343,
- null,
- {
- "": null,
- "/ä¨S쨑,&繷㉥8C엮赸3馢|뇲{鄎ꗇqFﶉ雕UD躢?Ꟛအï–꽡[hᕱᗅ㦋쭞MユèŒ?L槽암V#성å”%㣕嘵\\Ú¹(å˜èº¿&q": [
- -1364715155337673920,
- false,
- -8197733031775379251,
- "E팗鮲JwH\\觡܈áœ\"+뉞娂N휗vå™™á‚ê¹¼\u001dD帒l%-æ–”N",
- -3.844267973858711E-20,
- [{"쬯(褈Q 蟚뿢 /ⱖ㻥\u0017/?v邘䃡0U.Z1î­­x?鯔Vå° 8Emï•<": [[[
- null,
- [
- null,
- -5841406347577698873,
- "í‚·\"S⋄籞繗솸ᵣ浵w쑿ퟗ7náŽx3ì•™z㘌쿸I葥覯ã¬0á†b汆狺뷘ႀnꋋ",
- -1227911573141158702,
- {
- "u㉮PᾺV鵸A\\g*à¡—9슟晭+ͧↀ쿅H\u001c꾣犓}癇æ›á—¬é»©äŸ˜X梑é†e>rä°‚f矩'-î½7ä¡­æ¡¥Dz兔V9è°¶å±…ãºá”Šä©¯ë².\u001eL0ὅㅷ釣": [{
- "<쯬Jå·^숞u࠯䌗艞R9닪gã¾ë³Ža䂈歖æ„:%é”|ﵤ|y}î¡»>;2,覂⶚啵tb*ä»›8ä¹’ã“¶B࿠㯉戩oX 貘5V嗆렽ë‚߼4hä§›êºM空\\b꿋貼": 8478577078537189402,
- "VD*|吝z~h譺aᯒ": {
- "YIì·¢K<\/濳xNne玗rJo쾘3í•°é´Š\"↱AR:ࢷ\"9?\"è‡ï¦¡)?誚êŠe)_D翾W?&F6J@뺾ê°NZ醊Z쾈വHï±å¶¿?炫㷱鬰M겈<bïž²S}㎥l|刖k": {"H7鷮퇢_k": [
- true,
- "s㟑瀭좾쮀â‘î¬Yì°ºk맢戲쀸俻àº6å„®ë—æ‰–puߖꜻ馶rꈞ痘?3ྚ畊惘䎗\"vv)*臔웅鿈䧲^v,껛㰙J <áš¶5",
- 7950276470944656796,
- 4.9392301536234746E17,
- -4796050478201554639,
- "yꬴc<3㻚",
- "oå¡\u20a4蒵鮬裢Cá´§nBã­±f.",
- false,
- [
- false,
- "ã¡å¼‘V?瀆䰺q!출㇞yᘪ꼼(IS~Ka 烿ꟿ샕桤\u0005HQҹ㯪罂qè¾âš‡æ‡‹â¦•ë‘¡v",
- 1862560050083946970,
- "\u20b6[|(ë­¹gê’펉O轄Dl묽]ﯨ髯QEbAã’¾m@롴礠㕓2ë•«n6ْ엘঵篳R잷꙲m색摪|@ã¿«5aK设f胭r8/NI4ì¶«æ µ\\꯬2]",
- false,
- {
- "\u000b7*ã™›ç‡.~?䔊pæ•e_拺艿ë·f{ê”»1sé©™`$Ė戧?q⋬沭?å¡·á­šè¹€unoa5": {
- "Sê·¯o紞㾕ᅶä¾î—¶éЇ12|ÊŸç•´ï–iNAo?|Sw$M拲գ㭄紧螆+,梔": null,
- "ã­š0?xB疱敻ேBPwv뾃熉(Ó pJ]ê°¢\"Bj'\u0016GE椱<\/zgៅx黢礇h},M9ï´¦?LḨ": "Si ïŸB%~㬒E",
- "핇㉊살ã¢ìˆ¨~ȪRo䦅D桺0z]﬽蠆c9ᣨyPP㿷U~ãž?쯟í¸å®’뉆U|}㉓郾ࣻ*櫎꼪ä—s?~7\u001e㘔h9{aáž‹}:ã¶’P8": [{"\\R囡ì¬nNæŸ‹çØ›7ì¹¾ :㶃衇徜V æ·±f1æ·â™ i?3Sè§’íž^ᆞ\u20e8á¹°D\u0007ç§¡+躒臔&-6": {
- "䨑g.fhã”—=8!\"狿ൻLU^ë»±g䲚ã»'W}k欤?๒鲇S꧗䫾$ĥ피": -794055816303360636,
- "外頮詋~텡竆î™ç¹ƒä©è‹¨ë¾ºæœê¼ƒç˜¹f*㉀枙NH/\u2027ê¢}j묎ïƒvペq︉ì‹ëœ¡Od5 N顯ି烅仟Qfㆤ嚢(i䬅c;ë§§?嶰㩼츱ç¡?-": {
- "e݆ã¡â¬¬î›–'2ã»’?U篲鿄\"隻Ҭ5NꭰꤺBꀈ拾᩺îº[刯î…5곑Na램ﴦ዆]ã“qwé’„\u001b\"Yæ´Šä—¿î¼ç¥å¡¥è¿µ[⼞⠳P$ê ±5먃0ï¦`": [{"ç°Eè³ï«šb먭N긆Ⰹå²2逶ꜛ?H짉~?P}jj}ä¾·ç¿_T>á­¨b,â»éˆµP䕡䀠८ⱄ홎鄣": {
- "@?k2é¶–ã‹®\"Oರ K㨇廪儲\u0017ä¾î¿‚J?);\b*묀㗠섳햭1MC V": null,
- "UIICP!BUA`î€á¢ˆã‹¸~袩㗪⾒=fBï®´l1ꡛ죘R辂여ҳ7쮡<䩲`熕8é ": 4481809488267626463,
- "Y?+8먙ᚔ鋳蜩ï–럶1㥔y璜౩`": [
- null,
- 1.2850335807501874E-19,
- "~V2",
- 2035406654801997866,
- {
- "<숻1>\"": -8062468865199390827,
- "Mã¿£ï€E]}qwG莎Gná¶(ê”™\\D⬲iꇲs寢t駇S뀡ꢜ": false,
- "pê¤ãŽ9W%>M;-Uç’fî£(^j1?&RBéš§ å¿“b똊îƒE": "#G?C8.躬ꥯ'?냪#< 渟&헿란zpo왓Kj}é·§XﻘMツbä•–;㪻",
- "vE풤幉xz뱕쫥Ug㦲aH} ᣟp:鬼Yá°Ÿ<Fɋ잣緂頒âºä‰²ç‘‘ä…‚,C~Þ…G!f熢-B7~9Pqà¡¢[츑#3ꕎ,Öඳèâ©…ãµ§ì¶€ë¿xyäŒÍ‚tdj!箧᳆|9èš¡ë¬": -2.54467378964089632E17,
- "䵈䅦5ë¹–,궆-:໿댾仫î»0ᙚyá¦hqáš„": null,
- "侯Y\"湛졯劇Uì…ŽYXçâ…¸2ä¼´|ç­§\\ä’ã¶¶á·ì‘WaᦵᗱãœëŠ¾è† <Jc63<G\u20fe䇹66僣k0O\"_@U": null,
- "姪y$#sæ¼´JH璌Ӊ脛Jã¾íŽ”ï¹´oꈶ㚸PD:薠ì–%說ážè¹‚1]⾕5튄": {
- "á¾Huw3䮅如쿺äŸå«]<鰨ݷ?꯯䫓傩|á¶à·ƒåª½\\澒≡闢": "Mm\"ì‡á¯„졽\"楇<\/ꥆí­å±€néš´@é¿£wâ Š4Pï«å¾ŽW㊋;䤞'.팇è’ä¡´egpxå—Žwà®…ç—å ®á›nË︖䀤4å™™?໚éƒá±‹Þ˜à¥Žtæ‘姫籕殥ï­é™ƒ\"4[ê¬qL4Wê Žx",
- "ℇjéŒïš›5Bë’š\" U": "ç¡„ê˜{憠êµ:&t䌨m Cઌ쿣鞛XFê Ÿsä­ï¶ƒ\"æ ¼a0x闊昵å²L\\æšèˆaê¸j싹ç…\"î ²çŸï±¡é¦†*êµ–ç³ <ê”躎",
- "톌賠弳êŸb\"èž–X50sĶ晠3fç§‚å¯Iⓟ:è˜": 5.573183333596288E18,
- "%䴺": [[[[
- -6957233336860166165,
- false,
- null,
- {
- "\"ïŸ\\௮茒袀ᕥ23ୃ괶?䕎.嚲◉ãžL+ᵡ艱hL콇붆@": null,
- "%螥9ꭌ<\/-t": true,
- ",9|î«è€¢æ¤¸ä“Xk죱\u0015$Ώ鲞[ï’—?ì—¢á²í˜ªì¦ˆâ´‚â–‚â„´ã—¯\"gî´ëº˜\\êœ#\u0002ヮ}ሎ芲P[鹮轧@냲䃦=#(": 2.78562909315899616E17,
- "R?H䧰ⵇ<,憰쮼Q總iR>H3镔ᴚ斦\\é‘r*2橱Gâ¼”F/.j": true,
- "RK좬뎂aí™ f*f㱉á®â¦‹æ½™ã¨‹Gu곌SGI3Ië¿\\F',)t`è蘯囯ﮉ裲뇟쥼_ገ驪▵æ’ᕤV": 1.52738225997956557E18,
- "^k굲䪿꠹B逤%F㱢漥O披M㽯镞竇霒i꼂焅륓\u00059=皫之눃\u2047娤é–銤唫á•b<\/w踲䔼u솆맚,ä’á³'/it": "B餹饴is権ꖪ怯ꦂẉဎt\"!凢谵⧿ï™0\\<=(uLä·åˆ¨ì‘ª>俆æ“Cy襸Q힆䆭涷<\/á±0î É§îŠ‹䗾䚹\\ኜ?ꄢᇘ`ä´¢{囇}᠈䴥X4퓪檄]ꥷ/3謒ሴn+gé¨X",
- "GgG꽬[(å«“ëª6\u0004ê¶宩㙻/>\u0011^è¾dTè…ªhxÇ‘%ꊇk,8(Wâ§‚çµP鬜O": [{
- "Mã´¾c>\\ᓲ\u0019V{>ꤩ혙넪㭪躂TS-痴໸闓âµ/徯O.Mã¥Ê·D囎⧔ì³íœ¤T??鉬뇙=#ꢫ숣BXä­¼<\/d똬졬g榿)eꨋﯪ좇첻<?2K)": null,
- "Z17縬z]愀䖌 ᾋBCg5ë”’êµ­æ†ê¾“aâ²·í„·u:U촳驿?雺楶\u0001\u001c{q*á°—è‹‘B@kæ°z.*è“—7ረIm\"Oá±@7?_": true,
- "㺃Z<": -4349275766673120695,
- "휃䠂fa塆ffixKe'ë¬é—੄뺾w࠾鑎kë•¢m*á‚‘î§·í–žé®6攊&虜h黚,Yä±³Sﭼ둺pN6": [
- false,
- "IΎ䣲,\"ᬮ˪癘P~Qlnxå–Sᮔ༬˨IçŒm䜛酛\u0003iê¸ã¦§cQ帲晼D' \\(粋ï›wQcN\\ëµ°è·ˆ",
- [
- "D0\\L?M1ì¥KaêŒsd+盌귤憊tz䌣ëŒ×‘Oå‚wÏ¢%á½’gpî•—,Aiï™âŽ§á¶†Iî«˜é¤¾ê¦æ£©å˜…᳉怴%m]á¶is纖D凜镧o심b Uî»·",
- {
- "?଼\u0011Rv&^[+匚I趈T媫\u0010.䥤ᆯ1q僤HydⲰl㒽K'ᅾiౕ豲초딨@\u0013J'쪪VD౼P4Ezg#8*㋤W馓]c쿯8": false,
- "c/擯X5~JmKäµ¶^ìŽà´š|B|u[ì†(X뚤6v}W㤘⠛aR弌臌쾭諦eⒷ僡-;㩩⭖ⷴ徆龄갬{䱓ᥩ!ï¯âŠšá‡¨<v燡露`:볉癮꨽り★Ax7Ꮀ譥~舑\\Vê‹\"$)v": "e&sFF쬘OBï–†d슊寮f蠛জ봞mn~锆竒Gè„\"è¶µG刕䕳&L唽붵<\/I,X팚Bâ¥î¼¶X,kԇҗ眄_æ…¡:U附ᓚAè•§>\u001a\u0011\";~쓆BH4勿”Š7힪",
- "iT:L闞椕윚*æ»›gI≀Wਟඊ'ꢆ縺뱹鮚Nê©á§¬è•¼21줧\\䋯``â\\ã±é³¨": 1927052677739832894,
- "ì®ç¼¦è…ƒg]礿Y㬙 fî¼ãƒºSɪ꾾N㞈": [
- null,
- null,
- {
- "!t,çY 1䗉罵?c饃호䉂Cá­ì’˜z(즽sZG㬣sഖE4ï‚뢜㓕äžä¸®Qpç°6EZឪ겛fx'ꩱQ0ç½£i{k锩*㤴㯞r迎jTⲤ渔m炅肳": [
- -3.3325685522591933E18,
- [{"ã“5]A䢕1룥Bï²C?Ꙍ`r룔Ⳛ䙡uä¼²+\u0001àµo": [
- null,
- 4975309147809803991,
- null,
- null,
- {"T팘8Dﯲ稟MM☻㧚䥧/8ﻥ⥯aXLaH\"顾S☟耲ît7fSà·‰ë†ë®”/ꕼ䓈ìº4\\霶䠴ᩢ<\/t4?죵>uDï›5➶༆쉌럮⢀秙䘥\u20972ETR3æ¿¡æ†vB? ~鸆\u0005": {
- "`é––mç’㥉b뜴?Wf;?DV콜\u2020í‰à±“æ“å®ZMj3mJ먡-å‚·ë±™yח㸷꥿ ໘u=Mì!5å­L4v\\?ÇŽ7C홫": null,
- "|": false,
- "~Ztᛋ䚘\\æ“­ã—傪Wé™–+ã—¶qᵿ蘥ᙄp%䫎)}=â ”6ᮢS湟-èž¾-mXH?cp": 448751162044282216,
- "\u209fad놹j檋䇌ᶾ梕ã‰bוּ<dä—±:줰Mé…„\u0000X#_rç¢A饓ê—ÙKo_è·”?ᪧ嵜鼲<": null,
- "ꆘ)ubI@h@洭Ai㜎ä±k\u0003?Tä‰3é—´%j6jæ£j=â\\U毮ᬹ*8䀔v6cpjâ­¬~Q꿾뺶ï‰íŽµæ‚¡!ì©­åŽl六㽫6퇓ޭ2>": {"?è‹´ê© D䋓帘5騱qï±–PF?☸ç—é¡’yU á¡«cb䫎 S@㥚gꮒ쎘泴멖\\:Ié®±TZ듒ᶨQ3+f7캙\"?\fí’¾\\oæžç´Ÿï»½M.âŽï˜¸é‘OP": [
- -2.6990368911551596E18,
- [{"ä’–@<á°¿<\/⽬tTrè…ž&G%᳊秩蜰擻f㎳?Sãµ§\r*k뎾-乢겹隷j軛겷0ë£é®ï µ": {")DO0è…¦:ì¶é€¿:1㥨่!è›æ¨‹2": [{
- ",ꌣf侴笾m๫ꆽ?1?U?\u0011ꌈꂇ": {
- "xæ—ç” nVqä…¦w`CD⦂惺嘴0I#vỵ} \\ê·‚Së´Dì–¾?Ô’j溯\"v餄a": {
- "@ç¿™c⢃趚痋i\u0015OQâlqë†Y0pࢥ3쉨䜩^<8g懥0w)]䊑næ´ºo5ì­QL댊랖L镈Qnt⪟㒅십q헎鳒⮤眉ᔹ梠@O縠u泌ㄘb榚癸Xî©­Þ”Ftj;iC": false,
- "I&뱋゘|ï£è“”䔕측瓯%6á—»HW\\N1貇#?åƒá—œghá­ªo'䗈꽹Rcìš/蔳迄à¼!0邔䨷푪8ç–©)[쭶緄㇈୧á": {
- "B+:ꉰ`sì¾­)ë¹¼Cç¾A䫊pMgjdxäHf9᥸W0!C樃'ï¤f䫤סи\u0017Jve? è¦f둀⬣퓉Whk\"஼=չï³î•¤çš†ç¬BIW虨쫓F廰饞": -642906201042308791,
- "sb,XcZ<\/m㉹ ;䑷@c䵀s奤⬷7`ꘖ蕘戚?Feb#輜}p4nH⬮eKL트}": [
- "RK鳗z=袤Pf|[,u욺",
- "Ẏá»ç½¯ë‰‹âº–锅젯㷻{H䰞쬙-ì©“D]~\u0013Oã³¢gb@æ¶è”‰|kᦂâ—!\u001ebMè¤sca쨜襒y⺉룓",
- null,
- null,
- true,
- -1.650777344339075E-19,
- false,
- "☑lꄆs힨꤇]'uTന⌳ë†].1â‹”ê´æ²°\"IWà´©\u0019æ°œ8쟇䔻;3衲æ‹,窌zíŽå–íš—?4?Cë„é—®?ᥙ橭{稻Ⴗ_ì”",
- "n?]讇빽å—}1å­…9#ê­¨é¶v\u0014å–ˆ)vw祔}룼쮿I",
- -2.7033457331882025E18,
- {
- ";⚃^㱋x:饬ኡj'ê§µT☽O㔬RO婎?향ᒭæ©$渣y4i;(Q>꿘e8q": "j~錘}0g;Lèº*;á•­ê„®0l潛烢5H▄쳂ê’ï­‹ê™¶T犘≫x閦웧v",
- "~î¢æ¯\u2018c4è·ë E~ᑅቚꈂ?nq뎤.:æ…¹`F햘+%鉎Oç€œìŸæ•›è®âŒæµ¢<\/㮺紿P鳆ࠉ8I-o?#jﮨîŸ7v3Dt赻J9": null,
- "à£W䌈0êŽqC逖,íš…î·Žcáƒswj;jJSæ«5æ§—OaB>D踾Y": {"ã’°äµF%î©®?59.î„„ãˆcᕨï†í•틎á¸ã‹©B=9IÛⓌ{:9.ywï½å‘°ã†®è‚’᎒tIã¾´62\"ዃ抡C﹬B<\/<EO꽓ᇕu&é‹«\\禞í¹uê’.7훯ಶ2䩦͉ᶱf깵ᷣ늎": [
- 5.5099570884646902E18,
- "uQNæ¿¿m臇<%?谣鮢s]]x0躩慌闋<;(î³¥ 鋤.0á µd1#벘a:Gs?í–·'.)ㅴ䞟ç¯å´ˆFS@O㌛ᓬ抢íŒáž¾ëƒ·ì¿Ÿíˆ¥IZn[惵ê§3ë™[&v憙J>ì´‹jo朣",
- [
- -7675533242647793366,
- {"ᙧ呃ï£:[㒺쳀쌡ì‚H稈㢤\u001dá¶—GG-{GHྻຊꡃ哸䵬;$?&d\\⥬ã“Nåœ´ë¤æŒ¨-'ê•®$î“‹PU%?冕눖ié­q騎Q": [
- false,
- [[
- 7929823049157504248,
- [[
- true,
- "Zè™\u0017'eꕤ᱕l,0\\X\u001c[=雿8è ¬L<\/낲긯W99g톉4ퟋbãº\u0007åŠ'!麕Q궈oW:@XáŽïœ¬z蘻m絙璩귓죉+3柚怫tSæ‡è’£ä -æ“¶D[0=퉿8)q0ÙŸ",
- "唉\nFA椭穒巯\\䥴䅺鿤S#bè¿…ç˜ ï¶—ê¬˜\\?q1qN犠pX꜅^䤊⛤㢌[⬛휖岺q唻ⳡí‹\"ã™™Eh@oA賑㗠yå¿…Nꊑᗘ",
- -2154220236962890773,
- -3.2442003245397908E18,
- "Wᄿ筠:瘫퀩?o貸q⊻(᎞KWf宛尨h^残3[U(='橄",
- -7857990034281549164,
- 1.44283696979059942E18,
- null,
- {"ꫯAwè·­å–€ ?_ï““9\"Aty背F=9缉ྦྷ@;?^鞀w:uN㘢Rá»": [
- 7.393662029337442E15,
- 3564680942654233068,
- [
- false,
- -5253931502642112194,
- "ç…‰\\îš¶î¶è¾Žî›¢à³†ç½5â’­1äªäƒ‘s䎢:[e5}峳ﴱn騎3?è…³Hyêƒè†¼N潭錖,Yá‹ËœYAá“㬠bG렣䰣:",
- true,
- null,
- {
- "⒛'P&%죮|:⫶춞": -3818336746965687085,
- "钖m<\/0ݎMtF2Pk=瓰୮洽겎.": [[
- -8757574841556350607,
- -3045234949333270161,
- null,
- {
- "áœî…½rè¼³>⫇9hU#î¦#w@ê·ªA\\Cî’¢ é‹ºã˜“ê–æ¢’뒬묹㹻+郸å¬ìœ¤'+g<\/碴,}ꙫ>ì†;情d齆Jä¬àº©æ’›ì±íƒ¹/R澡7剌tꤼ?ặ!`â²ç¤\u00002똥଴âŸ": null,
- "\u20f2ܹe\\tAê¥Æ°\\x当뿖ï»ë ‰ç¦›;G檳ﯪï…Sà«°3~㘠#[J<}{奲 5箉⨔{ë†<\/釿抋,åš /曳m&WaOvT赋皺璑ï“í…": [[
- false,
- null,
- true,
- -5.7131445659795661E18,
- "è­m䓪D5|3å©à°ž>î‰è ‡æ™¼6nï´ºPp禽羱î¤DS<ç“닫屚ì‚å§¿",
- true,
- [
- -8759747687917306831,
- {
- ">ⓛ\t,odKr{䘠?b퓸C嶈=DyEᙬï¿@ᴔ쨺芛髿UT퓻春<\/yê¸>豚W釺N뜨^?꽴﨟5殺ᗃç¿%>í‚ဿ䄸沂Ea;A_\u0005閹殀W+窊?Ꭼd\u0013Pæ±´G5ì“æ˜": 4.342729067882445E-18,
- "Q^즾眆@AN\u0011Kb榰냎Y#ä€ê€’ᳺ'q暇çµs\"!3#I⊆畼寤@HxJ9": false,
- "⿾D[)袨㇩i]웪䀤ᛰMvR<èŸã£¨": {"v퇓L㪱ꖣ豛톤î£\\ê³±#ï–©kDTN": [{
- "(ì¾´ä¡£,寴ph(C\"ã³¶w\"憳2s馆E!n!&柄<\/0Pꈗſ?㿳Qdéµ”": {"娇堰孹L錮h嵅⛤èºé¡’?CglNæŸ+쨣ﺜ\\MrH": {"çžäŽ‡ë‘ƒá‰²å¼­íŒ­^ꄞ踦涟XK錆쳞ឌ`;੶S炥騞ଋ褂B៎{Ú’ä­·á¶¼éœpIè—è™¶K$": [{"â—–S~躘蒉꫿輜è­Qã½™é—@ᢗ¥Eæ¦iØ¡5┄^B[絮跉ᰥé™PWi3wㄾⵀDJ9!w㞣ᄎ{ë“’ê““b6\\篴??c⼰鶹⟧\\鮇ꮇ": [[
- 654120831325413520,
- -1.9562073916357608E-19,
- {
- "DC(æ˜è¡µá¼¡ê¸™ê°µå§­|Ö›[t": 7.6979110359897907E18,
- "Jâ…))嫼â³9Xfd飉j7猬ᩉ+⤻î®çœ—벎Eé°‰Zï¾¶63zá69}Zá¶L崭ᦥ⡦éšâ‹›êŽ¨î´µ~i㨃咊ꧭo䰠阀3C(": -3.5844809362512589E17,
- "p꣑팱쒬ꎑ뛡Ꙩ挴æèƒ”&7ᔈ묒4Hdç¡¶í›ãŽ–zꢼè±ã¿¢aሃ=<\/湉鵲Eî„¡Ó…%$F!í¶æ£Œå­¼{Oé§à¨ºgeu+": ")\u001bìž“kÅ€Xì©«Aë°Â®Ú£ç™¦ç‹¢)扔弒p}k縕ꩋ,䃉tࣼi",
- "ã‚¡F肿輸<솄G-䢹䛸êŠl`Tqê•—îŠè’ža氷⸅ᴉ蠰]S/{J왲m5{9.uá½³~㕚㣹u>x8Uè®Bëºè¥ªç›ŽQhVS맅킃i识{벂磄Ià·„ä™…xZy/æŠà«­Zï–Šé²î¦š-霳Væ®æŒ¦â„’": null,
- "㯛|Nî½™ê¸b7âµb?æ‹ O\u0014Þ†?-(EꞨ4ꕷᄤYᯕï‘OW瞺~螸\"욿ќ<u鵵઎⸊î˜å€¾ì‘·à·»rT⪄牤銱;W殆͢芄ਰåší›šìƒ¢î™‡âŠ¿+ã²½": null,
- "å˜ïƒé€†àº»%_ë§›d)zJ%3ì¹§_릟#95䌨怡\u001ci턠ॣî’i冘4èµ–'à¨ä§_æ ”!": {
- "*?2~4㲌᭳ì¯ftá‚·1#oJ\bäŠ‡é•‡ë” \u2079xä›ãŠá®‚N;穽跖s휇ᣄ홄傷z⸷(霸!3yëºMì’¿í–Û½v㳉tở心3黎vì­» Rp཮Vr~T?&Ë´k糒븥쩩r*D": null,
- "8@~홟ꔘk1[": -5570970366240640754,
- "BZté¦ê¡¬c餖 s(má›´\u0000◄dè…‘t84CâŸå¯VṊ뉙'å™±ê”ç½GCé¡€?허0êž¹&ë‡ä›­Cä·«](": 2.4303828213012387E-20,
- "yæ’”Z외放+}ḑ骈á™&\u0016`G便2|-e]঳?QF㜹YF\"ã¿’ç·„í–·ï€ãˆŸïƒ¦ï¨ä·¦à­€áŒ¤lM蘸N㾆▛럪㞂tᕬ镈ì‡å– l amcxPnm\u001a᱋<\/]_]ﻹïª?H": false,
- "áæ°ë¬¢뜚I[♺뽛x?0Hë´¬Wpn꨹Raä¿ïŒ›ìŒ‘{㴂ni祻윸A'y|⺴ᚘ庌9{$æ²{톽=m#@ï–—6ᨧfgs44陎J#<Ễ쨓瀵â©a୛㷉㙉ܸ◠냔嬯~å‘„ç±ç¾¥é•³": false,
- "㘱{<é ¬22?IF@곊I겂嶻Lá›D{@rì’‚?IAᣧ洪惒誸b徂zì·ºê¾ã ­\\刊%禨ìŒâ¶£ä»µ\\P[:47;<ᇅ<\/": {
- "^U釳-v㢈ê—â—„è˜rᜨi;èµ·kR犺䵫\u0000é”ì™m-Ô™!lḃ꛸뻾F(Wê·›y": "#á ºH㸢5v8_æ´‘C",
- "䔵໳$á™ 6èž\u206e摎q圩P|æ…sV4:㜾(I溞I?": -6569206717947549676,
- "é€êž‚ç·µí‡8 >e㺰\"'㌢ÆW\u0004çž•>0?V鷵엳": true,
- "뤥G\\î¡‹è¿‹ä ¿[庩'꼡\u001aiá©®Vì¯á³ªä¦ªÃ”î²…;倱ନë›èªˆ": null,
- "쥹䄆䚟Qæ¦äŽá¢­<\/2ã•£p}HW蟔|äƒî‚꿈ꚉ锳2Pb7㙑Tⅹᵅ": {
- "Y?Ö­$>#cVBꩨ:>ï†eLè’å‹™": {
- "86柡0po äš&-æ‘Ћ祌<\/휃-G*㶢הּì©s㶟餇c걺yu꽎還5*í„§ç°•Ogå©¥Sê": null,
- "a+葞h٥ࠆ裈嗫ﵢ5輙퀟ᛜ,QDﹼ⟶Y騠锪E_|x죗j侵;m蜫轘趥?븅w5+mi콛L": {
- ";⯭ﱢ!ä¹°Fâ½æŸ¤é¶‚näµ£V㫚墱2ë ¾ELEl⣆": [
- true,
- -3.6479311868339015E-18,
- -7270785619461995400,
- 3.334081886177621E18,
- 2.581457786298155E18,
- -6.605252412954115E-20,
- -3.9232347037744167E-20,
- {
- "B6㊕.k1": null,
- "ZAꄮJ鮷ᳱo갘硥鈠䠒츼": {
- "á•…}럡}.@y陪é¶r業'æ´î‰°í€‰x䉴ﵴlí˜):씭脴ᥞhiꃰblﲂ䡲엕8߇Mã¶­0燋標æŒ-?PCwe⾕J碻Ᾱ䬈䈥뷰憵賣뵓痬+": {"aì·©v礗X⋈耓áŠfç½…é®!㔽YYᣓwæ¾33⎔芲F|\"äœT↮輦挑6ᓘL侘?ᅥ]ë†1R௯✎餘6ê½<\/௨\\?qå–·ê«j~@ulq": {"嗫欆뾔Xꆹ4H㌋Fåµ§]à Ž]ã –1ꞤT<$më«O i댳0ä²iï—Œ": {"?à·©?\u20cd슮|ꯆjs{?îž…d7?eNs⢚嫥氂䡮쎱:鑵롟2hJꎒﯭ鱢3춲亄:ë¼£v䊭諱Yj択cVmR䩃㘬T\"Ní™*ै%x^F\\_s9ë³´zz4æ·—?q": [
- null,
- "?",
- 2941869570821073737,
- "{5{殇0ä¾ïž¢g6ë°–í‹è‡©ç¶¹R$ä–­j紋釰7î‹‘sXI繳漪행y",
- false,
- "aH磂?뛡#惇då©…?Fe,ì˜+늵ä˜\"3r瘆唊å‹ï¢Šj⳧࠴ꇓ<\/唕윈x⬌讣䋵%拗ᛆⰿ妴á”M2ã³—å¿…ê§‚æ·²?ゥ젯檢<8ë’ï¶MidXä’3á³»Qî”â–®ä½UT|⤪봦éâŠ",
- [[{
- "颉(&뜸귙{yîš’^\"P퟉ì¶á²Ÿä®­î‹ºDé¡¡9=?}Y誱<$bë±£RvO8cH煉@tk~4ǂ⤧â©å±‹Sî›ïž¢S;J{vV#剤餓ᯅc?#a6D,s": [
- -7.8781018564821536E16,
- true,
- [
- -2.28770899315832371E18,
- false,
- -1.0863912140143876E-20,
- -6282721572097446995,
- 6767121921199223078,
- -2545487755405567831,
- false,
- null,
- -9065970397975641765,
- [
- -5.928721243413937E-20,
- {"6ì´Š\u001a홯kB0w撨燠룉{绎6⳹!í„è´‘y▾鱧ժ[;7ᨷ∀*땒䪮1x霆Hᩭ☔\"rî¹›ä7毟á°r惃3ꉭE+>僒æ¾": [
- "Ta쎩aÆt쵯ⰪVb",
- [
- -5222472249213580702,
- null,
- -2851641861541559595,
- null,
- 4808804630502809099,
- 5657671602244269874,
- "5犲﨣4mᥣ?yf젫꾯|䋬ìž$`Iⳉﴷ扳å…,'î±c",
- false,
- [
- null,
- {
- "DyUIN쎾M仼惀⮥裎岶泭lh扠\u001e礼.tEC癯튻@_Qd4cï…«5S熯A<\/ï¼¼6U윲蹴Q=%푫汹\\\u20614b[௒Câ’¥Xe⊇囙b,ï®æœ3ss땊ë¢i~逇PA쇸1": -2.63273619193485312E17,
- "Mq꺋貘k휕=nKç¡ë«žè¼©>㾆~á¼žà¡¹ê¸æ¦µlâ‹™Hw뮢帋M엳뢯î¹…vâ…ƒ^": 1877913476688465125,
- "á¶´ë»—`~ç­—å…⚽টW˃â½b犳䓺Iz篤p;乨A\u20efì©?ç–Šmã€ì»©ë«¡b탔鄃ᾈV(é¢ç³=뎲ିeF仢䆡谨8t0醄7㭧瘵⻰컆r厡궥d)a阄á·Ed&c﯄伮1p": null,
- "â¯w4曢\"(欷輡": "\"Má­«]䣒頳B\\燧ࠃN㡇j姈g⊸⺌忉ꡥF矉স%^",
- "㣡Oᄦ昵⫮Y祎Sì級㭻撥>{I$": -378474210562741663,
- "䛒掷留Q%ì“—1*1J*ë“헩ᦢ﫫哉쩧EↅIcê…¡\\?â´Šl귛顮4": false,
- "寔愆샠5]ä—„IHï©¥=d﯊/å¶?ॊn%晥D視Nò—˜ˆ'᫂⚦|X쵩넽z질tsî¦kxDQ莮Aoﱻ뛓": true,
- "钣xp?&\u001e侉/y䴼~?U篔蘚缣/I畚�Q绊": -3034854258736382234,
- "꺲໣眀)â¿·J暘î©pИfAVì‚•ì³­Nꯗ4々'唄ⶑ伻㷯騑倭D*Okï¯ê§3bâ½_ï„¡<\/ì±£Xm톰á•䆄`*fl㭀暮滠毡?": [
- "Dç”·p`V뙸擨å¿ë¸ª9c麺`淂⢦Yw⡢+kzÜ–\fY1䬡Hæ­)ë²¾Z♤溊-혰셢?1ï”<-\u0005;æ¢Tále\\ᛵߓﭩ榩<QF;t=?Qꀞ",
- [
- null,
- [{"-ì·«æ²î«§á¬¨å¢Šè‡¸<à ’Hè·¥ 㔭쥃㫯W=z[wধ╌<~yW楄S!â‘»h즓lÄ–N￧篌W듷튗乵᪪템먵Pf悥ᘀk䷭焼\\讄ræ“é¬y6VF<\/6ëž¿p)麡ê ãª\"pà®´e": [
- "#幎æ´é¢’嶈)ã„›J.嶤26_⋌东챯ꠉ⤋ؚ/âš%ç§¼Q룠QGztᄎ㎷អIç¿°Xpç”éœê¨",
- {",T?": [
- false,
- [[
- true,
- 7974824014498027996,
- false,
- [
- 4.3305464880956252E18,
- {
- "᱿W^A]'rᮢ)é¥zï­é¤;Hu\\Fk?ï´º?IGæµ…-ä™§>è¨-xJ;å·¡8깊è ï»“U$K": {
- "Vê•¡è«…æ“W=斸s︪vﲜ츧$)iꡟ싉eî®å¯³?ጭムVથ嵬iæ¥Fg<\/Z|៪ꩆ-5'@ꃱ80!燱R쇤tç³³]罛逇dṌ֣XHiͦ{": true,
- "Ya矲Cë©—Q9膲墅æºíœ»c\\ë”¶Gç””<\/.齵휴": -1.1456247877031811E-19,
- "z#.OOï¿J": -8263224695871959017,
- "å´_3夼ᮟ1Fë¸ë½¯á¦“é´­V豈Ь": [{
- "Nè’¬74": null,
- "yuB?厅vK笗!ᔸcXQ旦컶P-ë…«mᄉ麟_": "1R@ 톘xa_|﩯é˜î¥§sæ§žd!d껀筤⬫è–焵먑D{\\ïƒïŽ¿6k共倌☀G~AS_D\"딟쬚뮥馲렓쓠攥WTMÜ­8nX㩴䕅檹E\u0007ï­¨N 2 ℆æ¶ê¥ê µï“3▙玽|ë¨_\u2048",
- "æA Cä§©G": {":Mí£5e들\\ê€æ¼á”„é¸|Iï¨$)n": {
- "|U䬫㟯SKV6ꛤ㗮\bn봻䲄fXT:㾯쳤'笓0b/à³¢Cì³–?2浓uO.ä°´": "à½ê¼‹e?``,ᚇæ…^8ꜙNM䂱\u0001Iá–™ê§M'vKdꌊH牮r\\O@䊷ᓵ쀆(fî »yè»i툺\"?<\/峧ࣞ⓺ᤤ쵒߯ꎺ騬?)刦\u2072læ…ªy꺜ﲖTjî’•+u",
- "뽫<G;稳UL⸙q2n쵿C396炿Jè“¡zâ£zဩSOU?<\/ë™oEí¸Oé¿…à·´êˆEm#\"[瑦⤫á†glâ¡—q8\"í˜ë¥ä¿‚@ᆤ=\u0001爖ç¾ì·€ã¸©b9\\jeqt㟿㮸龾m㳳긄": {
- "9\"î²–V霟釜{/o0嫲Cå’€-饷äˆ[ë…©î)\r䤴tMW\\龟ϣ^ي㪙忩䞞N湆Y笕)è¨ê–¤èª¥ç…½:14â«»57U$æ“’ä²è–¡Qvↇ櫲현誧?nà®·6": {"l웾䌵.ä…‹ä¦ic碳g[糲Ƿ-ឈᚱ4ì‘§\u0004C࿼\u0018&쬑?멲<\/fD_檼픃pd쪼n㕊渪V䛉mæˆW儅톳뗳䓆7㭽諤Tç… ï–ŠNey?î¼…0᪵鈑&": [
- false,
- null,
- {
- "\rî´’;é¼¶já ‚ê¼RLz~â™”9gf?Ó¡æµ": -1.4843072575250897E-19,
- "&ꊒ\"ꋟä­E诮ﯚO?SWë’훪mb旙⎕ᗕ⶙|á·¤5y4甥": "j5|庠t铱?v íš‹0\"'rxz䃢æºêž«!\u0002",
- "Q á©ãŸ§": {"Hﬔ\u2058䪠틙izZㅛ탟H^ﶲA??R6å‘ Z솋R.à¿¶g8": [
- -8762672252886298799,
- -1.9486830507000208E17,
- null,
- -7157359405410123024,
- null,
- null,
- -995856734219489233,
- "呧㫹A4!",
- null,
- -1.9105609358624648E-19,
- 5888184370445333848,
- 2.25460605078245E-19,
- 2.5302739297121987E18,
- "뢹sbEfæµ2丯ï‡?뗾耸(Wdë™SବꭖrtU?ç­¤P똙Qpbbï‘¡KqaE$æ¥Vì›°3i/lK퉜,8︸e= gèž“t竦컼?.寋8éµ—",
- 7377742975895263424,
- 2.4218442017790503E-19,
- {
- "y꒚ཫ쨘醬킃糟}î‘yTSt䡀⇂뿽4ൢ戰U": [[
- 3600537227234741875,
- 4435474101760273035,
- -1.42274517007951795E18,
- -5567915915496026866,
- null,
- null,
- [
- -3204084299154861161,
- {
- "7梧慸æ†.a瘎\u00041Uéµ®CkÖ¨d惥è€â³¡Y,â­ì¨EåžFFI鱑ⳬ줢7â§µBﴠ耘줕햸qì»´~*ç‘W.떛ࡆ@'á€+è½³": -961121410259132975,
- "⥅]l黭㣓绶;!!⎃=朼ã¿e&ἂ繤C﯀lä£ãŒ€6TMì‘®w懃ꡡ#ᤆ䰓,墼湼゙뽸㲿䧽쫨xᵖ듨<\/ T0峸iQ:溫è„\\\"쎪ὴ砇宖^Mæ³¼í¥âž…鈫@ᄟ༩\u2008⥼": true,
- "â©\"籽汎P싯鲘蟼sRá¯ä…©\u0019R(kRá–&ಌ 0\"é³¶!馼YH": null,
- "鮼ꚇ싋։刟\rRLd步Nⴗ5Eࡆ訛갚[I醵NC(郴ṉy5D뤺౳QY壯5苴y훨(W\\Cଇ姚C艄깹\u001c歷㋵ZC᥂": [
- -6806235313106257498,
- null,
- "}N⸿讽sꚪ;ï‘¶\\p繇jè‹„î¡ä«¨\u20e7%5x?î•¥t#",
- {
- "O〗k<墻yV$à°rs-c1ఌ唪.C7_Yobᦜ褷'b帰mã„‘l⌅": {"qB뗗擄3éš‚5ëºæ«‚䱟eì´¸P/é©,3æŽê—©=冉棓㑉|ËžF襴뿴,:㞦<퓂⧙礞♗g뚎ᛩ<\/뉽ⶳ⸻A?_x2Iã½å‹’*Ií™±î¢é§ç²¿~曟㤙2绥Ly6+ìƒuu鿜בfí˜|æ­à£–É": [
- ">hh䈵î”w>1â²ì­V[â…Ž\\헑벑F_ã–⠗㫇hæ½;á¿æ±°á±¼ç€–J옆9RRì…vsZ柺鶶툤r뢱橾/ꉇ囦FGm\"謗ꉦ⨶쒿⥡%]鵩#ᖣ_蹎 u5|祥?O",
- null,
- 2.0150326776036215E-19,
- null,
- true,
- false,
- true,
- {"\faá­¶Pæ¤WWcá Ÿf뚉á¬í“—â³€Wç¹5:HXH=q7xì°™X$)모r뚥ᆟ!Jﳸf": [
- -2995806398034583407,
- [
- 6441377066589744683,
- "Mﶒ醹i)Gἦ廃s6몞 KJ౹礎VZ螺费힀\u0000冺업{è°¥'꡾뱻:.ꘘ굄奉攼Diá·‘Ké¶²y繈욊阓v㻘}枭캗e矮1c?íœ\"4\u0005厑莔뀾墓ë‚⽴洗ṹ䇃糞@b1\u0016즽Yè½¹",
- {
- "1⽕⌰鉟í”M㤭n⧴ỼD#%é˜âŠ¯ì¿¼ç¨ë¸£ëªç´§á…‡ã“•ᛖcw嬀~ഌ㖓(0r⧦Qä‘•é«à´°é“‚㓻Rå„®\"@ꇱmâˆà¯¿á¦¯é Œ8}㿹犴?xn잆꥽R": 2.07321075750427366E18,
- "˳b18㗈䃟柵Z曆VTAu7+㛂cb0﯑Wp執<\/臋뭡뚋刼틮è‹ë²²î·´TLP预庰܈G\\O@VD'鱃#ä¹–ëº*鑪ꬳ?MÞždï­¹{â‡åœ¯ì‡œã¼ž顄︖Y홡g": [{
- "0a,FZ": true,
- "2z̬è£î’®ê§¦é©¸\u0006L↛Ḣ4๚뿀'?lcwá„§ã®!蓚䃦-|7.飑挴.樵*+1ﮊ\u0010ꛌ%貨啺/JdM:ë˜ïˆ!FBe?鰴㨗0Oè´¢I藻ʔWAá«“Gì³›u`<\/I": [{
- "$Ï„5Vé´a뾆両環iZp頻යn븃v": -4869131188151215571,
- "*즢[⦃b礞R◚nΰꕢH=귰燙[yc誘g䆌?ଜ臛": {
- "洤湌鲒)⟻\\䥳va}PeAMnï¼®[": "ã³Éª/(軆lZR,Cpæ®È®Nå•·\"3Bå©´?i=r$펽á¤ì€¸",
- "阄R4㒿㯔ڀ69ZᲦ2ç™í•Œå™—På´œîž#\\-ì­è¢›îˆµ&é‘/$4ç«¥Vê©‘_ZHAæ¾¢fZ3": {"x;P{긳:Gé–‰:9?æ´»H": [
- "繺漮6?z犞焃슳\">á»[Ⳛ䌜ë…䂹>èµâ¼¶ç…œï’˜Yæ¡¥[泥뚩MvK$4ï‰jtï¾›",
- "E#갶霠좭㦻ୗ먵F+䪀oè’ba쮎4X㣵 h",
- -335836610224228782,
- null,
- null,
- [
- "r1᫩0>danjY짿bs{",
- [
- -9.594464059325631E-23,
- 1.0456894622831624E-20,
- null,
- 5.803973284253454E-20,
- -8141787905188892123,
- true,
- -4735305442504973382,
- 9.513150514479281E-20,
- "7넳$螔忷㶪}䪪lì§´\u0007é¹Pé°šHFéŠZJﳴ/âŽ1ᷓ忉ç‡áœ‹ì“ˆxëµ mä·çª¥á”^\u0019á¶Œå­#ヂt☆áƒpáŽè‡¶äŸ±5ï‰$ä°µ&๵分ìˆ]äˆë‰â™‚åŽ\u0011<>",
- "C蒑貑è—lï°°}X喇몛;të°¿O7/᯹f\u0015îµ¼kI嘦<ዴ㟮ᗎZ`GWퟩ瑹࡮ᅴB꿊칈??Ræ ¡s脚",
- {
- "9çµæˆ¬+AU^洘拻ቒy柭床'ç²™XG鞕᠜繀伪%]hï ¾C,$è¼™?Utä¹–Qmë–šWï¶8઼}~qâ ªrU䤶CQ痗ig@#≲t샌f㈥酧l;yé—¥ZHæ–¦e⸬]j⸗?ঢ拻퀆滌": null,
- "畯}ã§¢J罚å¸VX㨑>1ꢶkT⿄蘥ã‘o|<嗸層沈挄GEOM@-äžšä§°$만峬è¼ä ±V✩5宸-æ‚î¡§D'ã—ªyP掶7bâ ŸJã•»SfP?d}v㼂á…'猘": {
- "陓y잀v>╪": null,
- "鬿L+7:ë‘Y=ç„ U;킻䯌잫!韎ஔ\f": {
- "駫WmGጶ": {
- "\\~m6ç‹©K": -2586304199791962143,
- "ႜࠀ%Í‘lâ¿…D.ç‘¢Dk%0ç´ªdḨTI픸%뗜☓s榗኉\"?V籄7w髄♲쟗翛歂E䤓皹t ?)ᄟ鬲éœ6Cî³´": {
- "_ì·¤a圷1\u000eB-XOy缿請∎$`쳌eZ~æï€§íŠ»/蜞`塣৙\"⪰\"æ²’l}蕌\\ë¡ƒè«æ°Œ.望wZ|o!)Hnçqg}": null,
- "kOSܧ䖨钨:಼é‰ê­O醧Sî…¨`ì‹­`ꓭì­ï¯¢N&Et㺪馻ã¢â…³ã¢ºå´¡àºŠèœšé”«\\%ahx켨|ż劻ꎄ㢄ìŸA躊᰹p譞綨Ir쿯\u0016ﵚOd럂*僨郀N*bã•·63z": {
- ":L5r+T㡲": [{
- "VK泓ë²á®™Ry㓤➙Ⱗ38oi}LJቨ7Ó㹡৘*q)1豢⛃e᫛뙪壥镇æž7Gè—¯g㨛oI䄽 孂L缊ꋕ'EN`": -2148138481412096818,
- "`â›á˜‘$(खꊲ⤖á„ꤒ䦦3=)]Y㢌跨NĴ驳줟秠++då­³>8ᎊ떩Eê¡£Sv룃 쯫أ?#Eî·°|á­™ãŽ?zv:5ï©^â‹‘V": [
- -1.4691944435285607E-19,
- 3.4128661569395795E17,
- "ãƒì´—^G9ä½­é¾¶n募8R厞eEw⺡_ㆱ%⼨D뉄퉠2ê©µá›…â³æ¿L팹Là·€n=\"æ…‰ë…á›®y>!`g!í’²î¦ï¨’[/;?[vï®ê²è»‡}⤳â¤í•∌Tã½²R홓é‰ã“¥",
- "æ„°_⮹T䓒妒閤둥?0î°šaB@㈧gç„»-#~è·¬x<\/èˆPÝ„ê¡=\\׳P\u0015jᳪá¢qï‹¶;ã¯l%á­—;砢觨â–,è¬ê°Gy?躤O黩í‹Yã’a擯\n7覌똟_䔡]fJ晋IAS",
- 4367930106786121250,
- -4.9421193149720582E17,
- null,
- {
- ";ᄌ똾柉곟ⰺKpá‡ä±»à¸ºä–{o~h!ï½…ê¿àª»ìš„Úš\u0002y?xUd\u207c悜ꌭ": [
- 1.6010824122815255E-19,
- [
- "宨︩9앉檥pr쇷?WxLb",
- "æ°‡9】J玚\u000f옛呲~ è¼ 1D嬛,î•*mW3?n휂糊γ虻*á´«ê¾ ?qîžå‡è¶—Ko↦GTé“®",
- "ã¶¢ážmOã”k'诔栀Z蛟}GZé’¹D",
- false,
- -6.366995517736813E-20,
- -4894479530745302899,
- null,
- "V%᫡IIç’…ï»ä…›ä“Ží’¹ï±¢/pU9seë˜ë›žx梔~C)䨧䩻蜺(g㘚R?/á»°[å¿“C뾠ࢤc왈邠买?嫥挤풜隊枕",
- ",vç¢å–”㌲쟚蔚톬៓ꭶ",
- 3.9625444752577524E-19,
- null,
- [
- "kO8란뿒䱕馔b臻âŸéš¨\"㜮鲣Yq5mí”<u뷆cè­†\u001bN?<",
- [{
- ";涉c蒀ᴧN䘱䤳 ÿꭷ,핉dSTDB>K#ꢘug㼈á¦=P^6탲@ä§”%$CqSw铜랊0&m⟭<\/a逎ym\u0013îš¡vᯗ": true,
- "æ´«`|XN뤮\u0018詞=ç´©é´˜_sX)㯅鿻á»ì‹¹": 7.168252736947373E-20,
- "ꛊ饤ï´è¢(逊+~⽫얢鈮ï«è‰¬O힉7Dç­—S곯wæ“I斞᠈븘蓷x": [[[[
- -7.3136069426336952E18,
- -2.13572396712722688E18,
- {
- "ç¡¢3㇩R:o칢行E<=\u0018á¬YuH!\u00044U%å炼2>\u001eSi$â“·ê’ˆ'ï‘¿ë ¢gᙫ番ꯒ㛹럥嶀澈v;è‘·é„•x蓎\\惩+稘Uî“´Eᖸﳊ㊈壋Nå«¿â¾æŒŽ,袯苷ኢ\\x|3c": 7540762493381776411,
- "?!*^á¢çª¯?\u0001ڔꙃw虜ë³îšFgJ?&⨫*uo籤:?}ꃹ=ٴ惨瓜Z媊@ત戹ã”똩Ԛ耦Wtè½\\æž’^\\ꩵ}}}ꀣD\\]6M_⌫)Hè±£:36섘㑜": {
- ";í™—á°°U஋㙛`D왔ཿЃS회çˆ\u001b-㢈`ë´†?盂㛣듿ᦾ蒽_AD~EEຆ㊋(eNwk=RÉ å³­qï’«\"5Ἠ婾^>'ls\n8QAK<l_⭨穟": [
- true,
- true,
- {"ﳷm箅6qⷈ?ﲈ憟b۷⫉἞V뚴少U呡瓴ꉆs~嘵得㌶4XR漊": [
- "í†ä»‹fM暪$9K[ㄇìƒí³æ’¦gæ’Ÿæ¸jÒFã¹¹aj bHᘀ踉êŽï¼£ç²„ a?\u000fKì¦‰î¶¯éƒ å¹¨9D舢槷Xh뵎u훩Ꜿ턾ƅ埂P埆kë©€{䢹~?D<\/ê¼¢XR\u001b〱ä½ê¼¨i㘀ḟ㚺A-挸",
- false,
- null,
- -1.1710758021294953E-20,
- 3996737830256461142,
- true,
- null,
- -8271596984134071193,
- "_1Gí‰í…‘m䮔鰼6멲Nmꇩſt쓟íŠN许FDï¡€j+3^ﶜ⎸\u0019⤕橥!\"sî•—-뾞lz北׸êšëž¬)?l⻮고iä‘°\u001f䪬",
- 4.459124464204517E-19,
- -4.0967172848578447E18,
- 5643211135841796287,
- -9.482336221192844E-19,
- "౪å†é‡¶9D?sèž­X榈枸j2ç§€vï ˜î ]泌鰚岒èµè½€ìŒ¶ïŠ›ií…½qMbL]R,",
- null,
- [
- null,
- {"M쪊ꯪ@;\u0011罙ꕅ<eáº|爑Yâµ<\/&ᩎ<腊ሑᮔ੃Fè±­": [
- "^0࡟1ë³Pí‹áæˆF⨥Iê‚´\"z磣Vâ…¡=8í€2]䢹h1\u0017{jT<Iç…›5%Dì…Sâ‘™â…J*ìƒ å·™àº”ï€¢;᧡䙞",
- [{
- "'ã¶¡í¾é„§`è·Š\"gV[?u᭒Ʊ髷%葉굵aë¦Nì¼§Qﯳy%y䩟髒L䯜Säµ³r絅肾킂á'ꔦg긓a'@혔যWè°á¬F栩ŷ+7wéžš": 6.3544416675584832E17,
- "苎脷v改hmìµ|㋊g_ᔠ뒨蹨峟ìŽã·¸|Ο刢?Gͨ옛-?î¨Gꦱî«î“©IEYUX4?%ꘋᆊ㱺": -2.8418378709165287E-19,
- "誰?(H]N맘]kæ´³\"qï±è’§è˜ž!Rí«\\(Q$T5Nå â«£ìœ¿6|럦ì†ï¸…ï­—(": [
- "峩_\u0003A瘘?✓[硫䎯á½uጭ\"@Y綅첞m榾=è´®9R벿῜Zï §",
- null,
- "䰉㗹㷾Iaáƒqcp쓘὾൫Q|ﵓ<\/ḙ>)- Q䲌mo펹L_îŽ¦ì¹æ¨–庫9ê©ìª¹á˜¹ä‘–ç€aK îž?*趤fë­“å»p=磕",
- "î“å“‘z懅á¤-ê¹ux쀭",
- [
- true,
- 3998739591332339511,
- "ጻ㙙?᳸aK<\/囩U`B3袗ﱱ?\"/ké”ä§2ï…¤l@쿎VZ쨎/6ꃭ脥|B?31+on颼-ê®§,O嫚m à¡­`KH葦:粘i]aSUì“™$ì‚f+詛頖b",
- [{"^<9<ç®&絡;%iï«¡2攑紴\\켉hì“™-柂äšven\u20f7浯-Ꮏ\r^í›ä“ší—¬\u000e?\\ã…¡ÖºJë–·VOt": [{
- "-௄å¶k㘆í˜à®½y⎱㢬sS઄+^瞥h;á¾·jî­;抭\u0003ë°«f<\/5â°§ï§§ï¡™_朻ï—%*[-撵䷮彈-芈": {
- "㩩p3篊G|宮hz䑊o곥j^Co0": [
- 653239109285256503,
- {"ê¶²?|\":N1Û¿æ°ƒNZ#깩:쇡o8킗ࡊ[\"ë¸Po핇1(6é°$膓}â½*)渽J'DN<ì™ê¸˜æ¯¦ë²Ysì¹–": {
- "2Pr?Xjㆠ?æ®/?㓦柖馃5뚣Nᦼ|é“¢rè¡´ã©–\"ç”æ¹—Üæ†": "\"뾯ië‡ç­ç‰»$ç²/4ka $åŒíœ´ï‹è¯‘zbAá©ê‡¸ç‘…&뵲衯ꎀᆿ7@ꈋ'ᶨH@á ´l+",
- "7뢽ëšv?4^ꊥ_⪛.>pởr渲<\/⢕疻c\"g䇘vU剺dஔ鮥꒚(dïŸv祴Xâ¼¹\\îºa8y5å†": true,
- "o뼄Bìšžç¾hrï·”í˜ë’šâ¿›U5pꪴfg!6\\\"爑ì䢱W<ï¶•î\\í…£ç‡oI/BK뺡'谑♟[Ut븷亮g(\"t⡎有?ꬊ躺ç¿è‰©nl F⤿蠜": 1695826030502619742,
- "ÛŠê¹–>ࡹ햹^ⵕ쌾BnN〳2C䌕tʬ]ì° ?ݾ2饺蹳ã¶êŒ­è¨\"â—¹á¬D鯎4e滨T輀ﵣ੃3\u20f3í‚™D瘮g\\擦+泙᧠鬹ﯨַ肋7놷郟lPå†{ß’hà§œr5,ê“‹": null,
- "ΉN$y{}2\\N﹯ⱙK'8ɜͣwt,.钟廣䎘ꆚk媄_": null,
- "䎥eᾆá¦î‘§ì‰,JÞªn岪ã¥sî­•æ–謽䚔5tã¯ï–µï£šã°³ã±ŠZhD䃭f絕s鋡篟îža`Q鬃┦鸳n_é‚(E4è¿ _è§…ë·_宪D(NLî²ç–¶hL追V熑%]vè‚«=惂!㇫5⬒\u001fï²å–º4랪옑": {
- "2aè¼85먙R㮧㚪Sm}E2yîŠê†£ê«¨rRymã±è†¶á”¨\\tç¶¾A☰.ç„„ë™—9<쫷챻䒵셴᭛䮜.<\/慌꽒9å»Okä°ŠZ㥪幸k": [
- null,
- true,
- {"쌞ì": {
- "â–ŸGL K2ië›±iï¼±\"Ì .옛1X$}涺]éŽæ‡ Ú¦ëŠ·?tfçŸÝžã‚Ÿ{": 1.227740268699265E-19,
- "ê’¶]퓚%ฬKâ…": [{
- "(à·›@Ç®ã£ä§¼äµ¤[aテൖvEnAdUë –ë—ˆ@볓yꈪ,mÔ´|꟢ìº(而첸죕CX4Y믅": "2⯩㳿ꢚ훀~迯?᪑\\啚;4X\u20c2è¥B箹)ä¿£eá»»w䇄",
- "75༂f詳䅫ê§é¿ }3\u20b5'∓ä±è™€fè¼î‘”Iq鈆﨤gí©)BFa왢d0뮪痮Mé‹¡nw∵謊;ê§f美箈ḋ*\u001cî±ïœŸ`퇚í‹ä³«$!V#N㹲抗ⱉçŽ(V嵟ï«_bã³…\u0019": null,
- "e_m@(i㜀3ꦗ䕯䭰Oc+-ë ¨0뭦⢹苿蟰ê‚SVä°­å‹¢ë¥.ྈ爑Vd,á•¥=í€)vz뱊ꈊB_6듯\"?{ã’²&㵞뵫ç–ë¡ë¯ˆ%Qwé™,?\ræž®\"? N~癃ruà¡—dn&": null,
- "㉹&'Pfs䑜공j<\/?|8oc᧨L7\\pX᭠9᪘": -2.423073789014103E18,
- "ä„瑄䢸穊f盈᥸,Bî§§ë¾§í‘—íšµB1쟢f\u001f凄": "é­–âš2儉j꼂긾껢嗎0ࢇ纬xI4]ï„(à©“`蕞;픬\fC\"æ–’\")2æ«·I﹥迧",
- "ퟯ詔xæ‚ë ¹+T?Bg⥄섅kOeQí¼ã»´*{Eé¼6æ°¿L缋\u001c둌๶-㥂2==-츫I즃ã ï–˜Lg踞ꙂEG貨鞠\"\u0014d'.ç¼—ï¡gI-lIb䋱ᎂDy缦?": null,
- "î’¢ç´Mã¦çŠ¿w浴詟棓쵫G:äœ?V2íž½7N*n&ã–ŠNd-'ຊ?-樹DIv⊜)g䑜9뉂ㄹí‘阉~ê…쵃#R^\u000bïž®B䌎䦾]p.䀳": [{"ϒ爛\"ꄱ︗竒G䃓-î†ã¾å¸³ã‚.j)qguæ‰å¾£à¨Zé¼—A9A鸦甈!kè”å–™:3Tî†%&ã ˜+,ä·ž|ì±½v䚞문H<\/醯rì…“ã¶¾\\a볜åºzEä·_죤ဵ뿰᎟CB": [
- 6233512720017661219,
- null,
- -1638543730522713294,
- false,
- -8901187771615024724,
- [
- 3891351109509829590,
- true,
- false,
- -1.03836679125188032E18,
- {
- "<?起HCᷭ죎åŠîŒŽèއ逰/{gs\u0014⽛㰾愫tï¿–<솞ڢëŒç…²è†ºà¨»9x닳xà¡­Q訽,ᶭඦtt掾\"秧㺌d˪䙻꫗:á­ˆh4ç·žç—䤴c뫚떩త<?ᕢ謚6]í›Oé°é‹›é• è´©èµŸ\"<Gâ™·1'": true,
- "቙ht4ßBqꦤ+\u0006멲趫ç”)椾": -1100102890585798710,
- "ç·å…Žê³‡ë‡¸ç²ŸF醇;朠?厱楛㶆â¶7râ¾›o꯬᳡F\\머幖 㜦\f[æ¦á¥½ã®£0䕊?J㊳뀄e㔔+?<n↴å¤î§·": [
- "4~ê‰ç¾\\å®(泤å•빜\u0014>j랎:g曞ѕᘼ}链N",
- -1.1103819473845426E-19,
- true,
- [
- true,
- null,
- -7.9091791735309888E17,
- true,
- {"}蔰鋈+ê¨å•µ0?g*사%`J?*": [{
- "\"2wG?yn,癷BK\\龞䑞x?蠢": -3.7220345009853505E-19,
- ";饹়â€)çš‹`噿焒j(3â¿w>å5X<np?<줯<Y]æ˜!J೸UⳂNे7v௸㛃ᄧ톿䨷鯻v焇=烻TQ!F⦰䣣눿Ké·šëˆ'â­²mæ (äš»": [
- "蹕 淜੃b\"+몾ⴕ",
- null,
- 35892237756161615,
- {
- " 듹ã)5æ…ç®±&$~:é°ì®<\/å ‹?% \\勽唅zì†å¸‹ä˜ºH髀麡M퇖uz\u0012m諦d᳤콌æ¨\rX싹̡á²": -433791617729505482,
- "-j溗ࢵcz!:î€}✽5à´‡,욨Ýs#ë«=å—æµº^}E\\Y\\T*뼈cdêºcÛ˜ïµëŽä¨¸ë±K䠴㉿æ¿é€³îŽœ@wî·¿fì¢<\/[L[": -9.3228549642908109E17,
- "Ms킭uà®—%\\uâŽ/家欲ἅ答㓽/꯳齳|㭘Pr\"v<\/禇䔆$GA䊻˔-:틊[h?倬è¤á¾žà§³.Gw\u000b": [
- "0宜塙I@ä´è‰\\Uyë’…=2<hæš’ï…£K._è´¡ç’Yi檻_⮵uá㘗è [f\u0015힢Hê”®}጑;ï´èªyf0\"\u20cc?(=qæ– âž½5ꎾ鞘kⲃ",
- -2.9234211354411E-19,
- false,
- true,
- {
- "\u0011⟴GH_;#怵:\u001c\u0002nîž»1U\\p/ì™”(┫]hêšî·ƒ7\r0䵷첗岷O௷?î·°ãŽ[殇|J=?韷pᶟ儜犆?5კ1kê–iH竧뛈ପdmk游y(콪팱ê¾k慧 yè¾£": [
- false,
- "O\"ëp覈ykv磂㢠ãµ~뀬íŠlC&4솎䇃:Mj",
- -7.009964654003924E-20,
- false,
- -49306078522414046,
- null,
- null,
- 2160432477732354319,
- true,
- "4íš¡h+!踹ê¬P鮄{0&ë±¥M?ìƒéž…n㮞ᨹ?쒆毪l'ç®…^ꚥ頛`e㻨52柳⮙嫪࡟딯a.ï‘„~äµ®1få˜N&zÈ­L榓ۃ鳠5d㟆M@㣥ï Ó‹AÎq0縶$",
- -3.848996532974368E16,
- true,
- null,
- -3.5240055580952525E18,
- {
- " vï­·áµ#ce乃5僞?Z D`묨粇á”ç» vWLè­¢uë½€\\J|tâ“™tâ„–\"ꨋnT凮ᒩè‚ç¯b騩:䢭Hbvì»å³¨z㹚T趗햆귣학津Xiï¼¹@á–¥K": true,
- "!F 醌yï䉸W2ꇬ\u0006/ä’7~%9擛햀徉9â›°+?㌘;ê “X䇻Dfië¼§ì’’\u0012F謞Õ絺+臕kà¤LSQìŒX쎬幦HZ98è’Šæž³": "澤令#\u001dæŠâ›³@Næ•퀂[5,✄ꘇ~䘷?\u0011Xꈺ[硸⠘⛯X醪è¡x\u0007쌇MiX/|ï¾ëšK8ä¡î¿¥W)銀q僞綂蔕E",
- "6â²ä£–Rà§ž@ငg?<\/à³´xé™™Xꈺ崸⠅ᇾ\\0X,H쟴셭A稂ힿã‚F\\쑞\u0012懦(Aᯕç­~î½”\u0001ê»®X?逊": 5.7566819207732864E17,
- "[c?椓": false,
- "kä’‡": 2583824107104166717,
- "꙯N훙ã…ﮒ燣㨊瞯咽jî™Mxby뻭뵫װ[\"1畈?à§±L": "ë£á”‚魠羓犴ꚃ+|rY",
- "ë…ºZ?îˆä¬ï“©é‰‰îˆ­:?â³™ç˜Cኯ.Vs[釿䨉ì§\\\\*쵢猒$\\y溔^,㑳": {"藶꺟": [{
- "\"d훣N2zq]?'檿죸忷篇ﮟ擤m'9!죶≓pë­»\\ᇷ\f퇶_ä°¸hà¹Q嵃訾㘑従ꯦ䞶jL틊ræ¾µOmᾫ!H䱤팼/;|á­ºI7슎YhuXiâš¼": -1.352716906472438E-19,
- "M⽇倻5Jä‚«à¤”á”æ¥¸#î „î¾–J[Fﹱ쫮W誻bWz?}1\"9硪뻶fe": "盬:Ѹ砿íšë•£T凊(mç¦å‘œï»R㿎艴䂵h",
- "Rë¾k힪CHé’™_i苮ⰵoᾨ紑퉎7h؉\"柀è½z0့\"<?嘭$èœ?礲7岇槀묡?Vé’¿T⣜v+솒çšÔ›2ç±³mH?>è–™å©è¿3aFÆÃ": "2,ê“´g?_섦_>Y쪥션钺;=趘F~?D㨫\bX?㹤+>/믟kᠪ멅쬂Uzỵ]$ç§`mé›ç‘Šî’ඖ鯬cꙉ梢f묛bB",
- "♽n$YjKiXX*GOè´©éƒè±®ç¥´éžK醞眡}ê—¨v嵎꼷0à­¸+Mè‹eH徸Jîžê£†:â¼æ‚¥B켽迚㯃bè«‚\u000bjꠜ碱逮m8": [
- "푷᣺ﻯd8ﱖ嬇ភHîªé¹Žâ¡±á±…0g:æžœ6$GQ췎{vá·§Yy-è„•xå¹ç ¡ï¨¬â®¸Cï§‚êš=軄H犠Gè°–ES詤Zè ‚3î§™lë´Ÿhï¿’7䦹1GPQG癸숟~[#é§¥8zQ뛣J소obg,",
- null,
- 1513751096373485652,
- null,
- -6.851466660824754E-19,
- {"ä©‚-â´®2Ù°K솖풄꾚ႻP앳1Hî³é·›wmR䗂皎칄?醜<\/&à §ã¬X濬䵈K`vJ륒Q/IC묛!;$vÏ‘": {
- "@-êš—xྐྵ@m瘬\u0010U絨ﮌé©\\켑寛넆T=tQã­¤Lì—°@脸삯e-ï–…î–‘:⩼u㎳VQ㋱襗ຓ<Ⅶ䌸cML3+\u001e_C)r\\9+Jn\\Pﺔ8蠱檾è…Pqé³è¯î¦§Tä„I": -1.80683891195530061E18,
- "á·­á‹»U~ཷsgSJ`᪅'%ã–”n5픆桪砳峣3ç®æž¾äŒ·âа呀ïŒ": {
- "Ş੉䓰邟自~X耤pl7间懑徛s첦5ਕXexh⬖鎥á€nNr(J컗|ૃF\"Q겮葲놔엞^겄+㈆è¯ã€¾í¬ç´G'E?飕1fâ¼í…¬æ‚šï•¦æ³¬ë¨Uç¬í›¶Qs": false,
- "î³…(\u20dag8í½íŠ£>^Y{뤋.袊䂓î†;_ïg]S\u202a꽬L;^'#î—™ë•bႌ?Cç·¡<ä²ä²æ–­ê6\u001asD7IK5Wxo8\u0006på¼Šâ¼‚ê¯æ‰µ\u0003`뵂픋%ꄰ⫙ë¶lå›å°›ïˆ®+ä—…E쟇\\": [
- true,
- {
- "\n鱿aKã¡â’ã¼™2ì´¹f;`ì¾qIà¡”G}ã·äç“°w늮*ç²…9뒪ㄊCj倡翑閳R渚MiUO~仨䜶RꙀA僈㉋⦋n{ã–¥0딿벑î§é€¦â¥»0î¾®h薓쯴ê»": [
- 5188716534221998369,
- 2579413015347802508,
- 9.010794400256652E-21,
- -6.5327297761238093E17,
- 1.11635352494065523E18,
- -6656281618760253655,
- {
- "": ")?",
- "TWKLꑙ裑꺔UE俸塑炌Ũ᜕-ï’‚o\"徚#": {"M/癟6!oI51niíš=댡>xê¨\u0004 ?": {
- "çš­": {"⢫䋖>u%wî²´ìž¼<ä•ê˜P䋵$é­‹æ‹U䮎緧皇Y훂&|羋ꋕ잿cJ䨈跓齳5\u001a삱籷I꿾뤔S8㌷繖_Yឯ䲱B턼Oæ­µF\\l醴o_欬6ç±=D": [
- false,
- true,
- {"Mt|êžD|Fê¶£MQ뵕T,ëºk+?ãµi": [
- 7828094884540988137,
- false,
- {
- "!༦鯠,&aﳑ>[euJê½ç¶·æB.h": -7648546591767075632,
- "-n켧嘰{7æŒæ¯„Y,>â螵煫乌pv醑Qå¶š!|âŒè²¬0왾ë¢ê…蛨S\\)ç«°'舓Q}A釡5#v": 3344849660672723988,
- "8é–ªéºV=鈢1녈幬6棉⪮둌\u207d᚛驉ꛃ'r䆉æƒà¥ˆ|bἧﺢᒙ<=穊强s혧eꮿ慩⌡ \\æ§³W븧J檀C,ᘉì˜0俯퀉M;筷ࣴ瓿{늊埂鄧_4æ¸Nn阼Jੵ˥(社": true,
- "oë¼€vwï…®)4A뢵(î¼±a䵢)p姃뛸\u000fK#KiQp\u0005ê…芅ì…îª": null,
- "ç ¥$ꥸ┇耽uæ–®Gc{z빔깎밇\\숰\u001eê´·å„㶇쵿_á´„+hç©¢p촀Ნ䃬zäé…³Ó‚31xꔄ1_ç šWë ˜G#2葊P ": [
- -3709692921720865059,
- null,
- [
- 6669892810652602379,
- -135535375466621127,
- "뎴iO}Z? 馢녱稹ᄾä©rSt帤넆&7ié¨ë©—ç•–ï”9誧鄜'w{Ͻ^2窭외b㑎粖i矪ꦨ탪跣)KEㆹ\u0015V8[W?⽉>'kc$䨘ᮛ뉻٬M5",
- 1.10439588726055846E18,
- false,
- -4349729830749729097,
- null,
- [
- false,
- "_è ¢ã ^䟪/D녒㡋ỎCä’ˆíŒïŒ¢\u0006àªq@O펢%;é¹ìŒo戥~A[ꡉ濽ỳ&虃᩾è£å”™ï¤£èŒ¨Ig楡꒻M窓冉?",
- true,
- 2.17220752996421728E17,
- -5079714907315156164,
- -9.960375974658589E-20,
- "ᾎ戞༒",
- true,
- false,
- [[
- "ⶉᖌX⧕홇)g엃⹪xëšç™Ÿ\u0002",
- -5185853871623955469,
- {
- "L㜤9ợㇶKé°â‹“V뽋˖!æ–«as|9"á¬ä†ª?î¾¶7胜&n薑~": -2.11545634977136992E17,
- "O8뀩D}캖qè‚6༣ã—䈓煮å½à¨†á޼Dᣘí›;": false,
- "YTá¡…^ï—Lã—ŽcbY$pᣞ縿#fh!ꘂb삵玊颟샞ဢ$ä—é¼’ëª~rkH^:닮먖츸륈⪺쒉砉?㙓扫㆕꣒`R䢱Bé…‚?C뇞<5Iޚ讳騕S瞦z": null,
- "\\RB?`mG댵鉡å¹ç‰©äµŽæœ‰5*e骄T㌓ᛪç¾é§’Ku\u001a[柆jUq8⋈5鿋츿myï»—?é›ux঴?": 5828963951918205428,
- "n0æ™…:黯 î¶·xu씪^퓞cB㎊á¬âº˜Ù¤Öƒ~B岚3㥕擄vᲂ~F?Cä¶–@$mï›~å¿”S왖㲚?챴⊟W#벌{'ã°Iä ç¸s樘\\X뢻9í•¡I6èㄛî‚î«8쯶]wॽ0L\"q": null,
- "x增줖j⦦tä¢áŽ™ïŠ­ã›¿Yf鼘~ê«“æ„4惊\u209c": "oOhbᤃ᛽z&Bi犑\\3B㩬劇䄑oÅ쨅孥ë©àº–acA㖫借ãžvg싰샂ãœ#譞⢤@k]鋰嘘䜾L熶塥_<\/â¾å±ˆï®Š_mYè¹t뙺}Ox=wé®®4S1ê©ï¬¾'å·‘",
- "㗓蟵ꂾe蠅匳(JPä—à·¸\u0089耀왲": [{
- "ᤃ㵥韎뤽\r?挥O쯡⇔㞚3ä¼–\u0005Pî•⋪\"Dê¶£QLn(⚘罩䩢Ŏv䤘尗뼤ë›O淽鋋î¡é—šrå´©a{4ç®™{煷m6〈": {
- "l곺1L": {
- "T'ਤ?ç …|੬Km]ä„©\"(à¿¶<\/6U爢䫈倔郴l2ã´±^줣k'Læµ–Lé°„Rp今鎗⒗Cì–¨Mí›ã¡§Î˜X粜뫈N꤇輊㌻켑#㮮샶-ä—룲è ç™œã±V>=\\I尬癤t=": 7648082845323511446,
- "鋞EP:<\/_`á§e混ㇹBd⯢㮂驋\\q碽饩跓྿ᴜ+j箿ë ã—‘yK毢宸p謹h䦹乕U媣\\炤": [[
- "3",
- [
- true,
- 3.4058271399411134E-20,
- true,
- "æ€+憱f逮@먻BpW曉\u001aã£âŽŠ$n劈D枤㡞좾\u001aá›ïŒƒè‹”౩é—1B䷒Ṋ݋âžê€žêƒç£$t੤_:蘺⮼(#N",
- 697483894874368636,
- [
- "vᘯ锴)0訶}䳅⩚0O壱韈ߜ\u0018*Ué¾ä–=䧉뽑å•휻ID쿇嘗?ꌸῬ07",
- -5.4858784319382006E18,
- 7.5467775182251151E18,
- -8911128589670029195,
- -7531052386005780140,
- null,
- [
- null,
- true,
- [[{
- "1欯twG<uä®â½ê‡£_ჟﱴଶ-쪋\"?홺k:èŽêœª*⺵꽹댅釔좵}P?=9ë ¿46b\u001c\\S?(筈僦⇶爷谰1ྷa": true,
- "TҫJYxÚª\\鰔℮혡)m_WVi眪1[71><\/ï†Q:0怯押殃탷è«ì‚¬<ỗꕧ蚨ä¡ï¨î³‰nDꌕ\u001cë…¬~è“©<N蹑\"{ä«¥lKcí˜ë«–앺:vⵑ": "gæ§µ?",
- "aꨩ뻃싥렌1`ë¡—}Yg>鲃g儊>ê¡l㻿/â‘·*ì±³6㻜W毤緛ﹺᨪ4\u0013뺚J髬e3쳸䘦伧?æª&{L掾p+꬜MäŠd娘6": {
- "2p첼양棜h䜢﮶aQ*c扦v︥뮓kC寵횂S銩&Ç{O*य़iH`Uí…à¡“rä©•5ꄸ?`\\á§«?ᮼ?t〟崾훈kè–ì/iy꤃뵰z1<\/AQ#ë¿©8jJ1z@u䕥": 1.82135747285215155E18,
- "ZdN &=dë…„á…†'ì‘â…‰:烋5&áŸï”‹á„‚汎æ¥L㯄固{é’§u\\ãŠíŠšeæ‘‘&tå—„ê–„UbâŒ?m䴘熚9EW": [{
- "ଛ{i*a(": -8.0314147546006822E17,
- "⫾ꃆY\u000e+W`௸ \"Më’¶+\\ë·lKE}(NTí‚¶Yjé¸ç¯’î©¥ì¶'jNQ硾(똡\\\"逌â´y? IRꜘ὞鄬﨧:M\\fâ ‹Cꚜ쫊ᚴNV^Dä•—ã…–á¼”Iao꿬Câ8": [
- 287156137829026547,
- {
- "H丞N逕<rO䎗:í…•<\/䶩샌Sd%^ᵯëˆ엑者g䖩똭蕮1U驣?Pâ°°\u001fp(W]67\u0015ï«£6굺OR羸#ì´Fè’ˆ;嘙i✵@_æ’¶yã¤â¤(:᧗뼢༌朆@â°ã¤¨ê­²?-n>⯲": {"": {
- "7-;枮阕梒9ᑄZ": [[[[
- null,
- {
- "": [[[[
- -7.365909561486078E-19,
- 2948694324944243408,
- null,
- [
- true,
- "荒\"并孷䂡쵼9o䀘F\u0002龬7⮹Wz%厖/*? a*R枈㌦ë¾g뒠䤈q딄㺿$쮸tᶎ릑弣^éŽ<\/Y鷇驜L鿽<\/ì¶‹9Mᲆឨ^<\/庲3'lë‚¢",
- "c鮦\u001bë‘\\~?眾ಢu݆綑෪蘛轋◜gȃ<\/â´ƒcpkDt誩܅\"Y",
- [[
- null,
- null,
- [
- 3113744396744005402,
- true,
- "v(y",
- {
- "AQ幆h쾜O+꺷铀ꛉ練A蚗⼺螔jãŒ3꽂楎䥯뎸먩?": null,
- "蠗渗iz鱖w]擪E": 1.2927828494783804E-17,
- "튷|䀭n*曎b✿~æ¤U]î­¡Gz鄭kW|ã´š#㟗ഠ8u擨": [[
- true,
- null,
- null,
- {"⾪壯톽g7?㥜ώQê‘㦀æƒã§½î“¡ä¼“\\î¦*᧰閖樧뢇赸N휶䎈pIæ°‡ï®é•Šmaᬠ탷#X?î³A+kÐM ༑᩟Ø?5꧎鰜ṚY즫궔 =ঈî³;ﳈ?*s|켦蜌wM笙莔": [
- null,
- -3808207793125626469,
- [
- -469910450345251234,
- 7852761921290328872,
- -2.7979740127017492E18,
- 1.4458504352519893E-20,
- true,
- "㽙깹?ë¨ä†¢:ä´ŽÛ»gæ® JBTU⇞}ꄹꗣi#Iî’¡ëµ£é‰r혯~脀ìƒ#釯:场:ä”>ä°®o'ã¼½HZ擓௧nd",
- [
- 974441101787238751,
- null,
- -2.1647718292441327E-19,
- 1.03602824249831488E18,
- [
- null,
- 1.0311977941822604E-17,
- false,
- true,
- {
- "": -3.7019778830816707E18,
- "Eå³¾æ†èŒ6xLIm縂0n2视֯J-ᤜz+ᨣè·mYDè±ç¹¹â¹ºäŠ“ëª“ï´€E(@è©®(!ï’Y膽#᎙2䟓섣A䈀㟎,囪QbKæ’wcG湎ꤧtGì—xâ¥ä¿Žj'A一ᯥ뛙6ㅑ鬀": 8999803005418087004,
- "よ殳\\zDâ§…%Y泥簳Uꈩ*wîRL{3#3FYHା[d岀䉯T稉駅䞘礄P:é—ˆWæ€ElBã¤å–¬èµ”bGä ¼U଄Nw鰯闀楈ePsDꥷ꭬⊊": [
- 6.77723657904486E-20,
- null,
- [
- "ཚ_뷎꾑è¹q'㾱ꂓ钚蘞慵렜떆`ⴹ⎼櫯]J?[t9Ⓢ !컶躔I᮸uz>3aã •i,錃L$æ°°í…°@7ë…«W㸮?ç¾§W뇧ꃞ,î—‘N鋮숪2ɼì½â”ä²6",
- "&y?뢶=킕올Za惻HZk>c\u20b58i?ꦶcfBv잉ETî…9jä¡¡",
- "imçŠÕƒbì¹§<D-è«‚*u2ꡜ췛~䬢(텸ﵦ>æ ¡\\뼾쯀",
- 9.555715121193197E-20,
- true,
- {
- "<㫚v6腓㨭e1ã•”&&V∌ᗈT奄5Lጥ>탤?튣瑦㳆ꉰ!(ᙪ㿬擇_n쌯IMá¿‹î£ã•¨â°æ«ˆá±·5풔蟹&L.ì²½e鰷쯃劼﫭b#ï­¶í“€7ë·„Wr㢈๧Tʴશ㶑澕é%": -1810142373373748101,
- "fg晌o?߲ꗄ;>C>?=鑰監侯Kt굅": true,
- "䫡蓺ꑷ]C蒹㦘\"1à°ƒ@å‘«\u0014NLä¾egå‘®á³,r$裢k>/\\<z": [[
- null,
- "Cä¡>?ㄤᇰﻛ쉕1஥'ÄŠ\" \\_?쨔\"ʾr: 9Sä˜ç¦ºáª§ê„‚㲄",
- [[{
- "*ç¡™^+E쌺I1䀖ju?:⦈Ꞓl๴竣迃xKC/饉:\fl\"XTFᄄ蟭,芢<\/骡軺ëœhê˜\u001f銿<棔햳▨(궆*=ä¹¥b8\\媦ä·€ë«}닶ꇭ(Kej䤑M": [{
- "1á¬?>옿Iâ•…C<ÞŽ?ꊌ冉SV5A㢊㶆z-๎玶绢2F뵨@㉌뀌oå¶”f9-庒茪ç“ë·³4": null,
- ";lá°³": "CbB+è‚»aä„·è‹*/볳+/4fq=ã°h6瘉샴4é“¢Yéª.⌖@哼猎㦞+'gꋸ㒕ߤï—ãž‘(ä¶’è·²tiâ‘´aî¥ç¡‚#Noë³”",
- "t?/jE幸YHT셵⩎Kî¹!Eq糦ꗣv刴w\"l$ο:=6:ç§»": {
- "z]鑪醊嫗J-Xm銌ç¿çµ¨c里ëç‚™Ep㣋é£ë˜¼åšŒä€“GPï¹–cmf4é¹­T䅿꣭姧â¸wy6ꦶ;S&(}ᎧKxᾂQ|tï¹ë»³k\"d6\"|Mlì·†hwLtê¼¼4$&8Պ褵婶鯀9": {"嵃닢ᒯ'î–›dá§«ä³³#Nî‡Xe3-붋鸿î¢à¬¢ë–“î§ž%dK\u0013䲎ê–YV.裸Râ‰rR3蟛\\:ì ¯:å—ĺLʆ넕>|텩鴷矔ꋅⒹ{tå­¶ã“‘4_": [
- true,
- null,
- [
- false,
- "l怨콈lá’",
- {
- "0wä²å¬§-:`䉅쉇漧\\Ü‚yㄨb%㽄j7ᦶ涶<": 3.7899452730383747E-19,
- "ꯛTẀq纤qå¶Vâ¿£?\"g}ი艹(쥯B î­T騠I=仵ë°X": {"KX6颠+&á…ƒ^fç•’y[": {
- "H?뱜^?꤂-⦲1a㋞&î‘®êƒç²¾Ii᤾챪咽쬘唂쫷<땡劈훫놡o㥂\\ Kâ´™Dç§¼Fæ°®[{'좴:례晰Iq+Iì­¥_T綺砸GOç…䟪ᚪ`î‘↹l羉qì¼Dê½áœ…훦: vUV": true,
- "u^yï³0㱓#[y뜌앸ꊬLã·©?蕶蘾â»KӼ": -7931695755102841701,
- "䤬轉車>\u001c鴵惋\"$쯃྆⇻në½€Gæ° Såª]à²²ê¨æ‡Qxኻ椕駔\\9ࣼ﫻ìœç£¡ï©ˆëºªá¶šë³l㕆t+sζ": [[[
- true,
- false,
- [
- null,
- 3363739578828074923,
- true,
- {
- "\"鸣詩 î›ë³°ã‘µgLã¯¦á¿…ì¶æ—«}ED辗ﮈI쀤-ꧤ|ã ¦Z\"娑ᕸ4çˆé¨ã£\"]ì³Af]茛⬻싦oèšk䢯ä©è½3廇喑ޅ": 4.5017999150704666E17,
- "TYႇ7ʠ值4챳唤~Zo&ݛ": false,
- "`å¡„J袛㭆ëºã³€N㺣`ê½å¶¥Kï¯SVᶔ∲퀠ç¾N딂X\"á¤hNﬨvI": {"\u20bbã­˜I䖵䰼?sw䂷쇪]î(泒f\"~;꼪FÔsá¦": {"p,'ꉂ軿=Aèš¶?bƉãµä…°è«¬'LYKL6B깯⋩겦뎙(ᜭ\u0006噣d꾆㗼Z;ä„äš”cd<情@äž‚3苼㸲U{)<6&ꩻ钛\u001au〷N숨囖愙j=BXWìš•^x芜å á¿™çˆ‚ë›·ê’»t✘Q\b": [[
- "ç±›&ଃ䩹.ꃩ㦔\\C颫#暪&!勹ꇶ놽攺J堬镙~軌C'꾖䣹㮅ï¶å²ƒá™´éµ£",
- 4.317829988264744E15,
- 6.013585322002147E-20,
- false,
- true,
- null,
- null,
- -3.084633632357326E-20,
- false,
- null,
- {
- "\"짫愔昻 Xï«\"è—£j\"\"ë¨à½…ѻ㘤㬯0晲DU꟒㸃dë²€î¢ìœ’l䦾cà©»*3": null,
- "è°ˆWm陧阦咟ฯ歖擓Nå–´ã‹éŠ­rCCnVࢥ^♼Ⅾ젲씗刊Sà¼+_tèµ”\\bäšë‰¨ê¬«6펛cL䊘᜼<\/澤pF懽&H": [
- null,
- {
- "W\"HDUuΌ퀟M'P4à¿°H똆ⰱﮯ<\/å‡è˜²\"C鴫ﭒж}ꭩ쥾t5yd诪ﮡí‰â´°@?æ°é†³rj4I6Qt": 6.9090159359219891E17,
- "絛ﳛ⺂": {"è«°Pã—®î˜è¦`ZQ?ꫦh*à´±cbâ§±}埌茥h{棩렛툽o3é’›5é®l7Q榛6_g)ὄ\u0013kj뤬^爖eO4Ⱈ槞鉨ͺ订%qX0Tì—å«·$?\\\"봅늆'%": [
- -2.348150870600346E-19,
- [[
- true,
- -6619392047819511778,
- false,
- [[
- -1.2929189982356161E-20,
- 1.7417192219309838E-19,
- {"?åµ²2à¿2\u0001啑㷳c縯": [
- null,
- [
- false,
- true,
- 2578060295690793218,
- {
- "?\"殃呎ïˆ#ã‘‘F": true,
- "}F炊_æ®›oU헢兔êˆ,èµ­9703.Bæ•°gTz3â¬": {
- "5&t3,í–“Mݸᵣ㴵;꣫ä©â†³#ï¢@ë«·ä …ï¦+W-ࣇzᓃ鿕ಔ梭?T䮑ꥬ旴]u뫵막bBè®:왳둛lEh=숾鱠på’î›î­ˆ$ì§#?gâ¹·á—Švã·µ.æ–ˆu頻\u0018-G.": "ë½™m-ouࣤ஫牷\"`Ksꕞ筼3HlȨvCï¢î›¦å ˆ\"I]㖡玎r먞#'W賜鴇k'c룼髋䆿飉㗆xgå·¤9;芔cáŒ/ax䊨♢í“rå“㸫೼䢗da᩾\"]å±£`",
- ":M딪<䢥喠\u0013ã–…x9è•ã‘‚XO]f*Q呰瞊å­VP@9,㨣 D\\穎vˤƩs㜂-曱唅L걬/롬j㈹EB8g<\/ì„©o渀\"u0y&룣": ">æ°ç·©L/ä•‘ë¯êŸ˜îŸ”蕞^aBë’£+0jK⪄瑨痜LXK^힦1qK{æ·št츔X:Vm{2rçB뾄H첚7æ°¥?쉟䨗ꠂv팳圎è¸é½€\\",
- "D彤5㢷Gꪻ[lㄆ@὜⓰絳[ଃç½ì®¹â˜’[*0ꑚ㜳": 9022717159376231865,
- "Ò–aV銣tW+$é­¿\u20c3ïœäºœ~ë«¡ᙰ禿쨽ã¡fá¹¼zE/h": "5è‡ï’Œã‹‡á²¯ì®º? 昨탰Wム밎#'\"崲钅U?幫뺀â¾@4kh>騧\\0Ò¾EV=çˆî©®ÍŒUæ€%ꉼ 㮋<{j]{R>:gÔ©L\u001c瀈锌ﯲﳡꚒ'â«¿E4æšãŒ—뵉X\"Háœ",
- "ᱚגּ;s醒}çŠSἿ㦣&{T$jkB\\\tḮ앾䤹o<é¿(tW": "vb⯽䴪䮢@|)",
- "⥒í껉%惀뗌+녣迺顀qæ¢g⚯i⤭ë£Mç¹j̈́⽜A": -8385214638503106917,
- "逨ꊶZ<\/W⫟솪㎮ᘇb?ê ”i\"H㧺x෷韒Xꫨฟ|]窽\u001a熑}Agn?Má¶–a<rà°„4Ů䢤슲AxÄ£eê³–ã´¤x竾éƒB謉鸵kè–½M)\"芣眜`è‰ê‰›ä´º": "é¹^ె캫?3耲]|Ü1ä¡’ã®]8e?ä¶^",
- "뿸樅#P㡊1M룮Uꪭ绢ꑮZ9꽸": {"\nJ^Ñ”|3袄ã…7⨆銦yîµ”çâ‹·ä»´ct?[,<\/ã…¬`?갔髞%æA೚C": {
- " 䇞3갫䅪": [{
- "0|â©ã‘‚砕ㅻ": null,
- "D箳᠉`|=â¼­)\"*࣊ã¦LjO誋": "",
- "ࠚDZmê—¥}ᷴ╈r7í—´È¥4Kp5a)o}鎘门Læ°ä†“'✎k俎c#T68Óâ©¶î¶6L鎴<r൦$黊BQYã¼³\\è·¿F慮⡨拵贀!ç”¶Vå–…/": null,
- "âµ£q⳹ﻨLk]晩1*y\\$%}ä–¶P煑㇆䈦E嫿«•Y࣓嫨ä“OL낮梚㸇洛洚BYtgl∛S☕䉓宑⋢粚ꔯ꠼붠": ")ꬑ윤`\"â°£<\/婽*Y䔸ᓰ_ï³t슲å©éš¥&S糧䛮闵诌è±sh쯽邴*ì„´ØÍŽ=㯨\"RVíž³,^t\"ac?䤒ꉀxHa=Uꛕã™î·“TkF껾",
- "å¼¾cUAF?暤cë½.欀nKì•­]r傊䀓ﯳ馽垃[䥛oI0N砊鈥헅Co쟋钄ㅷ㊌뷚7": [
- null,
- "à«“é¨?^ä†{\u0006`X䧵儱&롡尙砡\u0006ë»ì‘¬sjâ–»Xfᬶgcã„¢V >9韲4$3á»´^=ì煤áë·2䣃%ï…Žé· /eQ9頸쥎",
- 2398360204813891033,
- false,
- 3.2658897259932633E-19,
- null,
- "?ꚃ8Nnãž·å¹µd䲳䱲뀙ꪛQ瑓鎴]î’¶ä©‹-é°¾æ¡ï¾ä³¡??掊",
- false,
- -1309779089385483661,
- "ᦲxu_/yecR.6èŠ.áœ‡éŽ ~",
- -5658779764160586501,
- "ì’Œ:æ› =lìœä¢œwk#s蕚\"互㮉m䉤~0ë“䋙#Gîš¿;h숄옥顇෤勹(C7㢅雚ã¯Lâ …VVç°…<",
- null,
- -4.664877097240962E18,
- -4.1931322262828017E18,
- {
- ",": {
- "v㮟麑䄠뤵g{Më®.\u001bzt뢜뵡0Ǥ龍떟Ᾰ怷ϓRT@Lꀌ樂Uã â¾•e扉|bJg(뵒㠶唺~ꂿ(땉x⻫싉ìŠ;%0鎻V(o\f,NéŠ%nk郼螺": -1.73631993428376141E18,
- "쟧摑繮Q@Rᕾ㭚㾣4隅待㓎3蒟": [
- 4971487283312058201,
- 8973067552274458613,
- {
- "`aæ™á£—î\u0015i<S幼訃锭B0&槩✨[Wpçš©[g≊k葾x2ᡆ橲䲢W": true,
- "kH皈Sê±qå‚‘u?솹풑~o^F=ï¦N*reî••J沤wW苯7pã¼¹äŽa=ꮧLã·©냴nWꌑ㞱uuè°lVNç¿á¤»(eè±¶5#L쪉ᅄ઄\u0015숟봊P瀚X蓎": false,
- "䫯דּ〖Scä›­ì Lëµ¾pî«“CꙞ\"엇즓_ﰛ톣ꫀ먩㺣㮠⭴!\\Wâ”tä–°è»…y\u0014~ᇰ렢E7*俜䥪W䀩ä·hë´†vjஉ묣à¼G39.뼳輼:㮿á¦A饕TUL}~": [
- null,
- 8.8648298810470003E17,
- 5.735561205600924E-20,
- null,
- -102555823658171644,
- 1.2674932032973067E-19,
- {
- "D胣O㯨\u0017Ku눓ã’í…nᨊ!Ꚇ廫_>Bo¸": 4.3236479112537999E18,
- "HW&퉡ãåœ<W)6æ‚°ê ‘HEp14xy峑ft\u0005s亘V튉䢮ꦈXåµê¬?lI_ë춇-6Ss噺Nk-ﮥíƒÜ郪*ï“­PR(S6â•‹@ä»™V懸뺵ﯜVç²¹": "9䗌斀4ãˆ^Qséš„ç¡j\u0003",
- "Vké¶…Cæ³¹ç­HX훉朗*r\\z顊誌儖4?n7á¾6몋䎡ﳈ],Hé ¢pèšã‘„P4满Eä©V䬕à¸L廂쒬î®ì‘¨ê†·hè¿¡ê°è­–墎 î‡]鹿ฌ7ﶽ冭༽<ꈓS\\lä‹®?_ユ檒?": -8598528325153980065,
- "t=qí£ç–»Ñ‚Z\\錅J.镎|nfḷ鴒1厰Lç¯çºœîŒ•E]୦⥪]á®'ç¾p/å’©0닳ï³qﳖཽk ?X1Ft%ś뭢v鋋⺃爵⒗": [[
- 5.0824756359232045E-19,
- [
- 7.268480839079619E-19,
- {"탿^굞⧕iјëŠê€›w껩6ꟳXsé…š\\>Y?ç‘¡Qyí›q!帰ï©s舠㫸zêš—aSæ­²v`G株巷Jp6킼 (ê·¶é”â¾î‹¥â¡ˆ>Mæ±ãžá‰´ê™²dv@i㳓ᇆ?é»": [
- null,
- 4997607199327183467,
- "E㻎蠫á¾é«˜ä™Ÿè˜¬æ´¼æ—¾ï« í…›ã‡›?'M$㣒蔸=A_亀绉앭rN帮",
- null,
- [{
- "Eᑞ)8<Zî¿—ã¡¿W镀䛒Cìƒî¿«V?0ꯦ+tL)`é½³AjBå§€Xà³³D빠㻲ƙgn9â‘°à¾á¿œ&\"ãš¹>餧A5u&ã—¾q?": [
- -1.969987519306507E-19,
- null,
- [
- 3.42437673373841E-20,
- true,
- "eê±·Må¢\"割Pâ›í§åŽ€R䱜3ï»´Oí“«r﹉⹊",
- [
- -8164221302779285367,
- [
- true,
- null,
- "爘y^-î¬?蘞Ⲽꪓaâ…ê¨}I",
- 1.4645984996724427E-19,
- [{
- "tY좗⧑mrzïºã¿¥â´–᥷jè«…\u0000q賋è­êž„â®±S\nà¡£B/íƒêµª3ZÉ‘å¤o<\/;ë¡‹": null,
- "彟hæµ _|V4䦭Dᙣ♞uì¿»=ì‚®ã¦\u001e哀鬌": [{"6횣楠,qʎꗇ鎆빙]ã±­R굋鈌%æ ²j分僅ペ䇰wí¦î¼‹p蛃N溈ê¡ê€?@(GI뉬$ﮄ9èªê“š2e甸ڋ[äº,\u0011\u001cࢃ=\\+衪䷨ᯕ鬸K": [[
- "ㅩ拏鈩勥\u000etgWVî–¨Xs陂è¦p狵w퓼{뮵_i\u0002ퟑႢâ¬d6é‹«F~챿æŸ\u0096äš¼1ۼ칥0꣯å„=鋷牋ⅈêžé¾",
- -7283717290969427831,
- true,
- [
- 4911644391234541055,
- {
- "Iî¹éˆ’ì²½P릜朸W徨觘-HᎄíŸâ“º>8kr1{ê²µäƒã€›á¬¡Ì¨Oê·‘oä•'쿡鉕p5": "fvç²–RNçž–è›a?q꤄\u001d⸥}'ꣴ犿ꦼ?뤋?鵆쥴ë‹ä¡«s矷̄?à¶£/;괱絢oWfV<\/\u202cC,ã–¦0䑾%nè³¹g&T;|lj_欂N4w",
- "짨䠗;䌕u i+rà¹0": [{"9ä¥\\à°©8\"馇z䇔<\/á‚¡Y3e狚ì¡\"ุ6ï°†Zé–c\"Ll:ïŠê®¾ç–£<\/᭙O◌납୕湞9⡳Und㫜\u0018^4pj1;ä§å„‚ä—·à­—>@e톬": {
- "aâ‘‚Fé‹»Qèž°'<퇽Qè´ç€§{ᘪ,cP&~䮃Z?gI彃": [
- -1.69158726118025933E18,
- [
- "ê¶‚z簽㔛㮨瘥⤜䛖Gℤ逆Y⪾j08î±²Sn昞ꘔ캻禀鴚P謦b{ê“®mNéMᥙ5\"ç2냑I\u0011.L&=?6á„ ë»·X鸌t刑\"#z)o꫚n쳟줋",
- null,
- 7517598198523963704,
- "ኑQp襟`uᩄr方]*F48ꔵn俺ሙ9뇒",
- null,
- null,
- 6645782462773449868,
- 1219168146640438184,
- null,
- {
- ")ယ넌竀Sdä°¾zqâ«£âŒÊ¥\u0010á¿“' |磪&p牢蔑mï³V蘸૰짬꺵;K": [
- -7.539062290108008E-20,
- [
- true,
- false,
- null,
- true,
- 6574577753576444630,
- [[
- 1.2760162530699766E-19,
- [
- null,
- [
- "顊\\憎zXB,",
- [{
- "㇆{CVC9ï¼MN㜋ઘR눽#{h@ퟨ!鼚׼XOvXS\u0017á£=cS+梽៲綆16së½íœy屬?ᇳG2á´­\u00054쫖y룇nKcW̭炦s/鰘ᬽ?J|퓀髣n勌\u0010í™ P>j": false,
- "ç®´": [
- false,
- "éžj\"ꮾ*엇칬瘫xṬ⭽ì©äƒ³\"-⋵?ᦽ<cਔ↎⩧%鱩涎삧u9K⦈\"á¿á¬‘V绩킯愌ṱv@Gê¾è·¶êš†(?ä–ƒvIá§ŠxV\r哦jã ’?*=S굤紴ꊀ鹭쬈s<DrIu솹꧑?",
- {
- ".}S㸼L?t\u000fK⑤s~hU鱜꘦}ìªC滈4ꓗ蛌):ྦ\"é¡¥ì´â¢·ïš­á¿³YLn\"?fꘌ>댎Ĝ": true,
- "Pg帯佃籛n㔠⭹࠳ë·â‰»à¿Ÿ3ãž±ï“!î—-ì’¾!}쭪䃕!籿næ¶»J5ਲ਼yî˜vy;Rኂ%ᔡጀ裃;M⣼)쵂쑈": 1.80447711803435366E18,
- "ꈑC⡂ᑆ㤉壂뎃Xub<\/쀆༈憓قì¨×§\\": [
- 7706977185172797197,
- {"": {"K╥踮砆NWࡆFy韣7ä밥{|紒︧䃀榫rᩛꦡTSy잺iH8}ퟴ,M?Ʂ勺ᴹ@T@~꾂=I㙕뾰_涀쑜嫴曣8IY?ҿo줫fऒ}\\S\"ᦨ뵼#nDX": {
- "♘k6?଱癫d68?㽚乳䬳-Vé¡·\u0005è•?\u0018䞊V{邾zã˜l]é›k臤~ൖHë’iꢥ]g?.G碄懺䔛p<q꜉Så²—î¥_.%": 7688630934772863849,
- "溗摽嗙Oã§€,⡢⼰呠ꅧ㓲/葇䢛icc@-r\b渂ꌳ뻨饑è§á–œ\\é®­\u0014엙㥀᧺@æµ¹W2꛵{W률G溮킀轡䬆g㨑'Qè¨ï†áŸªç½‘Hd\"Q늴ᱢﶨ邮昕纚枑?â–°hr羌驀[ç—¹<\/": [
- -1.0189902027934687E-19,
- {"窶椸릎뚻shE\"ꪗႥꎳU矖佟{SJ": [{"-æ…œx櫹XYîƒ-æ¾Ü¨â£·àª¢ïŸé¯™%Fu\u0000è¿‹â–’}᥷L嗭臖oញc넨\u0016/迎1b꯸g뢱ã§è“¤ä’8C散삭|\"컪輩鹩\"\\g$zG䥽긷?狸꿭扵ã²:URON&oU8": [
- null,
- true,
- null,
- -2.8907335031148883E17,
- -3864019407187144121,
- {
- "`빬d⵺4H뜳⧈쓑ohஸ*ã¶ï»‡â¸•ä µ!iä¬ï¹‘h夘▥ê—푹갇㵳TA鳠嚵\\B<X}3訒câ‹{*ï«¢w]ç’¨-gæ­\\j໵侠Ei层\u0011": 3.758356090089446E-19,
- "䄘ï®)Y놞씃㾱陰í:{\u2059/Sâ“´": [[
- null,
- [[
- -3.8256602120220546E-20,
- null,
- 7202317607724472882,
- "CWQëš¿",
- null,
- false,
- true,
- null,
- 2857038485417498625,
- 6.191302233218633E-20,
- null,
- -6795250594296208046,
- [
- true,
- {
- "%á‹§é°Yᚯ⚀x莰愒Vᔈ턗BNæ´ê¤ŸA1âŒl콹풪H;OX๫륞ìªá°šÑ†@͎黾a邬<L厒Xb龃7f웨窂二;": [[
- null,
- "耲?䙧㘓F6Xsí‹­ë©¢.v뚌?鄟æ â–½'묺競?WvᆾCî»txo?dZ;䨸疎",
- {
- "@hWê‰&\"빜4礚UO~C;ã†î”殩_ꀥè˜å¥¢^챟k→ᡱKMⵉ<\/Jㅲ붉LÍŸQ": false,
- "tU뢂8é¾°I먽7,.Yî°î»´æ½Z툼=&⨥覽K乫햶㠸%#@Zë–æ„“^âŠâ¾‚몒3E_噆J(廊ឭyd䞜鈬Ћ档'⣘I": {
- "tK*ꔵ銂u艗ԃì¿âˆ³ê„‚霫X3♢9y?=â²­dЊb&xy}": [
- -4.097346784534325E-20,
- null,
- 6016848468610144624,
- -8194387253692332861,
- null,
- {
- "(祬诀譕쯠娣cë´r?ç•„kT뼾⌘⎨?noVä˜ì¥ç¡Žn?": [
- 1.82679422844617293E18,
- [
- false,
- 2.6849944122427694E18,
- true,
- [
- false,
- {
- ";0zâ­†;í™”$bਔ瀓\"衱^ï—´?잢ᢛ⣿~`ꕉ薸⌳໿湘腌'&:ryБꋥá¼ê’¥ç­™ê¬œê¸¨?X": -3536753685245791530,
- "c;Y7釚Uꃣ割J༨Y戣w}c峰뢨㽑㫈0N>R$ä…’X觨lë´œA刊8R梒',}u邩퉕?;91Eî¦a䈈ë¯G⊶芔h袪&廣㺄j;ã¡ç¶½\u001bN頸쳘橆": -2272208444812560733,
- "æ‹‘Wﵚî²j鵼駳Oࣿ)#ã¾…é¡‚N傓çºy僱栜'Bê-!KF*ꭇK¦?䈴^:啤wG逭w᧯": "xᣱmYe1Û@霄F$ě꧘푫O䤕í€Pq52憬ꀜ兴㑗ᡚ?ï—ƒLé·íŸî—¼ë­zJê‘™}╆ᅨJB]\"袌㺲u8䯆f",
- "꿽á…㔂긱Ǧ?SI": -1669030251960539193,
- "ì‡É¨`!葎>瞺瘡驷錶â¤ï»®é…œ=": -6961311505642101651,
- "?f7♄꫄Jᡔ훮eì‡îª¼í¾á£ä­´KhखT;Qty}O\\|ë«Iá¿’Ne(5æƒê¥¶ã†·Y9ﮡ\\ oyâ­–-䆩å©m#xë´‰>Y鈕Eç–£s驇↙ᙰm<": {"퉻:dê‚&efᅫ쫢[ï„™\"ëˆëŠ–êº™|Ôå‰1Í–-K:Êšá­•/;ì–㷛]Iç—èŒ4g<Oꗢ뫺N쯂륬J╆.`ᇵP轆&fd$?è‹…oê¶“vO侃沲â©åš…æ²— E%â¿°ì–¦wi\\*è¶«": [
- 3504362220185634767,
- false,
- "qzXæœqT3軞T垈ꮲQ览ᚻ⻑쎎b驌䵆ꬠ5Fà­—ä²ç¼¿ê蒇潇Ltᆄ钯蜀W欥ሺ",
- "ë³°É霬)ì é¶¼kwocì—·èr \u001d쒷⎹8{%澡K늒?iﺩd=&皼倚J9s@3å›twὡgjä íª5⭉⨺役&놎cﺉ㺡N5",
- false,
- null,
- "D0st[ni锹r*0k6ꀎë‡UX2⽼৞䃚粭#)Zæ¡·36P]<\/`",
- 4281410120849816730,
- null,
- -3256922126984394461,
- 1.16174580369801549E18,
- {
- " ᆼꤗ~î…‰*TN긂<㡴턱℃酰^蘒涯잰淭傛2rൡetì¾£ä‡m*ã¸y\"\\糮᧺qv쌜镜T@yg1譬ﭧﳭ\f": null,
- "圾ᨿ0xᮛ禵ਗ਼D-㟻ẵ錚e\"赜.˶m)é´‘B(I$<\/轴퉯æ·â‹âº*)宓쓌?*橯Lx\\f쩂㞼⇸\"ﺧ軂é³V\\ë•’\"캘c:G": null,
- "?ïµ_ê³¢î™ç¿¸íˆ8ã¿ hì—´Q2ã­›}RY㯕YT놂⽻e^B<\/맫ﻇ繱\u0017Gц⟊ᢑﵩS:jt櫣嗒⟰Wã´šæ¦á…‰e[w䋺?藂翙Ⲱ芮ä˜â•¢å›¥lpdu7r볺I è¿‘qFyᗊ": [
- "$b脬aᅠ襬育Bگ嵺Pw+'M<\/ï­näššvèžbNâ’‚}褺%lቦ阤\"ꓺá—Mç‰,Ûžï– Ò¶!矬?ke9銊Xê´¦)䈽í‹è„½á¹«äˆžá´†^=Yá—¿é›4I귺⋥%",
- false,
- 2.9444482723232051E18,
- 2072621064799640026,
- "/_뇴뫢jã’=Nꡦâ†Ôºèµ’â¬î»¼í†¥ä¨žç¯su*媸瀳鷔抡oíº-៳è¾å‹·fç»”:äµ¢æ¢2",
- false,
- "ì’œ Eî½·äŒ/í\u0018懺_<\\隺&{wF⤊谼(<죽é ïŸ‡8?@*rá¶ŠGd뻻갇&Ⳇq᣿e࢔t_ꩄ梸O詬Cá§§Kê© í’¤9눙醅ëž}竸rw?滨ӽK⥿ཊGé­²']`๖5ã„°",
- -2375253967958699084,
- {"嗱⿲\"få„„á¬": {"v?䚑킡`â—¤k3,骥曘뒤Oᒱ㲹^圮᠀YTê»›&ì´®P:G/Tâ£#튣k3ç‚©è k@橈ä·Sä§•,ç†œïŒæ™¬ï£žk1鮥玸먚7䤡fç»å—šìƒ´á¥’~îš¼0q拮垑aë»±Lâ°–_": [{
- ":på°¢": -6.688985172863383E17,
- "A0\u0001疠ﻵ爻鼀湶I~W^å²€mZx#ãˆ7r拣$Ꜷ疕≛⦒痋盩Vꬷá­â„¦Qêªï§éˆ‘A(劽詗ꭅo-ç¶é‘º\"Ⓠ@$j탥;": [
- 8565614620787930994,
- [
- "å¶—PC?à¶‹Q㪣$&j幾㾷hæ…‘ 즊慧⪉霄M窊ê·'鮕)äŠé“¨m趦䗲(g罣ЮKVﯦé®î¦®5囗ﰼ鿦",
- -7168038789747526632,
- null,
- -7.8069738975270288E16,
- 2.25819579241348352E17,
- -6.5597416611655936E18,
- {
- "瘕멦핓+?フZê·¢zé›V": {
- "ᕾ": 1.7363275204701887E-19,
- "ã­Œs뎹㳉": {"\u00187Fï–‰I6Yféº+UC쬸éºâ²ä‚¿ê¸•R\\ᆮC?Φ耭\rOத际핅홦*ë² W㸫㯼᡹cㅜ|Gã®—\u0013[o`?jHVì•?蒪꩚!í«áœ¦ãŒ‡äš‡é¿˜:@": [
- "}푛Г콲<äŸCè—呈#2ã“‹#ྕáŸå°¿9qç«“gI%ëž™mê¬oaç•è´¿Jå’¿D_ç†Zz皳験Iè±¼B扳ḢQ≖㻹㱣Dä¦ï©—2'á—㗣▌ç ²8罿%à°¹F姦;0î·æ‚‡<\/\"påš§",
- -710184373154164247,
- "Vo쫬⬾ê«â´·Å»\u0004éŽHBê…¸_aVBHbN>Z4âœkเꛘZ⥺\\Bʫᇩ鄨魢弞&幟ᓮ2̊盜",
- -9006004849098116748,
- -3118404930403695681,
- {
- "_彃Y艘-\"Xx㤩㳷瑃?%2ä¡éµ›o<A?\"顜ᘌΈ;â·…Cæ´ºL蚴蚀voq:,Oo4쪂)": 5719065258177391842,
- "l륪맽耞塻論å€Eã—‘/㲕QM辬I\"qi酨玑㖪5q]尾魨鲡ƞY}⮯蠇%衟ï„Fsf윔äšì°¤iè…³": {"ꢪ'a䣊糈": {"ë°‘/♋S8sã¼´5瓹O{댞\"9Xï°‡lJ近8}q{긧ⓈI᱑꿋腸D瀬H\"ﺬ'3?}\u0014#?丙㑯ᥨ圦',gé‘ (樴턇?": [
- 2.5879275511391145E18,
- null,
- [
- "3㼮ꔌ1Gẃ2Wé¾™jîªÍŠ{1å›ã¦­9xå® ã‘oRä•犽",
- 1268729930083267852,
- "땕軚⿦7C",
- [
- -3.757935946502082E18,
- "\"赌'糬_2ë­¾áb",
- {
- "(a䕎ጽjÒ°D4.á´¡ïž½66ԃ畮<\/l`k癸\\㇋ࣆ욯R㫜픉녬挛;ڴ맺`.;ç„“q淞뮕ٹ趴r蔞ꯔ䟩vç²u5<\/pZ埖Skrvj帛=\u0005aaï”›": null,
- "璄≩ v몛ᘮ%?:1頌챀H㷪뉮k滘e": [
- "ꤾ{`c샬왌펡[俊络vmz㪀悫⸹ᷥ5o'ã¾µ L蹦qjYIYណԠWëƒå‰«<\/W嗂0,}",
- 2.4817616702666762E18,
- false,
- null,
- null,
- -8.6036958071260979E17,
- null,
- -1.2744078022652468E-19,
- -4.4752020268429594E17,
- 1.13672865156637872E17,
- [
- false,
- false,
- null,
- -4.178004168554046E-20,
- true,
- 2927542512798605527,
- {
- ".ꔓ뉤1䵬cHyæ±¼äŠ†è³“á‡Æ©|樷â‡é†Žã¬…4\u0003èµµ}#yD5è†æ™¹ë±“9ê–è™›J㺕 t䊛膎ؤ": {
- "rVtᓸ5^`েNâ¹»Yv᥋lꌫt拘?<é®°ë„¿ZC?ã’½^": {"âªî©k_:>귵옔夘v*탋èŒ&㳈챗|Oé’§": [
- false,
- "daꧺdᗹ羞쯧Hã¤é„³é ³<型孒ン냆㹀f4ã¹°\u000f|C*ሟ鰠(O<ꨭ峹ipຠ*yà³§4VQè””hVæ·¬{?ᵌEfrI_",
- "j;ꗣ밷é‚副]á—“",
- -4299029053086432759,
- -5610837526958786727,
- [
- null,
- [
- -1.3958390678662759E-19,
- {
- "lh좈T_ë¯Y\"伨\u001cꔌG爔겕ꫳ晚è¸â¿»ìT䯎]~e#฽燇\"5hٔ嶰`泯r;ᗜ쮪Q):/tç­‘,榄&5ï¤ëŽ«ç‹(": [{
- "2áâ“›]r3C攟וּ9è³µsâ›”6'ஂ|\"ⵈ鶆ä¹ç¦3\"痰ࢤéœäµ©ì˜†äŒ€?æ •r7Oç°‚Isd?K᫜`^è®¶}zî°’8?zì–°î§T:X倫⨎ꑹ": -6731128077618251511,
- "|︦僰~m漿햭\\Y1'Vvخ굇á‰ì±¢cè¶–": [null]
- }],
- "虌魿閆5⛔煊뎰㞤ᗴꥰF䮥蘦䂪樳-Ká·-(^\u20dd_": 2.11318679791770592E17
- }
- ]
- ]
- ]},
- "묗E䀳㧯᳀逞GMc\bï•¹å¢¹ã“„ë–Æ &U??íŽŒé‘ åª‹k))ᄊ": null,
- "묥7콽벼諌J_DɯﮪMæ®´ä£,煚ྼ`Y:ì”§<\/â©«%yf䦀!1á²¶kì¶ŽQç±³W∠WC跉鬽*á›±i<?,l<崣炂骵*?8í‘៣ⰵ憉⎑.,Nwç½£q+ο컆弎": false
- },
- "e[|଀+î±³lꑸãˆTT?ë¿¿|ê«›9`㱯䊸楋-곳賨?ì³k棽擋wQ餈âŸNq[q霩䵀뷮锅ꚢ": 5753148631596678144,
- "sá“鴻߸d렶ὕ蜗ဟ툑!诉౿": false,
- "|4䕳鵻?䈔(]í‹/Ui#æ¹»{듲ーMá‹€t7潔泄Ch⸨}ì£`î¤èž§éŠšã‹¼å£¯kâ°¥Q戵峉갑xè¾™'ì²›": "jd䘯$䕌茷!auw眶ㅥä£ê†¢æ°‘i",
- "剖駰Ɜî¶sM2]á¾´2ࡷ祅拌Av狔꩛'ê“—í‚§ê£0酜✘O'": false,
- "澩뢣ê€eU~D\\ꮡ킠": "v^YC嚈ί\u0007죋h>ã´•L꘻ê€ì“ª\"_gé¿„'#tâ½™?,Wg㥖|D鑆eâ¥ìª¸åƒ¬h鯔咼ඡ;4TKèŽî¾‘졠嫞"
- }
- ]
- ]
- }
- ]
- ]
- ]}}
- }
- ]}
- },
- "뿋뀾淣截䔲踀&XJ펖꙯^Xb訅ꫥgá¬>棟S\"혧騾밫ê²7-": "擹8C憎W\"ìµ®yR뢩浗絆䠣簿9äˆå¼•Wcy䤶孖ꯥïž;íŒ]輩ä3@{å 뽸0ï€á¡ˆìµ¡î›„Ⲇ\u001dLåŒê§2F~ݕ㪂@W^é½L襒ᦘî¢~沦zZ棸!꒲栬R"
- }
- ]
- ],
- "Z:ëƒàµ›5Iz찇䅄駠㭧蓡K1": "e8᧤좱U%?ⵇ䯿é¿\u0013縮R∱骒EO\u000fg?幤îš@֗퉙vU`",
- "äƒìªˆï‘’埽້=Ij,쭗쓇చ": false
- }]}}
- ]
- }
- ]}
- }
- ]
- ]
- ],
- "咰긖VM]á¼6䓑쇎çºetDÒŒ?ãžê©„퇫밉gj8è ƒ\"â©5䛹1ࣚ㵪": "ക蹊?⎲⧘⾚̀I#\"䈈⦞ë·`wo窭戕෱휾䃼)앷嵃꾞稧,Ⴆ윧9S?೗EMk3Მ3+e{â¹”Te驨7äµ’?타Ulg悳o43ï“¢"
- }
- ],
- "zQᤚ纂땺6#ٽ﹧vï¿¿#ࠫ휊冟蹧텈ꃊʆ?&a䥯Deæ½|ì¿“pt瓞㭻啹^盚2êŠf醪,ì–T窧\\Di䕎谄nn父ꋊE": -2914269627845628872,
- "䉩è·|㨻ᷢã‰B{蓧瞸`î°²I!℄욃힕#ೲᙾ竛ᔺCjk췒늕貭è¯\u0017署?W딚%(pê⤼ë³^=on뺲l䆼bzrﳨ[&j狸䠠=ᜑꦦ\u2061Õµnj=牲攑)Mî»\\é¾": false,
- "뎕y絬᫡⥮Ϙᯑ㌔/NF*Ë“.ïž¿,QEzvK!Iwz?|쥾\"ê©»Lê¼—Bê”§è³´ç·œs뉣隤茛>ロ?(?^îµ­`>冺飒=噸泥⺭Ᲊ婓鎔븜z^å·è£®Ãªâ“…à»—jM7ﶕ找\\O": 1.376745434746303E-19
- },
- "ä›ræ»–wã¤<k;l8ꡔጵ⮂ny辶⋃í¼åƒ®z\"﮲X@t5෼暧퓞猋♅䦖QCé¹®|픨( ,>,|Nዜ": false
- }
- ]],
- "@ê¿™?è–•å°¬ gd晆(ë„5躕ﻫS蔺4)떒錸ç“?~": 1665108992286702624,
- "wë¯ná =`঺ᅥC>'從ë槷ä¤çœ·èž„ãŽ»æ°æ‰°XᅧCè´½uáƒë‚ŸjKD03T!lDV쀉Ӊy뢖,袛!终캨G?鉮Q)â‘—1쾅庅O4ê‰H7?d\u0010蠈줘월Þ粯Q!낇껉6í…|{": null,
- "~˷jg쿤촖쉯y": -5.5527605669177098E18,
- "펅Wᶺzê†ã¨í‘­e?4j仪열[D<鈑皶婆䵽ehS?袪;Hê¨Më—Žã°[(å—M3qíŸg4y╸鰧茀[Bi盤~ï«å”Žé‹†å½ºî½«â¦Šq?î–³B4쉓癚O洙킋툈䶯_?ퟲ": null
- }
- ]
- ]]
- ]],
- "꟱Ԕã¤7æ›ï¦—ಃéŒVä·°?v㪃૦~K\"$%请|ꇹn\"kä«›ã¨é²¨\u2023ä„¢\u0004[<S8á¬ë­©è„¥7U.m࿹:Dè‘┆2蘸^U'w1ì …;䠆ꋪBê»®>︊Vï‹•J?䶟ាꮈ䗱=깘U빩": -4863152493797013264
- }
- ]}]}
- ]
- }}}
- ],
- "ì·ì²Û¹í‰ƒ~aEå”™a챑,9㮹gLHd'ä”|í‚—ãžäŽ¥&KZYTë§µ7䥺N<Hp4ê•­â¹ ê½c~çš½z": "课|á–¾ä¡å»‹è„äªW\u0016&Jnê´b~æ‘“M>â±³åŒèŽžé¿§w\\༌疣n/+ꎥU\"å°ëž¾â—‹íŸ™AJá­Œ?9ä›$?é©”9è®ì§˜é­¡TÖ¯cè—³`虉Cì‡ì¦T"
- }
- ],
- "è°¶ê°œgTRï¿>áµÍšdtæ™‘ä‰‡é™æ»º}9㉸P漄": -3350307268584339381
- }]
- ]
- ]
- ]]
- ]
- ],
- "0y꟭馋X뱔瑇:䌚ï¿å»¿jîžg-懲鸭䷭垤㒬茭u賚찶ಽ+\\mT땱\u20821殑ã„J쩩䭛ꬿNSæ½”*d\\X,壠뒦e殟%LxG9:摸": 3737064585881894882,
- "í’µO^-â§§â…¶vѪ8廸鉵㈉רâ†Q㿴뺟EႳvNM:磇>wî·/៻唎뷭୥!냹D䯙iëµ±è²C#⼉NH6`柴ʗ#\\!2ä‚—â±§f?諳.Pëˆ-è¿”I꘶6?8î“ê˜": -8934657287877777844,
- "溎-è˜å¯ƒi诖ര\"æ±µ\"\ftl,?d⼡쾪⺋h匱[,à·©I8MÒ§F{kç“¿PAî…§'橸ꩯ綷퉲翓": null
- }
- ]
- ],
- "ោ係Øî½<å…ƒ": 1.7926963090826924E-18
- }}]
- }
- ]
- ]]}]
- }]
- ]
- ]
- ]
- ],
- "ጩV<\"ڸsOᤘ": 2.0527167903723048E-19
- }]
- ]}
- ]
- ]],
- "∳㙰3ì ´pá§—ä±™?`<U὇<\/æ„E[ᮚAî›j诂ᒽ阚uv徢ဎ떗尔ê½í›€ì©‘Jä´?âª=륪ᆩ푰ஓã•?럽VK\"X?檨လ齿I/耉A(AWA~â¯ç¨è¹«": false,
- "å’å¦ë¾‡}䀼链i⇃%⋜&ç’ªIx渥5æ¶§qq棩á¥-â «AA낇yY颕A*ïˆè£¦O|n?䭬혗F": null,
- "ç­CLì–­B혆Kॎ`鎃nrî€sZiÕªWç )?p~K~A眱ä²QO妣\u001b\u001b]ᵆᆯ&ã‹á¹è±‰ëº˜$ê­§#j=C)祤⫢歑1o㒙諩": 7028426989382601021,
- "쳱冲&ဤäŒì•§h胺-é½±H忱8왪RDKᅒ䬋ᔶS*J}ስ漵'㼹뮠9ê±¢9p봋경ጕtởꚳT䶽瘙%ì¶´`@nಆ4<d??#僜ᙤ钴=薔ꭂbLXNam蹈": "樭る蹿= Uî ƒurwkn뙧⌲%\"쑃牪\"cq윕o@",
- "溌[H]焎SLã…?뀼䫨ç½W": 1.1714289118497062E-19,
- "ﬢp븇剌燇kĔ尘㶿㴞ç ê¾˜Ia;sâº^)$ç©®?sHᢥíªl": null
- }
- ]
- }
- ]
- },
- "TKnzj5o<\/K㊗ꗣ藠⦪駇î€>yZA8Ez0,^á™›4_0븢\u001ft:~䎼s.bb룦明yNP8弆Cå¯;⪾ì§'蕴뮛": -6976654157771105701,
- "íµê¦€\\㇑:nî‹™v+뒤燻䀪ﴣï·9ᚈ኷K㚊誦撪䚛,ꮪxሲ쳊\u0005HSf?asg昱dqꬌVꙇ㼺'k*'㈈": -5.937042203633044E-20
- }
- ]
- }],
- "?}\u20e0],så¶³è‹@#2uì’´sQSä©—=ꥮ;烌,|ꘔ䘆": "á…©ì˜Nç’ kZ먕眻?2ቲ芋眑D륟渂⸑ﴃIRE]å•—`K'"
- }},
- "쨀jmV賂ﰊå§ä‚¦çŽžã¬™áªM᪟ïՎ씜~`uOn*ॠ8\u000ef6??\\@/?9見d筜ﳋB|Sä¬è‘«ã½o": true
- },
- "즛ꄤ酳艚â‚㺘봿㎨iGà§•à¡¿?1\"䘓您\u001fSáŠâº¿æºzៀ뻤B\u0019?ìœa䳵᭱䉺膷d:<\/": 3935553551038864272
- }
- ]
- ]}
- ]]
- ]]
- ]}
- }
- ]
- }
- ]]}},
- "᥺3h↛!ê‹°y\"攜(ெl䪕oUkc1A㘞ᡲî촾ᣫ<\/ä’ŒEã›æ½¨i{ï  v?Wà±¾H\\RჅpzè¬R脾;v:碽✘↯삞鷱o㸧瑠jcmK7㶧뾥찲n": true,
- "ⶸ?x䊺â¬-ä°…â‰!e쩆2ꎿ准G踌XXᩯ1ß}0?.í—€Z馟;稄\baDꟹ{-寪⚈ꉷ鮸_L7ƽᾚ<\u001bጨA䧆송뇵⨔\\ç¤ë—”d设룱㶉cq{Hyã±R㥽å¢ï¬…p": -7985372423148569301,
- "ç·«#ì½®IB6<\/=5Eh礹\t8럭@饹韠r㰛斣$ç”LVì·a갵îŸ'请o0g:^": "䔨(.",
- "ë³â„¡åœ¤pï¾à¯„Ä倧訜BìŸGä™”\"Sbâ“®;$$â–S1J뢙SF|赡gï„€*\"Vu䲌y": "䪈&í‹),\\kT鬜1í’¥;ë·´'Zေ䩹@Jéž½Nã¼M?å¥eWb6榀ƩZڮ淽⺞삳煳xჿ絯8eâ¶ç¾·V}ჿ쎱䄫R뱃9Z>'\u20f1â“•äœé½®"
- }
- ]
- ]]]
- }}
- }
- ]
- ]},
- "펮b.hç²”í¯2npXè©«g錰鷇㇒<ì™S値bBi@?镬矉`剔}c2壧ଭfhY깨R()痩⺃a\\â”?M&ﯟ<劜꺄ï‘멊ᄟA\"_=": null
- },
- "~æ½¹Rqn榢㆓aR鬨侅?䜑亡V_ç¿…ã­”(ä“·w劸á³Dp䀅<\/ï°Žé¶Šm䵱팱긽ꆘ<tD쇋>긓准D3掱;o:_Ñœ)껚콥8곤d矦8nP倥ꃸI": null,
- "뾎/Q㣩㫸벯➡㠦◕挮aé¶§â‹“å¼\u00001뱓fm覞n?㛅\"": 2.8515592202045408E17
- }],
- ",": -5426918750465854828,
- "2æ««@0柡g䢻/gꆑ6演&D稒肩Y?艘/놘p{f투`飷ᒉ챻ëŽîª–<늛ä˜ï´¡ì¤°ì«„": false,
- "8î™–(鸑嵀⵹ퟡ<9㣎Tߗ┘d슒ل蘯&㠦뮮eà kç g ì—»": false,
- "d-\u208b?0ﳮ嵙'(J`蔿d^踅⤔榥\\J⵲v7": 6.8002426206715341E17,
- "ཎ耰í“ê•ï’ã±·\u0013y=詽I\"盈xm{0쾽倻䉚ષso#é°‘/8㸴짯%ꀄ떸b츟*\\鲷礬ZQå…©?np㋄椂榨kc᡹醅3": false,
- "싊j20": false
- }]]
- ]],
- "ä¿›\u0017nç·½Tu뫉èœé¼Ÿçƒ¬.ï‘ꭠIâ°“\"Ἀ᜾uC쎆J@å¤%ê›m뻨ᾀ画è›íœƒT:錖㑸ዚ9죡$": true
- }
- ]
- ],
- "ãµâ‡˜ê¦–辈s}㱮慀밒s`\"㞟j:`ií”»Z<C1衽$\"-饧?℃\u0010⼒{î°p飗%R\"ä²”\")ì¹€\\%": true,
- "苧.8\u00120ݬ仓": 6912164821255417986,
- "ë–Žé¡£ä¿X;.#Qí‹.笂'p쟨唒í랩냆¦aâ±{è°.b我$蜑SH\u000fç¾=äŸ¼â£¼ï©¿áœæ”•B&挰繗ã”ê…‚-Qv\\0ä¶äš¥ãºio[㑮-ᇼ䬰컪ṼiY){ë°\u0010q螰掻~\n輚x\u0014罺)è»´": 3.024364150712629E-20
- }
- ]
- ]
- ]
- ]}
- ]]
- }
- ]
- ]]
- ]
- ]]]],
- "\"凲o肉Iz絾豉J8?i~傠᫽䇂!Wï›—D溊J?á¡’vsè†åµ¹âž’ïŸæ·´î‡…>ì„«^諎0Ok{켿æ­à·£èƒ°a2﨤[탳뚬쎼嫭뉮m": 409440660915023105,
- "w墄#*ᢄ峠밮jLa`ㆪ꺊漓Lã§ëŽ!Agkï¹ï¾'ê›ë¢ƒã¯å²¬D#ã’¦": false,
- "ଦPGI䕺L몥罭ꃑ궩﮶#⮈ᢓӢ䚬p7웼臧%ï‘¥~Sè âŒíž€6îž’&t䳙y㪘ëƒ\\*;é‰ï¿Šé¿µ'å—•pa\"oL쇿꬈Cgî“": "ã¶½1ç¸D⟸䴅ᆤ뉎﷛渤csî¸x ä”цꬃ锚æ¬?ຽ+x~꘩uI࡞\u0007æ ²5呚ẓem?è¢\")=㥴䨃pac!/æŽY",
- "á·±o\\||뎂몷r篙|#X䦜I#딌媸픕åžRDæ–³X4t⯩夬=[ï‹ë­²r=绥jhë·±ì¸âª˜%]⚋܈㖴スHí…¹m(WOæ›åЉ0~K3c柢Õã‰ïªªé€³~": false,
- "ç…½_qb[첑\\륌wEâ½Ztï”´CNï­+餌ᕜOê›­": "{ﳾ쉌&s惧á­âµ†3䢫;䨞팑ï›ê’ªí˜è¤€à¢–Qä ¿V5뭀䎂澻%ë°›u5í…¸oA⮥U㎦;B䳌wzä•™$áž¿\\௅婺ëµâª¾í†\\`Kyौꋟ._\u0006L챯l뇠Hi䧈å’5",
- "艊ä½à£ƒë¡‡ä± çˆ¬ï˜‚!*;⨣æŽïžæ…“qé“|儑ᨋL+è¿¥=6㒺딉6弄3è¾…J-㕎뛄듘SG㆛(\noAzQê±ä°©X*ã¢O퀌%펠낌moí‹®a^<\/F&_눊ᾉ㨦ы4\"8H": 2974648459619059400,
- "鬙@뎣䫳á®ë¡?){y?5K;î§„TA*k溱䫜J汃ꂯ싔ì\u001dA}룖(<\/^,": false,
- "ëª@QꋦFꊩá’뎶î‡lXl垨4î¤^郣|ꮇ;ä´á“}ìµ²zç–": null
- }
- ]]]],
- ":_=ë‹§å¼—D䙋暨é›. 㱻붘ä‚Jå„’&ZK/녩䪜rå›â½¯D喠죥7ï“⹌䪥c\u001a\u2076￞妈朹oLkè®F౟覛ì§ã®7T;}è›™2{9\"å´“bB<\/⡷룀;즮鿹)丒툃୤뷠5W⊢嶜(fb뭳갣": "E{å“1WM"
- }},
- "䘨tjJ驳豨?y輊M*᳑梵瞻઻ofQG瑮e": 2.222802939724948E-19,
- "ä®´=â‘âž¶Tà·‹wäžœ\"垦ꃼUt\u001dx;B$뵣䙶E↌艣ᡥ!á§Ÿ;ä±€[䔯k쬃`à©8饙른ç†î‹”'2_'袻tGfè’­J땟as꯳╖&å•’zWࡇᒫYSá¬\u0014ℑ첥鈤|cG~Pá“®\">\"": "ႆl\f7V儊㦬nHꄬꨧC{ì¢~C⮃⛓嶦vꄎ1w鰠嘩뿠魄&\"_qMâµ–é‡”ë…®îœ¡ê‡ ãš{ç³Jå“‹ cî°¸v?-jkﻯྌ鹑L舟r",
- "龧葆yB✱H盋夔ﶉ?n*0(": "ꧣኆ㢓氥î³qZZ酒ຜ)鮢樛)X䣆gTSî»»Ò‘Gí…žï’˜k.J圬ç–ë¡«ïœì¯­z L:\\ྤ@w炋塜쿖ᾳy뢀䶃ë±N䥨㚔勇ê²#p",
- "ë„畎Q娡\"@S/뼋:äµ!Pè¡…ì´šfVHQs✜á«i㻑殡B䜇%믚k*U#濨낄~": "êŸá‹•ì³¸êˆæ•‹&lå¦\u0005憡멗瘌uPgá…ªm<\/To쯬锩h뒓k"
- }
- ]
- }],
- "墥홞r绚<\/⸹ⰃB}<躅\\Y;๑@䔸>韫䜲뱀X뗩鿥쩗SI%ﴞ㳕䛇?<\/\u00018x\\&侂9é‹™a[LRã‹­W胕)â¡¿8ãž™0JF,}?í—ˆd1cDMáƒâ›é„ⱕ%X)!XQ": "â³ê—³=橇a;3t⦾꼑仈î¥á€°aᚯ⯋ꕃAsé´·Nâ•_䎃ꙎAz\u0016䯷\\<à¿«>8q{}ï½·?ᣰ}'0ᴕ펓B┦lF#趤厃T?㕊#撹圂䆲"
- },
- "Ü‹ë‹é¾«ï¥c웑": false,
- "ㇿ/q\"6-co髨íœCí¦#\u001b4~?3ä¹E삇<<": 7.600917488140322E-20,
- "äE6?㣖êƒé—´t祗*é‘ {ḣV(æµ¾h逇íž=W?ૉ?nꇽ8ꅉຉj으쮺@Ꚅ㰤u]Oyr": "vâ‰á«¸_*όAඤԆl)ۓᦇQ}í zà¼q滚",
- "ソ᥊/넺I": true
- }]]
- ]
- ]
- ]
- ]]
- },
- "䭑Ik攑\u0002QV烄:芩.麑㟴㘨≕": true,
- "å„꿕C쇻풉~å´%碼\\8\"䬦꣙": null,
- "欌L圬䅘Y8c(♺2?ON}o椳s宥2䉀eJ%é—¹rå†O^K諭%凞⺉⡻,掜?$ꥉ?略焕찳㯊艼誜4?\"﯎<ï±ã‚›XáˆINT:è©“ +": -1.0750456770694562E-19,
- "ç’àc뜭싼ﺳ뎤K`ïŸ]p隨LtE": null,
- "ç”™8䵊神EIꩤé¯á¢€,ïµ®Uä‘u疒ử驺䚿≚ഋ梶秓F`覤è­#짾蔀묊4<åªì¬¦éª_Yzgcà¡¶î²§4kç´¥`kc[Lï®—î°£ç°*I瀑[â¾°L殽鑥_mGÈ <\/|囹ç gæ¡°iri": true,
- "챓ꖙꟻì¢è‡ou,å— 0\\jK핻뜠qwQ?ഩ㼕3Y彦b\u009bJ榶N棨f?ë¦é–綃6é³µM[OEë´¨uí–.Ꮁ癜蟳뽲ꩌ뻾rM豈Rï¨ç¾« uDꎚ%": null
- },
- "V傜2<": 7175127699521359521
- }],
- "é“«aG切<\/\"ী⊆e<^g࢛)Dé¡ï½Žï¬®é¥¼\u008c猪繩嵿ﱚCꡬ㻊g엺Aì—¦\u000fæš¿_f꿤ë³ã¦•桦`蒦䎔j甬%å²rj ç³": "䚢åŽëˆ´Au<4箞7礦Iï±”å eȧ䪸uï„€äµp|逹$嗫쨘ꖾï·!胠z寓팢^㨔|u8Nሇe텔ꅦ抷]،鹎ã³#༔繁 ",
- "낂乕ꃻ볨ϱ-ꇋã–fsâ¿«)zꜦ/K?솞♞ꑌ宭hJ᤭瑥Fu": false,
- "쟰ãœé­›G\u0003u?`㾕ℾ㣭5螠烶這趩ꖢ:@å’•ê¶xë’˜ëŠmä°¨bç—ƒë 0鳊喵熬딃$摉_~7*ⱦ녯1錾GKhJ惎秴6'H妈Tᧅ窹㺒疄矤铟wላ": null,
- "쯆q4!3錕ã²âµ†ã‡›ê˜·Zç‘©ë­†\\â—ªNH\u001d\\ã½°U~㯶<\"쑣낞3ᵤ'峉eꢬ;鬹o꣒木X*é•·PXᘱu\"ä ¹n惞": null,
- "ᅸ祊\"&ꥴCjࢼ﴿?䡉`U效5殼㮞V昽êª#ﺸ\\&t6x꠹盥꣰a[\u001aêªSpe鎿蠹": -1.1564713893659811E-19
- }
- ]]
- ]
- ]
- ],
- "羵䥳H,6ⱎ겾|@t\"#í–Šî¦1|稃 ì„­)ëœ=뻔ꡜ???櫎~*ῡ꫌/繣ﻠq": null
- }
- ]}
- ]},
- "츤": false
- }},
- "s": 3.7339341963399598E18
- }
- ],
- "N,I?1+㢓|ࣱ嶃쩥V2\u0012(4EE虪朶$|w颇væ­¥": "~ì¢~_,Mzrã«YB溓Eæ·š\"â…¹äˆ”áºæŠ™ b,nt5Vã’J檶ê¨â»”?",
- "Q껑ꡡ}$넎qHç…”æƒ/ez^!ẳF댙äŒé¦»å‰8": "梲;yté’°$i冄}Aî‘”L%a jëœå¥·ê±³ëš¾d꿽*ሬuDY3î…—?뮟鼯뮟wãªí‹±îŸ‚V",
- "o{Q/K O胟ãzUdê€m&⨺J舕â¾é­¸è¨ŸãŒ¥[T籨櫉å”í‚ aṭ뱫촙莛>碶覆⧬짙쭰ׯdAiH໥벤í¥_æ¸[ 0î­¬e:죃TCå¼¼èŽëµDA:w唵ê£": null,
- "á½æ¨Žäµ®è»§|?à±—aWH쩃1 ê…­su": null
- }
- ]
- },
- "勂\\&m鰈J釮=Ⲽ鳋+䂡郑": null,
- "殣b綊倶5㥗惢⳷è¢á‘€ä¬„é•§M^ï±´3⣢翣næ«»1㨵}ኯ뗙顖Z.Q➷ꮨ뗇\u0004": "ê”™ä¼>n^[GीA䨟AMç¢á’ŠS쨲w?d㶣젊嘶çºéº“+æ„£a%気ྞScë“ᔘ:8bM7Xd8㶑臌]Ꙥ0ê­ì’™ä«£æŒµCè–½î€Dfⵃ떼᷸",
- "?ç´¡.ì…ª_à·¨j\u0013Oxâ” $Xᶨ-á…‡oè–¹-}軫;yæ¯ãªœKã£?.EVì®±4둽⛻䤜'2盡\u001f60(|eì°ã¼Žá¦€ã’§-$l@ﻑå³\u0003ä­±å“å·—WFo5c㧆Tí„Y맸♤(": -2.50917882560589088E17
- }}
- ],
- "侸\\릩.᳠뎠狣살cs项䭩畳H1s瀉븇19?.w骴崖㤊h痠볭㞳㞳ä®Ql怠㦵": "@䟴-=7f",
- "鹟1x௢+d ;viä­´FSDS\u0004hꎹãš?â’â¦Ñž6u,扩@ë·Su)Pag휛Tá’—Vç—©!çžé‡€ê–žè˜¥&ೞè˜ê­°êž‡áŽ": "ah懱Ժ&\u20f7䵅♎඀䞧鿪굛ౕ湚粎蚵ᯋ幌YOE)५襦ãŠY*^\"R+ඈî¶å’·è¶9î—ꥂ榨艦멎헦é–ë¶v좛咊E)K㓷ྭr",
- "æ†q쮦4綱켙ì….f4<\/g<籽늷?#蚴픘:fF\u00051㹉뀭.á°–í’ŽfÖ¦Hv蔎㧤.!ä­½=éž½]ìŒH:?\"-4": 8.740133984938656E-20
- }]}
- }
- ],
- "tVKn딩꘥⊾蹓᤹{\u0003lR꼽ᄲQFá…傅ﱋ猢⤊á”,E㓒秤nTà¶­v`â™›I\u0000]꫔ṞD\"麵cè¸î“²æ°X&æ¿¿ë˜ê£¹ê¹³à±¥è‘‚鿎\\aꡨ?": 3900062609292104525
- }
- ],
- "ਉ샒⊩Lu@S䧰^g": -1.1487677090371648E18,
- "⎢k⑊꬗yá«7^err糎Dt\u000bJç¤¯í™•ã†æ²‘サꋽeèµ”ã¢^J\u0004笲㿋idra剰-᪉C錇/Ĝ䂾ညSì§€?~ì½®gR敉⬹'ä§­": 1901472137232418266,
- "ç—kä¶¥:?ì´½è´ì“‰ê“ˆã’¸gç˜[뵎\\胕?\u0014_榙p.j稶,$`糉妋0>Fá¡°ly㘽$?": "]ê™›O赎&#ã ƒë±å‰³î°·\"<â—†>0誉é½_|z|裵씪>áŒã¼\"Z[ç•}O?G뚇諦cs⠜撺5cuç—‘U圲\u001c?鴴計lì¶¥/╓哼䄗èŒîšªê®…뫈댽AëŒë¡–뤫V窗讬sHd&\nOi;_î´–u"
- }
- ],
- "Uﺗ\\Y\\梷䄬~\u0002": null,
- "k\"Y磓ᗔ휎@U冈<\/w컑)[": false,
- "æ›Jè·âŒ»ë¦\u001f㙳s꥓âŸé‚«P늮쥄c∬ྡྷ舆렮칤Zè¶£5콡넛A쳨\\뀙骫(棻.*&è¼›LiIfi{@EA婳KᬰTXT": -4.3088230431977587E17
- }]}
- ]
- ],
- "곃㲧<\/dఓꂟs其ࡧ&N葶=?c㠤Ჴ'횠숄臼#\u001a~": false
- }
- ]
- ]}]
- }]
- }}
- ],
- "2f`â½°E쵟>Jî•笂裭!〛觬囀ۺ쟰#桊l鹛ⲋ|RA_Vxá­gEë“h﵀mfá»|?juTUæ¡£[d⢼⺻p濚7E峿": 5613688852456817133
- },
- "濘ë¶gå¿®7ãµæ®¬W팕Qæ› ë«°)惃廊5%-î«è¹šzYZ樭ﴷQ锘쯤崫îŸgg": true,
- "絥ᇑâ¦ì’“븣爚H.ã—Šß„o蘵貆ꂚ(쎔O᥉î¼ï®“]姨Wê“!RMA|o퉢THxè½®7Mê»U즨'i뾘舯o": "è·¥f꜃?"
- }}
- ],
- "é·°é¹®K-9k;ï°°?_ݦѷ-ꅣ䩨Zꥱ\"mꠟ屎/콑Y╘2&鸞脇ã¢ê€‡à ºâ°¼æ‹¾å–­í‹®îL꽩bt俸墶 [l/웄\"꾦\u20d3iও-&+\u000fQ+໱뵞": -1.296494662286671E-19
- },
- "HX੹/⨇୕붷Uﮘ旧\\쾜͔3l鄈磣糂̖䟎Eá³wæ©–bá¿€_딕huè‘°î¤çª³é—¹Ð²U颵|染H죶.fPä—®:jä«¢\\b뎖i燕ꜚGâ® W-≚뉗lè¶•": "ଊ칭Oa᡺$IVã·§L\u0019脴셀붿餲햪$迳å‘ì¯ì¼‚PqfT\" ?î¹€I屉鴼쿕@ç¡™z^é•㊵M}ãš›T젣쓌-Wâ©-g%⺵<ë®±~빅╴瑿浂脬\u0005왦燲4áƒb|Då § <\/oEQh",
- "䘶#㥘à©îººìº”ï” f巋ἡAJ䢚쭈ࣨ뫒*mᇊK,ࣺAꑱ\u000bR<\/A\"1a6鵌㯀bh곿w(\"$ê˜*rà²è¶£.dà¿©k/抶면䒎9W⊃9": "漩b挋Swè—Ž\u0000",
- "畀e㨼mK꙼HglKb,\"'䤜": null
- }]}]
- ]
- ]
- }]
- ]}
- ]
- ]}
- ],
- "æ­™>駿ꣂ숰Q`J΋方樛(d鱾뼣(ë«–í„­\u20f9lচ9æ­Œ8o]8윶lì–¶?é•–G摄탗6í‹íµ+g:䱫홊<멀뀿/س|ê­ºsê±è·¶ç¨šW々c㫣⎖": "㣮蔊깚Cꓔ舊|XRfé»ã†šï¸†'쾉ì·\\&言",
- "æ®­\"cÞɨê™äž˜:嬮eæ½½Y펪㳅/\"O@à —ê²´]ì·–YÇž(t>R\"N?梳LDæ­=næ°¯Tè±°2R諸#N}*ç§ï¡§4}ã¶ŠGä£bì–š": null,
- "襞<\/å•§ B|싞W瓇)6簭鼡艆lNì©`|펭佡\\é–“é‚[z릶&쭟愱ꅅ\\Tá°½1靝忠ˆ4̸s윜R7â’/똽?치X": "âŠèº–Cﱰ2Qẫè„&இ?%ëƒæ‚Š",
- ",é°§åµì…£îˆ›ì‹¹xᎹ힨᯳EṬHïŽã¹–9": -4604276727380542356
- }
- }
- ]]]],
- "웺㚑xs}q䭵䪠馯8?LB犯zK'os䚛HZ\"L?셎s^㿧㴘Cv2": null
- }]
- ]
- ]
- ],
- "Kdî©´2Kv+|z": 7367845130646124107,
- "ᦂⶨ?ᢠ祂些ഷ牢㋇æ“\"腭䙾㖪\\(y4cE뽺ㆷ쫺ᔖ%zfÛ»$Ñž1柦,ã¶¢9r漢": -3.133230960444846E-20,
- "ç˜Mç„€q%㢟f鸯Oâ£è“‘맕鯊$Oå™·|)z褫^㢦⠮ꚯ꫞`毕1qꢚ{ĭ䎀বώT\"뱘3G൴?ï¢ï¢^^oï…¯f": null
- }
- ],
- "a8V᯺?:ﺃ/8ꉿBq|9啓댚;*i2": null,
- "cpT瀇Hç°á»ªpೃi鎪Rrâ£ìˆ¬-鹸ҩ䠚z脚цGoN8å…¥y%è¶ŒI┽2ឪЀiJNcN)æ§£/â–Ÿ6S숆牟\"箑X僛G殱娇葱T%æ»:J諹昰qV쨰": 8331037591040855245
- }],
- "G5ᩜ䄗巢껳": true
- }
- },
- "Ồ巢ゕ@_è­™A`碫é„㡥砄㠓(^K": "?܃B혢▦@犑ὺD~Tâ§|é†;o=J牌9냚⢽㨘{4è§èš”9#$∺\u0016p囅\\3Xk阖⪚\"UzA穕롬✎âžã­’춺C㣌ဉ\"2瓑员ᅽê¶ë«}꽚ꞇ鶂舟彺]ê½JCè§éЉ",
- "â†Äšè†\"b-í‰ACR言J謈53~V튥x䜢?ꃽɄY뮩ꚜ": "K/↾eèƒ}]Bs⾿q룅鷦-膋?m+æ­»^魊镲6",
- "粡霦cæž‹AHíŸo礼Ke?qWcA趸㡔ê‚?\u000eì¶‚8iতᦜ婪\u0015㢼nﵿê»!á´é–¢\u001d5j㨻gfá¿©UK5Juä¸tã‹TI'?ã“t>⼟o a>i}á°—;뤕Ü": false,
- "ꄮ匴껢ꂰ涽+䜨B蛹H䛓-k蕞fu7kLè°–,'涃V~챳逋穞cT\"vQ쓕ObaCRQã“¡â²®?轭⫦輢墳?vA餽=h䮇킵ní²í‰…喙?\"'1ç–¬V嬗Qdç—'Lự": "6v!së¯ã­Ÿî€µî¦˜ã£¯çƒ!磸餠ቂh0C뿯봗Fé·­gê–¶~コkK<ᦈTtïŽ\\è·“w㭣횋钘ᆹ듡䑚W䟾X'ê…”4ï€FL勉Vܴ邨y)2'〚쭉⽵-鞣E,Q.?å—",
- "?(˧쩯@å´Ÿå‹æ­„K": null
- },
- "Gc럃녧>?2DYIé´¿\\륨)æ¾”0ᔬlx'è§”7젘⤡縷螩%Sv׫묈/]↱&S ï…h\u0006æ­‹á‘›xi̘}ã²Y蔯_醨鯘煑橾8?䵎쨋z儬ê*@츾:": null
- }
- }
- }
- ]
- ]
- ]}
- },
- "HO츧G": 3.694949578823609E17,
- "QC\u0012(翻曇Tfã·ŸbGBJ옉53\\嚇ᛎDï–/\u001b夾á‰4\"í•€@祎)쫆yD\"i먎Vnî¿ã¿¿V1Wá¨ä¶€": -6150931500380982286,
- "Zã“®P翸é±é‰¼K䋞꘺튿â­Y": -7704503411315138850,
- "]모开ꬖP븣c霤<[3aΠ\"é»ä––䰑뮋ꤦ秽∼㑷冹T+YUt\"싳F↭ä–&鋌": -2.7231911483181824E18,
- "tꎖ": -4.9517948741799555E-19,
- "䋘즊îŽ.⬅IꬃۣQ챢ꄑé»|f?C⾺|å…•ì¯sC鬸섾整腨솷V": "旆柩l<Ké«î–žM戶鯮t:wRî°2ꉱ`9'l픪*í芦㊢Pjjoå ¡^ ì‡ì–›å¶…있ষ0?F",
- "下9T挞\\$yᮇk쌋⼇,ਉ": true,
- "櫨:ㆣ,é‚lî ¬r崕祜ã®çƒœZ,XXD蕼㉴ kM꯽?P0﹉릗": null,
- "îŠgv솠歽閘4镳䗄2æ¾¾>쪦sá–¸My㦅울ì‰ç˜—㎜檵9ï……ê‚駓ૉᚿ/u3ì”…å¾ï¤¥[Z䞸ࡗ1ꆱ&Q풘?Ç‚8\u0011BCDY2볨;é¸": null,
- "幫 nç…¥sì‡íއ 왊-$C\"è¡:\u0014㣯舼.3ë™—Yl⋇\"K迎멎[ê½µs}9鉳UK8ì¥\"掄㹖h㙈!얄સ?Ꜳ봺R伕UTD媚I䜘Wé¨è”®": -4.150842714188901E-17,
- "ﺯ^ã„„\b죵@fྉkf颡팋î¤êž¦{/Pm0V둳⻿/è½éŸ’ꊔᚬ@5螺G\\å’¸a谆⊪ቧ慷绖?è´¢(é·‡uéŒF=ráæ©¢áž³n:^iá´µtD볠覅Nèµ´": null
- }]
- }]
- }
- ]
- ]}
- ]},
- "謯?w厓奰Tï§¡í——èážè²–o⪇弒L!캶$ᆅ": -4299324168507841322,
- "뺊奉_åžæµ¸å»¶ëªå­„Z舰2i$q붿좾껇d▵é¤\"v暜Ҭì„mï¿´g>": -1.60911932510533427E18
- }
- ]
- }
- ]
- ]],
- "í‰êº”㠦楶Pê…±": 7517896876489142899,
- "ï™°": false
- }
- ]},
- "是u&I狻餼|è°–j\"7cë®sï­-踳鉷`䣷쉄_A艣鳞凃*m⯾☦椿q㎭Nîœæº”铉tlㆈ^": 1.93547720203604352E18,
- "ï…µkⲨ\\%vr#\u000bâ’ºY\\t<\/3﬌R訤='﹠8è¤êž´ë ´æ›”r": false
- }
- ]},
- "阨{c?C\u001d~K?鎌Ԭ8烫#뙣Pì´ˆé—tã­±E­ë’䆺}ç”—[R*1!\\~hã•…á°º@<9JêષIä³–æ ­6綘걹ᅩM\"▯是∔v鬽顭⋊譬": "ìš´ï¶Kæ•‚(欖C취پ℄爦賾"
- }
- }}
- }],
- "鷨赼鸙+\\ä­£t圙ڹx᜾ČN<\/踘\"S_ë§¶a鷺漇T彚⎲i㈥LT-xA캔$\u001cUH=a0츺l릦": "溣㣂0æ¿•=鉵氬駘>Pꌢpb솇쬤h힊줎çªãª¬CrQ矠a&è„꼬爼M茴/á¿®\u0017å¼è½¼y#êž c6ë‘´=?Rå´ë· éº–w?"
- },
- "閕ᘜ]CT)䵞l9z'xZF{:ØI/躅匽ì¡:䟇AGF૸\u001cퟗ9)駬慟ꡒꆒRS״툋A<>\u0010\"ꂔ炃7gëšEà§îˆbꅰ輤]oã±_뷕ܘ暂\"u": "芢+U^+㢩^鱆8*1鈶鮀\u0002뺰9⬳ꪮlL䃣괟,G8\u20a8DF㉪錖0ㄤ瓶8Nଷd?眡GLc陓\\_죌Vì°à¤²äºŒ?cë¦æ± \u0019JC\u0011b⤉zẒT볕\"绣蘨뚋cꡉkî« I\u001eé³´",
- "ꃣI'{6u^㡃#཰Kq4逹y൒䧠䵮!㱙ï®/n??{Lí’“ZETã™ í¿X2᩟綳跠葿㚙w཮x캽扳B唕S|å°¾}ì´•%N?o䪨": null,
- "ⰴFjà·Ÿì…ˆ[\u0018è¾·px?椯\\1<ﲻ栘á£ë´¢æ† ë‰´p": -5263694954586507640
- }
- ]
- ]]
- ]}
- ]}]
- ]
- ],
- "?#癘82禩鋆êŠty?&": -1.9419029518535086E-19
- }
- ]
- ]
- ]}
- ]
- ]
- ],
- "훊榲.|῕戄&.ãšZꛦ2\"䢥ሆ⤢fV_æ‘•å©”?â‰Fji冀탆꜕iã¬_ẑKᅢ꫄蔻XWc|饡Siẘ^㲦?羡2ã´1ç¸á™…?ì‰Ou": false
- }]]
- ]}}},
- "æ…‚ë—„å“è“”á“åŒåš–/颹蘯/翻ㆼL?뇊,í…µ<\\ç·ã”Cボ": null
- },
- "p溉ᑟi짣z:䒤棇r^٫%G9缑r砌롧.물农g?0׼ሩ4ƸO㣥㯄쩞ጩ": null,
- "껎繥YxK\"F젷쨹뤤1wq轫o?鱑뜀瘊?뎃hç‘\\ꛣ}Kå³^ኖâ¤ï§´ê‰“hy": null
- }
- ],
- "á±€nè‚“ã„›\"å »2>mæ®®'1橌%êž´êµ°=Ӳ鯨9耛<\/n據0u彘8㬇៩fá¿è¯™]嚊": "䋯쪦S럶åŒã…›#î½)O`ሀX_éªæ¸²â›€ã¨»å®…闩➈ꢙஶDRâª"
- },
- "tAì“龇 â‹¥bj왎录r땽✒롰;羋^\\?툳*┎?ì€ma䵳넅U䳆૘〹䆀LQ0\bç–€U~u$M}(鵸gï­â³¾i抦뛹?䤈땚검.鹆?ê©¡tâ¶¥GÄ’;!ቹHïš©Så³»B츪ì¼f5≺": 2366175040075384032,
- "ì „pJjleb]áž½": -7.5418493141528422E18,
- "n.鎖ጲ\n?,$䪘": true
- },
- "欈Ar㉣螵᪚茩?O)": null
- },
- "쫸M#x}Dç§±æ¬K=侫们ä¸ï‡ª.KꕾxẠ\u001e㿯䣛FÜ캗ï¬qq8꟞ṢFD훎⵳簕꭛^鳜\u205cÙ«~⑟~冫ऊ2ì«°<\/戲윱o<\"": true
- },
- "ã·è¥/T뱂\u0010锕|内䞇xä¾â‰¦ã­–:M?iM᣿IJeç…œdG࣯尃⚩gPt*辂.{磼럾äª@a\\袛?}ᓺBç¼": true
- }
- }
- ]]}]}},
- "tn\"6î´ê«¤ìƒ¾ä„„;銞^%VBPwu묪`Y僑N.↺Ws?3C⤻9唩Sä ®á´m;sᇷ냞඘B/;툥B?lB∤)G+O9m裢0kC햪䪤": -4.5941249382502277E18,
- "áš”t'\\æ„«?éµ€@\\ã³ê‚•Pí <<]ç…¹G-b!S?\nꖽ鼫,Ý›&é ºy踦?Eæ†î¬–릱H}햧캡b@手.p탻>췽㣬ꒅ`qeä½­P>á“‚&?u}毚ᜉ蟶頳졪áŽzl2wO": -2.53561440423275936E17
- }]}
- }
- ]
- ]],
- "潈촒⿂å¡": 5495738871964062986
- }
- ]]
- }
- ]
- ]}
- ]]
- ]]
- ]}
- ]
- ]},
- "á‚qí‚è“…R`謈èŸá¦î’³å„‚æ§åƒ»ï¹¶9å©Œî¬æ«žé‡ˆ~\"%匹躾ɢ뤥>࢟瀴愅?殕节/냔O✬H鲽엢?ᮈà©î“Žâ‹§dâ½ã«zCe*": 2.15062231586689536E17,
- "ã¶µUi曚ç°é‹ªá¾¼è‡§P{ä䷪쨑̟A뼿T渠誈äšD1!ìž¶<\/ã¡7?)2l≣穷᛾ç¨{:;㡹nemיּ訊`Gî¹²": null,
- "䀕\"飕辭påœf#뫆䶷뛮;â›´á©3çšëá°ìŽ“â¦·è©µ%᜖Մfs⇫(\u001e~P|ï­—CⲾផv湟W첋(텪બTî¾·<บSê‰à©—⋲X婵i ӵ⇮?L䬇|êˆ?졸": 1.548341247351782E-19
- }
- ]
- },
- "t;:N\u0015qé¦Rt缆{ê®C?஛㷱敪\\+鲊㉫㓪몗릙ç«(æ°µkYS": "Xá°‚T?൮ô",
- "碕飦幑|+ 㚦é¶`é•¥ê© B<\/加륙": -4314053432419755959,
- "秌孳(p!G?Vå‚«%8ሽ8w;5鲗㦙LI檸\u2098": "zG N볞䆭éŽí˜\\ONK3íš™<\/樚立圌Q튅k쩎Ffì‹aׂJK銆ઘì¦ç‹©6༥✙䩜篥CzP(è»é§‡HHퟲ讃%,ά{ë p而刲vy䦅ክ^톺M楒é¢ã¹³]Mdg2>䤉洞",
- "踛M젧>忔芿㌜Zk": 2215369545966507819,
- "ì”A`$æ§­é °í»^U覒\bG毲aᣴU;8!팲f꜇E⸃_åµ{å«ç¾ƒX쀳C7ë—®m(åš¼u NÜè°ŸD劯9]#": true,
- "ﻩ!뵸-ç­šPá­›}á¼°å±¥lPh?౮ⶹꆛ穉뎃gè‘㑓溢CX뾇Gã–¬A錟]RKï’î´²aꄘ]Yo+@ä˜'s섎襠$^í™°}F": null
- },
- "粘ꪒ4HXᕘ蹵.$å€\r\u001dë¬77pPc^yî¶ç¬²Q<\/ê–¶ è¨äƒá¨•G?*": 1.73773035935040224E17
- },
- "婅拳?bkU;#D矠â´vVN쩆t㜷A풃갮娪a%é®çµª3dAv룒#tm쑬⌛qYwc4|L8KZ;xU⓭㳔밆拓EZ7襨eD|隰ऌ䧼u9Ô¢+]è´´Pè¿": 2.9628516456987075E18
- }]}}]
- ]}
- }}
- ]}]
- ],
- "|g翉F*湹̶\u0005â1脉̀eI쩓ᖂ㫱0碞l䴨ꑅ㵽7AtἈ턧yq䳥塑:z:é€ï¾¼X눔擉)`N3昛oQì…–y-ڨ⾶æ¢êˆµq^<\/": null,
- "è¹\\ëž“G^璬x৴뭸ゆUSê²§ï®·Bꮤ ┉銜᯻0%N7}~fæ´‹å„Xꔼ<\/4妟Vꄟ9:౟곡t킅冩䧉笭裟炂4ë´‹â±³åºæ€Št+怯涗\"0ã–ˆHq": false,
- "졬믟'ﺇফ圪쓬멤m邸QLà¦¬ä—æ„4jvsç¿™ à¾ê§€è‰³H-|": null,
- "컮襱⣱뗠 R毪/鹙꾀%헳8&": -5770986448525107020
- }
- ],
- "î½­B䔚bê»ë™å§“展槰T-똌鷺tcï§ç¿á«½^㓟ä€o3o$꘭趙è¬Ié¡©)뇭Ἑä“\f@{ᣨ`x3è”›": null
- }
- ]
- ]
- }],
- "⦖扚vWꃱ꥙㾠壢輓{-⎳鹷è´ç’¿äœ‘bG倛â‹ç£Žc皇皩7a~ﳫUâ•£Q࠭ꎉS摅姽OW.홌ೞ.": null,
- "蚪eVlH献r}á®ë¯ ï°©ê”„@ç‘„â²±": null,
- "퀭$JWoê©¢gì—­ì䖔㑺h&à­¢tXX愰㱇?㾫I_6 OaB瑈q裿": null,
- "꽦ﲼLyr纛ZduçB絟쬴糔?ã•‚ì§¹äµe": "ḱ\u2009cX9ë©€i䶛簆㳀k"
- }
- ]]]],
- "(_ê®g່澮?ᩑyM<艷\u001aꪽ\\庼뙭Zë§·ã°©Vm\\lYç­º]3㋲2㌩㄀Eਟäµâ¨„ì¨á”ŸgङHné–⤇놋瓇Q탚單oY\"♆臾jHᶈå¾îž«á‰„??uㇰA?#1侓": null
- },
- "è§“^~ሢ&iIë†g륎ḱ캀.ᓡꀮ胙鈉": 1.0664523593012836E-19,
- "yè©­GbᔶऽsëŒU:æœî „⤎ϲì—⮼D醄诿që™°I#즧v蔎xHᵿt᡽[**?崮耖p缫쿃Lè,ë´¬ï–ꤦC쯵#=X1çž»@OZc鱗CQTï‹„x": null
- }
- ]
- }}],
- "剘ç´\u0004\\Xn⊠6,á€×±;嵣崇}讃iႽ)d1\\䔓": null
- },
- "脨z\"{X,1u찜<'k&@?1}Yn$\u0015Rd輲ーa쮂굄+B$l": true,
- "諳>*ì­®ê´äµŸÒ+<ç®}빀䅱⡔æªï€è‡’hIH脟ꩪCí•ଗP좕\"0i<\/C褻DÛžæ—+^5?'ꂱ䚫^7}ã¡ cq6\\쨪ꔞꥢ?纖䫀氮蒫侲빦敶q{Aç…²G": -6880961710038544266
- }}]
- },
- "5s⨲JvಽῶꭂᄢI.a৊": null,
- "?1qê½ì¿»ê›‹DR%Uå¨>DgNä¹­G": -1.2105047302732358E-19
- }
- ]
- ]},
- "qZz`撋뙹둣j碇ì\\ꆥ\u0018@ïœè—´ç–°Wz)O{Fä¶›l᷂绘訥$]ë®å¤»ä¢‹ä©‡è¿ç°æ¨§çŒµâ£­jè¶q)$꬚⵷0馢W:â°!Qoe": -1666634370862219540,
- "t": "=î¹›wp|~碎Q鬳Ó\\l-<\/^ﳊhní–}ä”t碵ḛ혷?é»äŠ—",
- "邙쇡㯇%#=,î‰E4勃驆V繚q[Y댻XV㡸[逹á°è‘¢B@u=JS5?bLRnì–®ã‰â…ï°³?a6[&íŸ!è—ˆ": 1.2722786745736667E-19
- },
- "X블땨4{ph鵋ꉯ웸 5p簂䦭s_E徔濧dç¨~No穔噕뽲)뉈c5M윅>âš‹[岦䲟懷æ?éŽê“†à¸¬çˆ‹ç äœ”s{\u001bméšå„¸ç…›%bﯿXT>ê—˜@8G": 1157841540507770724,
- "媤娪Qæ¸ï‡\u0011SAyᡈ쿯": true,
- "çš^ಸ%ê±<\/蛯<O\"-刷ã R(kO=䢊䅎l䰓팪A絫픧": "è­”\\ãš„ ?R7㔪G㋉⣰渆?\\#|gN⤴;Wì¹·A׫癮଼ೣã³ë’œ7dæ“ê¾²0扬S0ᆵi/贎ྡn䆋武",
- "è‡ç ‡Gã“æœ¦ì¼‹Wq`㞲攊*å†î‘µî¨~霓L剢zI腧튴Tç¹™Cঅ뫬╈뮜ㄾ䦧촄椘B⊬츩r2f㶱厊8eϬ{挚â¯OM焄覤\\(KÓ¡>?\"祴å“\\\\'í": -3.4614808555942579E18,
- "釴U:O湛㴑䀣렑縓\ta)<D8ï­³æ§é«­D.L|xsæ–‹æ• \"ë‹æ—©7wáŽ": true,
- "쵈+쬎簨up䓬?q+~\u0019仇îŒëµˆá«¯3áµ£æ˜æž°åŠ«ãª¢uç˜-퀭:ì»™:u`⌿ï«A(9鄦!<çšnj3:Hà£¨å·‹ä€æ—¸ëŽˆë§»v\"\\(곘vO㤰aZe<\/W鹙鄜;l厮ë‘": null,
- "î–·": -1.2019926774977002E-18,
- "%者Oî–‹7.Nêªs梇接z蕜綛<\/䜭\"죊y<曋漵@Śâ¹sD⟓jݗᢜ?zî–†/9á²Ma쨮긗贎8ᔮ㦛;6p뾥໭䭊0B찛+)(Yã¿ é¸ä•’^옥": "鬃뫤&痽舎Jì½®è—󽸰ᨨMꈫ髿v<N\\î·.ì‚’ê»…Ñ1ê­¼5ä´·5쳬臨wjë¥"
- }],
- "é·Ž'ã³—@帚妇OAj' è°¬f94ǯ(횡ヒ%io쪖ì‚좛>(j:숾å´ä—ŒgCiB뽬Oyuqè¼¥åŽ/7)?今hY︺Q": null
- }
- ]
- ]]]}]
- ],
- "I笔趠Ph!<ཛྷ㸞诘X$畉F\u0005笷èŸ.Esr릙!W☆ï›ä²–뗷莾뒭U\"䀸犜Uo3ï¯Gꯌx4r蔇᡹㧪쨢準<ä‚€%ࡡꟼç‘8ç‚Xs0ä€é”€?fi쥱ê†àª²BB": -8571484181158525797,
- "Lâ¦o#J|\"⽩-ã±¢d㌛8d\\㶤傩儻E[Y熯)r噤὘勇 }": "e(濨쓌K䧚僒ã˜è ¤Vᛸ\"络QJL2,嬓ì™î¿‰ä¼¢ã‹’䴿考澰@(ã¾`kX$ë‘ÑE斡,èœ&~y",
- "vj.|统圪ᵮPL?2oŶ`ë°§\"勃+0ue%⿥绬췈체$6:qaë Q;~晘3㙘鹑": true,
- "à·Ø™4ç„â¶¿c︋iâš…:ã‚“é–Ⳙ苆籦kw{䙞셕pCì·ƒê¬âœêŸ¯êš“é…„bížhwkê­­M鬋8B耳쑘WQ\\å™ac'唀x᪌\u2048*hì§Ž#á‡é® ë¾áž¿ë€Œ": false,
- "⎀jꄒ牺3Ⓝ컴~?親ꕽã¼Ü“å–瘘!@<튋ãŒê¿±â©¦{a?Yv%⪧笯Uܱ栅Eæši뚬:ꄃx7䙳ꦋ&䓹vq☶Iä˜á¾˜æ¶œ\\ì‰ëºŒLr%Bcãœ3?î¤ï…¨ê­ç ¿è£ž]": null,
- "⭤뙓z(㡂%亳K䌽꫿AԾ岺㦦㼴輞낚Vꦴw냟鬓㹈뽈+o3譻K1잞": 2091209026076965894,
- "ㇲ\t⋇轑ꠤ룫X긒\"zoYì‡í¬wjæ¢ì‘l侸`e%s": -9.9240075473576563E17,
- "啸ꮑ㉰!áš“}éŠ": -4.0694813896301194E18,
- "ï‰>]囋੽EK뇜>_ꀣ緳碖{ì裔[<ನ\"䇅\"5L?#îµ³xTwv#ç½\u0005래t应\\N?빗;": "v쮽瞭pë­ƒ"
- }
- ]],
- "æ–´æ§¾?Zç¿\"~æ…弞ﻆ=꜡o5é‹ï’½dw\"?Kè ¡i샾ogDï²°_C*⬟iㇷ4nયèŸ[㟉U꽌娛苸 à§æ“贻洞펻)쿗૊許X⨪VY츚Zä¾ã¶­~튃ᵦ<\/E臭tve猑x嚢": null,
- "锡⛩<\/칥ꈙᬙè€&êšç±¬â– 865?_>Lè©ì¿¨äˆŒæµ¿å¼¥ï©‰Ì«î¾½ï‘lj&zx<\/C쉾?覯n?": null,
- "꾳鑤/꼩ï¨d=ᘈn挫ᑩ䰬ZC": "3錢爋6Ƹ䴗v⪿Wr益G韠[\u0010å±—9ì¡é’u?殢c䳀蓃樄욂NAq赟c튒ç˜ë ¶î‚³Aà«¡Éšæ"
- }
- ]
- ]
- ]}
- ]
- ]
- }]]]}}
- ]}],
- "ï‚’Ejä—³U<\/Q=ç’샎䞦,å °é  @褙g_\u0003ꤾfâ¶½?퇋!łB〙ד3CC䌴鈌U:뭔咎(Qો臃䡬è‹BO7î¼§ã¢äŸ¸\"Yb": 2.36010731779814E-20,
- "逸'0å²”j\u000e눘먷翌C츊秦=ꭣ棭ှ;鳸=麱$XP⩉駚橄A\\좱⛌jqvä°ž3Ь踌v㳆¹gT┌gvLBè³–ïžçƒ¡m?@E঳i": null
- },
- "曺vì°˜×?&绫OáŸ": 9107241066550187880
- }
- ]
- ],
- "(e屄\u0019昜훕ç–b蓘ᬄ0/۲묇Z蘮á€â¨è›˜èƒ¯ë¢ƒ@㘉8ሪWᨮ⦬ᅳ䅴HIá‡ì¨³z囕陻엣1赳o": true,
- ",b刈Z,á æ™Tì†Å•B⩆ou'í¼â‰ƒç»—é›—dè­Š": null,
- "a唥KB\"ï³è‚•$u\n^â…„P䟼냉䞸⩪u윗瀱ꔨ#yÅŸsî««ê’¬=ï‹•1ïš–|ﲤ爢`tà±íмî£ì³«_Az(Ṋ擬㦷좕耈6": 2099309172767331582,
- "?ã´¸U<\/䢔ꯡ阽扆ã¤qé‹?f㔫wM嬙-;UV죫嚔픞G&\"Cá—äªí’ŠQ": "VM7ç–¹+陕枡툩窲}ç¿¡ä–¶8欞ÄsTë®}ç’¤:jﺋ鎴}HfAàµâ§»Zd#Qï¬u茅J髒皣Y-︴[?-~쉜vë”璮㹚䅊﩯<-#\u000eê±€h\u0004u抱﵊㼃U<㱷⊱IC進"
- },
- "숌dee節é½é‚ºp넱蹓+e罕U": true
- }
- ],
- "b⧴ë£??á” 3ã±>%郿劃ç¿ê¬ê ›Wï¡°çž³á«ëˆ„躨狀ໄy੽\"ីuS=㨞馸k乆E": "トz݈^9R䬑<ﮛG<s~<\/?ⵆá¥è€ç†·uë“·"
- }}
- ]
- }
- ]}
- }
- }
- }
- }},
- "宩j鬅쳜Qê–јyç”Zá­µï1væ“–}䨿F%cֲ᫺贴m塼딚NP亪\"ï¿‹sa뺯ꘓ2:9뛓ï à¼‚쌅䊈#>Rꨳ\u000fTT泠纷꽀MR<CBxPñ±’«X쇤": -2.22390568492330598E18,
- "?䯣ᄽ@Z鸅->ᴱ纊:ã ­ë³®?%N56%鈕1ä—äœaä²—j陇=ë¿»å‚衋࿘ᓸ?ᕵZ+<\/}H耢bä€z^f$&ã’LkꢳI脚뙛u": 5.694374481577558E-20
- }]
- }
- ]],
- "obj": {"key": "wrong value"},
- "퓲꽪m{ã¶©/뇿#â¼¢&᭙硞㪔E嚉c樱㬇1aç¶‘á–DḾä©": null
- }
+{
+ "a": {
+ "6U閆崬밺뀫颒myj츥휘:$è–ˆmYí–š#rzé£+玭V㭢뾿愴Yî°‘ê–šX亥ᮉ푊\u0006åž¡ã­ë£\"厓ᔧḅ^Sqpv媫\"⤽걒\"˽Ἆ?ꇆ䬔未tv{DV鯀Tἆl凸g\\㈭ĭ즿UH㽤": null,
+ "b茤z\\î¨.N": [[
+ "ZL:ᅣዎ*Y|çŒ«åŠæ«•è¾Oj为1糕쪥æ³S룂w࡛á²â¸¥èš™)",
+ {
+ "\"䬰á»wDæ¾V`邀⠕VDãºsH6[칑.:醥葹*뻵倻aD\"": true,
+ "e浱uî¿£p蔽Crà· JK軵xCʨ<뜡癙Yç©ï½¹é½ˆX/螗唻?<蘡+뷄㩤쳖3å‘犾&\\첊xzå崦ݻé´\"åµ¥B3㰃詤豺嚼aqJ⑆∥韼@\u000b㢊\u0015L臯.샥": false,
+ "l?Ǩ喳e6㔡$M꼄I,(3á縢,䊀疅뉲B㴔傳䂴\u0088㮰钘ꜵ!ᅛ韽>": -5514085325291784739,
+ "o㮚?\"춛㵉<\/﬊ࠃ䃪ä£wp6ἀ䱄[s*S嬈貒pᛥ㰉'ë€": [{
+ "(QP윤懊FI<ꃣ『䕷[\"ç’å¶®?%Ḭå£à²»ä‡Ÿ0è¤!è—²ë¹bdæµ¶tl\u2049#쯀@僞": {"î—i妾8홫": {
+ ",Mï£ë§ƒäž›K5nAㆴVNã’Ší–¬$n꩑&êŽæ¤žî·é˜«?/á¹ì„¸ë‰ª1x쥼㻤㪙`\"$쟒薟B煌܀ì¨à­2掳7㙟鴙Xå©¢\u0002": "Vዉèˆï ’᧷⦌kîŒï®žà°ˆnz*<?੃'ahhCFX(\u0007⮊Eã­ä±¾Gxꥩrâ£.æ´Ž",
+ "ë»´5bDDí¯O傆盓왻U?êž…êŠNé­á§¢Ï„\"迳豲8\u001b䃥ꂻ䴺ྸHç­´,": {
+ "\"L鸔SE㬡XV&~ÍŽ'놅蔞눶l匛?'.Kæ°\\ƢẨ疇má¿›'ê½³&!é¹ m'|{Pç—Š ç§„ì’¿u\u00111ä‹§î´¼gÏ©x7t丗D䊨䠻z0.A0": -1.50139930144708198E18,
+ "8é‹‚ë›·ïž”?ì²’B☚>ï·œFM\"è­7ê€-VR<\/';ä™E9$䩉\f @s?íªo3^è¡´cî˜à¶Žä§ªaK鼟q䆨c{ä³ 5mᒲՙ蘹ᮩ": {
+ "Fã²·JGoâ¯Pëµxë’³p䘧☔\"+ꨲå¿JfR㔹)4nç´¬G练Qáž!C|": true,
+ "p^㫮솎ocî’£.೚A㤠??r\u000f)⾽⌲們M2.䴘䩳:⫭胃\\á¾@Fá­Œ\\K": false,
+ "蟌Tk愙潦伩": {
+ "aï‘<\/@ᾛ慂侇瘎": -7271305752851720826,
+ "艓藬/>á„ṯ,XW~㲆w": {"Eç—§î–郶)㜓ha朗!N赻瞉駠uC\u20adè¾ <Ve?í±!ImäŽî­Ÿæ„:*s 9諚Prᵾ뒰髶B̌qWA8梸vS⫊⢳{t㺲q㺈랊뮣RqK밢쳪": [
+ false,
+ {
+ "\u000b=>x퓮⣫P1à «LMMX'M刼唳ë¤": null,
+ "P쓫晥%k覛ዩIUᇸ滨:å™í˜²lMR5䋈V梗>%å¹½ué –\\)쟟": null,
+ "eg+昉~矠䧞难\b?gQì­·ç­\\eê® Nl{ಢ哭|]Mn銌╥zê–˜zⱷ⭤ᮜ^": [
+ -1.30142114406914976E17,
+ -1.7555215491128452E-19,
+ null,
+ "渾ã¨ß牄귛r?ëŒ?w[âšžÓ»~廩輫㼧/",
+ -4.5737191805302129E18,
+ null,
+ "xyà¿‘M[ocì…’ç«“â’ºx?뜓y䊦>-Dì¼(&&?XKkc꩖ﺸá‹ëµžK伕6à§€)딀PæœyWæ™îž¢?훻魢傎EG碸9類៌g踲C⟌aEX舲:z꒸许",
+ 3808159498143417627,
+ null,
+ {"m試\u20df1{G8&뚈h홯J<\/": {
+ "3ஸ厠zs#1K7:rᥞoꅔꯧ&ë‡éµ¼éž«6è·œ#赿5l'8{7㕳(b/j\"厢aqç±€êš\u0015厼稥": [
+ -2226135764510113982,
+ true,
+ null,
+ {
+ "h%'ë§žï–±Sì‹…Hs&dï”l슾W0jé¿M×D놯L~S-㇡Rì­¬%": null,
+ "⟓咔謡칲\u0000孺ꛭx旑檉㶆?": null,
+ "æ‡I転;￸B2Y`z\\ç“w,ë†æ¿æ’埵䂄)!ä¶¢D=à´­ã´ŸjyY": {
+ "$ࡘt厛毣ൢIèŠ<겿骫⫦6tr惺a": [
+ 6.385779736989334E-20,
+ false,
+ true,
+ true,
+ [
+ -6.891946211462334E-19,
+ null,
+ {
+ "]-\\êŸ1/è–“â§á½Š\\l牑\u0007A郃)阜ᇒᓌ-塯`W峬G}SDb㬨Q臉⮻빌O鞟톴첂B㺱<ƈmu챑J㴹㷳픷Oㆩs": {
+ "\"â—‰B\"pᶉt骔J꩸ᄇá›iâ•°æ ›K쉷㉯é©!ãˆnì¹äŸ…難>盥yé“¿eà­”è’M貹ヅ8å˜‹í€¯ä‰¶áŒ¥ã¢æ®Šë»³\"絧╿ꉑ䠥?∃蓊{}㣣Gk긔H1哵峱": false,
+ "6.瀫cN䇮F㧺?\\椯=ÚˆT䘆4â˜ïšŒ8qv": -3.5687501019676885E-19,
+ "Q?yऴr혴{஀䳘p惭f1ﹸ䅷䕋贲<ྃᄊ繲hq\\b|#QSTî“¶s1c-7(äµ¢\u2069åŒçµ˜ê¯‰:læ¯´ï›æ±žt戀oà·Ÿáµ¶ë®±á£-醇Jx䙬äí–¢0࣫á¡grã„›": "\u0011_xM/蘇Chv;dhA5.嗀绱V爤ﰦiëµ²M",
+ "â‘[\"ugoy^儣횎~U\\섯겜ï¥l2jw஌yD腅̂\u0019": true,
+ "ⵯɇä²á«¿à¢š!㯢l샅笶戮1꣖0Xe": null,
+ "劅fë„€ï‹ï§¼bå®ç„ŠE찓橵G!ʱç“뭔雩괛": [{"p⹣켙[q>燣äƒãž½î›œá©²x:쓤삘7玑퇼0<\/qç’‚á‘[ï ™Z\\3䅵䧳\u0011㤧|妱緒C['ì·“Yꞟ3Z鳱雼P錻BUì”§U`ᢶg蓱>.1Ó§è­«'L_5VäµÐ¦": [
+ false,
+ false,
+ {"22ä‚盥N霂얢<F8î±ê¼µ7Gà°¸yhë€g᦭ꄢx硴嬢\u001a?Eê´†T|;7犟\"Wt%ä©O⨵t&#ᬋK'èœá²«æ”⾠鲂Të©·éƒ\u0018䓞cE": {"f=ä츜瞾zw?å­¡é£\\铀᫞yẆg(\u0011M6(s2]`ਫ": [[[{
+ "'y몱纣4S@\\,i㷯럹Ua充Tᣢ9躘Zଞ쥿äŠs<\/刎\\\"뉦-8/": "蜑.X0꭛낢륹iì ¨êš<8?s볕è¡|Q✬᯦@\\G㑢屿Mn졾J굤⥟JW뤵苑rì•툄嵵?â¾¥O",
+ "^1挲~[n귆誈央碠멪gI洷": -8214236471236116548,
+ "sሣ%娌暡clr蟜㑓2\u000bSâŸ_X㨔⚴5~蔷ꀇ|Xu㬖,꤭å¹îµ¿r(g믇ì©ïЍ%췸앙|æ £U\\2]䤉+å• è¡ê¯ŽT鉹m\n/`SzDᅼ鞶": 1.1217523390167132E-19,
+ "u톇=黚\\ ꂮ췵L>躰îe9â‘©_뵜斌n@B}$ê´»Yá±@ä§‹î´½V\"☒-諯cVë¯Ê ": true,
+ "Ű螧ᔼæªéŽë•’딜qꄃH뜣<ç§à¥‚CYå“â¸>XQ㵡趌oë¬k픀빯a(ܵç”ë†à­¯/6Nᪧ}æšá†šì§ŒP牰泱鈷^d꣟#Lì‚€\"㕹襻;k㸊\\f+": true,
+ "쎣\",|⫝̸阊x庿k잣v庅$éˆê´Žç‚”k쬪O_": [
+ "ìž©AzZGz3v愠ꉈⵎ?㊱}Så°³à¯p\r2>ì·IP䘈M)w|\u000eE",
+ -9222726055990423201,
+ null,
+ [
+ false,
+ {"´킮'뮤쯽Wxè®V,6ᩪ1ç´²aႈ\u205czD": [
+ -930994432421097536,
+ 3157232031581030121,
+ "l貚PY䃛5@䭄<nW\u001e",
+ [
+ 3.801747732605161E18,
+ [
+ null,
+ false,
+ {
+ "": 4.0442013775147072E16,
+ "2J[sᡪ㞿|n'#廲꯬乞": true,
+ "B[ç¹°`\\ãa̼㨀å›ã½“<\/꥖ᵈO让\r43⡩徑ﬓ๨ﮕx:㣜oçŽê‰Ÿã¢Cçµï›‰á½†á“žì‡“Qs氯였9é§µq혃Ljê‚”<\/昺+tä‹à¼»çŒ™c沪~櫆bpJ9Uá:칣妙!çš—F4㑄탎䕀櫳振讓": 7.3924182188256287E18,
+ "H磵ai委曷n柋T<\/å‹¿F&:ꣴfU@㿗榻Lb+?í„sp\"᪟~>ê·»m㎮ç¸fî§¡": 1.0318894506812084E-19,
+ "࢜⩢Ш䧔1肽씮+༎ᣰ闺馺窃䕨8Mƶqè…½xc(៯å¤J5굄ä•Qj_훨/~価.䢵慯틠퇱豠㼇Qﵘ$DuSp(8Uà¸<\/ಟ룴𥳐ݩ$": 8350772684161555590,
+ "ㆎQ䄾\u001bpᩭ${[諟^^骴᤮b^ㅥI┧T㉇⾞\"绦<AYJ⒃-oF<\/蛎mm;obh婃ᦢ": false,
+ "䔤䣈?æ±.p襟&dã±…\\Jᚠ@?Oì²à¢½íœ”VR蔩|㒢柺": [[
+ "-ꕨ岓棻r@鿆^3~䪤Ѐ狼︌ﹲ\\á¸MlEìµ Q+",
+ null,
+ false,
+ 3346674396990536343,
+ null,
+ {
+ "": null,
+ "/ä¨S쨑,&繷㉥8C엮赸3馢|뇲{鄎ꗇqFﶉ雕UD躢?Ꟛအï–꽡[hᕱᗅ㦋쭞MユèŒ?L槽암V#성å”%㣕嘵\\Ú¹(å˜èº¿&q": [
+ -1364715155337673920,
+ false,
+ -8197733031775379251,
+ "E팗鮲JwH\\觡܈áœ\"+뉞娂N휗vå™™á‚ê¹¼\u001dD帒l%-æ–”N",
+ -3.844267973858711E-20,
+ [{"쬯(褈Q 蟚뿢 /ⱖ㻥\u0017/?v邘䃡0U.Z1î­­x?鯔Vå° 8Emï•<": [[[
+ null,
+ [
+ null,
+ -5841406347577698873,
+ "í‚·\"S⋄籞繗솸ᵣ浵w쑿ퟗ7náŽx3ì•™z㘌쿸I葥覯ã¬0á†b汆狺뷘ႀnꋋ",
+ -1227911573141158702,
+ {
+ "u㉮PᾺV鵸A\\g*à¡—9슟晭+ͧↀ쿅H\u001c꾣犓}癇æ›á—¬é»©äŸ˜X梑é†e>rä°‚f矩'-î½7ä¡­æ¡¥Dz兔V9è°¶å±…ãºá”Šä©¯ë².\u001eL0ὅㅷ釣": [{
+ "<쯬Jå·^숞u࠯䌗艞R9닪gã¾ë³Ža䂈歖æ„:%é”|ﵤ|y}î¡»>;2,覂⶚啵tb*ä»›8ä¹’ã“¶B࿠㯉戩oX 貘5V嗆렽ë‚߼4hä§›êºM空\\b꿋貼": 8478577078537189402,
+ "VD*|吝z~h譺aᯒ": {
+ "YIì·¢K<\/濳xNne玗rJo쾘3í•°é´Š\"↱AR:ࢷ\"9?\"è‡ï¦¡)?誚êŠe)_D翾W?&F6J@뺾ê°NZ醊Z쾈വHï±å¶¿?炫㷱鬰M겈<bïž²S}㎥l|刖k": {"H7鷮퇢_k": [
+ true,
+ "s㟑瀭좾쮀â‘î¬Yì°ºk맢戲쀸俻àº6å„®ë—æ‰–puߖꜻ馶rꈞ痘?3ྚ畊惘䎗\"vv)*臔웅鿈䧲^v,껛㰙J <áš¶5",
+ 7950276470944656796,
+ 4.9392301536234746E17,
+ -4796050478201554639,
+ "yꬴc<3㻚",
+ "oå¡\u20a4蒵鮬裢Cá´§nBã­±f.",
+ false,
+ [
+ false,
+ "ã¡å¼‘V?瀆䰺q!출㇞yᘪ꼼(IS~Ka 烿ꟿ샕桤\u0005HQҹ㯪罂qè¾âš‡æ‡‹â¦•ë‘¡v",
+ 1862560050083946970,
+ "\u20b6[|(ë­¹gê’펉O轄Dl묽]ﯨ髯QEbAã’¾m@롴礠㕓2ë•«n6ْ엘঵篳R잷꙲m색摪|@ã¿«5aK设f胭r8/NI4ì¶«æ µ\\꯬2]",
+ false,
+ {
+ "\u000b7*ã™›ç‡.~?䔊pæ•e_拺艿ë·f{ê”»1sé©™`$Ė戧?q⋬沭?å¡·á­šè¹€unoa5": {
+ "Sê·¯o紞㾕ᅶä¾î—¶éЇ12|ÊŸç•´ï–iNAo?|Sw$M拲գ㭄紧螆+,梔": null,
+ "ã­š0?xB疱敻ேBPwv뾃熉(Ó pJ]ê°¢\"Bj'\u0016GE椱<\/zgៅx黢礇h},M9ï´¦?LḨ": "Si ïŸB%~㬒E",
+ "핇㉊살ã¢ìˆ¨~ȪRo䦅D桺0z]﬽蠆c9ᣨyPP㿷U~ãž?쯟í¸å®’뉆U|}㉓郾ࣻ*櫎꼪ä—s?~7\u001e㘔h9{aáž‹}:ã¶’P8": [{"\\R囡ì¬nNæŸ‹çØ›7ì¹¾ :㶃衇徜V æ·±f1æ·â™ i?3Sè§’íž^ᆞ\u20e8á¹°D\u0007ç§¡+躒臔&-6": {
+ "䨑g.fhã”—=8!\"狿ൻLU^ë»±g䲚ã»'W}k欤?๒鲇S꧗䫾$ĥ피": -794055816303360636,
+ "外頮詋~텡竆î™ç¹ƒä©è‹¨ë¾ºæœê¼ƒç˜¹f*㉀枙NH/\u2027ê¢}j묎ïƒvペq︉ì‹ëœ¡Od5 N顯ି烅仟Qfㆤ嚢(i䬅c;ë§§?嶰㩼츱ç¡?-": {
+ "e݆ã¡â¬¬î›–'2ã»’?U篲鿄\"隻Ҭ5NꭰꤺBꀈ拾᩺îº[刯î…5곑Na램ﴦ዆]ã“qwé’„\u001b\"Yæ´Šä—¿î¼ç¥å¡¥è¿µ[⼞⠳P$ê ±5먃0ï¦`": [{"ç°Eè³ï«šb먭N긆Ⰹå²2逶ꜛ?H짉~?P}jj}ä¾·ç¿_T>á­¨b,â»éˆµP䕡䀠८ⱄ홎鄣": {
+ "@?k2é¶–ã‹®\"Oರ K㨇廪儲\u0017ä¾î¿‚J?);\b*묀㗠섳햭1MC V": null,
+ "UIICP!BUA`î€á¢ˆã‹¸~袩㗪⾒=fBï®´l1ꡛ죘R辂여ҳ7쮡<䩲`熕8é ": 4481809488267626463,
+ "Y?+8먙ᚔ鋳蜩ï–럶1㥔y璜౩`": [
+ null,
+ 1.2850335807501874E-19,
+ "~V2",
+ 2035406654801997866,
+ {
+ "<숻1>\"": -8062468865199390827,
+ "Mã¿£ï€E]}qwG莎Gná¶(ê”™\\D⬲iꇲs寢t駇S뀡ꢜ": false,
+ "pê¤ãŽ9W%>M;-Uç’fî£(^j1?&RBéš§ å¿“b똊îƒE": "#G?C8.躬ꥯ'?냪#< 渟&헿란zpo왓Kj}é·§XﻘMツbä•–;㪻",
+ "vE풤幉xz뱕쫥Ug㦲aH} ᣟp:鬼Yá°Ÿ<Fɋ잣緂頒âºä‰²ç‘‘ä…‚,C~Þ…G!f熢-B7~9Pqà¡¢[츑#3ꕎ,Öඳèâ©…ãµ§ì¶€ë¿xyäŒÍ‚tdj!箧᳆|9èš¡ë¬": -2.54467378964089632E17,
+ "䵈䅦5ë¹–,궆-:໿댾仫î»0ᙚyá¦hqáš„": null,
+ "侯Y\"湛졯劇Uì…ŽYXçâ…¸2ä¼´|ç­§\\ä’ã¶¶á·ì‘WaᦵᗱãœëŠ¾è† <Jc63<G\u20fe䇹66僣k0O\"_@U": null,
+ "姪y$#sæ¼´JH璌Ӊ脛Jã¾íŽ”ï¹´oꈶ㚸PD:薠ì–%說ážè¹‚1]⾕5튄": {
+ "á¾Huw3䮅如쿺äŸå«]<鰨ݷ?꯯䫓傩|á¶à·ƒåª½\\澒≡闢": "Mm\"ì‡á¯„졽\"楇<\/ꥆí­å±€néš´@é¿£wâ Š4Pï«å¾ŽW㊋;䤞'.팇è’ä¡´egpxå—Žwà®…ç—å ®á›nË︖䀤4å™™?໚éƒá±‹Þ˜à¥Žtæ‘姫籕殥ï­é™ƒ\"4[ê¬qL4Wê Žx",
+ "ℇjéŒïš›5Bë’š\" U": "ç¡„ê˜{憠êµ:&t䌨m Cઌ쿣鞛XFê Ÿsä­ï¶ƒ\"æ ¼a0x闊昵å²L\\æšèˆaê¸j싹ç…\"î ²çŸï±¡é¦†*êµ–ç³ <ê”躎",
+ "톌賠弳êŸb\"èž–X50sĶ晠3fç§‚å¯Iⓟ:è˜": 5.573183333596288E18,
+ "%䴺": [[[[
+ -6957233336860166165,
+ false,
+ null,
+ {
+ "\"ïŸ\\௮茒袀ᕥ23ୃ괶?䕎.嚲◉ãžL+ᵡ艱hL콇붆@": null,
+ "%螥9ꭌ<\/-t": true,
+ ",9|î«è€¢æ¤¸ä“Xk죱\u0015$Ώ鲞[ï’—?ì—¢á²í˜ªì¦ˆâ´‚â–‚â„´ã—¯\"gî´ëº˜\\êœ#\u0002ヮ}ሎ芲P[鹮轧@냲䃦=#(": 2.78562909315899616E17,
+ "R?H䧰ⵇ<,憰쮼Q總iR>H3镔ᴚ斦\\é‘r*2橱Gâ¼”F/.j": true,
+ "RK좬뎂aí™ f*f㱉á®â¦‹æ½™ã¨‹Gu곌SGI3Ië¿\\F',)t`è蘯囯ﮉ裲뇟쥼_ገ驪▵æ’ᕤV": 1.52738225997956557E18,
+ "^k굲䪿꠹B逤%F㱢漥O披M㽯镞竇霒i꼂焅륓\u00059=皫之눃\u2047娤é–銤唫á•b<\/w踲䔼u솆맚,ä’á³'/it": "B餹饴is権ꖪ怯ꦂẉဎt\"!凢谵⧿ï™0\\<=(uLä·åˆ¨ì‘ª>俆æ“Cy襸Q힆䆭涷<\/á±0î É§îŠ‹䗾䚹\\ኜ?ꄢᇘ`ä´¢{囇}᠈䴥X4퓪檄]ꥷ/3謒ሴn+gé¨X",
+ "GgG꽬[(å«“ëª6\u0004ê¶宩㙻/>\u0011^è¾dTè…ªhxÇ‘%ꊇk,8(Wâ§‚çµP鬜O": [{
+ "Mã´¾c>\\ᓲ\u0019V{>ꤩ혙넪㭪躂TS-痴໸闓âµ/徯O.Mã¥Ê·D囎⧔ì³íœ¤T??鉬뇙=#ꢫ숣BXä­¼<\/d똬졬g榿)eꨋﯪ좇첻<?2K)": null,
+ "Z17縬z]愀䖌 ᾋBCg5ë”’êµ­æ†ê¾“aâ²·í„·u:U촳驿?雺楶\u0001\u001c{q*á°—è‹‘B@kæ°z.*è“—7ረIm\"Oá±@7?_": true,
+ "㺃Z<": -4349275766673120695,
+ "휃䠂fa塆ffixKe'ë¬é—੄뺾w࠾鑎kë•¢m*á‚‘î§·í–žé®6攊&虜h黚,Yä±³Sﭼ둺pN6": [
+ false,
+ "IΎ䣲,\"ᬮ˪癘P~Qlnxå–Sᮔ༬˨IçŒm䜛酛\u0003iê¸ã¦§cQ帲晼D' \\(粋ï›wQcN\\ëµ°è·ˆ",
+ [
+ "D0\\L?M1ì¥KaêŒsd+盌귤憊tz䌣ëŒ×‘Oå‚wÏ¢%á½’gpî•—,Aiï™âŽ§á¶†Iî«˜é¤¾ê¦æ£©å˜…᳉怴%m]á¶is纖D凜镧o심b Uî»·",
+ {
+ "?଼\u0011Rv&^[+匚I趈T媫\u0010.䥤ᆯ1q僤HydⲰl㒽K'ᅾiౕ豲초딨@\u0013J'쪪VD౼P4Ezg#8*㋤W馓]c쿯8": false,
+ "c/擯X5~JmKäµ¶^ìŽà´š|B|u[ì†(X뚤6v}W㤘⠛aR弌臌쾭諦eⒷ僡-;㩩⭖ⷴ徆龄갬{䱓ᥩ!ï¯âŠšá‡¨<v燡露`:볉癮꨽り★Ax7Ꮀ譥~舑\\Vê‹\"$)v": "e&sFF쬘OBï–†d슊寮f蠛জ봞mn~锆竒Gè„\"è¶µG刕䕳&L唽붵<\/I,X팚Bâ¥î¼¶X,kԇҗ眄_æ…¡:U附ᓚAè•§>\u001a\u0011\";~쓆BH4勿”Š7힪",
+ "iT:L闞椕윚*æ»›gI≀Wਟඊ'ꢆ縺뱹鮚Nê©á§¬è•¼21줧\\䋯``â\\ã±é³¨": 1927052677739832894,
+ "ì®ç¼¦è…ƒg]礿Y㬙 fî¼ãƒºSɪ꾾N㞈": [
+ null,
+ null,
+ {
+ "!t,çY 1䗉罵?c饃호䉂Cá­ì’˜z(즽sZG㬣sഖE4ï‚뢜㓕äžä¸®Qpç°6EZឪ겛fx'ꩱQ0ç½£i{k锩*㤴㯞r迎jTⲤ渔m炅肳": [
+ -3.3325685522591933E18,
+ [{"ã“5]A䢕1룥Bï²C?Ꙍ`r룔Ⳛ䙡uä¼²+\u0001àµo": [
+ null,
+ 4975309147809803991,
+ null,
+ null,
+ {"T팘8Dﯲ稟MM☻㧚䥧/8ﻥ⥯aXLaH\"顾S☟耲ît7fSà·‰ë†ë®”/ꕼ䓈ìº4\\霶䠴ᩢ<\/t4?죵>uDï›5➶༆쉌럮⢀秙䘥\u20972ETR3æ¿¡æ†vB? ~鸆\u0005": {
+ "`é––mç’㥉b뜴?Wf;?DV콜\u2020í‰à±“æ“å®ZMj3mJ먡-å‚·ë±™yח㸷꥿ ໘u=Mì!5å­L4v\\?ÇŽ7C홫": null,
+ "|": false,
+ "~Ztᛋ䚘\\æ“­ã—傪Wé™–+ã—¶qᵿ蘥ᙄp%䫎)}=â ”6ᮢS湟-èž¾-mXH?cp": 448751162044282216,
+ "\u209fad놹j檋䇌ᶾ梕ã‰bוּ<dä—±:줰Mé…„\u0000X#_rç¢A饓ê—ÙKo_è·”?ᪧ嵜鼲<": null,
+ "ꆘ)ubI@h@洭Ai㜎ä±k\u0003?Tä‰3é—´%j6jæ£j=â\\U毮ᬹ*8䀔v6cpjâ­¬~Q꿾뺶ï‰íŽµæ‚¡!ì©­åŽl六㽫6퇓ޭ2>": {"?è‹´ê© D䋓帘5騱qï±–PF?☸ç—é¡’yU á¡«cb䫎 S@㥚gꮒ쎘泴멖\\:Ié®±TZ듒ᶨQ3+f7캙\"?\fí’¾\\oæžç´Ÿï»½M.âŽï˜¸é‘OP": [
+ -2.6990368911551596E18,
+ [{"ä’–@<á°¿<\/⽬tTrè…ž&G%᳊秩蜰擻f㎳?Sãµ§\r*k뎾-乢겹隷j軛겷0ë£é®ï µ": {")DO0è…¦:ì¶é€¿:1㥨่!è›æ¨‹2": [{
+ ",ꌣf侴笾m๫ꆽ?1?U?\u0011ꌈꂇ": {
+ "xæ—ç” nVqä…¦w`CD⦂惺嘴0I#vỵ} \\ê·‚Së´Dì–¾?Ô’j溯\"v餄a": {
+ "@ç¿™c⢃趚痋i\u0015OQâlqë†Y0pࢥ3쉨䜩^<8g懥0w)]䊑næ´ºo5ì­QL댊랖L镈Qnt⪟㒅십q헎鳒⮤眉ᔹ梠@O縠u泌ㄘb榚癸Xî©­Þ”Ftj;iC": false,
+ "I&뱋゘|ï£è“”䔕측瓯%6á—»HW\\N1貇#?åƒá—œghá­ªo'䗈꽹Rcìš/蔳迄à¼!0邔䨷푪8ç–©)[쭶緄㇈୧á": {
+ "B+:ꉰ`sì¾­)ë¹¼Cç¾A䫊pMgjdxäHf9᥸W0!C樃'ï¤f䫤סи\u0017Jve? è¦f둀⬣퓉Whk\"஼=չï³î•¤çš†ç¬BIW虨쫓F廰饞": -642906201042308791,
+ "sb,XcZ<\/m㉹ ;䑷@c䵀s奤⬷7`ꘖ蕘戚?Feb#輜}p4nH⬮eKL트}": [
+ "RK鳗z=袤Pf|[,u욺",
+ "Ẏá»ç½¯ë‰‹âº–锅젯㷻{H䰞쬙-ì©“D]~\u0013Oã³¢gb@æ¶è”‰|kᦂâ—!\u001ebMè¤sca쨜襒y⺉룓",
+ null,
+ null,
+ true,
+ -1.650777344339075E-19,
+ false,
+ "☑lꄆs힨꤇]'uTന⌳ë†].1â‹”ê´æ²°\"IWà´©\u0019æ°œ8쟇䔻;3衲æ‹,窌zíŽå–íš—?4?Cë„é—®?ᥙ橭{稻Ⴗ_ì”",
+ "n?]讇빽å—}1å­…9#ê­¨é¶v\u0014å–ˆ)vw祔}룼쮿I",
+ -2.7033457331882025E18,
+ {
+ ";⚃^㱋x:饬ኡj'ê§µT☽O㔬RO婎?향ᒭæ©$渣y4i;(Q>꿘e8q": "j~錘}0g;Lèº*;á•­ê„®0l潛烢5H▄쳂ê’ï­‹ê™¶T犘≫x閦웧v",
+ "~î¢æ¯\u2018c4è·ë E~ᑅቚꈂ?nq뎤.:æ…¹`F햘+%鉎Oç€œìŸæ•›è®âŒæµ¢<\/㮺紿P鳆ࠉ8I-o?#jﮨîŸ7v3Dt赻J9": null,
+ "à£W䌈0êŽqC逖,íš…î·Žcáƒswj;jJSæ«5æ§—OaB>D踾Y": {"ã’°äµF%î©®?59.î„„ãˆcᕨï†í•틎á¸ã‹©B=9IÛⓌ{:9.ywï½å‘°ã†®è‚’᎒tIã¾´62\"ዃ抡C﹬B<\/<EO꽓ᇕu&é‹«\\禞í¹uê’.7훯ಶ2䩦͉ᶱf깵ᷣ늎": [
+ 5.5099570884646902E18,
+ "uQNæ¿¿m臇<%?谣鮢s]]x0躩慌闋<;(î³¥ 鋤.0á µd1#벘a:Gs?í–·'.)ㅴ䞟ç¯å´ˆFS@O㌛ᓬ抢íŒáž¾ëƒ·ì¿Ÿíˆ¥IZn[惵ê§3ë™[&v憙J>ì´‹jo朣",
+ [
+ -7675533242647793366,
+ {"ᙧ呃ï£:[㒺쳀쌡ì‚H稈㢤\u001dá¶—GG-{GHྻຊꡃ哸䵬;$?&d\\⥬ã“Nåœ´ë¤æŒ¨-'ê•®$î“‹PU%?冕눖ié­q騎Q": [
+ false,
+ [[
+ 7929823049157504248,
+ [[
+ true,
+ "Zè™\u0017'eꕤ᱕l,0\\X\u001c[=雿8è ¬L<\/낲긯W99g톉4ퟋbãº\u0007åŠ'!麕Q궈oW:@XáŽïœ¬z蘻m絙璩귓죉+3柚怫tSæ‡è’£ä -æ“¶D[0=퉿8)q0ÙŸ",
+ "唉\nFA椭穒巯\\䥴䅺鿤S#bè¿…ç˜ ï¶—ê¬˜\\?q1qN犠pX꜅^䤊⛤㢌[⬛휖岺q唻ⳡí‹\"ã™™Eh@oA賑㗠yå¿…Nꊑᗘ",
+ -2154220236962890773,
+ -3.2442003245397908E18,
+ "Wᄿ筠:瘫퀩?o貸q⊻(᎞KWf宛尨h^残3[U(='橄",
+ -7857990034281549164,
+ 1.44283696979059942E18,
+ null,
+ {"ꫯAwè·­å–€ ?_ï““9\"Aty背F=9缉ྦྷ@;?^鞀w:uN㘢Rá»": [
+ 7.393662029337442E15,
+ 3564680942654233068,
+ [
+ false,
+ -5253931502642112194,
+ "ç…‰\\îš¶î¶è¾Žî›¢à³†ç½5â’­1äªäƒ‘s䎢:[e5}峳ﴱn騎3?è…³Hyêƒè†¼N潭錖,Yá‹ËœYAá“㬠bG렣䰣:",
+ true,
+ null,
+ {
+ "⒛'P&%죮|:⫶춞": -3818336746965687085,
+ "钖m<\/0ݎMtF2Pk=瓰୮洽겎.": [[
+ -8757574841556350607,
+ -3045234949333270161,
+ null,
+ {
+ "áœî…½rè¼³>⫇9hU#î¦#w@ê·ªA\\Cî’¢ é‹ºã˜“ê–æ¢’뒬묹㹻+郸å¬ìœ¤'+g<\/碴,}ꙫ>ì†;情d齆Jä¬àº©æ’›ì±íƒ¹/R澡7剌tꤼ?ặ!`â²ç¤\u00002똥଴âŸ": null,
+ "\u20f2ܹe\\tAê¥Æ°\\x当뿖ï»ë ‰ç¦›;G檳ﯪï…Sà«°3~㘠#[J<}{奲 5箉⨔{ë†<\/釿抋,åš /曳m&WaOvT赋皺璑ï“í…": [[
+ false,
+ null,
+ true,
+ -5.7131445659795661E18,
+ "è­m䓪D5|3å©à°ž>î‰è ‡æ™¼6nï´ºPp禽羱î¤DS<ç“닫屚ì‚å§¿",
+ true,
+ [
+ -8759747687917306831,
+ {
+ ">ⓛ\t,odKr{䘠?b퓸C嶈=DyEᙬï¿@ᴔ쨺芛髿UT퓻春<\/yê¸>豚W釺N뜨^?꽴﨟5殺ᗃç¿%>í‚ဿ䄸沂Ea;A_\u0005閹殀W+窊?Ꭼd\u0013Pæ±´G5ì“æ˜": 4.342729067882445E-18,
+ "Q^즾眆@AN\u0011Kb榰냎Y#ä€ê€’ᳺ'q暇çµs\"!3#I⊆畼寤@HxJ9": false,
+ "⿾D[)袨㇩i]웪䀤ᛰMvR<èŸã£¨": {"v퇓L㪱ꖣ豛톤î£\\ê³±#ï–©kDTN": [{
+ "(ì¾´ä¡£,寴ph(C\"ã³¶w\"憳2s馆E!n!&柄<\/0Pꈗſ?㿳Qdéµ”": {"娇堰孹L錮h嵅⛤èºé¡’?CglNæŸ+쨣ﺜ\\MrH": {"çžäŽ‡ë‘ƒá‰²å¼­íŒ­^ꄞ踦涟XK錆쳞ឌ`;੶S炥騞ଋ褂B៎{Ú’ä­·á¶¼éœpIè—è™¶K$": [{"â—–S~躘蒉꫿輜è­Qã½™é—@ᢗ¥Eæ¦iØ¡5┄^B[絮跉ᰥé™PWi3wㄾⵀDJ9!w㞣ᄎ{ë“’ê““b6\\篴??c⼰鶹⟧\\鮇ꮇ": [[
+ 654120831325413520,
+ -1.9562073916357608E-19,
+ {
+ "DC(æ˜è¡µá¼¡ê¸™ê°µå§­|Ö›[t": 7.6979110359897907E18,
+ "Jâ…))嫼â³9Xfd飉j7猬ᩉ+⤻î®çœ—벎Eé°‰Zï¾¶63zá69}Zá¶L崭ᦥ⡦éšâ‹›êŽ¨î´µ~i㨃咊ꧭo䰠阀3C(": -3.5844809362512589E17,
+ "p꣑팱쒬ꎑ뛡Ꙩ挴æèƒ”&7ᔈ묒4Hdç¡¶í›ãŽ–zꢼè±ã¿¢aሃ=<\/湉鵲Eî„¡Ó…%$F!í¶æ£Œå­¼{Oé§à¨ºgeu+": ")\u001bìž“kÅ€Xì©«Aë°Â®Ú£ç™¦ç‹¢)扔弒p}k縕ꩋ,䃉tࣼi",
+ "ã‚¡F肿輸<솄G-䢹䛸êŠl`Tqê•—îŠè’ža氷⸅ᴉ蠰]S/{J왲m5{9.uá½³~㕚㣹u>x8Uè®Bëºè¥ªç›ŽQhVS맅킃i识{벂磄Ià·„ä™…xZy/æŠà«­Zï–Šé²î¦š-霳Væ®æŒ¦â„’": null,
+ "㯛|Nî½™ê¸b7âµb?æ‹ O\u0014Þ†?-(EꞨ4ꕷᄤYᯕï‘OW瞺~螸\"욿ќ<u鵵઎⸊î˜å€¾ì‘·à·»rT⪄牤銱;W殆͢芄ਰåší›šìƒ¢î™‡âŠ¿+ã²½": null,
+ "å˜ïƒé€†àº»%_ë§›d)zJ%3ì¹§_릟#95䌨怡\u001ci턠ॣî’i冘4èµ–'à¨ä§_æ ”!": {
+ "*?2~4㲌᭳ì¯ftá‚·1#oJ\bäŠ‡é•‡ë” \u2079xä›ãŠá®‚N;穽跖s휇ᣄ홄傷z⸷(霸!3yëºMì’¿í–Û½v㳉tở心3黎vì­» Rp཮Vr~T?&Ë´k糒븥쩩r*D": null,
+ "8@~홟ꔘk1[": -5570970366240640754,
+ "BZté¦ê¡¬c餖 s(má›´\u0000◄dè…‘t84CâŸå¯VṊ뉙'å™±ê”ç½GCé¡€?허0êž¹&ë‡ä›­Cä·«](": 2.4303828213012387E-20,
+ "yæ’”Z외放+}ḑ骈á™&\u0016`G便2|-e]঳?QF㜹YF\"ã¿’ç·„í–·ï€ãˆŸïƒ¦ï¨ä·¦à­€áŒ¤lM蘸N㾆▛럪㞂tᕬ镈ì‡å– l amcxPnm\u001a᱋<\/]_]ﻹïª?H": false,
+ "áæ°ë¬¢뜚I[♺뽛x?0Hë´¬Wpn꨹Raä¿ïŒ›ìŒ‘{㴂ni祻윸A'y|⺴ᚘ庌9{$æ²{톽=m#@ï–—6ᨧfgs44陎J#<Ễ쨓瀵â©a୛㷉㙉ܸ◠냔嬯~å‘„ç±ç¾¥é•³": false,
+ "㘱{<é ¬22?IF@곊I겂嶻Lá›D{@rì’‚?IAᣧ洪惒誸b徂zì·ºê¾ã ­\\刊%禨ìŒâ¶£ä»µ\\P[:47;<ᇅ<\/": {
+ "^U釳-v㢈ê—â—„è˜rᜨi;èµ·kR犺䵫\u0000é”ì™m-Ô™!lḃ꛸뻾F(Wê·›y": "#á ºH㸢5v8_æ´‘C",
+ "䔵໳$á™ 6èž\u206e摎q圩P|æ…sV4:㜾(I溞I?": -6569206717947549676,
+ "é€êž‚ç·µí‡8 >e㺰\"'㌢ÆW\u0004çž•>0?V鷵엳": true,
+ "뤥G\\î¡‹è¿‹ä ¿[庩'꼡\u001aiá©®Vì¯á³ªä¦ªÃ”î²…;倱ନë›èªˆ": null,
+ "쥹䄆䚟Qæ¦äŽá¢­<\/2ã•£p}HW蟔|äƒî‚꿈ꚉ锳2Pb7㙑Tⅹᵅ": {
+ "Y?Ö­$>#cVBꩨ:>ï†eLè’å‹™": {
+ "86柡0po äš&-æ‘Ћ祌<\/휃-G*㶢הּì©s㶟餇c걺yu꽎還5*í„§ç°•Ogå©¥Sê": null,
+ "a+葞h٥ࠆ裈嗫ﵢ5輙퀟ᛜ,QDﹼ⟶Y騠锪E_|x죗j侵;m蜫轘趥?븅w5+mi콛L": {
+ ";⯭ﱢ!ä¹°Fâ½æŸ¤é¶‚näµ£V㫚墱2ë ¾ELEl⣆": [
+ true,
+ -3.6479311868339015E-18,
+ -7270785619461995400,
+ 3.334081886177621E18,
+ 2.581457786298155E18,
+ -6.605252412954115E-20,
+ -3.9232347037744167E-20,
+ {
+ "B6㊕.k1": null,
+ "ZAꄮJ鮷ᳱo갘硥鈠䠒츼": {
+ "á•…}럡}.@y陪é¶r業'æ´î‰°í€‰x䉴ﵴlí˜):씭脴ᥞhiꃰblﲂ䡲엕8߇Mã¶­0燋標æŒ-?PCwe⾕J碻Ᾱ䬈䈥뷰憵賣뵓痬+": {"aì·©v礗X⋈耓áŠfç½…é®!㔽YYᣓwæ¾33⎔芲F|\"äœT↮輦挑6ᓘL侘?ᅥ]ë†1R௯✎餘6ê½<\/௨\\?qå–·ê«j~@ulq": {"嗫欆뾔Xꆹ4H㌋Fåµ§]à Ž]ã –1ꞤT<$më«O i댳0ä²iï—Œ": {"?à·©?\u20cd슮|ꯆjs{?îž…d7?eNs⢚嫥氂䡮쎱:鑵롟2hJꎒﯭ鱢3춲亄:ë¼£v䊭諱Yj択cVmR䩃㘬T\"Ní™*ै%x^F\\_s9ë³´zz4æ·—?q": [
+ null,
+ "?",
+ 2941869570821073737,
+ "{5{殇0ä¾ïž¢g6ë°–í‹è‡©ç¶¹R$ä–­j紋釰7î‹‘sXI繳漪행y",
+ false,
+ "aH磂?뛡#惇då©…?Fe,ì˜+늵ä˜\"3r瘆唊å‹ï¢Šj⳧࠴ꇓ<\/唕윈x⬌讣䋵%拗ᛆⰿ妴á”M2ã³—å¿…ê§‚æ·²?ゥ젯檢<8ë’ï¶MidXä’3á³»Qî”â–®ä½UT|⤪봦éâŠ",
+ [[{
+ "颉(&뜸귙{yîš’^\"P퟉ì¶á²Ÿä®­î‹ºDé¡¡9=?}Y誱<$bë±£RvO8cH煉@tk~4ǂ⤧â©å±‹Sî›ïž¢S;J{vV#剤餓ᯅc?#a6D,s": [
+ -7.8781018564821536E16,
+ true,
+ [
+ -2.28770899315832371E18,
+ false,
+ -1.0863912140143876E-20,
+ -6282721572097446995,
+ 6767121921199223078,
+ -2545487755405567831,
+ false,
+ null,
+ -9065970397975641765,
+ [
+ -5.928721243413937E-20,
+ {"6ì´Š\u001a홯kB0w撨燠룉{绎6⳹!í„è´‘y▾鱧ժ[;7ᨷ∀*땒䪮1x霆Hᩭ☔\"rî¹›ä7毟á°r惃3ꉭE+>僒æ¾": [
+ "Ta쎩aÆt쵯ⰪVb",
+ [
+ -5222472249213580702,
+ null,
+ -2851641861541559595,
+ null,
+ 4808804630502809099,
+ 5657671602244269874,
+ "5犲﨣4mᥣ?yf젫꾯|䋬ìž$`Iⳉﴷ扳å…,'î±c",
+ false,
+ [
+ null,
+ {
+ "DyUIN쎾M仼惀⮥裎岶泭lh扠\u001e礼.tEC癯튻@_Qd4cï…«5S熯A<\/ï¼¼6U윲蹴Q=%푫汹\\\u20614b[௒Câ’¥Xe⊇囙b,ï®æœ3ss땊ë¢i~逇PA쇸1": -2.63273619193485312E17,
+ "Mq꺋貘k휕=nKç¡ë«žè¼©>㾆~á¼žà¡¹ê¸æ¦µlâ‹™Hw뮢帋M엳뢯î¹…vâ…ƒ^": 1877913476688465125,
+ "á¶´ë»—`~ç­—å…⚽টW˃â½b犳䓺Iz篤p;乨A\u20efì©?ç–Šmã€ì»©ë«¡b탔鄃ᾈV(é¢ç³=뎲ିeF仢䆡谨8t0醄7㭧瘵⻰컆r厡궥d)a阄á·Ed&c﯄伮1p": null,
+ "â¯w4曢\"(欷輡": "\"Má­«]䣒頳B\\燧ࠃN㡇j姈g⊸⺌忉ꡥF矉স%^",
+ "㣡Oᄦ昵⫮Y祎Sì級㭻撥>{I$": -378474210562741663,
+ "䛒掷留Q%ì“—1*1J*ë“헩ᦢ﫫哉쩧EↅIcê…¡\\?â´Šl귛顮4": false,
+ "寔愆샠5]ä—„IHï©¥=d﯊/å¶?ॊn%晥D視Nò—˜ˆ'᫂⚦|X쵩넽z질tsî¦kxDQ莮Aoﱻ뛓": true,
+ "钣xp?&\u001e侉/y䴼~?U篔蘚缣/I畚�Q绊": -3034854258736382234,
+ "꺲໣眀)â¿·J暘î©pИfAVì‚•ì³­Nꯗ4々'唄ⶑ伻㷯騑倭D*Okï¯ê§3bâ½_ï„¡<\/ì±£Xm톰á•䆄`*fl㭀暮滠毡?": [
+ "Dç”·p`V뙸擨å¿ë¸ª9c麺`淂⢦Yw⡢+kzÜ–\fY1䬡Hæ­)ë²¾Z♤溊-혰셢?1ï”<-\u0005;æ¢Tále\\ᛵߓﭩ榩<QF;t=?Qꀞ",
+ [
+ null,
+ [{"-ì·«æ²î«§á¬¨å¢Šè‡¸<à ’Hè·¥ 㔭쥃㫯W=z[wধ╌<~yW楄S!â‘»h즓lÄ–N￧篌W듷튗乵᪪템먵Pf悥ᘀk䷭焼\\讄ræ“é¬y6VF<\/6ëž¿p)麡ê ãª\"pà®´e": [
+ "#幎æ´é¢’嶈)ã„›J.嶤26_⋌东챯ꠉ⤋ؚ/âš%ç§¼Q룠QGztᄎ㎷អIç¿°Xpç”éœê¨",
+ {",T?": [
+ false,
+ [[
+ true,
+ 7974824014498027996,
+ false,
+ [
+ 4.3305464880956252E18,
+ {
+ "᱿W^A]'rᮢ)é¥zï­é¤;Hu\\Fk?ï´º?IGæµ…-ä™§>è¨-xJ;å·¡8깊è ï»“U$K": {
+ "Vê•¡è«…æ“W=斸s︪vﲜ츧$)iꡟ싉eî®å¯³?ጭムVથ嵬iæ¥Fg<\/Z|៪ꩆ-5'@ꃱ80!燱R쇤tç³³]罛逇dṌ֣XHiͦ{": true,
+ "Ya矲Cë©—Q9膲墅æºíœ»c\\ë”¶Gç””<\/.齵휴": -1.1456247877031811E-19,
+ "z#.OOï¿J": -8263224695871959017,
+ "å´_3夼ᮟ1Fë¸ë½¯á¦“é´­V豈Ь": [{
+ "Nè’¬74": null,
+ "yuB?厅vK笗!ᔸcXQ旦컶P-ë…«mᄉ麟_": "1R@ 톘xa_|﩯é˜î¥§sæ§žd!d껀筤⬫è–焵먑D{\\ïƒïŽ¿6k共倌☀G~AS_D\"딟쬚뮥馲렓쓠攥WTMÜ­8nX㩴䕅檹E\u0007ï­¨N 2 ℆æ¶ê¥ê µï“3▙玽|ë¨_\u2048",
+ "æA Cä§©G": {":Mí£5e들\\ê€æ¼á”„é¸|Iï¨$)n": {
+ "|U䬫㟯SKV6ꛤ㗮\bn봻䲄fXT:㾯쳤'笓0b/à³¢Cì³–?2浓uO.ä°´": "à½ê¼‹e?``,ᚇæ…^8ꜙNM䂱\u0001Iá–™ê§M'vKdꌊH牮r\\O@䊷ᓵ쀆(fî »yè»i툺\"?<\/峧ࣞ⓺ᤤ쵒߯ꎺ騬?)刦\u2072læ…ªy꺜ﲖTjî’•+u",
+ "뽫<G;稳UL⸙q2n쵿C396炿Jè“¡zâ£zဩSOU?<\/ë™oEí¸Oé¿…à·´êˆEm#\"[瑦⤫á†glâ¡—q8\"í˜ë¥ä¿‚@ᆤ=\u0001爖ç¾ì·€ã¸©b9\\jeqt㟿㮸龾m㳳긄": {
+ "9\"î²–V霟釜{/o0嫲Cå’€-饷äˆ[ë…©î)\r䤴tMW\\龟ϣ^ي㪙忩䞞N湆Y笕)è¨ê–¤èª¥ç…½:14â«»57U$æ“’ä²è–¡Qvↇ櫲현誧?nà®·6": {"l웾䌵.ä…‹ä¦ic碳g[糲Ƿ-ឈᚱ4ì‘§\u0004C࿼\u0018&쬑?멲<\/fD_檼픃pd쪼n㕊渪V䛉mæˆW儅톳뗳䓆7㭽諤Tç… ï–ŠNey?î¼…0᪵鈑&": [
+ false,
+ null,
+ {
+ "\rî´’;é¼¶já ‚ê¼RLz~â™”9gf?Ó¡æµ": -1.4843072575250897E-19,
+ "&ꊒ\"ꋟä­E诮ﯚO?SWë’훪mb旙⎕ᗕ⶙|á·¤5y4甥": "j5|庠t铱?v íš‹0\"'rxz䃢æºêž«!\u0002",
+ "Q á©ãŸ§": {"Hﬔ\u2058䪠틙izZㅛ탟H^ﶲA??R6å‘ Z솋R.à¿¶g8": [
+ -8762672252886298799,
+ -1.9486830507000208E17,
+ null,
+ -7157359405410123024,
+ null,
+ null,
+ -995856734219489233,
+ "呧㫹A4!",
+ null,
+ -1.9105609358624648E-19,
+ 5888184370445333848,
+ 2.25460605078245E-19,
+ 2.5302739297121987E18,
+ "뢹sbEfæµ2丯ï‡?뗾耸(Wdë™SବꭖrtU?ç­¤P똙Qpbbï‘¡KqaE$æ¥Vì›°3i/lK퉜,8︸e= gèž“t竦컼?.寋8éµ—",
+ 7377742975895263424,
+ 2.4218442017790503E-19,
+ {
+ "y꒚ཫ쨘醬킃糟}î‘yTSt䡀⇂뿽4ൢ戰U": [[
+ 3600537227234741875,
+ 4435474101760273035,
+ -1.42274517007951795E18,
+ -5567915915496026866,
+ null,
+ null,
+ [
+ -3204084299154861161,
+ {
+ "7梧慸æ†.a瘎\u00041Uéµ®CkÖ¨d惥è€â³¡Y,â­ì¨EåžFFI鱑ⳬ줢7â§µBﴠ耘줕햸qì»´~*ç‘W.떛ࡆ@'á€+è½³": -961121410259132975,
+ "⥅]l黭㣓绶;!!⎃=朼ã¿e&ἂ繤C﯀lä£ãŒ€6TMì‘®w懃ꡡ#ᤆ䰓,墼湼゙뽸㲿䧽쫨xᵖ듨<\/ T0峸iQ:溫è„\\\"쎪ὴ砇宖^Mæ³¼í¥âž…鈫@ᄟ༩\u2008⥼": true,
+ "â©\"籽汎P싯鲘蟼sRá¯ä…©\u0019R(kRá–&ಌ 0\"é³¶!馼YH": null,
+ "鮼ꚇ싋։刟\rRLd步Nⴗ5Eࡆ訛갚[I醵NC(郴ṉy5D뤺౳QY壯5苴y훨(W\\Cଇ姚C艄깹\u001c歷㋵ZC᥂": [
+ -6806235313106257498,
+ null,
+ "}N⸿讽sꚪ;ï‘¶\\p繇jè‹„î¡ä«¨\u20e7%5x?î•¥t#",
+ {
+ "O〗k<墻yV$à°rs-c1ఌ唪.C7_Yobᦜ褷'b帰mã„‘l⌅": {"qB뗗擄3éš‚5ëºæ«‚䱟eì´¸P/é©,3æŽê—©=冉棓㑉|ËžF襴뿴,:㞦<퓂⧙礞♗g뚎ᛩ<\/뉽ⶳ⸻A?_x2Iã½å‹’*Ií™±î¢é§ç²¿~曟㤙2绥Ly6+ìƒuu鿜בfí˜|æ­à£–É": [
+ ">hh䈵î”w>1â²ì­V[â…Ž\\헑벑F_ã–⠗㫇hæ½;á¿æ±°á±¼ç€–J옆9RRì…vsZ柺鶶툤r뢱橾/ꉇ囦FGm\"謗ꉦ⨶쒿⥡%]鵩#ᖣ_蹎 u5|祥?O",
+ null,
+ 2.0150326776036215E-19,
+ null,
+ true,
+ false,
+ true,
+ {"\faá­¶Pæ¤WWcá Ÿf뚉á¬í“—â³€Wç¹5:HXH=q7xì°™X$)모r뚥ᆟ!Jﳸf": [
+ -2995806398034583407,
+ [
+ 6441377066589744683,
+ "Mﶒ醹i)Gἦ廃s6몞 KJ౹礎VZ螺费힀\u0000冺업{è°¥'꡾뱻:.ꘘ굄奉攼Diá·‘Ké¶²y繈욊阓v㻘}枭캗e矮1c?íœ\"4\u0005厑莔뀾墓ë‚⽴洗ṹ䇃糞@b1\u0016즽Yè½¹",
+ {
+ "1⽕⌰鉟í”M㤭n⧴ỼD#%é˜âŠ¯ì¿¼ç¨ë¸£ëªç´§á…‡ã“•ᛖcw嬀~ഌ㖓(0r⧦Qä‘•é«à´°é“‚㓻Rå„®\"@ꇱmâˆà¯¿á¦¯é Œ8}㿹犴?xn잆꥽R": 2.07321075750427366E18,
+ "˳b18㗈䃟柵Z曆VTAu7+㛂cb0﯑Wp執<\/臋뭡뚋刼틮è‹ë²²î·´TLP预庰܈G\\O@VD'鱃#ä¹–ëº*鑪ꬳ?MÞždï­¹{â‡åœ¯ì‡œã¼ž顄︖Y홡g": [{
+ "0a,FZ": true,
+ "2z̬è£î’®ê§¦é©¸\u0006L↛Ḣ4๚뿀'?lcwá„§ã®!蓚䃦-|7.飑挴.樵*+1ﮊ\u0010ꛌ%貨啺/JdM:ë˜ïˆ!FBe?鰴㨗0Oè´¢I藻ʔWAá«“Gì³›u`<\/I": [{
+ "$Ï„5Vé´a뾆両環iZp頻යn븃v": -4869131188151215571,
+ "*즢[⦃b礞R◚nΰꕢH=귰燙[yc誘g䆌?ଜ臛": {
+ "洤湌鲒)⟻\\䥳va}PeAMnï¼®[": "ã³Éª/(軆lZR,Cpæ®È®Nå•·\"3Bå©´?i=r$펽á¤ì€¸",
+ "阄R4㒿㯔ڀ69ZᲦ2ç™í•Œå™—På´œîž#\\-ì­è¢›îˆµ&é‘/$4ç«¥Vê©‘_ZHAæ¾¢fZ3": {"x;P{긳:Gé–‰:9?æ´»H": [
+ "繺漮6?z犞焃슳\">á»[Ⳛ䌜ë…䂹>èµâ¼¶ç…œï’˜Yæ¡¥[泥뚩MvK$4ï‰jtï¾›",
+ "E#갶霠좭㦻ୗ먵F+䪀oè’ba쮎4X㣵 h",
+ -335836610224228782,
+ null,
+ null,
+ [
+ "r1᫩0>danjY짿bs{",
+ [
+ -9.594464059325631E-23,
+ 1.0456894622831624E-20,
+ null,
+ 5.803973284253454E-20,
+ -8141787905188892123,
+ true,
+ -4735305442504973382,
+ 9.513150514479281E-20,
+ "7넳$螔忷㶪}䪪lì§´\u0007é¹Pé°šHFéŠZJﳴ/âŽ1ᷓ忉ç‡áœ‹ì“ˆxëµ mä·çª¥á”^\u0019á¶Œå­#ヂt☆áƒpáŽè‡¶äŸ±5ï‰$ä°µ&๵分ìˆ]äˆë‰â™‚åŽ\u0011<>",
+ "C蒑貑è—lï°°}X喇몛;të°¿O7/᯹f\u0015îµ¼kI嘦<ዴ㟮ᗎZ`GWퟩ瑹࡮ᅴB꿊칈??Ræ ¡s脚",
+ {
+ "9çµæˆ¬+AU^洘拻ቒy柭床'ç²™XG鞕᠜繀伪%]hï ¾C,$è¼™?Utä¹–Qmë–šWï¶8઼}~qâ ªrU䤶CQ痗ig@#≲t샌f㈥酧l;yé—¥ZHæ–¦e⸬]j⸗?ঢ拻퀆滌": null,
+ "畯}ã§¢J罚å¸VX㨑>1ꢶkT⿄蘥ã‘o|<嗸層沈挄GEOM@-äžšä§°$만峬è¼ä ±V✩5宸-æ‚î¡§D'ã—ªyP掶7bâ ŸJã•»SfP?d}v㼂á…'猘": {
+ "陓y잀v>╪": null,
+ "鬿L+7:ë‘Y=ç„ U;킻䯌잫!韎ஔ\f": {
+ "駫WmGጶ": {
+ "\\~m6ç‹©K": -2586304199791962143,
+ "ႜࠀ%Í‘lâ¿…D.ç‘¢Dk%0ç´ªdḨTI픸%뗜☓s榗኉\"?V籄7w髄♲쟗翛歂E䤓皹t ?)ᄟ鬲éœ6Cî³´": {
+ "_ì·¤a圷1\u000eB-XOy缿請∎$`쳌eZ~æï€§íŠ»/蜞`塣৙\"⪰\"æ²’l}蕌\\ë¡ƒè«æ°Œ.望wZ|o!)Hnçqg}": null,
+ "kOSܧ䖨钨:಼é‰ê­O醧Sî…¨`ì‹­`ꓭì­ï¯¢N&Et㺪馻ã¢â…³ã¢ºå´¡àºŠèœšé”«\\%ahx켨|ż劻ꎄ㢄ìŸA躊᰹p譞綨Ir쿯\u0016ﵚOd럂*僨郀N*bã•·63z": {
+ ":L5r+T㡲": [{
+ "VK泓ë²á®™Ry㓤➙Ⱗ38oi}LJቨ7Ó㹡৘*q)1豢⛃e᫛뙪壥镇æž7Gè—¯g㨛oI䄽 孂L缊ꋕ'EN`": -2148138481412096818,
+ "`â›á˜‘$(खꊲ⤖á„ꤒ䦦3=)]Y㢌跨NĴ驳줟秠++då­³>8ᎊ떩Eê¡£Sv룃 쯫أ?#Eî·°|á­™ãŽ?zv:5ï©^â‹‘V": [
+ -1.4691944435285607E-19,
+ 3.4128661569395795E17,
+ "ãƒì´—^G9ä½­é¾¶n募8R厞eEw⺡_ㆱ%⼨D뉄퉠2ê©µá›…â³æ¿L팹Là·€n=\"æ…‰ë…á›®y>!`g!í’²î¦ï¨’[/;?[vï®ê²è»‡}⤳â¤í•∌Tã½²R홓é‰ã“¥",
+ "æ„°_⮹T䓒妒閤둥?0î°šaB@㈧gç„»-#~è·¬x<\/èˆPÝ„ê¡=\\׳P\u0015jᳪá¢qï‹¶;ã¯l%á­—;砢觨â–,è¬ê°Gy?躤O黩í‹Yã’a擯\n7覌똟_䔡]fJ晋IAS",
+ 4367930106786121250,
+ -4.9421193149720582E17,
+ null,
+ {
+ ";ᄌ똾柉곟ⰺKpá‡ä±»à¸ºä–{o~h!ï½…ê¿àª»ìš„Úš\u0002y?xUd\u207c悜ꌭ": [
+ 1.6010824122815255E-19,
+ [
+ "宨︩9앉檥pr쇷?WxLb",
+ "æ°‡9】J玚\u000f옛呲~ è¼ 1D嬛,î•*mW3?n휂糊γ虻*á´«ê¾ ?qîžå‡è¶—Ko↦GTé“®",
+ "ã¶¢ážmOã”k'诔栀Z蛟}GZé’¹D",
+ false,
+ -6.366995517736813E-20,
+ -4894479530745302899,
+ null,
+ "V%᫡IIç’…ï»ä…›ä“Ží’¹ï±¢/pU9seë˜ë›žx梔~C)䨧䩻蜺(g㘚R?/á»°[å¿“C뾠ࢤc왈邠买?嫥挤풜隊枕",
+ ",vç¢å–”㌲쟚蔚톬៓ꭶ",
+ 3.9625444752577524E-19,
+ null,
+ [
+ "kO8란뿒䱕馔b臻âŸéš¨\"㜮鲣Yq5mí”<u뷆cè­†\u001bN?<",
+ [{
+ ";涉c蒀ᴧN䘱䤳 ÿꭷ,핉dSTDB>K#ꢘug㼈á¦=P^6탲@ä§”%$CqSw铜랊0&m⟭<\/a逎ym\u0013îš¡vᯗ": true,
+ "æ´«`|XN뤮\u0018詞=ç´©é´˜_sX)㯅鿻á»ì‹¹": 7.168252736947373E-20,
+ "ꛊ饤ï´è¢(逊+~⽫얢鈮ï«è‰¬O힉7Dç­—S곯wæ“I斞᠈븘蓷x": [[[[
+ -7.3136069426336952E18,
+ -2.13572396712722688E18,
+ {
+ "ç¡¢3㇩R:o칢行E<=\u0018á¬YuH!\u00044U%å炼2>\u001eSi$â“·ê’ˆ'ï‘¿ë ¢gᙫ番ꯒ㛹럥嶀澈v;è‘·é„•x蓎\\惩+稘Uî“´Eᖸﳊ㊈壋Nå«¿â¾æŒŽ,袯苷ኢ\\x|3c": 7540762493381776411,
+ "?!*^á¢çª¯?\u0001ڔꙃw虜ë³îšFgJ?&⨫*uo籤:?}ꃹ=ٴ惨瓜Z媊@ત戹ã”똩Ԛ耦Wtè½\\æž’^\\ꩵ}}}ꀣD\\]6M_⌫)Hè±£:36섘㑜": {
+ ";í™—á°°U஋㙛`D왔ཿЃS회çˆ\u001b-㢈`ë´†?盂㛣듿ᦾ蒽_AD~EEຆ㊋(eNwk=RÉ å³­qï’«\"5Ἠ婾^>'ls\n8QAK<l_⭨穟": [
+ true,
+ true,
+ {"ﳷm箅6qⷈ?ﲈ憟b۷⫉἞V뚴少U呡瓴ꉆs~嘵得㌶4XR漊": [
+ "í†ä»‹fM暪$9K[ㄇìƒí³æ’¦gæ’Ÿæ¸jÒFã¹¹aj bHᘀ踉êŽï¼£ç²„ a?\u000fKì¦‰î¶¯éƒ å¹¨9D舢槷Xh뵎u훩Ꜿ턾ƅ埂P埆kë©€{䢹~?D<\/ê¼¢XR\u001b〱ä½ê¼¨i㘀ḟ㚺A-挸",
+ false,
+ null,
+ -1.1710758021294953E-20,
+ 3996737830256461142,
+ true,
+ null,
+ -8271596984134071193,
+ "_1Gí‰í…‘m䮔鰼6멲Nmꇩſt쓟íŠN许FDï¡€j+3^ﶜ⎸\u0019⤕橥!\"sî•—-뾞lz北׸êšëž¬)?l⻮고iä‘°\u001f䪬",
+ 4.459124464204517E-19,
+ -4.0967172848578447E18,
+ 5643211135841796287,
+ -9.482336221192844E-19,
+ "౪å†é‡¶9D?sèž­X榈枸j2ç§€vï ˜î ]泌鰚岒èµè½€ìŒ¶ïŠ›ií…½qMbL]R,",
+ null,
+ [
+ null,
+ {"M쪊ꯪ@;\u0011罙ꕅ<eáº|爑Yâµ<\/&ᩎ<腊ሑᮔ੃Fè±­": [
+ "^0࡟1ë³Pí‹áæˆF⨥Iê‚´\"z磣Vâ…¡=8í€2]䢹h1\u0017{jT<Iç…›5%Dì…Sâ‘™â…J*ìƒ å·™àº”ï€¢;᧡䙞",
+ [{
+ "'ã¶¡í¾é„§`è·Š\"gV[?u᭒Ʊ髷%葉굵aë¦Nì¼§Qﯳy%y䩟髒L䯜Säµ³r絅肾킂á'ꔦg긓a'@혔যWè°á¬F栩ŷ+7wéžš": 6.3544416675584832E17,
+ "苎脷v改hmìµ|㋊g_ᔠ뒨蹨峟ìŽã·¸|Ο刢?Gͨ옛-?î¨Gꦱî«î“©IEYUX4?%ꘋᆊ㱺": -2.8418378709165287E-19,
+ "誰?(H]N맘]kæ´³\"qï±è’§è˜ž!Rí«\\(Q$T5Nå â«£ìœ¿6|럦ì†ï¸…ï­—(": [
+ "峩_\u0003A瘘?✓[硫䎯á½uጭ\"@Y綅첞m榾=è´®9R벿῜Zï §",
+ null,
+ "䰉㗹㷾Iaáƒqcp쓘὾൫Q|ﵓ<\/ḙ>)- Q䲌mo펹L_îŽ¦ì¹æ¨–庫9ê©ìª¹á˜¹ä‘–ç€aK îž?*趤fë­“å»p=磕",
+ "î“å“‘z懅á¤-ê¹ux쀭",
+ [
+ true,
+ 3998739591332339511,
+ "ጻ㙙?᳸aK<\/囩U`B3袗ﱱ?\"/ké”ä§2ï…¤l@쿎VZ쨎/6ꃭ脥|B?31+on颼-ê®§,O嫚m à¡­`KH葦:粘i]aSUì“™$ì‚f+詛頖b",
+ [{"^<9<ç®&絡;%iï«¡2攑紴\\켉hì“™-柂äšven\u20f7浯-Ꮏ\r^í›ä“ší—¬\u000e?\\ã…¡ÖºJë–·VOt": [{
+ "-௄å¶k㘆í˜à®½y⎱㢬sS઄+^瞥h;á¾·jî­;抭\u0003ë°«f<\/5â°§ï§§ï¡™_朻ï—%*[-撵䷮彈-芈": {
+ "㩩p3篊G|宮hz䑊o곥j^Co0": [
+ 653239109285256503,
+ {"ê¶²?|\":N1Û¿æ°ƒNZ#깩:쇡o8킗ࡊ[\"ë¸Po핇1(6é°$膓}â½*)渽J'DN<ì™ê¸˜æ¯¦ë²Ysì¹–": {
+ "2Pr?Xjㆠ?æ®/?㓦柖馃5뚣Nᦼ|é“¢rè¡´ã©–\"ç”æ¹—Üæ†": "\"뾯ië‡ç­ç‰»$ç²/4ka $åŒíœ´ï‹è¯‘zbAá©ê‡¸ç‘…&뵲衯ꎀᆿ7@ꈋ'ᶨH@á ´l+",
+ "7뢽ëšv?4^ꊥ_⪛.>pởr渲<\/⢕疻c\"g䇘vU剺dஔ鮥꒚(dïŸv祴Xâ¼¹\\îºa8y5å†": true,
+ "o뼄Bìšžç¾hrï·”í˜ë’šâ¿›U5pꪴfg!6\\\"爑ì䢱W<ï¶•î\\í…£ç‡oI/BK뺡'谑♟[Ut븷亮g(\"t⡎有?ꬊ躺ç¿è‰©nl F⤿蠜": 1695826030502619742,
+ "ÛŠê¹–>ࡹ햹^ⵕ쌾BnN〳2C䌕tʬ]ì° ?ݾ2饺蹳ã¶êŒ­è¨\"â—¹á¬D鯎4e滨T輀ﵣ੃3\u20f3í‚™D瘮g\\擦+泙᧠鬹ﯨַ肋7놷郟lPå†{ß’hà§œr5,ê“‹": null,
+ "ΉN$y{}2\\N﹯ⱙK'8ɜͣwt,.钟廣䎘ꆚk媄_": null,
+ "䎥eᾆá¦î‘§ì‰,JÞªn岪ã¥sî­•æ–謽䚔5tã¯ï–µï£šã°³ã±ŠZhD䃭f絕s鋡篟îža`Q鬃┦鸳n_é‚(E4è¿ _è§…ë·_宪D(NLî²ç–¶hL追V熑%]vè‚«=惂!㇫5⬒\u001fï²å–º4랪옑": {
+ "2aè¼85먙R㮧㚪Sm}E2yîŠê†£ê«¨rRymã±è†¶á”¨\\tç¶¾A☰.ç„„ë™—9<쫷챻䒵셴᭛䮜.<\/慌꽒9å»Okä°ŠZ㥪幸k": [
+ null,
+ true,
+ {"쌞ì": {
+ "â–ŸGL K2ië›±iï¼±\"Ì .옛1X$}涺]éŽæ‡ Ú¦ëŠ·?tfçŸÝžã‚Ÿ{": 1.227740268699265E-19,
+ "ê’¶]퓚%ฬKâ…": [{
+ "(à·›@Ç®ã£ä§¼äµ¤[aテൖvEnAdUë –ë—ˆ@볓yꈪ,mÔ´|꟢ìº(而첸죕CX4Y믅": "2⯩㳿ꢚ훀~迯?᪑\\啚;4X\u20c2è¥B箹)ä¿£eá»»w䇄",
+ "75༂f詳䅫ê§é¿ }3\u20b5'∓ä±è™€fè¼î‘”Iq鈆﨤gí©)BFa왢d0뮪痮Mé‹¡nw∵謊;ê§f美箈ḋ*\u001cî±ïœŸ`퇚í‹ä³«$!V#N㹲抗ⱉçŽ(V嵟ï«_bã³…\u0019": null,
+ "e_m@(i㜀3ꦗ䕯䭰Oc+-ë ¨0뭦⢹苿蟰ê‚SVä°­å‹¢ë¥.ྈ爑Vd,á•¥=í€)vz뱊ꈊB_6듯\"?{ã’²&㵞뵫ç–ë¡ë¯ˆ%Qwé™,?\ræž®\"? N~癃ruà¡—dn&": null,
+ "㉹&'Pfs䑜공j<\/?|8oc᧨L7\\pX᭠9᪘": -2.423073789014103E18,
+ "ä„瑄䢸穊f盈᥸,Bî§§ë¾§í‘—íšµB1쟢f\u001f凄": "é­–âš2儉j꼂긾껢嗎0ࢇ纬xI4]ï„(à©“`蕞;픬\fC\"æ–’\")2æ«·I﹥迧",
+ "ퟯ詔xæ‚ë ¹+T?Bg⥄섅kOeQí¼ã»´*{Eé¼6æ°¿L缋\u001c둌๶-㥂2==-츫I즃ã ï–˜Lg踞ꙂEG貨鞠\"\u0014d'.ç¼—ï¡gI-lIb䋱ᎂDy缦?": null,
+ "î’¢ç´Mã¦çŠ¿w浴詟棓쵫G:äœ?V2íž½7N*n&ã–ŠNd-'ຊ?-樹DIv⊜)g䑜9뉂ㄹí‘阉~ê…쵃#R^\u000bïž®B䌎䦾]p.䀳": [{"ϒ爛\"ꄱ︗竒G䃓-î†ã¾å¸³ã‚.j)qguæ‰å¾£à¨Zé¼—A9A鸦甈!kè”å–™:3Tî†%&ã ˜+,ä·ž|ì±½v䚞문H<\/醯rì…“ã¶¾\\a볜åºzEä·_죤ဵ뿰᎟CB": [
+ 6233512720017661219,
+ null,
+ -1638543730522713294,
+ false,
+ -8901187771615024724,
+ [
+ 3891351109509829590,
+ true,
+ false,
+ -1.03836679125188032E18,
+ {
+ "<?起HCᷭ죎åŠîŒŽèއ逰/{gs\u0014⽛㰾愫tï¿–<솞ڢëŒç…²è†ºà¨»9x닳xà¡­Q訽,ᶭඦtt掾\"秧㺌d˪䙻꫗:á­ˆh4ç·žç—䤴c뫚떩త<?ᕢ謚6]í›Oé°é‹›é• è´©èµŸ\"<Gâ™·1'": true,
+ "቙ht4ßBqꦤ+\u0006멲趫ç”)椾": -1100102890585798710,
+ "ç·å…Žê³‡ë‡¸ç²ŸF醇;朠?厱楛㶆â¶7râ¾›o꯬᳡F\\머幖 㜦\f[æ¦á¥½ã®£0䕊?J㊳뀄e㔔+?<n↴å¤î§·": [
+ "4~ê‰ç¾\\å®(泤å•빜\u0014>j랎:g曞ѕᘼ}链N",
+ -1.1103819473845426E-19,
+ true,
+ [
+ true,
+ null,
+ -7.9091791735309888E17,
+ true,
+ {"}蔰鋈+ê¨å•µ0?g*사%`J?*": [{
+ "\"2wG?yn,癷BK\\龞䑞x?蠢": -3.7220345009853505E-19,
+ ";饹়â€)çš‹`噿焒j(3â¿w>å5X<np?<줯<Y]æ˜!J೸UⳂNे7v௸㛃ᄧ톿䨷鯻v焇=烻TQ!F⦰䣣눿Ké·šëˆ'â­²mæ (äš»": [
+ "蹕 淜੃b\"+몾ⴕ",
+ null,
+ 35892237756161615,
+ {
+ " 듹ã)5æ…ç®±&$~:é°ì®<\/å ‹?% \\勽唅zì†å¸‹ä˜ºH髀麡M퇖uz\u0012m諦d᳤콌æ¨\rX싹̡á²": -433791617729505482,
+ "-j溗ࢵcz!:î€}✽5à´‡,욨Ýs#ë«=å—æµº^}E\\Y\\T*뼈cdêºcÛ˜ïµëŽä¨¸ë±K䠴㉿æ¿é€³îŽœ@wî·¿fì¢<\/[L[": -9.3228549642908109E17,
+ "Ms킭uà®—%\\uâŽ/家欲ἅ答㓽/꯳齳|㭘Pr\"v<\/禇䔆$GA䊻˔-:틊[h?倬è¤á¾žà§³.Gw\u000b": [
+ "0宜塙I@ä´è‰\\Uyë’…=2<hæš’ï…£K._è´¡ç’Yi檻_⮵uá㘗è [f\u0015힢Hê”®}጑;ï´èªyf0\"\u20cc?(=qæ– âž½5ꎾ鞘kⲃ",
+ -2.9234211354411E-19,
+ false,
+ true,
+ {
+ "\u0011⟴GH_;#怵:\u001c\u0002nîž»1U\\p/ì™”(┫]hêšî·ƒ7\r0䵷첗岷O௷?î·°ãŽ[殇|J=?韷pᶟ儜犆?5კ1kê–iH竧뛈ପdmk游y(콪팱ê¾k慧 yè¾£": [
+ false,
+ "O\"ëp覈ykv磂㢠ãµ~뀬íŠlC&4솎䇃:Mj",
+ -7.009964654003924E-20,
+ false,
+ -49306078522414046,
+ null,
+ null,
+ 2160432477732354319,
+ true,
+ "4íš¡h+!踹ê¬P鮄{0&ë±¥M?ìƒéž…n㮞ᨹ?쒆毪l'ç®…^ꚥ頛`e㻨52柳⮙嫪࡟딯a.ï‘„~äµ®1få˜N&zÈ­L榓ۃ鳠5d㟆M@㣥ï Ó‹AÎq0縶$",
+ -3.848996532974368E16,
+ true,
+ null,
+ -3.5240055580952525E18,
+ {
+ " vï­·áµ#ce乃5僞?Z D`묨粇á”ç» vWLè­¢uë½€\\J|tâ“™tâ„–\"ꨋnT凮ᒩè‚ç¯b騩:䢭Hbvì»å³¨z㹚T趗햆귣학津Xiï¼¹@á–¥K": true,
+ "!F 醌yï䉸W2ꇬ\u0006/ä’7~%9擛햀徉9â›°+?㌘;ê “X䇻Dfië¼§ì’’\u0012F謞Õ絺+臕kà¤LSQìŒX쎬幦HZ98è’Šæž³": "澤令#\u001dæŠâ›³@Næ•퀂[5,✄ꘇ~䘷?\u0011Xꈺ[硸⠘⛯X醪è¡x\u0007쌇MiX/|ï¾ëšK8ä¡î¿¥W)銀q僞綂蔕E",
+ "6â²ä£–Rà§ž@ငg?<\/à³´xé™™Xꈺ崸⠅ᇾ\\0X,H쟴셭A稂ힿã‚F\\쑞\u0012懦(Aᯕç­~î½”\u0001ê»®X?逊": 5.7566819207732864E17,
+ "[c?椓": false,
+ "kä’‡": 2583824107104166717,
+ "꙯N훙ã…ﮒ燣㨊瞯咽jî™Mxby뻭뵫װ[\"1畈?à§±L": "ë£á”‚魠羓犴ꚃ+|rY",
+ "ë…ºZ?îˆä¬ï“©é‰‰îˆ­:?â³™ç˜Cኯ.Vs[釿䨉ì§\\\\*쵢猒$\\y溔^,㑳": {"藶꺟": [{
+ "\"d훣N2zq]?'檿죸忷篇ﮟ擤m'9!죶≓pë­»\\ᇷ\f퇶_ä°¸hà¹Q嵃訾㘑従ꯦ䞶jL틊ræ¾µOmᾫ!H䱤팼/;|á­ºI7슎YhuXiâš¼": -1.352716906472438E-19,
+ "M⽇倻5Jä‚«à¤”á”æ¥¸#î „î¾–J[Fﹱ쫮W誻bWz?}1\"9硪뻶fe": "盬:Ѹ砿íšë•£T凊(mç¦å‘œï»R㿎艴䂵h",
+ "Rë¾k힪CHé’™_i苮ⰵoᾨ紑퉎7h؉\"柀è½z0့\"<?嘭$èœ?礲7岇槀묡?Vé’¿T⣜v+솒çšÔ›2ç±³mH?>è–™å©è¿3aFÆÃ": "2,ê“´g?_섦_>Y쪥션钺;=趘F~?D㨫\bX?㹤+>/믟kᠪ멅쬂Uzỵ]$ç§`mé›ç‘Šî’ඖ鯬cꙉ梢f묛bB",
+ "♽n$YjKiXX*GOè´©éƒè±®ç¥´éžK醞眡}ê—¨v嵎꼷0à­¸+Mè‹eH徸Jîžê£†:â¼æ‚¥B켽迚㯃bè«‚\u000bjꠜ碱逮m8": [
+ "푷᣺ﻯd8ﱖ嬇ភHîªé¹Žâ¡±á±…0g:æžœ6$GQ췎{vá·§Yy-è„•xå¹ç ¡ï¨¬â®¸Cï§‚êš=軄H犠Gè°–ES詤Zè ‚3î§™lë´Ÿhï¿’7䦹1GPQG癸숟~[#é§¥8zQ뛣J소obg,",
+ null,
+ 1513751096373485652,
+ null,
+ -6.851466660824754E-19,
+ {"ä©‚-â´®2Ù°K솖풄꾚ႻP앳1Hî³é·›wmR䗂皎칄?醜<\/&à §ã¬X濬䵈K`vJ륒Q/IC묛!;$vÏ‘": {
+ "@-êš—xྐྵ@m瘬\u0010U絨ﮌé©\\켑寛넆T=tQã­¤Lì—°@脸삯e-ï–…î–‘:⩼u㎳VQ㋱襗ຓ<Ⅶ䌸cML3+\u001e_C)r\\9+Jn\\Pﺔ8蠱檾è…Pqé³è¯î¦§Tä„I": -1.80683891195530061E18,
+ "á·­á‹»U~ཷsgSJ`᪅'%ã–”n5픆桪砳峣3ç®æž¾äŒ·âа呀ïŒ": {
+ "Ş੉䓰邟自~X耤pl7间懑徛s첦5ਕXexh⬖鎥á€nNr(J컗|ૃF\"Q겮葲놔엞^겄+㈆è¯ã€¾í¬ç´G'E?飕1fâ¼í…¬æ‚šï•¦æ³¬ë¨Uç¬í›¶Qs": false,
+ "î³…(\u20dag8í½íŠ£>^Y{뤋.袊䂓î†;_ïg]S\u202a꽬L;^'#î—™ë•bႌ?Cç·¡<ä²ä²æ–­ê6\u001asD7IK5Wxo8\u0006på¼Šâ¼‚ê¯æ‰µ\u0003`뵂픋%ꄰ⫙ë¶lå›å°›ïˆ®+ä—…E쟇\\": [
+ true,
+ {
+ "\n鱿aKã¡â’ã¼™2ì´¹f;`ì¾qIà¡”G}ã·äç“°w늮*ç²…9뒪ㄊCj倡翑閳R渚MiUO~仨䜶RꙀA僈㉋⦋n{ã–¥0딿벑î§é€¦â¥»0î¾®h薓쯴ê»": [
+ 5188716534221998369,
+ 2579413015347802508,
+ 9.010794400256652E-21,
+ -6.5327297761238093E17,
+ 1.11635352494065523E18,
+ -6656281618760253655,
+ {
+ "": ")?",
+ "TWKLꑙ裑꺔UE俸塑炌Ũ᜕-ï’‚o\"徚#": {"M/癟6!oI51niíš=댡>xê¨\u0004 ?": {
+ "çš­": {"⢫䋖>u%wî²´ìž¼<ä•ê˜P䋵$é­‹æ‹U䮎緧皇Y훂&|羋ꋕ잿cJ䨈跓齳5\u001a삱籷I꿾뤔S8㌷繖_Yឯ䲱B턼Oæ­µF\\l醴o_欬6ç±=D": [
+ false,
+ true,
+ {"Mt|êžD|Fê¶£MQ뵕T,ëºk+?ãµi": [
+ 7828094884540988137,
+ false,
+ {
+ "!༦鯠,&aﳑ>[euJê½ç¶·æB.h": -7648546591767075632,
+ "-n켧嘰{7æŒæ¯„Y,>â螵煫乌pv醑Qå¶š!|âŒè²¬0왾ë¢ê…蛨S\\)ç«°'舓Q}A釡5#v": 3344849660672723988,
+ "8é–ªéºV=鈢1녈幬6棉⪮둌\u207d᚛驉ꛃ'r䆉æƒà¥ˆ|bἧﺢᒙ<=穊强s혧eꮿ慩⌡ \\æ§³W븧J檀C,ᘉì˜0俯퀉M;筷ࣴ瓿{늊埂鄧_4æ¸Nn阼Jੵ˥(社": true,
+ "oë¼€vwï…®)4A뢵(î¼±a䵢)p姃뛸\u000fK#KiQp\u0005ê…芅ì…îª": null,
+ "ç ¥$ꥸ┇耽uæ–®Gc{z빔깎밇\\숰\u001eê´·å„㶇쵿_á´„+hç©¢p촀Ნ䃬zäé…³Ó‚31xꔄ1_ç šWë ˜G#2葊P ": [
+ -3709692921720865059,
+ null,
+ [
+ 6669892810652602379,
+ -135535375466621127,
+ "뎴iO}Z? 馢녱稹ᄾä©rSt帤넆&7ié¨ë©—ç•–ï”9誧鄜'w{Ͻ^2窭외b㑎粖i矪ꦨ탪跣)KEㆹ\u0015V8[W?⽉>'kc$䨘ᮛ뉻٬M5",
+ 1.10439588726055846E18,
+ false,
+ -4349729830749729097,
+ null,
+ [
+ false,
+ "_è ¢ã ^䟪/D녒㡋ỎCä’ˆíŒïŒ¢\u0006àªq@O펢%;é¹ìŒo戥~A[ꡉ濽ỳ&虃᩾è£å”™ï¤£èŒ¨Ig楡꒻M窓冉?",
+ true,
+ 2.17220752996421728E17,
+ -5079714907315156164,
+ -9.960375974658589E-20,
+ "ᾎ戞༒",
+ true,
+ false,
+ [[
+ "ⶉᖌX⧕홇)g엃⹪xëšç™Ÿ\u0002",
+ -5185853871623955469,
+ {
+ "L㜤9ợㇶKé°â‹“V뽋˖!æ–«as|9"á¬ä†ª?î¾¶7胜&n薑~": -2.11545634977136992E17,
+ "O8뀩D}캖qè‚6༣ã—䈓煮å½à¨†á޼Dᣘí›;": false,
+ "YTá¡…^ï—Lã—ŽcbY$pᣞ縿#fh!ꘂb삵玊颟샞ဢ$ä—é¼’ëª~rkH^:닮먖츸륈⪺쒉砉?㙓扫㆕꣒`R䢱Bé…‚?C뇞<5Iޚ讳騕S瞦z": null,
+ "\\RB?`mG댵鉡å¹ç‰©äµŽæœ‰5*e骄T㌓ᛪç¾é§’Ku\u001a[柆jUq8⋈5鿋츿myï»—?é›ux঴?": 5828963951918205428,
+ "n0æ™…:黯 î¶·xu씪^퓞cB㎊á¬âº˜Ù¤Öƒ~B岚3㥕擄vᲂ~F?Cä¶–@$mï›~å¿”S왖㲚?챴⊟W#벌{'ã°Iä ç¸s樘\\X뢻9í•¡I6èㄛî‚î«8쯶]wॽ0L\"q": null,
+ "x增줖j⦦tä¢áŽ™ïŠ­ã›¿Yf鼘~ê«“æ„4惊\u209c": "oOhbᤃ᛽z&Bi犑\\3B㩬劇䄑oÅ쨅孥ë©àº–acA㖫借ãžvg싰샂ãœ#譞⢤@k]鋰嘘䜾L熶塥_<\/â¾å±ˆï®Š_mYè¹t뙺}Ox=wé®®4S1ê©ï¬¾'å·‘",
+ "㗓蟵ꂾe蠅匳(JPä—à·¸\u0089耀왲": [{
+ "ᤃ㵥韎뤽\r?挥O쯡⇔㞚3ä¼–\u0005Pî•⋪\"Dê¶£QLn(⚘罩䩢Ŏv䤘尗뼤ë›O淽鋋î¡é—šrå´©a{4ç®™{煷m6〈": {
+ "l곺1L": {
+ "T'ਤ?ç …|੬Km]ä„©\"(à¿¶<\/6U爢䫈倔郴l2ã´±^줣k'Læµ–Lé°„Rp今鎗⒗Cì–¨Mí›ã¡§Î˜X粜뫈N꤇輊㌻켑#㮮샶-ä—룲è ç™œã±V>=\\I尬癤t=": 7648082845323511446,
+ "鋞EP:<\/_`á§e混ㇹBd⯢㮂驋\\q碽饩跓྿ᴜ+j箿ë ã—‘yK毢宸p謹h䦹乕U媣\\炤": [[
+ "3",
+ [
+ true,
+ 3.4058271399411134E-20,
+ true,
+ "æ€+憱f逮@먻BpW曉\u001aã£âŽŠ$n劈D枤㡞좾\u001aá›ïŒƒè‹”౩é—1B䷒Ṋ݋âžê€žêƒç£$t੤_:蘺⮼(#N",
+ 697483894874368636,
+ [
+ "vᘯ锴)0訶}䳅⩚0O壱韈ߜ\u0018*Ué¾ä–=䧉뽑å•휻ID쿇嘗?ꌸῬ07",
+ -5.4858784319382006E18,
+ 7.5467775182251151E18,
+ -8911128589670029195,
+ -7531052386005780140,
+ null,
+ [
+ null,
+ true,
+ [[{
+ "1欯twG<uä®â½ê‡£_ჟﱴଶ-쪋\"?홺k:èŽêœª*⺵꽹댅釔좵}P?=9ë ¿46b\u001c\\S?(筈僦⇶爷谰1ྷa": true,
+ "TҫJYxÚª\\鰔℮혡)m_WVi眪1[71><\/ï†Q:0怯押殃탷è«ì‚¬<ỗꕧ蚨ä¡ï¨î³‰nDꌕ\u001cë…¬~è“©<N蹑\"{ä«¥lKcí˜ë«–앺:vⵑ": "gæ§µ?",
+ "aꨩ뻃싥렌1`ë¡—}Yg>鲃g儊>ê¡l㻿/â‘·*ì±³6㻜W毤緛ﹺᨪ4\u0013뺚J髬e3쳸䘦伧?æª&{L掾p+꬜MäŠd娘6": {
+ "2p첼양棜h䜢﮶aQ*c扦v︥뮓kC寵횂S銩&Ç{O*य़iH`Uí…à¡“rä©•5ꄸ?`\\á§«?ᮼ?t〟崾훈kè–ì/iy꤃뵰z1<\/AQ#ë¿©8jJ1z@u䕥": 1.82135747285215155E18,
+ "ZdN &=dë…„á…†'ì‘â…‰:烋5&áŸï”‹á„‚汎æ¥L㯄固{é’§u\\ãŠíŠšeæ‘‘&tå—„ê–„UbâŒ?m䴘熚9EW": [{
+ "ଛ{i*a(": -8.0314147546006822E17,
+ "⫾ꃆY\u000e+W`௸ \"Më’¶+\\ë·lKE}(NTí‚¶Yjé¸ç¯’î©¥ì¶'jNQ硾(똡\\\"逌â´y? IRꜘ὞鄬﨧:M\\fâ ‹Cꚜ쫊ᚴNV^Dä•—ã…–á¼”Iao꿬Câ8": [
+ 287156137829026547,
+ {
+ "H丞N逕<rO䎗:í…•<\/䶩샌Sd%^ᵯëˆ엑者g䖩똭蕮1U驣?Pâ°°\u001fp(W]67\u0015ï«£6굺OR羸#ì´Fè’ˆ;嘙i✵@_æ’¶yã¤â¤(:᧗뼢༌朆@â°ã¤¨ê­²?-n>⯲": {"": {
+ "7-;枮阕梒9ᑄZ": [[[[
+ null,
+ {
+ "": [[[[
+ -7.365909561486078E-19,
+ 2948694324944243408,
+ null,
+ [
+ true,
+ "荒\"并孷䂡쵼9o䀘F\u0002龬7⮹Wz%厖/*? a*R枈㌦ë¾g뒠䤈q딄㺿$쮸tᶎ릑弣^éŽ<\/Y鷇驜L鿽<\/ì¶‹9Mᲆឨ^<\/庲3'lë‚¢",
+ "c鮦\u001bë‘\\~?眾ಢu݆綑෪蘛轋◜gȃ<\/â´ƒcpkDt誩܅\"Y",
+ [[
+ null,
+ null,
+ [
+ 3113744396744005402,
+ true,
+ "v(y",
+ {
+ "AQ幆h쾜O+꺷铀ꛉ練A蚗⼺螔jãŒ3꽂楎䥯뎸먩?": null,
+ "蠗渗iz鱖w]擪E": 1.2927828494783804E-17,
+ "튷|䀭n*曎b✿~æ¤U]î­¡Gz鄭kW|ã´š#㟗ഠ8u擨": [[
+ true,
+ null,
+ null,
+ {"⾪壯톽g7?㥜ώQê‘㦀æƒã§½î“¡ä¼“\\î¦*᧰閖樧뢇赸N휶䎈pIæ°‡ï®é•Šmaᬠ탷#X?î³A+kÐM ༑᩟Ø?5꧎鰜ṚY즫궔 =ঈî³;ﳈ?*s|켦蜌wM笙莔": [
+ null,
+ -3808207793125626469,
+ [
+ -469910450345251234,
+ 7852761921290328872,
+ -2.7979740127017492E18,
+ 1.4458504352519893E-20,
+ true,
+ "㽙깹?ë¨ä†¢:ä´ŽÛ»gæ® JBTU⇞}ꄹꗣi#Iî’¡ëµ£é‰r혯~脀ìƒ#釯:场:ä”>ä°®o'ã¼½HZ擓௧nd",
+ [
+ 974441101787238751,
+ null,
+ -2.1647718292441327E-19,
+ 1.03602824249831488E18,
+ [
+ null,
+ 1.0311977941822604E-17,
+ false,
+ true,
+ {
+ "": -3.7019778830816707E18,
+ "Eå³¾æ†èŒ6xLIm縂0n2视֯J-ᤜz+ᨣè·mYDè±ç¹¹â¹ºäŠ“ëª“ï´€E(@è©®(!ï’Y膽#᎙2䟓섣A䈀㟎,囪QbKæ’wcG湎ꤧtGì—xâ¥ä¿Žj'A一ᯥ뛙6ㅑ鬀": 8999803005418087004,
+ "よ殳\\zDâ§…%Y泥簳Uꈩ*wîRL{3#3FYHା[d岀䉯T稉駅䞘礄P:é—ˆWæ€ElBã¤å–¬èµ”bGä ¼U଄Nw鰯闀楈ePsDꥷ꭬⊊": [
+ 6.77723657904486E-20,
+ null,
+ [
+ "ཚ_뷎꾑è¹q'㾱ꂓ钚蘞慵렜떆`ⴹ⎼櫯]J?[t9Ⓢ !컶躔I᮸uz>3aã •i,錃L$æ°°í…°@7ë…«W㸮?ç¾§W뇧ꃞ,î—‘N鋮숪2ɼì½â”ä²6",
+ "&y?뢶=킕올Za惻HZk>c\u20b58i?ꦶcfBv잉ETî…9jä¡¡",
+ "imçŠÕƒbì¹§<D-è«‚*u2ꡜ췛~䬢(텸ﵦ>æ ¡\\뼾쯀",
+ 9.555715121193197E-20,
+ true,
+ {
+ "<㫚v6腓㨭e1ã•”&&V∌ᗈT奄5Lጥ>탤?튣瑦㳆ꉰ!(ᙪ㿬擇_n쌯IMá¿‹î£ã•¨â°æ«ˆá±·5풔蟹&L.ì²½e鰷쯃劼﫭b#ï­¶í“€7ë·„Wr㢈๧Tʴશ㶑澕é%": -1810142373373748101,
+ "fg晌o?߲ꗄ;>C>?=鑰監侯Kt굅": true,
+ "䫡蓺ꑷ]C蒹㦘\"1à°ƒ@å‘«\u0014NLä¾egå‘®á³,r$裢k>/\\<z": [[
+ null,
+ "Cä¡>?ㄤᇰﻛ쉕1஥'ÄŠ\" \\_?쨔\"ʾr: 9Sä˜ç¦ºáª§ê„‚㲄",
+ [[{
+ "*ç¡™^+E쌺I1䀖ju?:⦈Ꞓl๴竣迃xKC/饉:\fl\"XTFᄄ蟭,芢<\/骡軺ëœhê˜\u001f銿<棔햳▨(궆*=ä¹¥b8\\媦ä·€ë«}닶ꇭ(Kej䤑M": [{
+ "1á¬?>옿Iâ•…C<ÞŽ?ꊌ冉SV5A㢊㶆z-๎玶绢2F뵨@㉌뀌oå¶”f9-庒茪ç“ë·³4": null,
+ ";lá°³": "CbB+è‚»aä„·è‹*/볳+/4fq=ã°h6瘉샴4é“¢Yéª.⌖@哼猎㦞+'gꋸ㒕ߤï—ãž‘(ä¶’è·²tiâ‘´aî¥ç¡‚#Noë³”",
+ "t?/jE幸YHT셵⩎Kî¹!Eq糦ꗣv刴w\"l$ο:=6:ç§»": {
+ "z]鑪醊嫗J-Xm銌ç¿çµ¨c里ëç‚™Ep㣋é£ë˜¼åšŒä€“GPï¹–cmf4é¹­T䅿꣭姧â¸wy6ꦶ;S&(}ᎧKxᾂQ|tï¹ë»³k\"d6\"|Mlì·†hwLtê¼¼4$&8Պ褵婶鯀9": {"嵃닢ᒯ'î–›dá§«ä³³#Nî‡Xe3-붋鸿î¢à¬¢ë–“î§ž%dK\u0013䲎ê–YV.裸Râ‰rR3蟛\\:ì ¯:å—ĺLʆ넕>|텩鴷矔ꋅⒹ{tå­¶ã“‘4_": [
+ true,
+ null,
+ [
+ false,
+ "l怨콈lá’",
+ {
+ "0wä²å¬§-:`䉅쉇漧\\Ü‚yㄨb%㽄j7ᦶ涶<": 3.7899452730383747E-19,
+ "ꯛTẀq纤qå¶Vâ¿£?\"g}ი艹(쥯B î­T騠I=仵ë°X": {"KX6颠+&á…ƒ^fç•’y[": {
+ "H?뱜^?꤂-⦲1a㋞&î‘®êƒç²¾Ii᤾챪咽쬘唂쫷<땡劈훫놡o㥂\\ Kâ´™Dç§¼Fæ°®[{'좴:례晰Iq+Iì­¥_T綺砸GOç…䟪ᚪ`î‘↹l羉qì¼Dê½áœ…훦: vUV": true,
+ "u^yï³0㱓#[y뜌앸ꊬLã·©?蕶蘾â»KӼ": -7931695755102841701,
+ "䤬轉車>\u001c鴵惋\"$쯃྆⇻në½€Gæ° Såª]à²²ê¨æ‡Qxኻ椕駔\\9ࣼ﫻ìœç£¡ï©ˆëºªá¶šë³l㕆t+sζ": [[[
+ true,
+ false,
+ [
+ null,
+ 3363739578828074923,
+ true,
+ {
+ "\"鸣詩 î›ë³°ã‘µgLã¯¦á¿…ì¶æ—«}ED辗ﮈI쀤-ꧤ|ã ¦Z\"娑ᕸ4çˆé¨ã£\"]ì³Af]茛⬻싦oèšk䢯ä©è½3廇喑ޅ": 4.5017999150704666E17,
+ "TYႇ7ʠ值4챳唤~Zo&ݛ": false,
+ "`å¡„J袛㭆ëºã³€N㺣`ê½å¶¥Kï¯SVᶔ∲퀠ç¾N딂X\"á¤hNﬨvI": {"\u20bbã­˜I䖵䰼?sw䂷쇪]î(泒f\"~;꼪FÔsá¦": {"p,'ꉂ軿=Aèš¶?bƉãµä…°è«¬'LYKL6B깯⋩겦뎙(ᜭ\u0006噣d꾆㗼Z;ä„äš”cd<情@äž‚3苼㸲U{)<6&ꩻ钛\u001au〷N숨囖愙j=BXWìš•^x芜å á¿™çˆ‚ë›·ê’»t✘Q\b": [[
+ "ç±›&ଃ䩹.ꃩ㦔\\C颫#暪&!勹ꇶ놽攺J堬镙~軌C'꾖䣹㮅ï¶å²ƒá™´éµ£",
+ 4.317829988264744E15,
+ 6.013585322002147E-20,
+ false,
+ true,
+ null,
+ null,
+ -3.084633632357326E-20,
+ false,
+ null,
+ {
+ "\"짫愔昻 Xï«\"è—£j\"\"ë¨à½…ѻ㘤㬯0晲DU꟒㸃dë²€î¢ìœ’l䦾cà©»*3": null,
+ "è°ˆWm陧阦咟ฯ歖擓Nå–´ã‹éŠ­rCCnVࢥ^♼Ⅾ젲씗刊Sà¼+_tèµ”\\bäšë‰¨ê¬«6펛cL䊘᜼<\/澤pF懽&H": [
+ null,
+ {
+ "W\"HDUuΌ퀟M'P4à¿°H똆ⰱﮯ<\/å‡è˜²\"C鴫ﭒж}ꭩ쥾t5yd诪ﮡí‰â´°@?æ°é†³rj4I6Qt": 6.9090159359219891E17,
+ "絛ﳛ⺂": {"è«°Pã—®î˜è¦`ZQ?ꫦh*à´±cbâ§±}埌茥h{棩렛툽o3é’›5é®l7Q榛6_g)ὄ\u0013kj뤬^爖eO4Ⱈ槞鉨ͺ订%qX0Tì—å«·$?\\\"봅늆'%": [
+ -2.348150870600346E-19,
+ [[
+ true,
+ -6619392047819511778,
+ false,
+ [[
+ -1.2929189982356161E-20,
+ 1.7417192219309838E-19,
+ {"?åµ²2à¿2\u0001啑㷳c縯": [
+ null,
+ [
+ false,
+ true,
+ 2578060295690793218,
+ {
+ "?\"殃呎ïˆ#ã‘‘F": true,
+ "}F炊_æ®›oU헢兔êˆ,èµ­9703.Bæ•°gTz3â¬": {
+ "5&t3,í–“Mݸᵣ㴵;꣫ä©â†³#ï¢@ë«·ä …ï¦+W-ࣇzᓃ鿕ಔ梭?T䮑ꥬ旴]u뫵막bBè®:왳둛lEh=숾鱠på’î›î­ˆ$ì§#?gâ¹·á—Švã·µ.æ–ˆu頻\u0018-G.": "ë½™m-ouࣤ஫牷\"`Ksꕞ筼3HlȨvCï¢î›¦å ˆ\"I]㖡玎r먞#'W賜鴇k'c룼髋䆿飉㗆xgå·¤9;芔cáŒ/ax䊨♢í“rå“㸫೼䢗da᩾\"]å±£`",
+ ":M딪<䢥喠\u0013ã–…x9è•ã‘‚XO]f*Q呰瞊å­VP@9,㨣 D\\穎vˤƩs㜂-曱唅L걬/롬j㈹EB8g<\/ì„©o渀\"u0y&룣": ">æ°ç·©L/ä•‘ë¯êŸ˜îŸ”蕞^aBë’£+0jK⪄瑨痜LXK^힦1qK{æ·št츔X:Vm{2rçB뾄H첚7æ°¥?쉟䨗ꠂv팳圎è¸é½€\\",
+ "D彤5㢷Gꪻ[lㄆ@὜⓰絳[ଃç½ì®¹â˜’[*0ꑚ㜳": 9022717159376231865,
+ "Ò–aV銣tW+$é­¿\u20c3ïœäºœ~ë«¡ᙰ禿쨽ã¡fá¹¼zE/h": "5è‡ï’Œã‹‡á²¯ì®º? 昨탰Wム밎#'\"崲钅U?幫뺀â¾@4kh>騧\\0Ò¾EV=çˆî©®ÍŒUæ€%ꉼ 㮋<{j]{R>:gÔ©L\u001c瀈锌ﯲﳡꚒ'â«¿E4æšãŒ—뵉X\"Háœ",
+ "ᱚגּ;s醒}çŠSἿ㦣&{T$jkB\\\tḮ앾䤹o<é¿(tW": "vb⯽䴪䮢@|)",
+ "⥒í껉%惀뗌+녣迺顀qæ¢g⚯i⤭ë£Mç¹j̈́⽜A": -8385214638503106917,
+ "逨ꊶZ<\/W⫟솪㎮ᘇb?ê ”i\"H㧺x෷韒Xꫨฟ|]窽\u001a熑}Agn?Má¶–a<rà°„4Ů䢤슲AxÄ£eê³–ã´¤x竾éƒB謉鸵kè–½M)\"芣眜`è‰ê‰›ä´º": "é¹^ె캫?3耲]|Ü1ä¡’ã®]8e?ä¶^",
+ "뿸樅#P㡊1M룮Uꪭ绢ꑮZ9꽸": {"\nJ^Ñ”|3袄ã…7⨆銦yîµ”çâ‹·ä»´ct?[,<\/ã…¬`?갔髞%æA೚C": {
+ " 䇞3갫䅪": [{
+ "0|â©ã‘‚砕ㅻ": null,
+ "D箳᠉`|=â¼­)\"*࣊ã¦LjO誋": "",
+ "ࠚDZmê—¥}ᷴ╈r7í—´È¥4Kp5a)o}鎘门Læ°ä†“'✎k俎c#T68Óâ©¶î¶6L鎴<r൦$黊BQYã¼³\\è·¿F慮⡨拵贀!ç”¶Vå–…/": null,
+ "âµ£q⳹ﻨLk]晩1*y\\$%}ä–¶P煑㇆䈦E嫿«•Y࣓嫨ä“OL낮梚㸇洛洚BYtgl∛S☕䉓宑⋢粚ꔯ꠼붠": ")ꬑ윤`\"â°£<\/婽*Y䔸ᓰ_ï³t슲å©éš¥&S糧䛮闵诌è±sh쯽邴*ì„´ØÍŽ=㯨\"RVíž³,^t\"ac?䤒ꉀxHa=Uꛕã™î·“TkF껾",
+ "å¼¾cUAF?暤cë½.欀nKì•­]r傊䀓ﯳ馽垃[䥛oI0N砊鈥헅Co쟋钄ㅷ㊌뷚7": [
+ null,
+ "à«“é¨?^ä†{\u0006`X䧵儱&롡尙砡\u0006ë»ì‘¬sjâ–»Xfᬶgcã„¢V >9韲4$3á»´^=ì煤áë·2䣃%ï…Žé· /eQ9頸쥎",
+ 2398360204813891033,
+ false,
+ 3.2658897259932633E-19,
+ null,
+ "?ꚃ8Nnãž·å¹µd䲳䱲뀙ꪛQ瑓鎴]î’¶ä©‹-é°¾æ¡ï¾ä³¡??掊",
+ false,
+ -1309779089385483661,
+ "ᦲxu_/yecR.6èŠ.áœ‡éŽ ~",
+ -5658779764160586501,
+ "ì’Œ:æ› =lìœä¢œwk#s蕚\"互㮉m䉤~0ë“䋙#Gîš¿;h숄옥顇෤勹(C7㢅雚ã¯Lâ …VVç°…<",
+ null,
+ -4.664877097240962E18,
+ -4.1931322262828017E18,
+ {
+ ",": {
+ "v㮟麑䄠뤵g{Më®.\u001bzt뢜뵡0Ǥ龍떟Ᾰ怷ϓRT@Lꀌ樂Uã â¾•e扉|bJg(뵒㠶唺~ꂿ(땉x⻫싉ìŠ;%0鎻V(o\f,NéŠ%nk郼螺": -1.73631993428376141E18,
+ "쟧摑繮Q@Rᕾ㭚㾣4隅待㓎3蒟": [
+ 4971487283312058201,
+ 8973067552274458613,
+ {
+ "`aæ™á£—î\u0015i<S幼訃锭B0&槩✨[Wpçš©[g≊k葾x2ᡆ橲䲢W": true,
+ "kH皈Sê±qå‚‘u?솹풑~o^F=ï¦N*reî••J沤wW苯7pã¼¹äŽa=ꮧLã·©냴nWꌑ㞱uuè°lVNç¿á¤»(eè±¶5#L쪉ᅄ઄\u0015숟봊P瀚X蓎": false,
+ "䫯דּ〖Scä›­ì Lëµ¾pî«“CꙞ\"엇즓_ﰛ톣ꫀ먩㺣㮠⭴!\\Wâ”tä–°è»…y\u0014~ᇰ렢E7*俜䥪W䀩ä·hë´†vjஉ묣à¼G39.뼳輼:㮿á¦A饕TUL}~": [
+ null,
+ 8.8648298810470003E17,
+ 5.735561205600924E-20,
+ null,
+ -102555823658171644,
+ 1.2674932032973067E-19,
+ {
+ "D胣O㯨\u0017Ku눓ã’í…nᨊ!Ꚇ廫_>Bo¸": 4.3236479112537999E18,
+ "HW&퉡ãåœ<W)6æ‚°ê ‘HEp14xy峑ft\u0005s亘V튉䢮ꦈXåµê¬?lI_ë춇-6Ss噺Nk-ﮥíƒÜ郪*ï“­PR(S6â•‹@ä»™V懸뺵ﯜVç²¹": "9䗌斀4ãˆ^Qséš„ç¡j\u0003",
+ "Vké¶…Cæ³¹ç­HX훉朗*r\\z顊誌儖4?n7á¾6몋䎡ﳈ],Hé ¢pèšã‘„P4满Eä©V䬕à¸L廂쒬î®ì‘¨ê†·hè¿¡ê°è­–墎 î‡]鹿ฌ7ﶽ冭༽<ꈓS\\lä‹®?_ユ檒?": -8598528325153980065,
+ "t=qí£ç–»Ñ‚Z\\錅J.镎|nfḷ鴒1厰Lç¯çºœîŒ•E]୦⥪]á®'ç¾p/å’©0닳ï³qﳖཽk ?X1Ft%ś뭢v鋋⺃爵⒗": [[
+ 5.0824756359232045E-19,
+ [
+ 7.268480839079619E-19,
+ {"탿^굞⧕iјëŠê€›w껩6ꟳXsé…š\\>Y?ç‘¡Qyí›q!帰ï©s舠㫸zêš—aSæ­²v`G株巷Jp6킼 (ê·¶é”â¾î‹¥â¡ˆ>Mæ±ãžá‰´ê™²dv@i㳓ᇆ?é»": [
+ null,
+ 4997607199327183467,
+ "E㻎蠫á¾é«˜ä™Ÿè˜¬æ´¼æ—¾ï« í…›ã‡›?'M$㣒蔸=A_亀绉앭rN帮",
+ null,
+ [{
+ "Eᑞ)8<Zî¿—ã¡¿W镀䛒Cìƒî¿«V?0ꯦ+tL)`é½³AjBå§€Xà³³D빠㻲ƙgn9â‘°à¾á¿œ&\"ãš¹>餧A5u&ã—¾q?": [
+ -1.969987519306507E-19,
+ null,
+ [
+ 3.42437673373841E-20,
+ true,
+ "eê±·Må¢\"割Pâ›í§åŽ€R䱜3ï»´Oí“«r﹉⹊",
+ [
+ -8164221302779285367,
+ [
+ true,
+ null,
+ "爘y^-î¬?蘞Ⲽꪓaâ…ê¨}I",
+ 1.4645984996724427E-19,
+ [{
+ "tY좗⧑mrzïºã¿¥â´–᥷jè«…\u0000q賋è­êž„â®±S\nà¡£B/íƒêµª3ZÉ‘å¤o<\/;ë¡‹": null,
+ "彟hæµ _|V4䦭Dᙣ♞uì¿»=ì‚®ã¦\u001e哀鬌": [{"6횣楠,qʎꗇ鎆빙]ã±­R굋鈌%æ ²j分僅ペ䇰wí¦î¼‹p蛃N溈ê¡ê€?@(GI뉬$ﮄ9èªê“š2e甸ڋ[äº,\u0011\u001cࢃ=\\+衪䷨ᯕ鬸K": [[
+ "ㅩ拏鈩勥\u000etgWVî–¨Xs陂è¦p狵w퓼{뮵_i\u0002ퟑႢâ¬d6é‹«F~챿æŸ\u0096äš¼1ۼ칥0꣯å„=鋷牋ⅈêžé¾",
+ -7283717290969427831,
+ true,
+ [
+ 4911644391234541055,
+ {
+ "Iî¹éˆ’ì²½P릜朸W徨觘-HᎄíŸâ“º>8kr1{ê²µäƒã€›á¬¡Ì¨Oê·‘oä•'쿡鉕p5": "fvç²–RNçž–è›a?q꤄\u001d⸥}'ꣴ犿ꦼ?뤋?鵆쥴ë‹ä¡«s矷̄?à¶£/;괱絢oWfV<\/\u202cC,ã–¦0䑾%nè³¹g&T;|lj_欂N4w",
+ "짨䠗;䌕u i+rà¹0": [{"9ä¥\\à°©8\"馇z䇔<\/á‚¡Y3e狚ì¡\"ุ6ï°†Zé–c\"Ll:ïŠê®¾ç–£<\/᭙O◌납୕湞9⡳Und㫜\u0018^4pj1;ä§å„‚ä—·à­—>@e톬": {
+ "aâ‘‚Fé‹»Qèž°'<퇽Qè´ç€§{ᘪ,cP&~䮃Z?gI彃": [
+ -1.69158726118025933E18,
+ [
+ "ê¶‚z簽㔛㮨瘥⤜䛖Gℤ逆Y⪾j08î±²Sn昞ꘔ캻禀鴚P謦b{ê“®mNéMᥙ5\"ç2냑I\u0011.L&=?6á„ ë»·X鸌t刑\"#z)o꫚n쳟줋",
+ null,
+ 7517598198523963704,
+ "ኑQp襟`uᩄr方]*F48ꔵn俺ሙ9뇒",
+ null,
+ null,
+ 6645782462773449868,
+ 1219168146640438184,
+ null,
+ {
+ ")ယ넌竀Sdä°¾zqâ«£âŒÊ¥\u0010á¿“' |磪&p牢蔑mï³V蘸૰짬꺵;K": [
+ -7.539062290108008E-20,
+ [
+ true,
+ false,
+ null,
+ true,
+ 6574577753576444630,
+ [[
+ 1.2760162530699766E-19,
+ [
+ null,
+ [
+ "顊\\憎zXB,",
+ [{
+ "㇆{CVC9ï¼MN㜋ઘR눽#{h@ퟨ!鼚׼XOvXS\u0017á£=cS+梽៲綆16së½íœy屬?ᇳG2á´­\u00054쫖y룇nKcW̭炦s/鰘ᬽ?J|퓀髣n勌\u0010í™ P>j": false,
+ "ç®´": [
+ false,
+ "éžj\"ꮾ*엇칬瘫xṬ⭽ì©äƒ³\"-⋵?ᦽ<cਔ↎⩧%鱩涎삧u9K⦈\"á¿á¬‘V绩킯愌ṱv@Gê¾è·¶êš†(?ä–ƒvIá§ŠxV\r哦jã ’?*=S굤紴ꊀ鹭쬈s<DrIu솹꧑?",
+ {
+ ".}S㸼L?t\u000fK⑤s~hU鱜꘦}ìªC滈4ꓗ蛌):ྦ\"é¡¥ì´â¢·ïš­á¿³YLn\"?fꘌ>댎Ĝ": true,
+ "Pg帯佃籛n㔠⭹࠳ë·â‰»à¿Ÿ3ãž±ï“!î—-ì’¾!}쭪䃕!籿næ¶»J5ਲ਼yî˜vy;Rኂ%ᔡጀ裃;M⣼)쵂쑈": 1.80447711803435366E18,
+ "ꈑC⡂ᑆ㤉壂뎃Xub<\/쀆༈憓قì¨×§\\": [
+ 7706977185172797197,
+ {"": {"K╥踮砆NWࡆFy韣7ä밥{|紒︧䃀榫rᩛꦡTSy잺iH8}ퟴ,M?Ʂ勺ᴹ@T@~꾂=I㙕뾰_涀쑜嫴曣8IY?ҿo줫fऒ}\\S\"ᦨ뵼#nDX": {
+ "♘k6?଱癫d68?㽚乳䬳-Vé¡·\u0005è•?\u0018䞊V{邾zã˜l]é›k臤~ൖHë’iꢥ]g?.G碄懺䔛p<q꜉Så²—î¥_.%": 7688630934772863849,
+ "溗摽嗙Oã§€,⡢⼰呠ꅧ㓲/葇䢛icc@-r\b渂ꌳ뻨饑è§á–œ\\é®­\u0014엙㥀᧺@æµ¹W2꛵{W률G溮킀轡䬆g㨑'Qè¨ï†áŸªç½‘Hd\"Q늴ᱢﶨ邮昕纚枑?â–°hr羌驀[ç—¹<\/": [
+ -1.0189902027934687E-19,
+ {"窶椸릎뚻shE\"ꪗႥꎳU矖佟{SJ": [{"-æ…œx櫹XYîƒ-æ¾Ü¨â£·àª¢ïŸé¯™%Fu\u0000è¿‹â–’}᥷L嗭臖oញc넨\u0016/迎1b꯸g뢱ã§è“¤ä’8C散삭|\"컪輩鹩\"\\g$zG䥽긷?狸꿭扵ã²:URON&oU8": [
+ null,
+ true,
+ null,
+ -2.8907335031148883E17,
+ -3864019407187144121,
+ {
+ "`빬d⵺4H뜳⧈쓑ohஸ*ã¶ï»‡â¸•ä µ!iä¬ï¹‘h夘▥ê—푹갇㵳TA鳠嚵\\B<X}3訒câ‹{*ï«¢w]ç’¨-gæ­\\j໵侠Ei层\u0011": 3.758356090089446E-19,
+ "䄘ï®)Y놞씃㾱陰í:{\u2059/Sâ“´": [[
+ null,
+ [[
+ -3.8256602120220546E-20,
+ null,
+ 7202317607724472882,
+ "CWQëš¿",
+ null,
+ false,
+ true,
+ null,
+ 2857038485417498625,
+ 6.191302233218633E-20,
+ null,
+ -6795250594296208046,
+ [
+ true,
+ {
+ "%á‹§é°Yᚯ⚀x莰愒Vᔈ턗BNæ´ê¤ŸA1âŒl콹풪H;OX๫륞ìªá°šÑ†@͎黾a邬<L厒Xb龃7f웨窂二;": [[
+ null,
+ "耲?䙧㘓F6Xsí‹­ë©¢.v뚌?鄟æ â–½'묺競?WvᆾCî»txo?dZ;䨸疎",
+ {
+ "@hWê‰&\"빜4礚UO~C;ã†î”殩_ꀥè˜å¥¢^챟k→ᡱKMⵉ<\/Jㅲ붉LÍŸQ": false,
+ "tU뢂8é¾°I먽7,.Yî°î»´æ½Z툼=&⨥覽K乫햶㠸%#@Zë–æ„“^âŠâ¾‚몒3E_噆J(廊ឭyd䞜鈬Ћ档'⣘I": {
+ "tK*ꔵ銂u艗ԃì¿âˆ³ê„‚霫X3♢9y?=â²­dЊb&xy}": [
+ -4.097346784534325E-20,
+ null,
+ 6016848468610144624,
+ -8194387253692332861,
+ null,
+ {
+ "(祬诀譕쯠娣cë´r?ç•„kT뼾⌘⎨?noVä˜ì¥ç¡Žn?": [
+ 1.82679422844617293E18,
+ [
+ false,
+ 2.6849944122427694E18,
+ true,
+ [
+ false,
+ {
+ ";0zâ­†;í™”$bਔ瀓\"衱^ï—´?잢ᢛ⣿~`ꕉ薸⌳໿湘腌'&:ryБꋥá¼ê’¥ç­™ê¬œê¸¨?X": -3536753685245791530,
+ "c;Y7釚Uꃣ割J༨Y戣w}c峰뢨㽑㫈0N>R$ä…’X觨lë´œA刊8R梒',}u邩퉕?;91Eî¦a䈈ë¯G⊶芔h袪&廣㺄j;ã¡ç¶½\u001bN頸쳘橆": -2272208444812560733,
+ "æ‹‘Wﵚî²j鵼駳Oࣿ)#ã¾…é¡‚N傓çºy僱栜'Bê-!KF*ꭇK¦?䈴^:啤wG逭w᧯": "xᣱmYe1Û@霄F$ě꧘푫O䤕í€Pq52憬ꀜ兴㑗ᡚ?ï—ƒLé·íŸî—¼ë­zJê‘™}╆ᅨJB]\"袌㺲u8䯆f",
+ "꿽á…㔂긱Ǧ?SI": -1669030251960539193,
+ "ì‡É¨`!葎>瞺瘡驷錶â¤ï»®é…œ=": -6961311505642101651,
+ "?f7♄꫄Jᡔ훮eì‡îª¼í¾á£ä­´KhखT;Qty}O\\|ë«Iá¿’Ne(5æƒê¥¶ã†·Y9ﮡ\\ oyâ­–-䆩å©m#xë´‰>Y鈕Eç–£s驇↙ᙰm<": {"퉻:dê‚&efᅫ쫢[ï„™\"ëˆëŠ–êº™|Ôå‰1Í–-K:Êšá­•/;ì–㷛]Iç—èŒ4g<Oꗢ뫺N쯂륬J╆.`ᇵP轆&fd$?è‹…oê¶“vO侃沲â©åš…æ²— E%â¿°ì–¦wi\\*è¶«": [
+ 3504362220185634767,
+ false,
+ "qzXæœqT3軞T垈ꮲQ览ᚻ⻑쎎b驌䵆ꬠ5Fà­—ä²ç¼¿ê蒇潇Ltᆄ钯蜀W欥ሺ",
+ "ë³°É霬)ì é¶¼kwocì—·èr \u001d쒷⎹8{%澡K늒?iﺩd=&皼倚J9s@3å›twὡgjä íª5⭉⨺役&놎cﺉ㺡N5",
+ false,
+ null,
+ "D0st[ni锹r*0k6ꀎë‡UX2⽼৞䃚粭#)Zæ¡·36P]<\/`",
+ 4281410120849816730,
+ null,
+ -3256922126984394461,
+ 1.16174580369801549E18,
+ {
+ " ᆼꤗ~î…‰*TN긂<㡴턱℃酰^蘒涯잰淭傛2rൡetì¾£ä‡m*ã¸y\"\\糮᧺qv쌜镜T@yg1譬ﭧﳭ\f": null,
+ "圾ᨿ0xᮛ禵ਗ਼D-㟻ẵ錚e\"赜.˶m)é´‘B(I$<\/轴퉯æ·â‹âº*)宓쓌?*橯Lx\\f쩂㞼⇸\"ﺧ軂é³V\\ë•’\"캘c:G": null,
+ "?ïµ_ê³¢î™ç¿¸íˆ8ã¿ hì—´Q2ã­›}RY㯕YT놂⽻e^B<\/맫ﻇ繱\u0017Gц⟊ᢑﵩS:jt櫣嗒⟰Wã´šæ¦á…‰e[w䋺?藂翙Ⲱ芮ä˜â•¢å›¥lpdu7r볺I è¿‘qFyᗊ": [
+ "$b脬aᅠ襬育Bگ嵺Pw+'M<\/ï­näššvèžbNâ’‚}褺%lቦ阤\"ꓺá—Mç‰,Ûžï– Ò¶!矬?ke9銊Xê´¦)䈽í‹è„½á¹«äˆžá´†^=Yá—¿é›4I귺⋥%",
+ false,
+ 2.9444482723232051E18,
+ 2072621064799640026,
+ "/_뇴뫢jã’=Nꡦâ†Ôºèµ’â¬î»¼í†¥ä¨žç¯su*媸瀳鷔抡oíº-៳è¾å‹·fç»”:äµ¢æ¢2",
+ false,
+ "ì’œ Eî½·äŒ/í\u0018懺_<\\隺&{wF⤊谼(<죽é ïŸ‡8?@*rá¶ŠGd뻻갇&Ⳇq᣿e࢔t_ꩄ梸O詬Cá§§Kê© í’¤9눙醅ëž}竸rw?滨ӽK⥿ཊGé­²']`๖5ã„°",
+ -2375253967958699084,
+ {"嗱⿲\"få„„á¬": {"v?䚑킡`â—¤k3,骥曘뒤Oᒱ㲹^圮᠀YTê»›&ì´®P:G/Tâ£#튣k3ç‚©è k@橈ä·Sä§•,ç†œïŒæ™¬ï£žk1鮥玸먚7䤡fç»å—šìƒ´á¥’~îš¼0q拮垑aë»±Lâ°–_": [{
+ ":på°¢": -6.688985172863383E17,
+ "A0\u0001疠ﻵ爻鼀湶I~W^å²€mZx#ãˆ7r拣$Ꜷ疕≛⦒痋盩Vꬷá­â„¦Qêªï§éˆ‘A(劽詗ꭅo-ç¶é‘º\"Ⓠ@$j탥;": [
+ 8565614620787930994,
+ [
+ "å¶—PC?à¶‹Q㪣$&j幾㾷hæ…‘ 즊慧⪉霄M窊ê·'鮕)äŠé“¨m趦䗲(g罣ЮKVﯦé®î¦®5囗ﰼ鿦",
+ -7168038789747526632,
+ null,
+ -7.8069738975270288E16,
+ 2.25819579241348352E17,
+ -6.5597416611655936E18,
+ {
+ "瘕멦핓+?フZê·¢zé›V": {
+ "ᕾ": 1.7363275204701887E-19,
+ "ã­Œs뎹㳉": {"\u00187Fï–‰I6Yféº+UC쬸éºâ²ä‚¿ê¸•R\\ᆮC?Φ耭\rOத际핅홦*ë² W㸫㯼᡹cㅜ|Gã®—\u0013[o`?jHVì•?蒪꩚!í«áœ¦ãŒ‡äš‡é¿˜:@": [
+ "}푛Г콲<äŸCè—呈#2ã“‹#ྕáŸå°¿9qç«“gI%ëž™mê¬oaç•è´¿Jå’¿D_ç†Zz皳験Iè±¼B扳ḢQ≖㻹㱣Dä¦ï©—2'á—㗣▌ç ²8罿%à°¹F姦;0î·æ‚‡<\/\"påš§",
+ -710184373154164247,
+ "Vo쫬⬾ê«â´·Å»\u0004éŽHBê…¸_aVBHbN>Z4âœkเꛘZ⥺\\Bʫᇩ鄨魢弞&幟ᓮ2̊盜",
+ -9006004849098116748,
+ -3118404930403695681,
+ {
+ "_彃Y艘-\"Xx㤩㳷瑃?%2ä¡éµ›o<A?\"顜ᘌΈ;â·…Cæ´ºL蚴蚀voq:,Oo4쪂)": 5719065258177391842,
+ "l륪맽耞塻論å€Eã—‘/㲕QM辬I\"qi酨玑㖪5q]尾魨鲡ƞY}⮯蠇%衟ï„Fsf윔äšì°¤iè…³": {"ꢪ'a䣊糈": {"ë°‘/♋S8sã¼´5瓹O{댞\"9Xï°‡lJ近8}q{긧ⓈI᱑꿋腸D瀬H\"ﺬ'3?}\u0014#?丙㑯ᥨ圦',gé‘ (樴턇?": [
+ 2.5879275511391145E18,
+ null,
+ [
+ "3㼮ꔌ1Gẃ2Wé¾™jîªÍŠ{1å›ã¦­9xå® ã‘oRä•犽",
+ 1268729930083267852,
+ "땕軚⿦7C",
+ [
+ -3.757935946502082E18,
+ "\"赌'糬_2ë­¾áb",
+ {
+ "(a䕎ጽjÒ°D4.á´¡ïž½66ԃ畮<\/l`k癸\\㇋ࣆ욯R㫜픉녬挛;ڴ맺`.;ç„“q淞뮕ٹ趴r蔞ꯔ䟩vç²u5<\/pZ埖Skrvj帛=\u0005aaï”›": null,
+ "璄≩ v몛ᘮ%?:1頌챀H㷪뉮k滘e": [
+ "ꤾ{`c샬왌펡[俊络vmz㪀悫⸹ᷥ5o'ã¾µ L蹦qjYIYណԠWëƒå‰«<\/W嗂0,}",
+ 2.4817616702666762E18,
+ false,
+ null,
+ null,
+ -8.6036958071260979E17,
+ null,
+ -1.2744078022652468E-19,
+ -4.4752020268429594E17,
+ 1.13672865156637872E17,
+ [
+ false,
+ false,
+ null,
+ -4.178004168554046E-20,
+ true,
+ 2927542512798605527,
+ {
+ ".ꔓ뉤1䵬cHyæ±¼äŠ†è³“á‡Æ©|樷â‡é†Žã¬…4\u0003èµµ}#yD5è†æ™¹ë±“9ê–è™›J㺕 t䊛膎ؤ": {
+ "rVtᓸ5^`েNâ¹»Yv᥋lꌫt拘?<é®°ë„¿ZC?ã’½^": {"âªî©k_:>귵옔夘v*탋èŒ&㳈챗|Oé’§": [
+ false,
+ "daꧺdᗹ羞쯧Hã¤é„³é ³<型孒ン냆㹀f4ã¹°\u000f|C*ሟ鰠(O<ꨭ峹ipຠ*yà³§4VQè””hVæ·¬{?ᵌEfrI_",
+ "j;ꗣ밷é‚副]á—“",
+ -4299029053086432759,
+ -5610837526958786727,
+ [
+ null,
+ [
+ -1.3958390678662759E-19,
+ {
+ "lh좈T_ë¯Y\"伨\u001cꔌG爔겕ꫳ晚è¸â¿»ìT䯎]~e#฽燇\"5hٔ嶰`泯r;ᗜ쮪Q):/tç­‘,榄&5ï¤ëŽ«ç‹(": [{
+ "2áâ“›]r3C攟וּ9è³µsâ›”6'ஂ|\"ⵈ鶆ä¹ç¦3\"痰ࢤéœäµ©ì˜†äŒ€?æ •r7Oç°‚Isd?K᫜`^è®¶}zî°’8?zì–°î§T:X倫⨎ꑹ": -6731128077618251511,
+ "|︦僰~m漿햭\\Y1'Vvخ굇á‰ì±¢cè¶–": [null]
+ }],
+ "虌魿閆5⛔煊뎰㞤ᗴꥰF䮥蘦䂪樳-Ká·-(^\u20dd_": 2.11318679791770592E17
+ }
+ ]
+ ]
+ ]},
+ "묗E䀳㧯᳀逞GMc\bï•¹å¢¹ã“„ë–Æ &U??íŽŒé‘ åª‹k))ᄊ": null,
+ "묥7콽벼諌J_DɯﮪMæ®´ä£,煚ྼ`Y:ì”§<\/â©«%yf䦀!1á²¶kì¶ŽQç±³W∠WC跉鬽*á›±i<?,l<崣炂骵*?8í‘៣ⰵ憉⎑.,Nwç½£q+ο컆弎": false
+ },
+ "e[|଀+î±³lꑸãˆTT?ë¿¿|ê«›9`㱯䊸楋-곳賨?ì³k棽擋wQ餈âŸNq[q霩䵀뷮锅ꚢ": 5753148631596678144,
+ "sá“鴻߸d렶ὕ蜗ဟ툑!诉౿": false,
+ "|4䕳鵻?䈔(]í‹/Ui#æ¹»{듲ーMá‹€t7潔泄Ch⸨}ì£`î¤èž§éŠšã‹¼å£¯kâ°¥Q戵峉갑xè¾™'ì²›": "jd䘯$䕌茷!auw眶ㅥä£ê†¢æ°‘i",
+ "剖駰Ɜî¶sM2]á¾´2ࡷ祅拌Av狔꩛'ê“—í‚§ê£0酜✘O'": false,
+ "澩뢣ê€eU~D\\ꮡ킠": "v^YC嚈ί\u0007죋h>ã´•L꘻ê€ì“ª\"_gé¿„'#tâ½™?,Wg㥖|D鑆eâ¥ìª¸åƒ¬h鯔咼ඡ;4TKèŽî¾‘졠嫞"
+ }
+ ]
+ ]
+ }
+ ]
+ ]
+ ]}}
+ }
+ ]}
+ },
+ "뿋뀾淣截䔲踀&XJ펖꙯^Xb訅ꫥgá¬>棟S\"혧騾밫ê²7-": "擹8C憎W\"ìµ®yR뢩浗絆䠣簿9äˆå¼•Wcy䤶孖ꯥïž;íŒ]輩ä3@{å 뽸0ï€á¡ˆìµ¡î›„Ⲇ\u001dLåŒê§2F~ݕ㪂@W^é½L襒ᦘî¢~沦zZ棸!꒲栬R"
+ }
+ ]
+ ],
+ "Z:ëƒàµ›5Iz찇䅄駠㭧蓡K1": "e8᧤좱U%?ⵇ䯿é¿\u0013縮R∱骒EO\u000fg?幤îš@֗퉙vU`",
+ "äƒìªˆï‘’埽້=Ij,쭗쓇చ": false
+ }]}}
+ ]
+ }
+ ]}
+ }
+ ]
+ ]
+ ],
+ "咰긖VM]á¼6䓑쇎çºetDÒŒ?ãžê©„퇫밉gj8è ƒ\"â©5䛹1ࣚ㵪": "ക蹊?⎲⧘⾚̀I#\"䈈⦞ë·`wo窭戕෱휾䃼)앷嵃꾞稧,Ⴆ윧9S?೗EMk3Მ3+e{â¹”Te驨7äµ’?타Ulg悳o43ï“¢"
+ }
+ ],
+ "zQᤚ纂땺6#ٽ﹧vï¿¿#ࠫ휊冟蹧텈ꃊʆ?&a䥯Deæ½|ì¿“pt瓞㭻啹^盚2êŠf醪,ì–T窧\\Di䕎谄nn父ꋊE": -2914269627845628872,
+ "䉩è·|㨻ᷢã‰B{蓧瞸`î°²I!℄욃힕#ೲᙾ竛ᔺCjk췒늕貭è¯\u0017署?W딚%(pê⤼ë³^=on뺲l䆼bzrﳨ[&j狸䠠=ᜑꦦ\u2061Õµnj=牲攑)Mî»\\é¾": false,
+ "뎕y絬᫡⥮Ϙᯑ㌔/NF*Ë“.ïž¿,QEzvK!Iwz?|쥾\"ê©»Lê¼—Bê”§è³´ç·œs뉣隤茛>ロ?(?^îµ­`>冺飒=噸泥⺭Ᲊ婓鎔븜z^å·è£®Ãªâ“…à»—jM7ﶕ找\\O": 1.376745434746303E-19
+ },
+ "ä›ræ»–wã¤<k;l8ꡔጵ⮂ny辶⋃í¼åƒ®z\"﮲X@t5෼暧퓞猋♅䦖QCé¹®|픨( ,>,|Nዜ": false
+ }
+ ]],
+ "@ê¿™?è–•å°¬ gd晆(ë„5躕ﻫS蔺4)떒錸ç“?~": 1665108992286702624,
+ "wë¯ná =`঺ᅥC>'從ë槷ä¤çœ·èž„ãŽ»æ°æ‰°XᅧCè´½uáƒë‚ŸjKD03T!lDV쀉Ӊy뢖,袛!终캨G?鉮Q)â‘—1쾅庅O4ê‰H7?d\u0010蠈줘월Þ粯Q!낇껉6í…|{": null,
+ "~˷jg쿤촖쉯y": -5.5527605669177098E18,
+ "펅Wᶺzê†ã¨í‘­e?4j仪열[D<鈑皶婆䵽ehS?袪;Hê¨Më—Žã°[(å—M3qíŸg4y╸鰧茀[Bi盤~ï«å”Žé‹†å½ºî½«â¦Šq?î–³B4쉓癚O洙킋툈䶯_?ퟲ": null
+ }
+ ]
+ ]]
+ ]],
+ "꟱Ԕã¤7æ›ï¦—ಃéŒVä·°?v㪃૦~K\"$%请|ꇹn\"kä«›ã¨é²¨\u2023ä„¢\u0004[<S8á¬ë­©è„¥7U.m࿹:Dè‘┆2蘸^U'w1ì …;䠆ꋪBê»®>︊Vï‹•J?䶟ាꮈ䗱=깘U빩": -4863152493797013264
+ }
+ ]}]}
+ ]
+ }}}
+ ],
+ "ì·ì²Û¹í‰ƒ~aEå”™a챑,9㮹gLHd'ä”|í‚—ãžäŽ¥&KZYTë§µ7䥺N<Hp4ê•­â¹ ê½c~çš½z": "课|á–¾ä¡å»‹è„äªW\u0016&Jnê´b~æ‘“M>â±³åŒèŽžé¿§w\\༌疣n/+ꎥU\"å°ëž¾â—‹íŸ™AJá­Œ?9ä›$?é©”9è®ì§˜é­¡TÖ¯cè—³`虉Cì‡ì¦T"
+ }
+ ],
+ "è°¶ê°œgTRï¿>áµÍšdtæ™‘ä‰‡é™æ»º}9㉸P漄": -3350307268584339381
+ }]
+ ]
+ ]
+ ]]
+ ]
+ ],
+ "0y꟭馋X뱔瑇:䌚ï¿å»¿jîžg-懲鸭䷭垤㒬茭u賚찶ಽ+\\mT땱\u20821殑ã„J쩩䭛ꬿNSæ½”*d\\X,壠뒦e殟%LxG9:摸": 3737064585881894882,
+ "í’µO^-â§§â…¶vѪ8廸鉵㈉רâ†Q㿴뺟EႳvNM:磇>wî·/៻唎뷭୥!냹D䯙iëµ±è²C#⼉NH6`柴ʗ#\\!2ä‚—â±§f?諳.Pëˆ-è¿”I꘶6?8î“ê˜": -8934657287877777844,
+ "溎-è˜å¯ƒi诖ര\"æ±µ\"\ftl,?d⼡쾪⺋h匱[,à·©I8MÒ§F{kç“¿PAî…§'橸ꩯ綷퉲翓": null
+ }
+ ]
+ ],
+ "ោ係Øî½<å…ƒ": 1.7926963090826924E-18
+ }}]
+ }
+ ]
+ ]]}]
+ }]
+ ]
+ ]
+ ]
+ ],
+ "ጩV<\"ڸsOᤘ": 2.0527167903723048E-19
+ }]
+ ]}
+ ]
+ ]],
+ "∳㙰3ì ´pá§—ä±™?`<U὇<\/æ„E[ᮚAî›j诂ᒽ阚uv徢ဎ떗尔ê½í›€ì©‘Jä´?âª=륪ᆩ푰ஓã•?럽VK\"X?檨လ齿I/耉A(AWA~â¯ç¨è¹«": false,
+ "å’å¦ë¾‡}䀼链i⇃%⋜&ç’ªIx渥5æ¶§qq棩á¥-â «AA낇yY颕A*ïˆè£¦O|n?䭬혗F": null,
+ "ç­CLì–­B혆Kॎ`鎃nrî€sZiÕªWç )?p~K~A眱ä²QO妣\u001b\u001b]ᵆᆯ&ã‹á¹è±‰ëº˜$ê­§#j=C)祤⫢歑1o㒙諩": 7028426989382601021,
+ "쳱冲&ဤäŒì•§h胺-é½±H忱8왪RDKᅒ䬋ᔶS*J}ስ漵'㼹뮠9ê±¢9p봋경ጕtởꚳT䶽瘙%ì¶´`@nಆ4<d??#僜ᙤ钴=薔ꭂbLXNam蹈": "樭る蹿= Uî ƒurwkn뙧⌲%\"쑃牪\"cq윕o@",
+ "溌[H]焎SLã…?뀼䫨ç½W": 1.1714289118497062E-19,
+ "ﬢp븇剌燇kĔ尘㶿㴞ç ê¾˜Ia;sâº^)$ç©®?sHᢥíªl": null
+ }
+ ]
+ }
+ ]
+ },
+ "TKnzj5o<\/K㊗ꗣ藠⦪駇î€>yZA8Ez0,^á™›4_0븢\u001ft:~䎼s.bb룦明yNP8弆Cå¯;⪾ì§'蕴뮛": -6976654157771105701,
+ "íµê¦€\\㇑:nî‹™v+뒤燻䀪ﴣï·9ᚈ኷K㚊誦撪䚛,ꮪxሲ쳊\u0005HSf?asg昱dqꬌVꙇ㼺'k*'㈈": -5.937042203633044E-20
+ }
+ ]
+ }],
+ "?}\u20e0],så¶³è‹@#2uì’´sQSä©—=ꥮ;烌,|ꘔ䘆": "á…©ì˜Nç’ kZ먕眻?2ቲ芋眑D륟渂⸑ﴃIRE]å•—`K'"
+ }},
+ "쨀jmV賂ﰊå§ä‚¦çŽžã¬™áªM᪟ïՎ씜~`uOn*ॠ8\u000ef6??\\@/?9見d筜ﳋB|Sä¬è‘«ã½o": true
+ },
+ "즛ꄤ酳艚â‚㺘봿㎨iGà§•à¡¿?1\"䘓您\u001fSáŠâº¿æºzៀ뻤B\u0019?ìœa䳵᭱䉺膷d:<\/": 3935553551038864272
+ }
+ ]
+ ]}
+ ]]
+ ]]
+ ]}
+ }
+ ]
+ }
+ ]]}},
+ "᥺3h↛!ê‹°y\"攜(ெl䪕oUkc1A㘞ᡲî촾ᣫ<\/ä’ŒEã›æ½¨i{ï  v?Wà±¾H\\RჅpzè¬R脾;v:碽✘↯삞鷱o㸧瑠jcmK7㶧뾥찲n": true,
+ "ⶸ?x䊺â¬-ä°…â‰!e쩆2ꎿ准G踌XXᩯ1ß}0?.í—€Z馟;稄\baDꟹ{-寪⚈ꉷ鮸_L7ƽᾚ<\u001bጨA䧆송뇵⨔\\ç¤ë—”d设룱㶉cq{Hyã±R㥽å¢ï¬…p": -7985372423148569301,
+ "ç·«#ì½®IB6<\/=5Eh礹\t8럭@饹韠r㰛斣$ç”LVì·a갵îŸ'请o0g:^": "䔨(.",
+ "ë³â„¡åœ¤pï¾à¯„Ä倧訜BìŸGä™”\"Sbâ“®;$$â–S1J뢙SF|赡gï„€*\"Vu䲌y": "䪈&í‹),\\kT鬜1í’¥;ë·´'Zေ䩹@Jéž½Nã¼M?å¥eWb6榀ƩZڮ淽⺞삳煳xჿ絯8eâ¶ç¾·V}ჿ쎱䄫R뱃9Z>'\u20f1â“•äœé½®"
+ }
+ ]
+ ]]]
+ }}
+ }
+ ]
+ ]},
+ "펮b.hç²”í¯2npXè©«g錰鷇㇒<ì™S値bBi@?镬矉`剔}c2壧ଭfhY깨R()痩⺃a\\â”?M&ﯟ<劜꺄ï‘멊ᄟA\"_=": null
+ },
+ "~æ½¹Rqn榢㆓aR鬨侅?䜑亡V_ç¿…ã­”(ä“·w劸á³Dp䀅<\/ï°Žé¶Šm䵱팱긽ꆘ<tD쇋>긓准D3掱;o:_Ñœ)껚콥8곤d矦8nP倥ꃸI": null,
+ "뾎/Q㣩㫸벯➡㠦◕挮aé¶§â‹“å¼\u00001뱓fm覞n?㛅\"": 2.8515592202045408E17
+ }],
+ ",": -5426918750465854828,
+ "2æ««@0柡g䢻/gꆑ6演&D稒肩Y?艘/놘p{f투`飷ᒉ챻ëŽîª–<늛ä˜ï´¡ì¤°ì«„": false,
+ "8î™–(鸑嵀⵹ퟡ<9㣎Tߗ┘d슒ل蘯&㠦뮮eà kç g ì—»": false,
+ "d-\u208b?0ﳮ嵙'(J`蔿d^踅⤔榥\\J⵲v7": 6.8002426206715341E17,
+ "ཎ耰í“ê•ï’ã±·\u0013y=詽I\"盈xm{0쾽倻䉚ષso#é°‘/8㸴짯%ꀄ떸b츟*\\鲷礬ZQå…©?np㋄椂榨kc᡹醅3": false,
+ "싊j20": false
+ }]]
+ ]],
+ "ä¿›\u0017nç·½Tu뫉èœé¼Ÿçƒ¬.ï‘ꭠIâ°“\"Ἀ᜾uC쎆J@å¤%ê›m뻨ᾀ画è›íœƒT:錖㑸ዚ9죡$": true
+ }
+ ]
+ ],
+ "ãµâ‡˜ê¦–辈s}㱮慀밒s`\"㞟j:`ií”»Z<C1衽$\"-饧?℃\u0010⼒{î°p飗%R\"ä²”\")ì¹€\\%": true,
+ "苧.8\u00120ݬ仓": 6912164821255417986,
+ "ë–Žé¡£ä¿X;.#Qí‹.笂'p쟨唒í랩냆¦aâ±{è°.b我$蜑SH\u000fç¾=äŸ¼â£¼ï©¿áœæ”•B&挰繗ã”ê…‚-Qv\\0ä¶äš¥ãºio[㑮-ᇼ䬰컪ṼiY){ë°\u0010q螰掻~\n輚x\u0014罺)è»´": 3.024364150712629E-20
+ }
+ ]
+ ]
+ ]
+ ]}
+ ]]
+ }
+ ]
+ ]]
+ ]
+ ]]]],
+ "\"凲o肉Iz絾豉J8?i~傠᫽䇂!Wï›—D溊J?á¡’vsè†åµ¹âž’ïŸæ·´î‡…>ì„«^諎0Ok{켿æ­à·£èƒ°a2﨤[탳뚬쎼嫭뉮m": 409440660915023105,
+ "w墄#*ᢄ峠밮jLa`ㆪ꺊漓Lã§ëŽ!Agkï¹ï¾'ê›ë¢ƒã¯å²¬D#ã’¦": false,
+ "ଦPGI䕺L몥罭ꃑ궩﮶#⮈ᢓӢ䚬p7웼臧%ï‘¥~Sè âŒíž€6îž’&t䳙y㪘ëƒ\\*;é‰ï¿Šé¿µ'å—•pa\"oL쇿꬈Cgî“": "ã¶½1ç¸D⟸䴅ᆤ뉎﷛渤csî¸x ä”цꬃ锚æ¬?ຽ+x~꘩uI࡞\u0007æ ²5呚ẓem?è¢\")=㥴䨃pac!/æŽY",
+ "á·±o\\||뎂몷r篙|#X䦜I#딌媸픕åžRDæ–³X4t⯩夬=[ï‹ë­²r=绥jhë·±ì¸âª˜%]⚋܈㖴スHí…¹m(WOæ›åЉ0~K3c柢Õã‰ïªªé€³~": false,
+ "ç…½_qb[첑\\륌wEâ½Ztï”´CNï­+餌ᕜOê›­": "{ﳾ쉌&s惧á­âµ†3䢫;䨞팑ï›ê’ªí˜è¤€à¢–Qä ¿V5뭀䎂澻%ë°›u5í…¸oA⮥U㎦;B䳌wzä•™$áž¿\\௅婺ëµâª¾í†\\`Kyौꋟ._\u0006L챯l뇠Hi䧈å’5",
+ "艊ä½à£ƒë¡‡ä± çˆ¬ï˜‚!*;⨣æŽïžæ…“qé“|儑ᨋL+è¿¥=6㒺딉6弄3è¾…J-㕎뛄듘SG㆛(\noAzQê±ä°©X*ã¢O퀌%펠낌moí‹®a^<\/F&_눊ᾉ㨦ы4\"8H": 2974648459619059400,
+ "鬙@뎣䫳á®ë¡?){y?5K;î§„TA*k溱䫜J汃ꂯ싔ì\u001dA}룖(<\/^,": false,
+ "ëª@QꋦFꊩá’뎶î‡lXl垨4î¤^郣|ꮇ;ä´á“}ìµ²zç–": null
+ }
+ ]]]],
+ ":_=ë‹§å¼—D䙋暨é›. 㱻붘ä‚Jå„’&ZK/녩䪜rå›â½¯D喠죥7ï“⹌䪥c\u001a\u2076￞妈朹oLkè®F౟覛ì§ã®7T;}è›™2{9\"å´“bB<\/⡷룀;즮鿹)丒툃୤뷠5W⊢嶜(fb뭳갣": "E{å“1WM"
+ }},
+ "䘨tjJ驳豨?y輊M*᳑梵瞻઻ofQG瑮e": 2.222802939724948E-19,
+ "ä®´=â‘âž¶Tà·‹wäžœ\"垦ꃼUt\u001dx;B$뵣䙶E↌艣ᡥ!á§Ÿ;ä±€[䔯k쬃`à©8饙른ç†î‹”'2_'袻tGfè’­J땟as꯳╖&å•’zWࡇᒫYSá¬\u0014ℑ첥鈤|cG~Pá“®\">\"": "ႆl\f7V儊㦬nHꄬꨧC{ì¢~C⮃⛓嶦vꄎ1w鰠嘩뿠魄&\"_qMâµ–é‡”ë…®îœ¡ê‡ ãš{ç³Jå“‹ cî°¸v?-jkﻯྌ鹑L舟r",
+ "龧葆yB✱H盋夔ﶉ?n*0(": "ꧣኆ㢓氥î³qZZ酒ຜ)鮢樛)X䣆gTSî»»Ò‘Gí…žï’˜k.J圬ç–ë¡«ïœì¯­z L:\\ྤ@w炋塜쿖ᾳy뢀䶃ë±N䥨㚔勇ê²#p",
+ "ë„畎Q娡\"@S/뼋:äµ!Pè¡…ì´šfVHQs✜á«i㻑殡B䜇%믚k*U#濨낄~": "êŸá‹•ì³¸êˆæ•‹&lå¦\u0005憡멗瘌uPgá…ªm<\/To쯬锩h뒓k"
+ }
+ ]
+ }],
+ "墥홞r绚<\/⸹ⰃB}<躅\\Y;๑@䔸>韫䜲뱀X뗩鿥쩗SI%ﴞ㳕䛇?<\/\u00018x\\&侂9é‹™a[LRã‹­W胕)â¡¿8ãž™0JF,}?í—ˆd1cDMáƒâ›é„ⱕ%X)!XQ": "â³ê—³=橇a;3t⦾꼑仈î¥á€°aᚯ⯋ꕃAsé´·Nâ•_䎃ꙎAz\u0016䯷\\<à¿«>8q{}ï½·?ᣰ}'0ᴕ펓B┦lF#趤厃T?㕊#撹圂䆲"
+ },
+ "Ü‹ë‹é¾«ï¥c웑": false,
+ "ㇿ/q\"6-co髨íœCí¦#\u001b4~?3ä¹E삇<<": 7.600917488140322E-20,
+ "äE6?㣖êƒé—´t祗*é‘ {ḣV(æµ¾h逇íž=W?ૉ?nꇽ8ꅉຉj으쮺@Ꚅ㰤u]Oyr": "vâ‰á«¸_*όAඤԆl)ۓᦇQ}í zà¼q滚",
+ "ソ᥊/넺I": true
+ }]]
+ ]
+ ]
+ ]
+ ]]
+ },
+ "䭑Ik攑\u0002QV烄:芩.麑㟴㘨≕": true,
+ "å„꿕C쇻풉~å´%碼\\8\"䬦꣙": null,
+ "欌L圬䅘Y8c(♺2?ON}o椳s宥2䉀eJ%é—¹rå†O^K諭%凞⺉⡻,掜?$ꥉ?略焕찳㯊艼誜4?\"﯎<ï±ã‚›XáˆINT:è©“ +": -1.0750456770694562E-19,
+ "ç’àc뜭싼ﺳ뎤K`ïŸ]p隨LtE": null,
+ "ç”™8䵊神EIꩤé¯á¢€,ïµ®Uä‘u疒ử驺䚿≚ഋ梶秓F`覤è­#짾蔀묊4<åªì¬¦éª_Yzgcà¡¶î²§4kç´¥`kc[Lï®—î°£ç°*I瀑[â¾°L殽鑥_mGÈ <\/|囹ç gæ¡°iri": true,
+ "챓ꖙꟻì¢è‡ou,å— 0\\jK핻뜠qwQ?ഩ㼕3Y彦b\u009bJ榶N棨f?ë¦é–綃6é³µM[OEë´¨uí–.Ꮁ癜蟳뽲ꩌ뻾rM豈Rï¨ç¾« uDꎚ%": null
+ },
+ "V傜2<": 7175127699521359521
+ }],
+ "é“«aG切<\/\"ী⊆e<^g࢛)Dé¡ï½Žï¬®é¥¼\u008c猪繩嵿ﱚCꡬ㻊g엺Aì—¦\u000fæš¿_f꿤ë³ã¦•桦`蒦䎔j甬%å²rj ç³": "䚢åŽëˆ´Au<4箞7礦Iï±”å eȧ䪸uï„€äµp|逹$嗫쨘ꖾï·!胠z寓팢^㨔|u8Nሇe텔ꅦ抷]،鹎ã³#༔繁 ",
+ "낂乕ꃻ볨ϱ-ꇋã–fsâ¿«)zꜦ/K?솞♞ꑌ宭hJ᤭瑥Fu": false,
+ "쟰ãœé­›G\u0003u?`㾕ℾ㣭5螠烶這趩ꖢ:@å’•ê¶xë’˜ëŠmä°¨bç—ƒë 0鳊喵熬딃$摉_~7*ⱦ녯1錾GKhJ惎秴6'H妈Tᧅ窹㺒疄矤铟wላ": null,
+ "쯆q4!3錕ã²âµ†ã‡›ê˜·Zç‘©ë­†\\â—ªNH\u001d\\ã½°U~㯶<\"쑣낞3ᵤ'峉eꢬ;鬹o꣒木X*é•·PXᘱu\"ä ¹n惞": null,
+ "ᅸ祊\"&ꥴCjࢼ﴿?䡉`U效5殼㮞V昽êª#ﺸ\\&t6x꠹盥꣰a[\u001aêªSpe鎿蠹": -1.1564713893659811E-19
+ }
+ ]]
+ ]
+ ]
+ ],
+ "羵䥳H,6ⱎ겾|@t\"#í–Šî¦1|稃 ì„­)ëœ=뻔ꡜ???櫎~*ῡ꫌/繣ﻠq": null
+ }
+ ]}
+ ]},
+ "츤": false
+ }},
+ "s": 3.7339341963399598E18
+ }
+ ],
+ "N,I?1+㢓|ࣱ嶃쩥V2\u0012(4EE虪朶$|w颇væ­¥": "~ì¢~_,Mzrã«YB溓Eæ·š\"â…¹äˆ”áºæŠ™ b,nt5Vã’J檶ê¨â»”?",
+ "Q껑ꡡ}$넎qHç…”æƒ/ez^!ẳF댙äŒé¦»å‰8": "梲;yté’°$i冄}Aî‘”L%a jëœå¥·ê±³ëš¾d꿽*ሬuDY3î…—?뮟鼯뮟wãªí‹±îŸ‚V",
+ "o{Q/K O胟ãzUdê€m&⨺J舕â¾é­¸è¨ŸãŒ¥[T籨櫉å”í‚ aṭ뱫촙莛>碶覆⧬짙쭰ׯdAiH໥벤í¥_æ¸[ 0î­¬e:죃TCå¼¼èŽëµDA:w唵ê£": null,
+ "á½æ¨Žäµ®è»§|?à±—aWH쩃1 ê…­su": null
+ }
+ ]
+ },
+ "勂\\&m鰈J釮=Ⲽ鳋+䂡郑": null,
+ "殣b綊倶5㥗惢⳷è¢á‘€ä¬„é•§M^ï±´3⣢翣næ«»1㨵}ኯ뗙顖Z.Q➷ꮨ뗇\u0004": "ê”™ä¼>n^[GीA䨟AMç¢á’ŠS쨲w?d㶣젊嘶çºéº“+æ„£a%気ྞScë“ᔘ:8bM7Xd8㶑臌]Ꙥ0ê­ì’™ä«£æŒµCè–½î€Dfⵃ떼᷸",
+ "?ç´¡.ì…ª_à·¨j\u0013Oxâ” $Xᶨ-á…‡oè–¹-}軫;yæ¯ãªœKã£?.EVì®±4둽⛻䤜'2盡\u001f60(|eì°ã¼Žá¦€ã’§-$l@ﻑå³\u0003ä­±å“å·—WFo5c㧆Tí„Y맸♤(": -2.50917882560589088E17
+ }}
+ ],
+ "侸\\릩.᳠뎠狣살cs项䭩畳H1s瀉븇19?.w骴崖㤊h痠볭㞳㞳ä®Ql怠㦵": "@䟴-=7f",
+ "鹟1x௢+d ;viä­´FSDS\u0004hꎹãš?â’â¦Ñž6u,扩@ë·Su)Pag휛Tá’—Vç—©!çžé‡€ê–žè˜¥&ೞè˜ê­°êž‡áŽ": "ah懱Ժ&\u20f7䵅♎඀䞧鿪굛ౕ湚粎蚵ᯋ幌YOE)५襦ãŠY*^\"R+ඈî¶å’·è¶9î—ꥂ榨艦멎헦é–ë¶v좛咊E)K㓷ྭr",
+ "æ†q쮦4綱켙ì….f4<\/g<籽늷?#蚴픘:fF\u00051㹉뀭.á°–í’ŽfÖ¦Hv蔎㧤.!ä­½=éž½]ìŒH:?\"-4": 8.740133984938656E-20
+ }]}
+ }
+ ],
+ "tVKn딩꘥⊾蹓᤹{\u0003lR꼽ᄲQFá…傅ﱋ猢⤊á”,E㓒秤nTà¶­v`â™›I\u0000]꫔ṞD\"麵cè¸î“²æ°X&æ¿¿ë˜ê£¹ê¹³à±¥è‘‚鿎\\aꡨ?": 3900062609292104525
+ }
+ ],
+ "ਉ샒⊩Lu@S䧰^g": -1.1487677090371648E18,
+ "⎢k⑊꬗yá«7^err糎Dt\u000bJç¤¯í™•ã†æ²‘サꋽeèµ”ã¢^J\u0004笲㿋idra剰-᪉C錇/Ĝ䂾ညSì§€?~ì½®gR敉⬹'ä§­": 1901472137232418266,
+ "ç—kä¶¥:?ì´½è´ì“‰ê“ˆã’¸gç˜[뵎\\胕?\u0014_榙p.j稶,$`糉妋0>Fá¡°ly㘽$?": "]ê™›O赎&#ã ƒë±å‰³î°·\"<â—†>0誉é½_|z|裵씪>áŒã¼\"Z[ç•}O?G뚇諦cs⠜撺5cuç—‘U圲\u001c?鴴計lì¶¥/╓哼䄗èŒîšªê®…뫈댽AëŒë¡–뤫V窗讬sHd&\nOi;_î´–u"
+ }
+ ],
+ "Uﺗ\\Y\\梷䄬~\u0002": null,
+ "k\"Y磓ᗔ휎@U冈<\/w컑)[": false,
+ "æ›Jè·âŒ»ë¦\u001f㙳s꥓âŸé‚«P늮쥄c∬ྡྷ舆렮칤Zè¶£5콡넛A쳨\\뀙骫(棻.*&è¼›LiIfi{@EA婳KᬰTXT": -4.3088230431977587E17
+ }]}
+ ]
+ ],
+ "곃㲧<\/dఓꂟs其ࡧ&N葶=?c㠤Ჴ'횠숄臼#\u001a~": false
+ }
+ ]
+ ]}]
+ }]
+ }}
+ ],
+ "2f`â½°E쵟>Jî•笂裭!〛觬囀ۺ쟰#桊l鹛ⲋ|RA_Vxá­gEë“h﵀mfá»|?juTUæ¡£[d⢼⺻p濚7E峿": 5613688852456817133
+ },
+ "濘ë¶gå¿®7ãµæ®¬W팕Qæ› ë«°)惃廊5%-î«è¹šzYZ樭ﴷQ锘쯤崫îŸgg": true,
+ "絥ᇑâ¦ì’“븣爚H.ã—Šß„o蘵貆ꂚ(쎔O᥉î¼ï®“]姨Wê“!RMA|o퉢THxè½®7Mê»U즨'i뾘舯o": "è·¥f꜃?"
+ }}
+ ],
+ "é·°é¹®K-9k;ï°°?_ݦѷ-ꅣ䩨Zꥱ\"mꠟ屎/콑Y╘2&鸞脇ã¢ê€‡à ºâ°¼æ‹¾å–­í‹®îL꽩bt俸墶 [l/웄\"꾦\u20d3iও-&+\u000fQ+໱뵞": -1.296494662286671E-19
+ },
+ "HX੹/⨇୕붷Uﮘ旧\\쾜͔3l鄈磣糂̖䟎Eá³wæ©–bá¿€_딕huè‘°î¤çª³é—¹Ð²U颵|染H죶.fPä—®:jä«¢\\b뎖i燕ꜚGâ® W-≚뉗lè¶•": "ଊ칭Oa᡺$IVã·§L\u0019脴셀붿餲햪$迳å‘ì¯ì¼‚PqfT\" ?î¹€I屉鴼쿕@ç¡™z^é•㊵M}ãš›T젣쓌-Wâ©-g%⺵<ë®±~빅╴瑿浂脬\u0005왦燲4áƒb|Då § <\/oEQh",
+ "䘶#㥘à©îººìº”ï” f巋ἡAJ䢚쭈ࣨ뫒*mᇊK,ࣺAꑱ\u000bR<\/A\"1a6鵌㯀bh곿w(\"$ê˜*rà²è¶£.dà¿©k/抶면䒎9W⊃9": "漩b挋Swè—Ž\u0000",
+ "畀e㨼mK꙼HglKb,\"'䤜": null
+ }]}]
+ ]
+ ]
+ }]
+ ]}
+ ]
+ ]}
+ ],
+ "æ­™>駿ꣂ숰Q`J΋方樛(d鱾뼣(ë«–í„­\u20f9lচ9æ­Œ8o]8윶lì–¶?é•–G摄탗6í‹íµ+g:䱫홊<멀뀿/س|ê­ºsê±è·¶ç¨šW々c㫣⎖": "㣮蔊깚Cꓔ舊|XRfé»ã†šï¸†'쾉ì·\\&言",
+ "æ®­\"cÞɨê™äž˜:嬮eæ½½Y펪㳅/\"O@à —ê²´]ì·–YÇž(t>R\"N?梳LDæ­=næ°¯Tè±°2R諸#N}*ç§ï¡§4}ã¶ŠGä£bì–š": null,
+ "襞<\/å•§ B|싞W瓇)6簭鼡艆lNì©`|펭佡\\é–“é‚[z릶&쭟愱ꅅ\\Tá°½1靝忠ˆ4̸s윜R7â’/똽?치X": "âŠèº–Cﱰ2Qẫè„&இ?%ëƒæ‚Š",
+ ",é°§åµì…£îˆ›ì‹¹xᎹ힨᯳EṬHïŽã¹–9": -4604276727380542356
+ }
+ }
+ ]]]],
+ "웺㚑xs}q䭵䪠馯8?LB犯zK'os䚛HZ\"L?셎s^㿧㴘Cv2": null
+ }]
+ ]
+ ]
+ ],
+ "Kdî©´2Kv+|z": 7367845130646124107,
+ "ᦂⶨ?ᢠ祂些ഷ牢㋇æ“\"腭䙾㖪\\(y4cE뽺ㆷ쫺ᔖ%zfÛ»$Ñž1柦,ã¶¢9r漢": -3.133230960444846E-20,
+ "ç˜Mç„€q%㢟f鸯Oâ£è“‘맕鯊$Oå™·|)z褫^㢦⠮ꚯ꫞`毕1qꢚ{ĭ䎀বώT\"뱘3G൴?ï¢ï¢^^oï…¯f": null
+ }
+ ],
+ "a8V᯺?:ﺃ/8ꉿBq|9啓댚;*i2": null,
+ "cpT瀇Hç°á»ªpೃi鎪Rrâ£ìˆ¬-鹸ҩ䠚z脚цGoN8å…¥y%è¶ŒI┽2ឪЀiJNcN)æ§£/â–Ÿ6S숆牟\"箑X僛G殱娇葱T%æ»:J諹昰qV쨰": 8331037591040855245
+ }],
+ "G5ᩜ䄗巢껳": true
+ }
+ },
+ "Ồ巢ゕ@_è­™A`碫é„㡥砄㠓(^K": "?܃B혢▦@犑ὺD~Tâ§|é†;o=J牌9냚⢽㨘{4è§èš”9#$∺\u0016p囅\\3Xk阖⪚\"UzA穕롬✎âžã­’춺C㣌ဉ\"2瓑员ᅽê¶ë«}꽚ꞇ鶂舟彺]ê½JCè§éЉ",
+ "â†Äšè†\"b-í‰ACR言J謈53~V튥x䜢?ꃽɄY뮩ꚜ": "K/↾eèƒ}]Bs⾿q룅鷦-膋?m+æ­»^魊镲6",
+ "粡霦cæž‹AHíŸo礼Ke?qWcA趸㡔ê‚?\u000eì¶‚8iতᦜ婪\u0015㢼nﵿê»!á´é–¢\u001d5j㨻gfá¿©UK5Juä¸tã‹TI'?ã“t>⼟o a>i}á°—;뤕Ü": false,
+ "ꄮ匴껢ꂰ涽+䜨B蛹H䛓-k蕞fu7kLè°–,'涃V~챳逋穞cT\"vQ쓕ObaCRQã“¡â²®?轭⫦輢墳?vA餽=h䮇킵ní²í‰…喙?\"'1ç–¬V嬗Qdç—'Lự": "6v!së¯ã­Ÿî€µî¦˜ã£¯çƒ!磸餠ቂh0C뿯봗Fé·­gê–¶~コkK<ᦈTtïŽ\\è·“w㭣횋钘ᆹ듡䑚W䟾X'ê…”4ï€FL勉Vܴ邨y)2'〚쭉⽵-鞣E,Q.?å—",
+ "?(˧쩯@å´Ÿå‹æ­„K": null
+ },
+ "Gc럃녧>?2DYIé´¿\\륨)æ¾”0ᔬlx'è§”7젘⤡縷螩%Sv׫묈/]↱&S ï…h\u0006æ­‹á‘›xi̘}ã²Y蔯_醨鯘煑橾8?䵎쨋z儬ê*@츾:": null
+ }
+ }
+ }
+ ]
+ ]
+ ]}
+ },
+ "HO츧G": 3.694949578823609E17,
+ "QC\u0012(翻曇Tfã·ŸbGBJ옉53\\嚇ᛎDï–/\u001b夾á‰4\"í•€@祎)쫆yD\"i먎Vnî¿ã¿¿V1Wá¨ä¶€": -6150931500380982286,
+ "Zã“®P翸é±é‰¼K䋞꘺튿â­Y": -7704503411315138850,
+ "]모开ꬖP븣c霤<[3aΠ\"é»ä––䰑뮋ꤦ秽∼㑷冹T+YUt\"싳F↭ä–&鋌": -2.7231911483181824E18,
+ "tꎖ": -4.9517948741799555E-19,
+ "䋘즊îŽ.⬅IꬃۣQ챢ꄑé»|f?C⾺|å…•ì¯sC鬸섾整腨솷V": "旆柩l<Ké«î–žM戶鯮t:wRî°2ꉱ`9'l픪*í芦㊢Pjjoå ¡^ ì‡ì–›å¶…있ষ0?F",
+ "下9T挞\\$yᮇk쌋⼇,ਉ": true,
+ "櫨:ㆣ,é‚lî ¬r崕祜ã®çƒœZ,XXD蕼㉴ kM꯽?P0﹉릗": null,
+ "îŠgv솠歽閘4镳䗄2æ¾¾>쪦sá–¸My㦅울ì‰ç˜—㎜檵9ï……ê‚駓ૉᚿ/u3ì”…å¾ï¤¥[Z䞸ࡗ1ꆱ&Q풘?Ç‚8\u0011BCDY2볨;é¸": null,
+ "幫 nç…¥sì‡íއ 왊-$C\"è¡:\u0014㣯舼.3ë™—Yl⋇\"K迎멎[ê½µs}9鉳UK8ì¥\"掄㹖h㙈!얄સ?Ꜳ봺R伕UTD媚I䜘Wé¨è”®": -4.150842714188901E-17,
+ "ﺯ^ã„„\b죵@fྉkf颡팋î¤êž¦{/Pm0V둳⻿/è½éŸ’ꊔᚬ@5螺G\\å’¸a谆⊪ቧ慷绖?è´¢(é·‡uéŒF=ráæ©¢áž³n:^iá´µtD볠覅Nèµ´": null
+ }]
+ }]
+ }
+ ]
+ ]}
+ ]},
+ "謯?w厓奰Tï§¡í——èážè²–o⪇弒L!캶$ᆅ": -4299324168507841322,
+ "뺊奉_åžæµ¸å»¶ëªå­„Z舰2i$q붿좾껇d▵é¤\"v暜Ҭì„mï¿´g>": -1.60911932510533427E18
+ }
+ ]
+ }
+ ]
+ ]],
+ "í‰êº”㠦楶Pê…±": 7517896876489142899,
+ "ï™°": false
+ }
+ ]},
+ "是u&I狻餼|è°–j\"7cë®sï­-踳鉷`䣷쉄_A艣鳞凃*m⯾☦椿q㎭Nîœæº”铉tlㆈ^": 1.93547720203604352E18,
+ "ï…µkⲨ\\%vr#\u000bâ’ºY\\t<\/3﬌R訤='﹠8è¤êž´ë ´æ›”r": false
+ }
+ ]},
+ "阨{c?C\u001d~K?鎌Ԭ8烫#뙣Pì´ˆé—tã­±E­ë’䆺}ç”—[R*1!\\~hã•…á°º@<9JêષIä³–æ ­6綘걹ᅩM\"▯是∔v鬽顭⋊譬": "ìš´ï¶Kæ•‚(欖C취پ℄爦賾"
+ }
+ }}
+ }],
+ "鷨赼鸙+\\ä­£t圙ڹx᜾ČN<\/踘\"S_ë§¶a鷺漇T彚⎲i㈥LT-xA캔$\u001cUH=a0츺l릦": "溣㣂0æ¿•=鉵氬駘>Pꌢpb솇쬤h힊줎çªãª¬CrQ矠a&è„꼬爼M茴/á¿®\u0017å¼è½¼y#êž c6ë‘´=?Rå´ë· éº–w?"
+ },
+ "閕ᘜ]CT)䵞l9z'xZF{:ØI/躅匽ì¡:䟇AGF૸\u001cퟗ9)駬慟ꡒꆒRS״툋A<>\u0010\"ꂔ炃7gëšEà§îˆbꅰ輤]oã±_뷕ܘ暂\"u": "芢+U^+㢩^鱆8*1鈶鮀\u0002뺰9⬳ꪮlL䃣괟,G8\u20a8DF㉪錖0ㄤ瓶8Nଷd?眡GLc陓\\_죌Vì°à¤²äºŒ?cë¦æ± \u0019JC\u0011b⤉zẒT볕\"绣蘨뚋cꡉkî« I\u001eé³´",
+ "ꃣI'{6u^㡃#཰Kq4逹y൒䧠䵮!㱙ï®/n??{Lí’“ZETã™ í¿X2᩟綳跠葿㚙w཮x캽扳B唕S|å°¾}ì´•%N?o䪨": null,
+ "ⰴFjà·Ÿì…ˆ[\u0018è¾·px?椯\\1<ﲻ栘á£ë´¢æ† ë‰´p": -5263694954586507640
+ }
+ ]
+ ]]
+ ]}
+ ]}]
+ ]
+ ],
+ "?#癘82禩鋆êŠty?&": -1.9419029518535086E-19
+ }
+ ]
+ ]
+ ]}
+ ]
+ ]
+ ],
+ "훊榲.|῕戄&.ãšZꛦ2\"䢥ሆ⤢fV_æ‘•å©”?â‰Fji冀탆꜕iã¬_ẑKᅢ꫄蔻XWc|饡Siẘ^㲦?羡2ã´1ç¸á™…?ì‰Ou": false
+ }]]
+ ]}}},
+ "æ…‚ë—„å“è“”á“åŒåš–/颹蘯/翻ㆼL?뇊,í…µ<\\ç·ã”Cボ": null
+ },
+ "p溉ᑟi짣z:䒤棇r^٫%G9缑r砌롧.물农g?0׼ሩ4ƸO㣥㯄쩞ጩ": null,
+ "껎繥YxK\"F젷쨹뤤1wq轫o?鱑뜀瘊?뎃hç‘\\ꛣ}Kå³^ኖâ¤ï§´ê‰“hy": null
+ }
+ ],
+ "á±€nè‚“ã„›\"å »2>mæ®®'1橌%êž´êµ°=Ӳ鯨9耛<\/n據0u彘8㬇៩fá¿è¯™]嚊": "䋯쪦S럶åŒã…›#î½)O`ሀX_éªæ¸²â›€ã¨»å®…闩➈ꢙஶDRâª"
+ },
+ "tAì“龇 â‹¥bj왎录r땽✒롰;羋^\\?툳*┎?ì€ma䵳넅U䳆૘〹䆀LQ0\bç–€U~u$M}(鵸gï­â³¾i抦뛹?䤈땚검.鹆?ê©¡tâ¶¥GÄ’;!ቹHïš©Så³»B츪ì¼f5≺": 2366175040075384032,
+ "ì „pJjleb]áž½": -7.5418493141528422E18,
+ "n.鎖ጲ\n?,$䪘": true
+ },
+ "欈Ar㉣螵᪚茩?O)": null
+ },
+ "쫸M#x}Dç§±æ¬K=侫们ä¸ï‡ª.KꕾxẠ\u001e㿯䣛FÜ캗ï¬qq8꟞ṢFD훎⵳簕꭛^鳜\u205cÙ«~⑟~冫ऊ2ì«°<\/戲윱o<\"": true
+ },
+ "ã·è¥/T뱂\u0010锕|内䞇xä¾â‰¦ã­–:M?iM᣿IJeç…œdG࣯尃⚩gPt*辂.{磼럾äª@a\\袛?}ᓺBç¼": true
+ }
+ }
+ ]]}]}},
+ "tn\"6î´ê«¤ìƒ¾ä„„;銞^%VBPwu묪`Y僑N.↺Ws?3C⤻9唩Sä ®á´m;sᇷ냞඘B/;툥B?lB∤)G+O9m裢0kC햪䪤": -4.5941249382502277E18,
+ "áš”t'\\æ„«?éµ€@\\ã³ê‚•Pí <<]ç…¹G-b!S?\nꖽ鼫,Ý›&é ºy踦?Eæ†î¬–릱H}햧캡b@手.p탻>췽㣬ꒅ`qeä½­P>á“‚&?u}毚ᜉ蟶頳졪áŽzl2wO": -2.53561440423275936E17
+ }]}
+ }
+ ]
+ ]],
+ "潈촒⿂å¡": 5495738871964062986
+ }
+ ]]
+ }
+ ]
+ ]}
+ ]]
+ ]]
+ ]}
+ ]
+ ]},
+ "á‚qí‚è“…R`謈èŸá¦î’³å„‚æ§åƒ»ï¹¶9å©Œî¬æ«žé‡ˆ~\"%匹躾ɢ뤥>࢟瀴愅?殕节/냔O✬H鲽엢?ᮈà©î“Žâ‹§dâ½ã«zCe*": 2.15062231586689536E17,
+ "ã¶µUi曚ç°é‹ªá¾¼è‡§P{ä䷪쨑̟A뼿T渠誈äšD1!ìž¶<\/ã¡7?)2l≣穷᛾ç¨{:;㡹nemיּ訊`Gî¹²": null,
+ "䀕\"飕辭påœf#뫆䶷뛮;â›´á©3çšëá°ìŽ“â¦·è©µ%᜖Մfs⇫(\u001e~P|ï­—CⲾផv湟W첋(텪બTî¾·<บSê‰à©—⋲X婵i ӵ⇮?L䬇|êˆ?졸": 1.548341247351782E-19
+ }
+ ]
+ },
+ "t;:N\u0015qé¦Rt缆{ê®C?஛㷱敪\\+鲊㉫㓪몗릙ç«(æ°µkYS": "Xá°‚T?൮ô",
+ "碕飦幑|+ 㚦é¶`é•¥ê© B<\/加륙": -4314053432419755959,
+ "秌孳(p!G?Vå‚«%8ሽ8w;5鲗㦙LI檸\u2098": "zG N볞䆭éŽí˜\\ONK3íš™<\/樚立圌Q튅k쩎Ffì‹aׂJK銆ઘì¦ç‹©6༥✙䩜篥CzP(è»é§‡HHퟲ讃%,ά{ë p而刲vy䦅ክ^톺M楒é¢ã¹³]Mdg2>䤉洞",
+ "踛M젧>忔芿㌜Zk": 2215369545966507819,
+ "ì”A`$æ§­é °í»^U覒\bG毲aᣴU;8!팲f꜇E⸃_åµ{å«ç¾ƒX쀳C7ë—®m(åš¼u NÜè°ŸD劯9]#": true,
+ "ﻩ!뵸-ç­šPá­›}á¼°å±¥lPh?౮ⶹꆛ穉뎃gè‘㑓溢CX뾇Gã–¬A錟]RKï’î´²aꄘ]Yo+@ä˜'s섎襠$^í™°}F": null
+ },
+ "粘ꪒ4HXᕘ蹵.$å€\r\u001dë¬77pPc^yî¶ç¬²Q<\/ê–¶ è¨äƒá¨•G?*": 1.73773035935040224E17
+ },
+ "婅拳?bkU;#D矠â´vVN쩆t㜷A풃갮娪a%é®çµª3dAv룒#tm쑬⌛qYwc4|L8KZ;xU⓭㳔밆拓EZ7襨eD|隰ऌ䧼u9Ô¢+]è´´Pè¿": 2.9628516456987075E18
+ }]}}]
+ ]}
+ }}
+ ]}]
+ ],
+ "|g翉F*湹̶\u0005â1脉̀eI쩓ᖂ㫱0碞l䴨ꑅ㵽7AtἈ턧yq䳥塑:z:é€ï¾¼X눔擉)`N3昛oQì…–y-ڨ⾶æ¢êˆµq^<\/": null,
+ "è¹\\ëž“G^璬x৴뭸ゆUSê²§ï®·Bꮤ ┉銜᯻0%N7}~fæ´‹å„Xꔼ<\/4妟Vꄟ9:౟곡t킅冩䧉笭裟炂4ë´‹â±³åºæ€Št+怯涗\"0ã–ˆHq": false,
+ "졬믟'ﺇফ圪쓬멤m邸QLà¦¬ä—æ„4jvsç¿™ à¾ê§€è‰³H-|": null,
+ "컮襱⣱뗠 R毪/鹙꾀%헳8&": -5770986448525107020
+ }
+ ],
+ "î½­B䔚bê»ë™å§“展槰T-똌鷺tcï§ç¿á«½^㓟ä€o3o$꘭趙è¬Ié¡©)뇭Ἑä“\f@{ᣨ`x3è”›": null
+ }
+ ]
+ ]
+ }],
+ "⦖扚vWꃱ꥙㾠壢輓{-⎳鹷è´ç’¿äœ‘bG倛â‹ç£Žc皇皩7a~ﳫUâ•£Q࠭ꎉS摅姽OW.홌ೞ.": null,
+ "蚪eVlH献r}á®ë¯ ï°©ê”„@ç‘„â²±": null,
+ "퀭$JWoê©¢gì—­ì䖔㑺h&à­¢tXX愰㱇?㾫I_6 OaB瑈q裿": null,
+ "꽦ﲼLyr纛ZduçB絟쬴糔?ã•‚ì§¹äµe": "ḱ\u2009cX9ë©€i䶛簆㳀k"
+ }
+ ]]]],
+ "(_ê®g່澮?ᩑyM<艷\u001aꪽ\\庼뙭Zë§·ã°©Vm\\lYç­º]3㋲2㌩㄀Eਟäµâ¨„ì¨á”ŸgङHné–⤇놋瓇Q탚單oY\"♆臾jHᶈå¾îž«á‰„??uㇰA?#1侓": null
+ },
+ "è§“^~ሢ&iIë†g륎ḱ캀.ᓡꀮ胙鈉": 1.0664523593012836E-19,
+ "yè©­GbᔶऽsëŒU:æœî „⤎ϲì—⮼D醄诿që™°I#즧v蔎xHᵿt᡽[**?崮耖p缫쿃Lè,ë´¬ï–ꤦC쯵#=X1çž»@OZc鱗CQTï‹„x": null
+ }
+ ]
+ }}],
+ "剘ç´\u0004\\Xn⊠6,á€×±;嵣崇}讃iႽ)d1\\䔓": null
+ },
+ "脨z\"{X,1u찜<'k&@?1}Yn$\u0015Rd輲ーa쮂굄+B$l": true,
+ "諳>*ì­®ê´äµŸÒ+<ç®}빀䅱⡔æªï€è‡’hIH脟ꩪCí•ଗP좕\"0i<\/C褻DÛžæ—+^5?'ꂱ䚫^7}ã¡ cq6\\쨪ꔞꥢ?纖䫀氮蒫侲빦敶q{Aç…²G": -6880961710038544266
+ }}]
+ },
+ "5s⨲JvಽῶꭂᄢI.a৊": null,
+ "?1qê½ì¿»ê›‹DR%Uå¨>DgNä¹­G": -1.2105047302732358E-19
+ }
+ ]
+ ]},
+ "qZz`撋뙹둣j碇ì\\ꆥ\u0018@ïœè—´ç–°Wz)O{Fä¶›l᷂绘訥$]ë®å¤»ä¢‹ä©‡è¿ç°æ¨§çŒµâ£­jè¶q)$꬚⵷0馢W:â°!Qoe": -1666634370862219540,
+ "t": "=î¹›wp|~碎Q鬳Ó\\l-<\/^ﳊhní–}ä”t碵ḛ혷?é»äŠ—",
+ "邙쇡㯇%#=,î‰E4勃驆V繚q[Y댻XV㡸[逹á°è‘¢B@u=JS5?bLRnì–®ã‰â…ï°³?a6[&íŸ!è—ˆ": 1.2722786745736667E-19
+ },
+ "X블땨4{ph鵋ꉯ웸 5p簂䦭s_E徔濧dç¨~No穔噕뽲)뉈c5M윅>âš‹[岦䲟懷æ?éŽê“†à¸¬çˆ‹ç äœ”s{\u001bméšå„¸ç…›%bﯿXT>ê—˜@8G": 1157841540507770724,
+ "媤娪Qæ¸ï‡\u0011SAyᡈ쿯": true,
+ "çš^ಸ%ê±<\/蛯<O\"-刷ã R(kO=䢊䅎l䰓팪A絫픧": "è­”\\ãš„ ?R7㔪G㋉⣰渆?\\#|gN⤴;Wì¹·A׫癮଼ೣã³ë’œ7dæ“ê¾²0扬S0ᆵi/贎ྡn䆋武",
+ "è‡ç ‡Gã“æœ¦ì¼‹Wq`㞲攊*å†î‘µî¨~霓L剢zI腧튴Tç¹™Cঅ뫬╈뮜ㄾ䦧촄椘B⊬츩r2f㶱厊8eϬ{挚â¯OM焄覤\\(KÓ¡>?\"祴å“\\\\'í": -3.4614808555942579E18,
+ "釴U:O湛㴑䀣렑縓\ta)<D8ï­³æ§é«­D.L|xsæ–‹æ• \"ë‹æ—©7wáŽ": true,
+ "쵈+쬎簨up䓬?q+~\u0019仇îŒëµˆá«¯3áµ£æ˜æž°åŠ«ãª¢uç˜-퀭:ì»™:u`⌿ï«A(9鄦!<çšnj3:Hà£¨å·‹ä€æ—¸ëŽˆë§»v\"\\(곘vO㤰aZe<\/W鹙鄜;l厮ë‘": null,
+ "î–·": -1.2019926774977002E-18,
+ "%者Oî–‹7.Nêªs梇接z蕜綛<\/䜭\"죊y<曋漵@Śâ¹sD⟓jݗᢜ?zî–†/9á²Ma쨮긗贎8ᔮ㦛;6p뾥໭䭊0B찛+)(Yã¿ é¸ä•’^옥": "鬃뫤&痽舎Jì½®è—󽸰ᨨMꈫ髿v<N\\î·.ì‚’ê»…Ñ1ê­¼5ä´·5쳬臨wjë¥"
+ }],
+ "é·Ž'ã³—@帚妇OAj' è°¬f94ǯ(횡ヒ%io쪖ì‚좛>(j:숾å´ä—ŒgCiB뽬Oyuqè¼¥åŽ/7)?今hY︺Q": null
+ }
+ ]
+ ]]]}]
+ ],
+ "I笔趠Ph!<ཛྷ㸞诘X$畉F\u0005笷èŸ.Esr릙!W☆ï›ä²–뗷莾뒭U\"䀸犜Uo3ï¯Gꯌx4r蔇᡹㧪쨢準<ä‚€%ࡡꟼç‘8ç‚Xs0ä€é”€?fi쥱ê†àª²BB": -8571484181158525797,
+ "Lâ¦o#J|\"⽩-ã±¢d㌛8d\\㶤傩儻E[Y熯)r噤὘勇 }": "e(濨쓌K䧚僒ã˜è ¤Vᛸ\"络QJL2,嬓ì™î¿‰ä¼¢ã‹’䴿考澰@(ã¾`kX$ë‘ÑE斡,èœ&~y",
+ "vj.|统圪ᵮPL?2oŶ`ë°§\"勃+0ue%⿥绬췈체$6:qaë Q;~晘3㙘鹑": true,
+ "à·Ø™4ç„â¶¿c︋iâš…:ã‚“é–Ⳙ苆籦kw{䙞셕pCì·ƒê¬âœêŸ¯êš“é…„bížhwkê­­M鬋8B耳쑘WQ\\å™ac'唀x᪌\u2048*hì§Ž#á‡é® ë¾áž¿ë€Œ": false,
+ "⎀jꄒ牺3Ⓝ컴~?親ꕽã¼Ü“å–瘘!@<튋ãŒê¿±â©¦{a?Yv%⪧笯Uܱ栅Eæši뚬:ꄃx7䙳ꦋ&䓹vq☶Iä˜á¾˜æ¶œ\\ì‰ëºŒLr%Bcãœ3?î¤ï…¨ê­ç ¿è£ž]": null,
+ "⭤뙓z(㡂%亳K䌽꫿AԾ岺㦦㼴輞낚Vꦴw냟鬓㹈뽈+o3譻K1잞": 2091209026076965894,
+ "ㇲ\t⋇轑ꠤ룫X긒\"zoYì‡í¬wjæ¢ì‘l侸`e%s": -9.9240075473576563E17,
+ "啸ꮑ㉰!áš“}éŠ": -4.0694813896301194E18,
+ "ï‰>]囋੽EK뇜>_ꀣ緳碖{ì裔[<ನ\"䇅\"5L?#îµ³xTwv#ç½\u0005래t应\\N?빗;": "v쮽瞭pë­ƒ"
+ }
+ ]],
+ "æ–´æ§¾?Zç¿\"~æ…弞ﻆ=꜡o5é‹ï’½dw\"?Kè ¡i샾ogDï²°_C*⬟iㇷ4nયèŸ[㟉U꽌娛苸 à§æ“贻洞펻)쿗૊許X⨪VY츚Zä¾ã¶­~튃ᵦ<\/E臭tve猑x嚢": null,
+ "锡⛩<\/칥ꈙᬙè€&êšç±¬â– 865?_>Lè©ì¿¨äˆŒæµ¿å¼¥ï©‰Ì«î¾½ï‘lj&zx<\/C쉾?覯n?": null,
+ "꾳鑤/꼩ï¨d=ᘈn挫ᑩ䰬ZC": "3錢爋6Ƹ䴗v⪿Wr益G韠[\u0010å±—9ì¡é’u?殢c䳀蓃樄욂NAq赟c튒ç˜ë ¶î‚³Aà«¡Éšæ"
+ }
+ ]
+ ]
+ ]}
+ ]
+ ]
+ }]]]}}
+ ]}],
+ "ï‚’Ejä—³U<\/Q=ç’샎䞦,å °é  @褙g_\u0003ꤾfâ¶½?퇋!łB〙ד3CC䌴鈌U:뭔咎(Qો臃䡬è‹BO7î¼§ã¢äŸ¸\"Yb": 2.36010731779814E-20,
+ "逸'0å²”j\u000e눘먷翌C츊秦=ꭣ棭ှ;鳸=麱$XP⩉駚橄A\\좱⛌jqvä°ž3Ь踌v㳆¹gT┌gvLBè³–ïžçƒ¡m?@E঳i": null
+ },
+ "曺vì°˜×?&绫OáŸ": 9107241066550187880
+ }
+ ]
+ ],
+ "(e屄\u0019昜훕ç–b蓘ᬄ0/۲묇Z蘮á€â¨è›˜èƒ¯ë¢ƒ@㘉8ሪWᨮ⦬ᅳ䅴HIá‡ì¨³z囕陻엣1赳o": true,
+ ",b刈Z,á æ™Tì†Å•B⩆ou'í¼â‰ƒç»—é›—dè­Š": null,
+ "a唥KB\"ï³è‚•$u\n^â…„P䟼냉䞸⩪u윗瀱ꔨ#yÅŸsî««ê’¬=ï‹•1ïš–|ﲤ爢`tà±íмî£ì³«_Az(Ṋ擬㦷좕耈6": 2099309172767331582,
+ "?ã´¸U<\/䢔ꯡ阽扆ã¤qé‹?f㔫wM嬙-;UV죫嚔픞G&\"Cá—äªí’ŠQ": "VM7ç–¹+陕枡툩窲}ç¿¡ä–¶8欞ÄsTë®}ç’¤:jﺋ鎴}HfAàµâ§»Zd#Qï¬u茅J髒皣Y-︴[?-~쉜vë”璮㹚䅊﩯<-#\u000eê±€h\u0004u抱﵊㼃U<㱷⊱IC進"
+ },
+ "숌dee節é½é‚ºp넱蹓+e罕U": true
+ }
+ ],
+ "b⧴ë£??á” 3ã±>%郿劃ç¿ê¬ê ›Wï¡°çž³á«ëˆ„躨狀ໄy੽\"ីuS=㨞馸k乆E": "トz݈^9R䬑<ﮛG<s~<\/?ⵆá¥è€ç†·uë“·"
+ }}
+ ]
+ }
+ ]}
+ }
+ }
+ }
+ }},
+ "宩j鬅쳜Qê–јyç”Zá­µï1væ“–}䨿F%cֲ᫺贴m塼딚NP亪\"ï¿‹sa뺯ꘓ2:9뛓ï à¼‚쌅䊈#>Rꨳ\u000fTT泠纷꽀MR<CBxPñ±’«X쇤": -2.22390568492330598E18,
+ "?䯣ᄽ@Z鸅->ᴱ纊:ã ­ë³®?%N56%鈕1ä—äœaä²—j陇=ë¿»å‚衋࿘ᓸ?ᕵZ+<\/}H耢bä€z^f$&ã’LkꢳI脚뙛u": 5.694374481577558E-20
+ }]
+ }
+ ]],
+ "obj": {"key": "wrong value"},
+ "퓲꽪m{ã¶©/뇿#â¼¢&᭙硞㪔E嚉c樱㬇1aç¶‘á–DḾä©": null
+ },
+ "key": "6.908319653520691E8",
+ "z": {
+ "6U閆崬밺뀫颒myj츥휘:$è–ˆmYí–š#rzé£+玭V㭢뾿愴Yî°‘ê–šX亥ᮉ푊\u0006åž¡ã­ë£\"厓ᔧḅ^Sqpv媫\"⤽걒\"˽Ἆ?ꇆ䬔未tv{DV鯀Tἆl凸g\\㈭ĭ즿UH㽤": null,
+ "b茤z\\î¨.N": [[
+ "ZL:ᅣዎ*Y|çŒ«åŠæ«•è¾Oj为1糕쪥æ³S룂w࡛á²â¸¥èš™)",
+ {
+ "\"䬰á»wDæ¾V`邀⠕VDãºsH6[칑.:醥葹*뻵倻aD\"": true,
+ "e浱uî¿£p蔽Crà· JK軵xCʨ<뜡癙Yç©ï½¹é½ˆX/螗唻?<蘡+뷄㩤쳖3å‘犾&\\첊xzå崦ݻé´\"åµ¥B3㰃詤豺嚼aqJ⑆∥韼@\u000b㢊\u0015L臯.샥": false,
+ "l?Ǩ喳e6㔡$M꼄I,(3á縢,䊀疅뉲B㴔傳䂴\u0088㮰钘ꜵ!ᅛ韽>": -5514085325291784739,
+ "o㮚?\"춛㵉<\/﬊ࠃ䃪ä£wp6ἀ䱄[s*S嬈貒pᛥ㰉'ë€": [{
+ "(QP윤懊FI<ꃣ『䕷[\"ç’å¶®?%Ḭå£à²»ä‡Ÿ0è¤!è—²ë¹bdæµ¶tl\u2049#쯀@僞": {"î—i妾8홫": {
+ ",Mï£ë§ƒäž›K5nAㆴVNã’Ší–¬$n꩑&êŽæ¤žî·é˜«?/á¹ì„¸ë‰ª1x쥼㻤㪙`\"$쟒薟B煌܀ì¨à­2掳7㙟鴙Xå©¢\u0002": "Vዉèˆï ’᧷⦌kîŒï®žà°ˆnz*<?੃'ahhCFX(\u0007⮊Eã­ä±¾Gxꥩrâ£.æ´Ž",
+ "ë»´5bDDí¯O傆盓왻U?êž…êŠNé­á§¢Ï„\"迳豲8\u001b䃥ꂻ䴺ྸHç­´,": {
+ "\"L鸔SE㬡XV&~ÍŽ'놅蔞눶l匛?'.Kæ°\\ƢẨ疇má¿›'ê½³&!é¹ m'|{Pç—Š ç§„ì’¿u\u00111ä‹§î´¼gÏ©x7t丗D䊨䠻z0.A0": -1.50139930144708198E18,
+ "8é‹‚ë›·ïž”?ì²’B☚>ï·œFM\"è­7ê€-VR<\/';ä™E9$䩉\f @s?íªo3^è¡´cî˜à¶Žä§ªaK鼟q䆨c{ä³ 5mᒲՙ蘹ᮩ": {
+ "Fã²·JGoâ¯Pëµxë’³p䘧☔\"+ꨲå¿JfR㔹)4nç´¬G练Qáž!C|": true,
+ "p^㫮솎ocî’£.೚A㤠??r\u000f)⾽⌲們M2.䴘䩳:⫭胃\\á¾@Fá­Œ\\K": false,
+ "蟌Tk愙潦伩": {
+ "aï‘<\/@ᾛ慂侇瘎": -7271305752851720826,
+ "艓藬/>á„ṯ,XW~㲆w": {"Eç—§î–郶)㜓ha朗!N赻瞉駠uC\u20adè¾ <Ve?í±!ImäŽî­Ÿæ„:*s 9諚Prᵾ뒰髶B̌qWA8梸vS⫊⢳{t㺲q㺈랊뮣RqK밢쳪": [
+ false,
+ {
+ "\u000b=>x퓮⣫P1à «LMMX'M刼唳ë¤": null,
+ "P쓫晥%k覛ዩIUᇸ滨:å™í˜²lMR5䋈V梗>%å¹½ué –\\)쟟": null,
+ "eg+昉~矠䧞难\b?gQì­·ç­\\eê® Nl{ಢ哭|]Mn銌╥zê–˜zⱷ⭤ᮜ^": [
+ -1.30142114406914976E17,
+ -1.7555215491128452E-19,
+ null,
+ "渾ã¨ß牄귛r?ëŒ?w[âšžÓ»~廩輫㼧/",
+ -4.5737191805302129E18,
+ null,
+ "xyà¿‘M[ocì…’ç«“â’ºx?뜓y䊦>-Dì¼(&&?XKkc꩖ﺸá‹ëµžK伕6à§€)딀PæœyWæ™îž¢?훻魢傎EG碸9類៌g踲C⟌aEX舲:z꒸许",
+ 3808159498143417627,
+ null,
+ {"m試\u20df1{G8&뚈h홯J<\/": {
+ "3ஸ厠zs#1K7:rᥞoꅔꯧ&ë‡éµ¼éž«6è·œ#赿5l'8{7㕳(b/j\"厢aqç±€êš\u0015厼稥": [
+ -2226135764510113982,
+ true,
+ null,
+ {
+ "h%'ë§žï–±Sì‹…Hs&dï”l슾W0jé¿M×D놯L~S-㇡Rì­¬%": null,
+ "⟓咔謡칲\u0000孺ꛭx旑檉㶆?": null,
+ "æ‡I転;￸B2Y`z\\ç“w,ë†æ¿æ’埵䂄)!ä¶¢D=à´­ã´ŸjyY": {
+ "$ࡘt厛毣ൢIèŠ<겿骫⫦6tr惺a": [
+ 6.385779736989334E-20,
+ false,
+ true,
+ true,
+ [
+ -6.891946211462334E-19,
+ null,
+ {
+ "]-\\êŸ1/è–“â§á½Š\\l牑\u0007A郃)阜ᇒᓌ-塯`W峬G}SDb㬨Q臉⮻빌O鞟톴첂B㺱<ƈmu챑J㴹㷳픷Oㆩs": {
+ "\"â—‰B\"pᶉt骔J꩸ᄇá›iâ•°æ ›K쉷㉯é©!ãˆnì¹äŸ…難>盥yé“¿eà­”è’M貹ヅ8å˜‹í€¯ä‰¶áŒ¥ã¢æ®Šë»³\"絧╿ꉑ䠥?∃蓊{}㣣Gk긔H1哵峱": false,
+ "6.瀫cN䇮F㧺?\\椯=ÚˆT䘆4â˜ïšŒ8qv": -3.5687501019676885E-19,
+ "Q?yऴr혴{஀䳘p惭f1ﹸ䅷䕋贲<ྃᄊ繲hq\\b|#QSTî“¶s1c-7(äµ¢\u2069åŒçµ˜ê¯‰:læ¯´ï›æ±žt戀oà·Ÿáµ¶ë®±á£-醇Jx䙬äí–¢0࣫á¡grã„›": "\u0011_xM/蘇Chv;dhA5.嗀绱V爤ﰦiëµ²M",
+ "â‘[\"ugoy^儣횎~U\\섯겜ï¥l2jw஌yD腅̂\u0019": true,
+ "ⵯɇä²á«¿à¢š!㯢l샅笶戮1꣖0Xe": null,
+ "劅fë„€ï‹ï§¼bå®ç„ŠE찓橵G!ʱç“뭔雩괛": [{"p⹣켙[q>燣äƒãž½î›œá©²x:쓤삘7玑퇼0<\/qç’‚á‘[ï ™Z\\3䅵䧳\u0011㤧|妱緒C['ì·“Yꞟ3Z鳱雼P錻BUì”§U`ᢶg蓱>.1Ó§è­«'L_5VäµÐ¦": [
+ false,
+ false,
+ {"22ä‚盥N霂얢<F8î±ê¼µ7Gà°¸yhë€g᦭ꄢx硴嬢\u001a?Eê´†T|;7犟\"Wt%ä©O⨵t&#ᬋK'èœá²«æ”⾠鲂Të©·éƒ\u0018䓞cE": {"f=ä츜瞾zw?å­¡é£\\铀᫞yẆg(\u0011M6(s2]`ਫ": [[[{
+ "'y몱纣4S@\\,i㷯럹Ua充Tᣢ9躘Zଞ쥿äŠs<\/刎\\\"뉦-8/": "蜑.X0꭛낢륹iì ¨êš<8?s볕è¡|Q✬᯦@\\G㑢屿Mn졾J굤⥟JW뤵苑rì•툄嵵?â¾¥O",
+ "^1挲~[n귆誈央碠멪gI洷": -8214236471236116548,
+ "sሣ%娌暡clr蟜㑓2\u000bSâŸ_X㨔⚴5~蔷ꀇ|Xu㬖,꤭å¹îµ¿r(g믇ì©ïЍ%췸앙|æ £U\\2]䤉+å• è¡ê¯ŽT鉹m\n/`SzDᅼ鞶": 1.1217523390167132E-19,
+ "u톇=黚\\ ꂮ췵L>躰îe9â‘©_뵜斌n@B}$ê´»Yá±@ä§‹î´½V\"☒-諯cVë¯Ê ": true,
+ "Ű螧ᔼæªéŽë•’딜qꄃH뜣<ç§à¥‚CYå“â¸>XQ㵡趌oë¬k픀빯a(ܵç”ë†à­¯/6Nᪧ}æšá†šì§ŒP牰泱鈷^d꣟#Lì‚€\"㕹襻;k㸊\\f+": true,
+ "쎣\",|⫝̸阊x庿k잣v庅$éˆê´Žç‚”k쬪O_": [
+ "ìž©AzZGz3v愠ꉈⵎ?㊱}Så°³à¯p\r2>ì·IP䘈M)w|\u000eE",
+ -9222726055990423201,
+ null,
+ [
+ false,
+ {"´킮'뮤쯽Wxè®V,6ᩪ1ç´²aႈ\u205czD": [
+ -930994432421097536,
+ 3157232031581030121,
+ "l貚PY䃛5@䭄<nW\u001e",
+ [
+ 3.801747732605161E18,
+ [
+ null,
+ false,
+ {
+ "": 4.0442013775147072E16,
+ "2J[sᡪ㞿|n'#廲꯬乞": true,
+ "B[ç¹°`\\ãa̼㨀å›ã½“<\/꥖ᵈO让\r43⡩徑ﬓ๨ﮕx:㣜oçŽê‰Ÿã¢Cçµï›‰á½†á“žì‡“Qs氯였9é§µq혃Ljê‚”<\/昺+tä‹à¼»çŒ™c沪~櫆bpJ9Uá:칣妙!çš—F4㑄탎䕀櫳振讓": 7.3924182188256287E18,
+ "H磵ai委曷n柋T<\/å‹¿F&:ꣴfU@㿗榻Lb+?í„sp\"᪟~>ê·»m㎮ç¸fî§¡": 1.0318894506812084E-19,
+ "࢜⩢Ш䧔1肽씮+༎ᣰ闺馺窃䕨8Mƶqè…½xc(៯å¤J5굄ä•Qj_훨/~価.䢵慯틠퇱豠㼇Qﵘ$DuSp(8Uà¸<\/ಟ룴𥳐ݩ$": 8350772684161555590,
+ "ㆎQ䄾\u001bpᩭ${[諟^^骴᤮b^ㅥI┧T㉇⾞\"绦<AYJ⒃-oF<\/蛎mm;obh婃ᦢ": false,
+ "䔤䣈?æ±.p襟&dã±…\\Jᚠ@?Oì²à¢½íœ”VR蔩|㒢柺": [[
+ "-ꕨ岓棻r@鿆^3~䪤Ѐ狼︌ﹲ\\á¸MlEìµ Q+",
+ null,
+ false,
+ 3346674396990536343,
+ null,
+ {
+ "": null,
+ "/ä¨S쨑,&繷㉥8C엮赸3馢|뇲{鄎ꗇqFﶉ雕UD躢?Ꟛအï–꽡[hᕱᗅ㦋쭞MユèŒ?L槽암V#성å”%㣕嘵\\Ú¹(å˜èº¿&q": [
+ -1364715155337673920,
+ false,
+ -8197733031775379251,
+ "E팗鮲JwH\\觡܈áœ\"+뉞娂N휗vå™™á‚ê¹¼\u001dD帒l%-æ–”N",
+ -3.844267973858711E-20,
+ [{"쬯(褈Q 蟚뿢 /ⱖ㻥\u0017/?v邘䃡0U.Z1î­­x?鯔Vå° 8Emï•<": [[[
+ null,
+ [
+ null,
+ -5841406347577698873,
+ "í‚·\"S⋄籞繗솸ᵣ浵w쑿ퟗ7náŽx3ì•™z㘌쿸I葥覯ã¬0á†b汆狺뷘ႀnꋋ",
+ -1227911573141158702,
+ {
+ "u㉮PᾺV鵸A\\g*à¡—9슟晭+ͧↀ쿅H\u001c꾣犓}癇æ›á—¬é»©äŸ˜X梑é†e>rä°‚f矩'-î½7ä¡­æ¡¥Dz兔V9è°¶å±…ãºá”Šä©¯ë².\u001eL0ὅㅷ釣": [{
+ "<쯬Jå·^숞u࠯䌗艞R9닪gã¾ë³Ža䂈歖æ„:%é”|ﵤ|y}î¡»>;2,覂⶚啵tb*ä»›8ä¹’ã“¶B࿠㯉戩oX 貘5V嗆렽ë‚߼4hä§›êºM空\\b꿋貼": 8478577078537189402,
+ "VD*|吝z~h譺aᯒ": {
+ "YIì·¢K<\/濳xNne玗rJo쾘3í•°é´Š\"↱AR:ࢷ\"9?\"è‡ï¦¡)?誚êŠe)_D翾W?&F6J@뺾ê°NZ醊Z쾈വHï±å¶¿?炫㷱鬰M겈<bïž²S}㎥l|刖k": {"H7鷮퇢_k": [
+ true,
+ "s㟑瀭좾쮀â‘î¬Yì°ºk맢戲쀸俻àº6å„®ë—æ‰–puߖꜻ馶rꈞ痘?3ྚ畊惘䎗\"vv)*臔웅鿈䧲^v,껛㰙J <áš¶5",
+ 7950276470944656796,
+ 4.9392301536234746E17,
+ -4796050478201554639,
+ "yꬴc<3㻚",
+ "oå¡\u20a4蒵鮬裢Cá´§nBã­±f.",
+ false,
+ [
+ false,
+ "ã¡å¼‘V?瀆䰺q!출㇞yᘪ꼼(IS~Ka 烿ꟿ샕桤\u0005HQҹ㯪罂qè¾âš‡æ‡‹â¦•ë‘¡v",
+ 1862560050083946970,
+ "\u20b6[|(ë­¹gê’펉O轄Dl묽]ﯨ髯QEbAã’¾m@롴礠㕓2ë•«n6ْ엘঵篳R잷꙲m색摪|@ã¿«5aK设f胭r8/NI4ì¶«æ µ\\꯬2]",
+ false,
+ {
+ "\u000b7*ã™›ç‡.~?䔊pæ•e_拺艿ë·f{ê”»1sé©™`$Ė戧?q⋬沭?å¡·á­šè¹€unoa5": {
+ "Sê·¯o紞㾕ᅶä¾î—¶éЇ12|ÊŸç•´ï–iNAo?|Sw$M拲գ㭄紧螆+,梔": null,
+ "ã­š0?xB疱敻ேBPwv뾃熉(Ó pJ]ê°¢\"Bj'\u0016GE椱<\/zgៅx黢礇h},M9ï´¦?LḨ": "Si ïŸB%~㬒E",
+ "핇㉊살ã¢ìˆ¨~ȪRo䦅D桺0z]﬽蠆c9ᣨyPP㿷U~ãž?쯟í¸å®’뉆U|}㉓郾ࣻ*櫎꼪ä—s?~7\u001e㘔h9{aáž‹}:ã¶’P8": [{"\\R囡ì¬nNæŸ‹çØ›7ì¹¾ :㶃衇徜V æ·±f1æ·â™ i?3Sè§’íž^ᆞ\u20e8á¹°D\u0007ç§¡+躒臔&-6": {
+ "䨑g.fhã”—=8!\"狿ൻLU^ë»±g䲚ã»'W}k欤?๒鲇S꧗䫾$ĥ피": -794055816303360636,
+ "外頮詋~텡竆î™ç¹ƒä©è‹¨ë¾ºæœê¼ƒç˜¹f*㉀枙NH/\u2027ê¢}j묎ïƒvペq︉ì‹ëœ¡Od5 N顯ି烅仟Qfㆤ嚢(i䬅c;ë§§?嶰㩼츱ç¡?-": {
+ "e݆ã¡â¬¬î›–'2ã»’?U篲鿄\"隻Ҭ5NꭰꤺBꀈ拾᩺îº[刯î…5곑Na램ﴦ዆]ã“qwé’„\u001b\"Yæ´Šä—¿î¼ç¥å¡¥è¿µ[⼞⠳P$ê ±5먃0ï¦`": [{"ç°Eè³ï«šb먭N긆Ⰹå²2逶ꜛ?H짉~?P}jj}ä¾·ç¿_T>á­¨b,â»éˆµP䕡䀠८ⱄ홎鄣": {
+ "@?k2é¶–ã‹®\"Oರ K㨇廪儲\u0017ä¾î¿‚J?);\b*묀㗠섳햭1MC V": null,
+ "UIICP!BUA`î€á¢ˆã‹¸~袩㗪⾒=fBï®´l1ꡛ죘R辂여ҳ7쮡<䩲`熕8é ": 4481809488267626463,
+ "Y?+8먙ᚔ鋳蜩ï–럶1㥔y璜౩`": [
+ null,
+ 1.2850335807501874E-19,
+ "~V2",
+ 2035406654801997866,
+ {
+ "<숻1>\"": -8062468865199390827,
+ "Mã¿£ï€E]}qwG莎Gná¶(ê”™\\D⬲iꇲs寢t駇S뀡ꢜ": false,
+ "pê¤ãŽ9W%>M;-Uç’fî£(^j1?&RBéš§ å¿“b똊îƒE": "#G?C8.躬ꥯ'?냪#< 渟&헿란zpo왓Kj}é·§XﻘMツbä•–;㪻",
+ "vE풤幉xz뱕쫥Ug㦲aH} ᣟp:鬼Yá°Ÿ<Fɋ잣緂頒âºä‰²ç‘‘ä…‚,C~Þ…G!f熢-B7~9Pqà¡¢[츑#3ꕎ,Öඳèâ©…ãµ§ì¶€ë¿xyäŒÍ‚tdj!箧᳆|9èš¡ë¬": -2.54467378964089632E17,
+ "䵈䅦5ë¹–,궆-:໿댾仫î»0ᙚyá¦hqáš„": null,
+ "侯Y\"湛졯劇Uì…ŽYXçâ…¸2ä¼´|ç­§\\ä’ã¶¶á·ì‘WaᦵᗱãœëŠ¾è† <Jc63<G\u20fe䇹66僣k0O\"_@U": null,
+ "姪y$#sæ¼´JH璌Ӊ脛Jã¾íŽ”ï¹´oꈶ㚸PD:薠ì–%說ážè¹‚1]⾕5튄": {
+ "á¾Huw3䮅如쿺äŸå«]<鰨ݷ?꯯䫓傩|á¶à·ƒåª½\\澒≡闢": "Mm\"ì‡á¯„졽\"楇<\/ꥆí­å±€néš´@é¿£wâ Š4Pï«å¾ŽW㊋;䤞'.팇è’ä¡´egpxå—Žwà®…ç—å ®á›nË︖䀤4å™™?໚éƒá±‹Þ˜à¥Žtæ‘姫籕殥ï­é™ƒ\"4[ê¬qL4Wê Žx",
+ "ℇjéŒïš›5Bë’š\" U": "ç¡„ê˜{憠êµ:&t䌨m Cઌ쿣鞛XFê Ÿsä­ï¶ƒ\"æ ¼a0x闊昵å²L\\æšèˆaê¸j싹ç…\"î ²çŸï±¡é¦†*êµ–ç³ <ê”躎",
+ "톌賠弳êŸb\"èž–X50sĶ晠3fç§‚å¯Iⓟ:è˜": 5.573183333596288E18,
+ "%䴺": [[[[
+ -6957233336860166165,
+ false,
+ null,
+ {
+ "\"ïŸ\\௮茒袀ᕥ23ୃ괶?䕎.嚲◉ãžL+ᵡ艱hL콇붆@": null,
+ "%螥9ꭌ<\/-t": true,
+ ",9|î«è€¢æ¤¸ä“Xk죱\u0015$Ώ鲞[ï’—?ì—¢á²í˜ªì¦ˆâ´‚â–‚â„´ã—¯\"gî´ëº˜\\êœ#\u0002ヮ}ሎ芲P[鹮轧@냲䃦=#(": 2.78562909315899616E17,
+ "R?H䧰ⵇ<,憰쮼Q總iR>H3镔ᴚ斦\\é‘r*2橱Gâ¼”F/.j": true,
+ "RK좬뎂aí™ f*f㱉á®â¦‹æ½™ã¨‹Gu곌SGI3Ië¿\\F',)t`è蘯囯ﮉ裲뇟쥼_ገ驪▵æ’ᕤV": 1.52738225997956557E18,
+ "^k굲䪿꠹B逤%F㱢漥O披M㽯镞竇霒i꼂焅륓\u00059=皫之눃\u2047娤é–銤唫á•b<\/w踲䔼u솆맚,ä’á³'/it": "B餹饴is権ꖪ怯ꦂẉဎt\"!凢谵⧿ï™0\\<=(uLä·åˆ¨ì‘ª>俆æ“Cy襸Q힆䆭涷<\/á±0î É§îŠ‹䗾䚹\\ኜ?ꄢᇘ`ä´¢{囇}᠈䴥X4퓪檄]ꥷ/3謒ሴn+gé¨X",
+ "GgG꽬[(å«“ëª6\u0004ê¶宩㙻/>\u0011^è¾dTè…ªhxÇ‘%ꊇk,8(Wâ§‚çµP鬜O": [{
+ "Mã´¾c>\\ᓲ\u0019V{>ꤩ혙넪㭪躂TS-痴໸闓âµ/徯O.Mã¥Ê·D囎⧔ì³íœ¤T??鉬뇙=#ꢫ숣BXä­¼<\/d똬졬g榿)eꨋﯪ좇첻<?2K)": null,
+ "Z17縬z]愀䖌 ᾋBCg5ë”’êµ­æ†ê¾“aâ²·í„·u:U촳驿?雺楶\u0001\u001c{q*á°—è‹‘B@kæ°z.*è“—7ረIm\"Oá±@7?_": true,
+ "㺃Z<": -4349275766673120695,
+ "휃䠂fa塆ffixKe'ë¬é—੄뺾w࠾鑎kë•¢m*á‚‘î§·í–žé®6攊&虜h黚,Yä±³Sﭼ둺pN6": [
+ false,
+ "IΎ䣲,\"ᬮ˪癘P~Qlnxå–Sᮔ༬˨IçŒm䜛酛\u0003iê¸ã¦§cQ帲晼D' \\(粋ï›wQcN\\ëµ°è·ˆ",
+ [
+ "D0\\L?M1ì¥KaêŒsd+盌귤憊tz䌣ëŒ×‘Oå‚wÏ¢%á½’gpî•—,Aiï™âŽ§á¶†Iî«˜é¤¾ê¦æ£©å˜…᳉怴%m]á¶is纖D凜镧o심b Uî»·",
+ {
+ "?଼\u0011Rv&^[+匚I趈T媫\u0010.䥤ᆯ1q僤HydⲰl㒽K'ᅾiౕ豲초딨@\u0013J'쪪VD౼P4Ezg#8*㋤W馓]c쿯8": false,
+ "c/擯X5~JmKäµ¶^ìŽà´š|B|u[ì†(X뚤6v}W㤘⠛aR弌臌쾭諦eⒷ僡-;㩩⭖ⷴ徆龄갬{䱓ᥩ!ï¯âŠšá‡¨<v燡露`:볉癮꨽り★Ax7Ꮀ譥~舑\\Vê‹\"$)v": "e&sFF쬘OBï–†d슊寮f蠛জ봞mn~锆竒Gè„\"è¶µG刕䕳&L唽붵<\/I,X팚Bâ¥î¼¶X,kԇҗ眄_æ…¡:U附ᓚAè•§>\u001a\u0011\";~쓆BH4勿”Š7힪",
+ "iT:L闞椕윚*æ»›gI≀Wਟඊ'ꢆ縺뱹鮚Nê©á§¬è•¼21줧\\䋯``â\\ã±é³¨": 1927052677739832894,
+ "ì®ç¼¦è…ƒg]礿Y㬙 fî¼ãƒºSɪ꾾N㞈": [
+ null,
+ null,
+ {
+ "!t,çY 1䗉罵?c饃호䉂Cá­ì’˜z(즽sZG㬣sഖE4ï‚뢜㓕äžä¸®Qpç°6EZឪ겛fx'ꩱQ0ç½£i{k锩*㤴㯞r迎jTⲤ渔m炅肳": [
+ -3.3325685522591933E18,
+ [{"ã“5]A䢕1룥Bï²C?Ꙍ`r룔Ⳛ䙡uä¼²+\u0001àµo": [
+ null,
+ 4975309147809803991,
+ null,
+ null,
+ {"T팘8Dﯲ稟MM☻㧚䥧/8ﻥ⥯aXLaH\"顾S☟耲ît7fSà·‰ë†ë®”/ꕼ䓈ìº4\\霶䠴ᩢ<\/t4?죵>uDï›5➶༆쉌럮⢀秙䘥\u20972ETR3æ¿¡æ†vB? ~鸆\u0005": {
+ "`é––mç’㥉b뜴?Wf;?DV콜\u2020í‰à±“æ“å®ZMj3mJ먡-å‚·ë±™yח㸷꥿ ໘u=Mì!5å­L4v\\?ÇŽ7C홫": null,
+ "|": false,
+ "~Ztᛋ䚘\\æ“­ã—傪Wé™–+ã—¶qᵿ蘥ᙄp%䫎)}=â ”6ᮢS湟-èž¾-mXH?cp": 448751162044282216,
+ "\u209fad놹j檋䇌ᶾ梕ã‰bוּ<dä—±:줰Mé…„\u0000X#_rç¢A饓ê—ÙKo_è·”?ᪧ嵜鼲<": null,
+ "ꆘ)ubI@h@洭Ai㜎ä±k\u0003?Tä‰3é—´%j6jæ£j=â\\U毮ᬹ*8䀔v6cpjâ­¬~Q꿾뺶ï‰íŽµæ‚¡!ì©­åŽl六㽫6퇓ޭ2>": {"?è‹´ê© D䋓帘5騱qï±–PF?☸ç—é¡’yU á¡«cb䫎 S@㥚gꮒ쎘泴멖\\:Ié®±TZ듒ᶨQ3+f7캙\"?\fí’¾\\oæžç´Ÿï»½M.âŽï˜¸é‘OP": [
+ -2.6990368911551596E18,
+ [{"ä’–@<á°¿<\/⽬tTrè…ž&G%᳊秩蜰擻f㎳?Sãµ§\r*k뎾-乢겹隷j軛겷0ë£é®ï µ": {")DO0è…¦:ì¶é€¿:1㥨่!è›æ¨‹2": [{
+ ",ꌣf侴笾m๫ꆽ?1?U?\u0011ꌈꂇ": {
+ "xæ—ç” nVqä…¦w`CD⦂惺嘴0I#vỵ} \\ê·‚Së´Dì–¾?Ô’j溯\"v餄a": {
+ "@ç¿™c⢃趚痋i\u0015OQâlqë†Y0pࢥ3쉨䜩^<8g懥0w)]䊑næ´ºo5ì­QL댊랖L镈Qnt⪟㒅십q헎鳒⮤眉ᔹ梠@O縠u泌ㄘb榚癸Xî©­Þ”Ftj;iC": false,
+ "I&뱋゘|ï£è“”䔕측瓯%6á—»HW\\N1貇#?åƒá—œghá­ªo'䗈꽹Rcìš/蔳迄à¼!0邔䨷푪8ç–©)[쭶緄㇈୧á": {
+ "B+:ꉰ`sì¾­)ë¹¼Cç¾A䫊pMgjdxäHf9᥸W0!C樃'ï¤f䫤סи\u0017Jve? è¦f둀⬣퓉Whk\"஼=չï³î•¤çš†ç¬BIW虨쫓F廰饞": -642906201042308791,
+ "sb,XcZ<\/m㉹ ;䑷@c䵀s奤⬷7`ꘖ蕘戚?Feb#輜}p4nH⬮eKL트}": [
+ "RK鳗z=袤Pf|[,u욺",
+ "Ẏá»ç½¯ë‰‹âº–锅젯㷻{H䰞쬙-ì©“D]~\u0013Oã³¢gb@æ¶è”‰|kᦂâ—!\u001ebMè¤sca쨜襒y⺉룓",
+ null,
+ null,
+ true,
+ -1.650777344339075E-19,
+ false,
+ "☑lꄆs힨꤇]'uTന⌳ë†].1â‹”ê´æ²°\"IWà´©\u0019æ°œ8쟇䔻;3衲æ‹,窌zíŽå–íš—?4?Cë„é—®?ᥙ橭{稻Ⴗ_ì”",
+ "n?]讇빽å—}1å­…9#ê­¨é¶v\u0014å–ˆ)vw祔}룼쮿I",
+ -2.7033457331882025E18,
+ {
+ ";⚃^㱋x:饬ኡj'ê§µT☽O㔬RO婎?향ᒭæ©$渣y4i;(Q>꿘e8q": "j~錘}0g;Lèº*;á•­ê„®0l潛烢5H▄쳂ê’ï­‹ê™¶T犘≫x閦웧v",
+ "~î¢æ¯\u2018c4è·ë E~ᑅቚꈂ?nq뎤.:æ…¹`F햘+%鉎Oç€œìŸæ•›è®âŒæµ¢<\/㮺紿P鳆ࠉ8I-o?#jﮨîŸ7v3Dt赻J9": null,
+ "à£W䌈0êŽqC逖,íš…î·Žcáƒswj;jJSæ«5æ§—OaB>D踾Y": {"ã’°äµF%î©®?59.î„„ãˆcᕨï†í•틎á¸ã‹©B=9IÛⓌ{:9.ywï½å‘°ã†®è‚’᎒tIã¾´62\"ዃ抡C﹬B<\/<EO꽓ᇕu&é‹«\\禞í¹uê’.7훯ಶ2䩦͉ᶱf깵ᷣ늎": [
+ 5.5099570884646902E18,
+ "uQNæ¿¿m臇<%?谣鮢s]]x0躩慌闋<;(î³¥ 鋤.0á µd1#벘a:Gs?í–·'.)ㅴ䞟ç¯å´ˆFS@O㌛ᓬ抢íŒáž¾ëƒ·ì¿Ÿíˆ¥IZn[惵ê§3ë™[&v憙J>ì´‹jo朣",
+ [
+ -7675533242647793366,
+ {"ᙧ呃ï£:[㒺쳀쌡ì‚H稈㢤\u001dá¶—GG-{GHྻຊꡃ哸䵬;$?&d\\⥬ã“Nåœ´ë¤æŒ¨-'ê•®$î“‹PU%?冕눖ié­q騎Q": [
+ false,
+ [[
+ 7929823049157504248,
+ [[
+ true,
+ "Zè™\u0017'eꕤ᱕l,0\\X\u001c[=雿8è ¬L<\/낲긯W99g톉4ퟋbãº\u0007åŠ'!麕Q궈oW:@XáŽïœ¬z蘻m絙璩귓죉+3柚怫tSæ‡è’£ä -æ“¶D[0=퉿8)q0ÙŸ",
+ "唉\nFA椭穒巯\\䥴䅺鿤S#bè¿…ç˜ ï¶—ê¬˜\\?q1qN犠pX꜅^䤊⛤㢌[⬛휖岺q唻ⳡí‹\"ã™™Eh@oA賑㗠yå¿…Nꊑᗘ",
+ -2154220236962890773,
+ -3.2442003245397908E18,
+ "Wᄿ筠:瘫퀩?o貸q⊻(᎞KWf宛尨h^残3[U(='橄",
+ -7857990034281549164,
+ 1.44283696979059942E18,
+ null,
+ {"ꫯAwè·­å–€ ?_ï““9\"Aty背F=9缉ྦྷ@;?^鞀w:uN㘢Rá»": [
+ 7.393662029337442E15,
+ 3564680942654233068,
+ [
+ false,
+ -5253931502642112194,
+ "ç…‰\\îš¶î¶è¾Žî›¢à³†ç½5â’­1äªäƒ‘s䎢:[e5}峳ﴱn騎3?è…³Hyêƒè†¼N潭錖,Yá‹ËœYAá“㬠bG렣䰣:",
+ true,
+ null,
+ {
+ "⒛'P&%죮|:⫶춞": -3818336746965687085,
+ "钖m<\/0ݎMtF2Pk=瓰୮洽겎.": [[
+ -8757574841556350607,
+ -3045234949333270161,
+ null,
+ {
+ "áœî…½rè¼³>⫇9hU#î¦#w@ê·ªA\\Cî’¢ é‹ºã˜“ê–æ¢’뒬묹㹻+郸å¬ìœ¤'+g<\/碴,}ꙫ>ì†;情d齆Jä¬àº©æ’›ì±íƒ¹/R澡7剌tꤼ?ặ!`â²ç¤\u00002똥଴âŸ": null,
+ "\u20f2ܹe\\tAê¥Æ°\\x当뿖ï»ë ‰ç¦›;G檳ﯪï…Sà«°3~㘠#[J<}{奲 5箉⨔{ë†<\/釿抋,åš /曳m&WaOvT赋皺璑ï“í…": [[
+ false,
+ null,
+ true,
+ -5.7131445659795661E18,
+ "è­m䓪D5|3å©à°ž>î‰è ‡æ™¼6nï´ºPp禽羱î¤DS<ç“닫屚ì‚å§¿",
+ true,
+ [
+ -8759747687917306831,
+ {
+ ">ⓛ\t,odKr{䘠?b퓸C嶈=DyEᙬï¿@ᴔ쨺芛髿UT퓻春<\/yê¸>豚W釺N뜨^?꽴﨟5殺ᗃç¿%>í‚ဿ䄸沂Ea;A_\u0005閹殀W+窊?Ꭼd\u0013Pæ±´G5ì“æ˜": 4.342729067882445E-18,
+ "Q^즾眆@AN\u0011Kb榰냎Y#ä€ê€’ᳺ'q暇çµs\"!3#I⊆畼寤@HxJ9": false,
+ "⿾D[)袨㇩i]웪䀤ᛰMvR<èŸã£¨": {"v퇓L㪱ꖣ豛톤î£\\ê³±#ï–©kDTN": [{
+ "(ì¾´ä¡£,寴ph(C\"ã³¶w\"憳2s馆E!n!&柄<\/0Pꈗſ?㿳Qdéµ”": {"娇堰孹L錮h嵅⛤èºé¡’?CglNæŸ+쨣ﺜ\\MrH": {"çžäŽ‡ë‘ƒá‰²å¼­íŒ­^ꄞ踦涟XK錆쳞ឌ`;੶S炥騞ଋ褂B៎{Ú’ä­·á¶¼éœpIè—è™¶K$": [{"â—–S~躘蒉꫿輜è­Qã½™é—@ᢗ¥Eæ¦iØ¡5┄^B[絮跉ᰥé™PWi3wㄾⵀDJ9!w㞣ᄎ{ë“’ê““b6\\篴??c⼰鶹⟧\\鮇ꮇ": [[
+ 654120831325413520,
+ -1.9562073916357608E-19,
+ {
+ "DC(æ˜è¡µá¼¡ê¸™ê°µå§­|Ö›[t": 7.6979110359897907E18,
+ "Jâ…))嫼â³9Xfd飉j7猬ᩉ+⤻î®çœ—벎Eé°‰Zï¾¶63zá69}Zá¶L崭ᦥ⡦éšâ‹›êŽ¨î´µ~i㨃咊ꧭo䰠阀3C(": -3.5844809362512589E17,
+ "p꣑팱쒬ꎑ뛡Ꙩ挴æèƒ”&7ᔈ묒4Hdç¡¶í›ãŽ–zꢼè±ã¿¢aሃ=<\/湉鵲Eî„¡Ó…%$F!í¶æ£Œå­¼{Oé§à¨ºgeu+": ")\u001bìž“kÅ€Xì©«Aë°Â®Ú£ç™¦ç‹¢)扔弒p}k縕ꩋ,䃉tࣼi",
+ "ã‚¡F肿輸<솄G-䢹䛸êŠl`Tqê•—îŠè’ža氷⸅ᴉ蠰]S/{J왲m5{9.uá½³~㕚㣹u>x8Uè®Bëºè¥ªç›ŽQhVS맅킃i识{벂磄Ià·„ä™…xZy/æŠà«­Zï–Šé²î¦š-霳Væ®æŒ¦â„’": null,
+ "㯛|Nî½™ê¸b7âµb?æ‹ O\u0014Þ†?-(EꞨ4ꕷᄤYᯕï‘OW瞺~螸\"욿ќ<u鵵઎⸊î˜å€¾ì‘·à·»rT⪄牤銱;W殆͢芄ਰåší›šìƒ¢î™‡âŠ¿+ã²½": null,
+ "å˜ïƒé€†àº»%_ë§›d)zJ%3ì¹§_릟#95䌨怡\u001ci턠ॣî’i冘4èµ–'à¨ä§_æ ”!": {
+ "*?2~4㲌᭳ì¯ftá‚·1#oJ\bäŠ‡é•‡ë” \u2079xä›ãŠá®‚N;穽跖s휇ᣄ홄傷z⸷(霸!3yëºMì’¿í–Û½v㳉tở心3黎vì­» Rp཮Vr~T?&Ë´k糒븥쩩r*D": null,
+ "8@~홟ꔘk1[": -5570970366240640754,
+ "BZté¦ê¡¬c餖 s(má›´\u0000◄dè…‘t84CâŸå¯VṊ뉙'å™±ê”ç½GCé¡€?허0êž¹&ë‡ä›­Cä·«](": 2.4303828213012387E-20,
+ "yæ’”Z외放+}ḑ骈á™&\u0016`G便2|-e]঳?QF㜹YF\"ã¿’ç·„í–·ï€ãˆŸïƒ¦ï¨ä·¦à­€áŒ¤lM蘸N㾆▛럪㞂tᕬ镈ì‡å– l amcxPnm\u001a᱋<\/]_]ﻹïª?H": false,
+ "áæ°ë¬¢뜚I[♺뽛x?0Hë´¬Wpn꨹Raä¿ïŒ›ìŒ‘{㴂ni祻윸A'y|⺴ᚘ庌9{$æ²{톽=m#@ï–—6ᨧfgs44陎J#<Ễ쨓瀵â©a୛㷉㙉ܸ◠냔嬯~å‘„ç±ç¾¥é•³": false,
+ "㘱{<é ¬22?IF@곊I겂嶻Lá›D{@rì’‚?IAᣧ洪惒誸b徂zì·ºê¾ã ­\\刊%禨ìŒâ¶£ä»µ\\P[:47;<ᇅ<\/": {
+ "^U釳-v㢈ê—â—„è˜rᜨi;èµ·kR犺䵫\u0000é”ì™m-Ô™!lḃ꛸뻾F(Wê·›y": "#á ºH㸢5v8_æ´‘C",
+ "䔵໳$á™ 6èž\u206e摎q圩P|æ…sV4:㜾(I溞I?": -6569206717947549676,
+ "é€êž‚ç·µí‡8 >e㺰\"'㌢ÆW\u0004çž•>0?V鷵엳": true,
+ "뤥G\\î¡‹è¿‹ä ¿[庩'꼡\u001aiá©®Vì¯á³ªä¦ªÃ”î²…;倱ନë›èªˆ": null,
+ "쥹䄆䚟Qæ¦äŽá¢­<\/2ã•£p}HW蟔|äƒî‚꿈ꚉ锳2Pb7㙑Tⅹᵅ": {
+ "Y?Ö­$>#cVBꩨ:>ï†eLè’å‹™": {
+ "86柡0po äš&-æ‘Ћ祌<\/휃-G*㶢הּì©s㶟餇c걺yu꽎還5*í„§ç°•Ogå©¥Sê": null,
+ "a+葞h٥ࠆ裈嗫ﵢ5輙퀟ᛜ,QDﹼ⟶Y騠锪E_|x죗j侵;m蜫轘趥?븅w5+mi콛L": {
+ ";⯭ﱢ!ä¹°Fâ½æŸ¤é¶‚näµ£V㫚墱2ë ¾ELEl⣆": [
+ true,
+ -3.6479311868339015E-18,
+ -7270785619461995400,
+ 3.334081886177621E18,
+ 2.581457786298155E18,
+ -6.605252412954115E-20,
+ -3.9232347037744167E-20,
+ {
+ "B6㊕.k1": null,
+ "ZAꄮJ鮷ᳱo갘硥鈠䠒츼": {
+ "á•…}럡}.@y陪é¶r業'æ´î‰°í€‰x䉴ﵴlí˜):씭脴ᥞhiꃰblﲂ䡲엕8߇Mã¶­0燋標æŒ-?PCwe⾕J碻Ᾱ䬈䈥뷰憵賣뵓痬+": {"aì·©v礗X⋈耓áŠfç½…é®!㔽YYᣓwæ¾33⎔芲F|\"äœT↮輦挑6ᓘL侘?ᅥ]ë†1R௯✎餘6ê½<\/௨\\?qå–·ê«j~@ulq": {"嗫欆뾔Xꆹ4H㌋Fåµ§]à Ž]ã –1ꞤT<$më«O i댳0ä²iï—Œ": {"?à·©?\u20cd슮|ꯆjs{?îž…d7?eNs⢚嫥氂䡮쎱:鑵롟2hJꎒﯭ鱢3춲亄:ë¼£v䊭諱Yj択cVmR䩃㘬T\"Ní™*ै%x^F\\_s9ë³´zz4æ·—?q": [
+ null,
+ "?",
+ 2941869570821073737,
+ "{5{殇0ä¾ïž¢g6ë°–í‹è‡©ç¶¹R$ä–­j紋釰7î‹‘sXI繳漪행y",
+ false,
+ "aH磂?뛡#惇då©…?Fe,ì˜+늵ä˜\"3r瘆唊å‹ï¢Šj⳧࠴ꇓ<\/唕윈x⬌讣䋵%拗ᛆⰿ妴á”M2ã³—å¿…ê§‚æ·²?ゥ젯檢<8ë’ï¶MidXä’3á³»Qî”â–®ä½UT|⤪봦éâŠ",
+ [[{
+ "颉(&뜸귙{yîš’^\"P퟉ì¶á²Ÿä®­î‹ºDé¡¡9=?}Y誱<$bë±£RvO8cH煉@tk~4ǂ⤧â©å±‹Sî›ïž¢S;J{vV#剤餓ᯅc?#a6D,s": [
+ -7.8781018564821536E16,
+ true,
+ [
+ -2.28770899315832371E18,
+ false,
+ -1.0863912140143876E-20,
+ -6282721572097446995,
+ 6767121921199223078,
+ -2545487755405567831,
+ false,
+ null,
+ -9065970397975641765,
+ [
+ -5.928721243413937E-20,
+ {"6ì´Š\u001a홯kB0w撨燠룉{绎6⳹!í„è´‘y▾鱧ժ[;7ᨷ∀*땒䪮1x霆Hᩭ☔\"rî¹›ä7毟á°r惃3ꉭE+>僒æ¾": [
+ "Ta쎩aÆt쵯ⰪVb",
+ [
+ -5222472249213580702,
+ null,
+ -2851641861541559595,
+ null,
+ 4808804630502809099,
+ 5657671602244269874,
+ "5犲﨣4mᥣ?yf젫꾯|䋬ìž$`Iⳉﴷ扳å…,'î±c",
+ false,
+ [
+ null,
+ {
+ "DyUIN쎾M仼惀⮥裎岶泭lh扠\u001e礼.tEC癯튻@_Qd4cï…«5S熯A<\/ï¼¼6U윲蹴Q=%푫汹\\\u20614b[௒Câ’¥Xe⊇囙b,ï®æœ3ss땊ë¢i~逇PA쇸1": -2.63273619193485312E17,
+ "Mq꺋貘k휕=nKç¡ë«žè¼©>㾆~á¼žà¡¹ê¸æ¦µlâ‹™Hw뮢帋M엳뢯î¹…vâ…ƒ^": 1877913476688465125,
+ "á¶´ë»—`~ç­—å…⚽টW˃â½b犳䓺Iz篤p;乨A\u20efì©?ç–Šmã€ì»©ë«¡b탔鄃ᾈV(é¢ç³=뎲ିeF仢䆡谨8t0醄7㭧瘵⻰컆r厡궥d)a阄á·Ed&c﯄伮1p": null,
+ "â¯w4曢\"(欷輡": "\"Má­«]䣒頳B\\燧ࠃN㡇j姈g⊸⺌忉ꡥF矉স%^",
+ "㣡Oᄦ昵⫮Y祎Sì級㭻撥>{I$": -378474210562741663,
+ "䛒掷留Q%ì“—1*1J*ë“헩ᦢ﫫哉쩧EↅIcê…¡\\?â´Šl귛顮4": false,
+ "寔愆샠5]ä—„IHï©¥=d﯊/å¶?ॊn%晥D視Nò—˜ˆ'᫂⚦|X쵩넽z질tsî¦kxDQ莮Aoﱻ뛓": true,
+ "钣xp?&\u001e侉/y䴼~?U篔蘚缣/I畚�Q绊": -3034854258736382234,
+ "꺲໣眀)â¿·J暘î©pИfAVì‚•ì³­Nꯗ4々'唄ⶑ伻㷯騑倭D*Okï¯ê§3bâ½_ï„¡<\/ì±£Xm톰á•䆄`*fl㭀暮滠毡?": [
+ "Dç”·p`V뙸擨å¿ë¸ª9c麺`淂⢦Yw⡢+kzÜ–\fY1䬡Hæ­)ë²¾Z♤溊-혰셢?1ï”<-\u0005;æ¢Tále\\ᛵߓﭩ榩<QF;t=?Qꀞ",
+ [
+ null,
+ [{"-ì·«æ²î«§á¬¨å¢Šè‡¸<à ’Hè·¥ 㔭쥃㫯W=z[wধ╌<~yW楄S!â‘»h즓lÄ–N￧篌W듷튗乵᪪템먵Pf悥ᘀk䷭焼\\讄ræ“é¬y6VF<\/6ëž¿p)麡ê ãª\"pà®´e": [
+ "#幎æ´é¢’嶈)ã„›J.嶤26_⋌东챯ꠉ⤋ؚ/âš%ç§¼Q룠QGztᄎ㎷អIç¿°Xpç”éœê¨",
+ {",T?": [
+ false,
+ [[
+ true,
+ 7974824014498027996,
+ false,
+ [
+ 4.3305464880956252E18,
+ {
+ "᱿W^A]'rᮢ)é¥zï­é¤;Hu\\Fk?ï´º?IGæµ…-ä™§>è¨-xJ;å·¡8깊è ï»“U$K": {
+ "Vê•¡è«…æ“W=斸s︪vﲜ츧$)iꡟ싉eî®å¯³?ጭムVથ嵬iæ¥Fg<\/Z|៪ꩆ-5'@ꃱ80!燱R쇤tç³³]罛逇dṌ֣XHiͦ{": true,
+ "Ya矲Cë©—Q9膲墅æºíœ»c\\ë”¶Gç””<\/.齵휴": -1.1456247877031811E-19,
+ "z#.OOï¿J": -8263224695871959017,
+ "å´_3夼ᮟ1Fë¸ë½¯á¦“é´­V豈Ь": [{
+ "Nè’¬74": null,
+ "yuB?厅vK笗!ᔸcXQ旦컶P-ë…«mᄉ麟_": "1R@ 톘xa_|﩯é˜î¥§sæ§žd!d껀筤⬫è–焵먑D{\\ïƒïŽ¿6k共倌☀G~AS_D\"딟쬚뮥馲렓쓠攥WTMÜ­8nX㩴䕅檹E\u0007ï­¨N 2 ℆æ¶ê¥ê µï“3▙玽|ë¨_\u2048",
+ "æA Cä§©G": {":Mí£5e들\\ê€æ¼á”„é¸|Iï¨$)n": {
+ "|U䬫㟯SKV6ꛤ㗮\bn봻䲄fXT:㾯쳤'笓0b/à³¢Cì³–?2浓uO.ä°´": "à½ê¼‹e?``,ᚇæ…^8ꜙNM䂱\u0001Iá–™ê§M'vKdꌊH牮r\\O@䊷ᓵ쀆(fî »yè»i툺\"?<\/峧ࣞ⓺ᤤ쵒߯ꎺ騬?)刦\u2072læ…ªy꺜ﲖTjî’•+u",
+ "뽫<G;稳UL⸙q2n쵿C396炿Jè“¡zâ£zဩSOU?<\/ë™oEí¸Oé¿…à·´êˆEm#\"[瑦⤫á†glâ¡—q8\"í˜ë¥ä¿‚@ᆤ=\u0001爖ç¾ì·€ã¸©b9\\jeqt㟿㮸龾m㳳긄": {
+ "9\"î²–V霟釜{/o0嫲Cå’€-饷äˆ[ë…©î)\r䤴tMW\\龟ϣ^ي㪙忩䞞N湆Y笕)è¨ê–¤èª¥ç…½:14â«»57U$æ“’ä²è–¡Qvↇ櫲현誧?nà®·6": {"l웾䌵.ä…‹ä¦ic碳g[糲Ƿ-ឈᚱ4ì‘§\u0004C࿼\u0018&쬑?멲<\/fD_檼픃pd쪼n㕊渪V䛉mæˆW儅톳뗳䓆7㭽諤Tç… ï–ŠNey?î¼…0᪵鈑&": [
+ false,
+ null,
+ {
+ "\rî´’;é¼¶já ‚ê¼RLz~â™”9gf?Ó¡æµ": -1.4843072575250897E-19,
+ "&ꊒ\"ꋟä­E诮ﯚO?SWë’훪mb旙⎕ᗕ⶙|á·¤5y4甥": "j5|庠t铱?v íš‹0\"'rxz䃢æºêž«!\u0002",
+ "Q á©ãŸ§": {"Hﬔ\u2058䪠틙izZㅛ탟H^ﶲA??R6å‘ Z솋R.à¿¶g8": [
+ -8762672252886298799,
+ -1.9486830507000208E17,
+ null,
+ -7157359405410123024,
+ null,
+ null,
+ -995856734219489233,
+ "呧㫹A4!",
+ null,
+ -1.9105609358624648E-19,
+ 5888184370445333848,
+ 2.25460605078245E-19,
+ 2.5302739297121987E18,
+ "뢹sbEfæµ2丯ï‡?뗾耸(Wdë™SବꭖrtU?ç­¤P똙Qpbbï‘¡KqaE$æ¥Vì›°3i/lK퉜,8︸e= gèž“t竦컼?.寋8éµ—",
+ 7377742975895263424,
+ 2.4218442017790503E-19,
+ {
+ "y꒚ཫ쨘醬킃糟}î‘yTSt䡀⇂뿽4ൢ戰U": [[
+ 3600537227234741875,
+ 4435474101760273035,
+ -1.42274517007951795E18,
+ -5567915915496026866,
+ null,
+ null,
+ [
+ -3204084299154861161,
+ {
+ "7梧慸æ†.a瘎\u00041Uéµ®CkÖ¨d惥è€â³¡Y,â­ì¨EåžFFI鱑ⳬ줢7â§µBﴠ耘줕햸qì»´~*ç‘W.떛ࡆ@'á€+è½³": -961121410259132975,
+ "⥅]l黭㣓绶;!!⎃=朼ã¿e&ἂ繤C﯀lä£ãŒ€6TMì‘®w懃ꡡ#ᤆ䰓,墼湼゙뽸㲿䧽쫨xᵖ듨<\/ T0峸iQ:溫è„\\\"쎪ὴ砇宖^Mæ³¼í¥âž…鈫@ᄟ༩\u2008⥼": true,
+ "â©\"籽汎P싯鲘蟼sRá¯ä…©\u0019R(kRá–&ಌ 0\"é³¶!馼YH": null,
+ "鮼ꚇ싋։刟\rRLd步Nⴗ5Eࡆ訛갚[I醵NC(郴ṉy5D뤺౳QY壯5苴y훨(W\\Cଇ姚C艄깹\u001c歷㋵ZC᥂": [
+ -6806235313106257498,
+ null,
+ "}N⸿讽sꚪ;ï‘¶\\p繇jè‹„î¡ä«¨\u20e7%5x?î•¥t#",
+ {
+ "O〗k<墻yV$à°rs-c1ఌ唪.C7_Yobᦜ褷'b帰mã„‘l⌅": {"qB뗗擄3éš‚5ëºæ«‚䱟eì´¸P/é©,3æŽê—©=冉棓㑉|ËžF襴뿴,:㞦<퓂⧙礞♗g뚎ᛩ<\/뉽ⶳ⸻A?_x2Iã½å‹’*Ií™±î¢é§ç²¿~曟㤙2绥Ly6+ìƒuu鿜בfí˜|æ­à£–É": [
+ ">hh䈵î”w>1â²ì­V[â…Ž\\헑벑F_ã–⠗㫇hæ½;á¿æ±°á±¼ç€–J옆9RRì…vsZ柺鶶툤r뢱橾/ꉇ囦FGm\"謗ꉦ⨶쒿⥡%]鵩#ᖣ_蹎 u5|祥?O",
+ null,
+ 2.0150326776036215E-19,
+ null,
+ true,
+ false,
+ true,
+ {"\faá­¶Pæ¤WWcá Ÿf뚉á¬í“—â³€Wç¹5:HXH=q7xì°™X$)모r뚥ᆟ!Jﳸf": [
+ -2995806398034583407,
+ [
+ 6441377066589744683,
+ "Mﶒ醹i)Gἦ廃s6몞 KJ౹礎VZ螺费힀\u0000冺업{è°¥'꡾뱻:.ꘘ굄奉攼Diá·‘Ké¶²y繈욊阓v㻘}枭캗e矮1c?íœ\"4\u0005厑莔뀾墓ë‚⽴洗ṹ䇃糞@b1\u0016즽Yè½¹",
+ {
+ "1⽕⌰鉟í”M㤭n⧴ỼD#%é˜âŠ¯ì¿¼ç¨ë¸£ëªç´§á…‡ã“•ᛖcw嬀~ഌ㖓(0r⧦Qä‘•é«à´°é“‚㓻Rå„®\"@ꇱmâˆà¯¿á¦¯é Œ8}㿹犴?xn잆꥽R": 2.07321075750427366E18,
+ "˳b18㗈䃟柵Z曆VTAu7+㛂cb0﯑Wp執<\/臋뭡뚋刼틮è‹ë²²î·´TLP预庰܈G\\O@VD'鱃#ä¹–ëº*鑪ꬳ?MÞždï­¹{â‡åœ¯ì‡œã¼ž顄︖Y홡g": [{
+ "0a,FZ": true,
+ "2z̬è£î’®ê§¦é©¸\u0006L↛Ḣ4๚뿀'?lcwá„§ã®!蓚䃦-|7.飑挴.樵*+1ﮊ\u0010ꛌ%貨啺/JdM:ë˜ïˆ!FBe?鰴㨗0Oè´¢I藻ʔWAá«“Gì³›u`<\/I": [{
+ "$Ï„5Vé´a뾆両環iZp頻යn븃v": -4869131188151215571,
+ "*즢[⦃b礞R◚nΰꕢH=귰燙[yc誘g䆌?ଜ臛": {
+ "洤湌鲒)⟻\\䥳va}PeAMnï¼®[": "ã³Éª/(軆lZR,Cpæ®È®Nå•·\"3Bå©´?i=r$펽á¤ì€¸",
+ "阄R4㒿㯔ڀ69ZᲦ2ç™í•Œå™—På´œîž#\\-ì­è¢›îˆµ&é‘/$4ç«¥Vê©‘_ZHAæ¾¢fZ3": {"x;P{긳:Gé–‰:9?æ´»H": [
+ "繺漮6?z犞焃슳\">á»[Ⳛ䌜ë…䂹>èµâ¼¶ç…œï’˜Yæ¡¥[泥뚩MvK$4ï‰jtï¾›",
+ "E#갶霠좭㦻ୗ먵F+䪀oè’ba쮎4X㣵 h",
+ -335836610224228782,
+ null,
+ null,
+ [
+ "r1᫩0>danjY짿bs{",
+ [
+ -9.594464059325631E-23,
+ 1.0456894622831624E-20,
+ null,
+ 5.803973284253454E-20,
+ -8141787905188892123,
+ true,
+ -4735305442504973382,
+ 9.513150514479281E-20,
+ "7넳$螔忷㶪}䪪lì§´\u0007é¹Pé°šHFéŠZJﳴ/âŽ1ᷓ忉ç‡áœ‹ì“ˆxëµ mä·çª¥á”^\u0019á¶Œå­#ヂt☆áƒpáŽè‡¶äŸ±5ï‰$ä°µ&๵分ìˆ]äˆë‰â™‚åŽ\u0011<>",
+ "C蒑貑è—lï°°}X喇몛;të°¿O7/᯹f\u0015îµ¼kI嘦<ዴ㟮ᗎZ`GWퟩ瑹࡮ᅴB꿊칈??Ræ ¡s脚",
+ {
+ "9çµæˆ¬+AU^洘拻ቒy柭床'ç²™XG鞕᠜繀伪%]hï ¾C,$è¼™?Utä¹–Qmë–šWï¶8઼}~qâ ªrU䤶CQ痗ig@#≲t샌f㈥酧l;yé—¥ZHæ–¦e⸬]j⸗?ঢ拻퀆滌": null,
+ "畯}ã§¢J罚å¸VX㨑>1ꢶkT⿄蘥ã‘o|<嗸層沈挄GEOM@-äžšä§°$만峬è¼ä ±V✩5宸-æ‚î¡§D'ã—ªyP掶7bâ ŸJã•»SfP?d}v㼂á…'猘": {
+ "陓y잀v>╪": null,
+ "鬿L+7:ë‘Y=ç„ U;킻䯌잫!韎ஔ\f": {
+ "駫WmGጶ": {
+ "\\~m6ç‹©K": -2586304199791962143,
+ "ႜࠀ%Í‘lâ¿…D.ç‘¢Dk%0ç´ªdḨTI픸%뗜☓s榗኉\"?V籄7w髄♲쟗翛歂E䤓皹t ?)ᄟ鬲éœ6Cî³´": {
+ "_ì·¤a圷1\u000eB-XOy缿請∎$`쳌eZ~æï€§íŠ»/蜞`塣৙\"⪰\"æ²’l}蕌\\ë¡ƒè«æ°Œ.望wZ|o!)Hnçqg}": null,
+ "kOSܧ䖨钨:಼é‰ê­O醧Sî…¨`ì‹­`ꓭì­ï¯¢N&Et㺪馻ã¢â…³ã¢ºå´¡àºŠèœšé”«\\%ahx켨|ż劻ꎄ㢄ìŸA躊᰹p譞綨Ir쿯\u0016ﵚOd럂*僨郀N*bã•·63z": {
+ ":L5r+T㡲": [{
+ "VK泓ë²á®™Ry㓤➙Ⱗ38oi}LJቨ7Ó㹡৘*q)1豢⛃e᫛뙪壥镇æž7Gè—¯g㨛oI䄽 孂L缊ꋕ'EN`": -2148138481412096818,
+ "`â›á˜‘$(खꊲ⤖á„ꤒ䦦3=)]Y㢌跨NĴ驳줟秠++då­³>8ᎊ떩Eê¡£Sv룃 쯫أ?#Eî·°|á­™ãŽ?zv:5ï©^â‹‘V": [
+ -1.4691944435285607E-19,
+ 3.4128661569395795E17,
+ "ãƒì´—^G9ä½­é¾¶n募8R厞eEw⺡_ㆱ%⼨D뉄퉠2ê©µá›…â³æ¿L팹Là·€n=\"æ…‰ë…á›®y>!`g!í’²î¦ï¨’[/;?[vï®ê²è»‡}⤳â¤í•∌Tã½²R홓é‰ã“¥",
+ "æ„°_⮹T䓒妒閤둥?0î°šaB@㈧gç„»-#~è·¬x<\/èˆPÝ„ê¡=\\׳P\u0015jᳪá¢qï‹¶;ã¯l%á­—;砢觨â–,è¬ê°Gy?躤O黩í‹Yã’a擯\n7覌똟_䔡]fJ晋IAS",
+ 4367930106786121250,
+ -4.9421193149720582E17,
+ null,
+ {
+ ";ᄌ똾柉곟ⰺKpá‡ä±»à¸ºä–{o~h!ï½…ê¿àª»ìš„Úš\u0002y?xUd\u207c悜ꌭ": [
+ 1.6010824122815255E-19,
+ [
+ "宨︩9앉檥pr쇷?WxLb",
+ "æ°‡9】J玚\u000f옛呲~ è¼ 1D嬛,î•*mW3?n휂糊γ虻*á´«ê¾ ?qîžå‡è¶—Ko↦GTé“®",
+ "ã¶¢ážmOã”k'诔栀Z蛟}GZé’¹D",
+ false,
+ -6.366995517736813E-20,
+ -4894479530745302899,
+ null,
+ "V%᫡IIç’…ï»ä…›ä“Ží’¹ï±¢/pU9seë˜ë›žx梔~C)䨧䩻蜺(g㘚R?/á»°[å¿“C뾠ࢤc왈邠买?嫥挤풜隊枕",
+ ",vç¢å–”㌲쟚蔚톬៓ꭶ",
+ 3.9625444752577524E-19,
+ null,
+ [
+ "kO8란뿒䱕馔b臻âŸéš¨\"㜮鲣Yq5mí”<u뷆cè­†\u001bN?<",
+ [{
+ ";涉c蒀ᴧN䘱䤳 ÿꭷ,핉dSTDB>K#ꢘug㼈á¦=P^6탲@ä§”%$CqSw铜랊0&m⟭<\/a逎ym\u0013îš¡vᯗ": true,
+ "æ´«`|XN뤮\u0018詞=ç´©é´˜_sX)㯅鿻á»ì‹¹": 7.168252736947373E-20,
+ "ꛊ饤ï´è¢(逊+~⽫얢鈮ï«è‰¬O힉7Dç­—S곯wæ“I斞᠈븘蓷x": [[[[
+ -7.3136069426336952E18,
+ -2.13572396712722688E18,
+ {
+ "ç¡¢3㇩R:o칢行E<=\u0018á¬YuH!\u00044U%å炼2>\u001eSi$â“·ê’ˆ'ï‘¿ë ¢gᙫ番ꯒ㛹럥嶀澈v;è‘·é„•x蓎\\惩+稘Uî“´Eᖸﳊ㊈壋Nå«¿â¾æŒŽ,袯苷ኢ\\x|3c": 7540762493381776411,
+ "?!*^á¢çª¯?\u0001ڔꙃw虜ë³îšFgJ?&⨫*uo籤:?}ꃹ=ٴ惨瓜Z媊@ત戹ã”똩Ԛ耦Wtè½\\æž’^\\ꩵ}}}ꀣD\\]6M_⌫)Hè±£:36섘㑜": {
+ ";í™—á°°U஋㙛`D왔ཿЃS회çˆ\u001b-㢈`ë´†?盂㛣듿ᦾ蒽_AD~EEຆ㊋(eNwk=RÉ å³­qï’«\"5Ἠ婾^>'ls\n8QAK<l_⭨穟": [
+ true,
+ true,
+ {"ﳷm箅6qⷈ?ﲈ憟b۷⫉἞V뚴少U呡瓴ꉆs~嘵得㌶4XR漊": [
+ "í†ä»‹fM暪$9K[ㄇìƒí³æ’¦gæ’Ÿæ¸jÒFã¹¹aj bHᘀ踉êŽï¼£ç²„ a?\u000fKì¦‰î¶¯éƒ å¹¨9D舢槷Xh뵎u훩Ꜿ턾ƅ埂P埆kë©€{䢹~?D<\/ê¼¢XR\u001b〱ä½ê¼¨i㘀ḟ㚺A-挸",
+ false,
+ null,
+ -1.1710758021294953E-20,
+ 3996737830256461142,
+ true,
+ null,
+ -8271596984134071193,
+ "_1Gí‰í…‘m䮔鰼6멲Nmꇩſt쓟íŠN许FDï¡€j+3^ﶜ⎸\u0019⤕橥!\"sî•—-뾞lz北׸êšëž¬)?l⻮고iä‘°\u001f䪬",
+ 4.459124464204517E-19,
+ -4.0967172848578447E18,
+ 5643211135841796287,
+ -9.482336221192844E-19,
+ "౪å†é‡¶9D?sèž­X榈枸j2ç§€vï ˜î ]泌鰚岒èµè½€ìŒ¶ïŠ›ií…½qMbL]R,",
+ null,
+ [
+ null,
+ {"M쪊ꯪ@;\u0011罙ꕅ<eáº|爑Yâµ<\/&ᩎ<腊ሑᮔ੃Fè±­": [
+ "^0࡟1ë³Pí‹áæˆF⨥Iê‚´\"z磣Vâ…¡=8í€2]䢹h1\u0017{jT<Iç…›5%Dì…Sâ‘™â…J*ìƒ å·™àº”ï€¢;᧡䙞",
+ [{
+ "'ã¶¡í¾é„§`è·Š\"gV[?u᭒Ʊ髷%葉굵aë¦Nì¼§Qﯳy%y䩟髒L䯜Säµ³r絅肾킂á'ꔦg긓a'@혔যWè°á¬F栩ŷ+7wéžš": 6.3544416675584832E17,
+ "苎脷v改hmìµ|㋊g_ᔠ뒨蹨峟ìŽã·¸|Ο刢?Gͨ옛-?î¨Gꦱî«î“©IEYUX4?%ꘋᆊ㱺": -2.8418378709165287E-19,
+ "誰?(H]N맘]kæ´³\"qï±è’§è˜ž!Rí«\\(Q$T5Nå â«£ìœ¿6|럦ì†ï¸…ï­—(": [
+ "峩_\u0003A瘘?✓[硫䎯á½uጭ\"@Y綅첞m榾=è´®9R벿῜Zï §",
+ null,
+ "䰉㗹㷾Iaáƒqcp쓘὾൫Q|ﵓ<\/ḙ>)- Q䲌mo펹L_îŽ¦ì¹æ¨–庫9ê©ìª¹á˜¹ä‘–ç€aK îž?*趤fë­“å»p=磕",
+ "î“å“‘z懅á¤-ê¹ux쀭",
+ [
+ true,
+ 3998739591332339511,
+ "ጻ㙙?᳸aK<\/囩U`B3袗ﱱ?\"/ké”ä§2ï…¤l@쿎VZ쨎/6ꃭ脥|B?31+on颼-ê®§,O嫚m à¡­`KH葦:粘i]aSUì“™$ì‚f+詛頖b",
+ [{"^<9<ç®&絡;%iï«¡2攑紴\\켉hì“™-柂äšven\u20f7浯-Ꮏ\r^í›ä“ší—¬\u000e?\\ã…¡ÖºJë–·VOt": [{
+ "-௄å¶k㘆í˜à®½y⎱㢬sS઄+^瞥h;á¾·jî­;抭\u0003ë°«f<\/5â°§ï§§ï¡™_朻ï—%*[-撵䷮彈-芈": {
+ "㩩p3篊G|宮hz䑊o곥j^Co0": [
+ 653239109285256503,
+ {"ê¶²?|\":N1Û¿æ°ƒNZ#깩:쇡o8킗ࡊ[\"ë¸Po핇1(6é°$膓}â½*)渽J'DN<ì™ê¸˜æ¯¦ë²Ysì¹–": {
+ "2Pr?Xjㆠ?æ®/?㓦柖馃5뚣Nᦼ|é“¢rè¡´ã©–\"ç”æ¹—Üæ†": "\"뾯ië‡ç­ç‰»$ç²/4ka $åŒíœ´ï‹è¯‘zbAá©ê‡¸ç‘…&뵲衯ꎀᆿ7@ꈋ'ᶨH@á ´l+",
+ "7뢽ëšv?4^ꊥ_⪛.>pởr渲<\/⢕疻c\"g䇘vU剺dஔ鮥꒚(dïŸv祴Xâ¼¹\\îºa8y5å†": true,
+ "o뼄Bìšžç¾hrï·”í˜ë’šâ¿›U5pꪴfg!6\\\"爑ì䢱W<ï¶•î\\í…£ç‡oI/BK뺡'谑♟[Ut븷亮g(\"t⡎有?ꬊ躺ç¿è‰©nl F⤿蠜": 1695826030502619742,
+ "ÛŠê¹–>ࡹ햹^ⵕ쌾BnN〳2C䌕tʬ]ì° ?ݾ2饺蹳ã¶êŒ­è¨\"â—¹á¬D鯎4e滨T輀ﵣ੃3\u20f3í‚™D瘮g\\擦+泙᧠鬹ﯨַ肋7놷郟lPå†{ß’hà§œr5,ê“‹": null,
+ "ΉN$y{}2\\N﹯ⱙK'8ɜͣwt,.钟廣䎘ꆚk媄_": null,
+ "䎥eᾆá¦î‘§ì‰,JÞªn岪ã¥sî­•æ–謽䚔5tã¯ï–µï£šã°³ã±ŠZhD䃭f絕s鋡篟îža`Q鬃┦鸳n_é‚(E4è¿ _è§…ë·_宪D(NLî²ç–¶hL追V熑%]vè‚«=惂!㇫5⬒\u001fï²å–º4랪옑": {
+ "2aè¼85먙R㮧㚪Sm}E2yîŠê†£ê«¨rRymã±è†¶á”¨\\tç¶¾A☰.ç„„ë™—9<쫷챻䒵셴᭛䮜.<\/慌꽒9å»Okä°ŠZ㥪幸k": [
+ null,
+ true,
+ {"쌞ì": {
+ "â–ŸGL K2ië›±iï¼±\"Ì .옛1X$}涺]éŽæ‡ Ú¦ëŠ·?tfçŸÝžã‚Ÿ{": 1.227740268699265E-19,
+ "ê’¶]퓚%ฬKâ…": [{
+ "(à·›@Ç®ã£ä§¼äµ¤[aテൖvEnAdUë –ë—ˆ@볓yꈪ,mÔ´|꟢ìº(而첸죕CX4Y믅": "2⯩㳿ꢚ훀~迯?᪑\\啚;4X\u20c2è¥B箹)ä¿£eá»»w䇄",
+ "75༂f詳䅫ê§é¿ }3\u20b5'∓ä±è™€fè¼î‘”Iq鈆﨤gí©)BFa왢d0뮪痮Mé‹¡nw∵謊;ê§f美箈ḋ*\u001cî±ïœŸ`퇚í‹ä³«$!V#N㹲抗ⱉçŽ(V嵟ï«_bã³…\u0019": null,
+ "e_m@(i㜀3ꦗ䕯䭰Oc+-ë ¨0뭦⢹苿蟰ê‚SVä°­å‹¢ë¥.ྈ爑Vd,á•¥=í€)vz뱊ꈊB_6듯\"?{ã’²&㵞뵫ç–ë¡ë¯ˆ%Qwé™,?\ræž®\"? N~癃ruà¡—dn&": null,
+ "㉹&'Pfs䑜공j<\/?|8oc᧨L7\\pX᭠9᪘": -2.423073789014103E18,
+ "ä„瑄䢸穊f盈᥸,Bî§§ë¾§í‘—íšµB1쟢f\u001f凄": "é­–âš2儉j꼂긾껢嗎0ࢇ纬xI4]ï„(à©“`蕞;픬\fC\"æ–’\")2æ«·I﹥迧",
+ "ퟯ詔xæ‚ë ¹+T?Bg⥄섅kOeQí¼ã»´*{Eé¼6æ°¿L缋\u001c둌๶-㥂2==-츫I즃ã ï–˜Lg踞ꙂEG貨鞠\"\u0014d'.ç¼—ï¡gI-lIb䋱ᎂDy缦?": null,
+ "î’¢ç´Mã¦çŠ¿w浴詟棓쵫G:äœ?V2íž½7N*n&ã–ŠNd-'ຊ?-樹DIv⊜)g䑜9뉂ㄹí‘阉~ê…쵃#R^\u000bïž®B䌎䦾]p.䀳": [{"ϒ爛\"ꄱ︗竒G䃓-î†ã¾å¸³ã‚.j)qguæ‰å¾£à¨Zé¼—A9A鸦甈!kè”å–™:3Tî†%&ã ˜+,ä·ž|ì±½v䚞문H<\/醯rì…“ã¶¾\\a볜åºzEä·_죤ဵ뿰᎟CB": [
+ 6233512720017661219,
+ null,
+ -1638543730522713294,
+ false,
+ -8901187771615024724,
+ [
+ 3891351109509829590,
+ true,
+ false,
+ -1.03836679125188032E18,
+ {
+ "<?起HCᷭ죎åŠîŒŽèއ逰/{gs\u0014⽛㰾愫tï¿–<솞ڢëŒç…²è†ºà¨»9x닳xà¡­Q訽,ᶭඦtt掾\"秧㺌d˪䙻꫗:á­ˆh4ç·žç—䤴c뫚떩త<?ᕢ謚6]í›Oé°é‹›é• è´©èµŸ\"<Gâ™·1'": true,
+ "቙ht4ßBqꦤ+\u0006멲趫ç”)椾": -1100102890585798710,
+ "ç·å…Žê³‡ë‡¸ç²ŸF醇;朠?厱楛㶆â¶7râ¾›o꯬᳡F\\머幖 㜦\f[æ¦á¥½ã®£0䕊?J㊳뀄e㔔+?<n↴å¤î§·": [
+ "4~ê‰ç¾\\å®(泤å•빜\u0014>j랎:g曞ѕᘼ}链N",
+ -1.1103819473845426E-19,
+ true,
+ [
+ true,
+ null,
+ -7.9091791735309888E17,
+ true,
+ {"}蔰鋈+ê¨å•µ0?g*사%`J?*": [{
+ "\"2wG?yn,癷BK\\龞䑞x?蠢": -3.7220345009853505E-19,
+ ";饹়â€)çš‹`噿焒j(3â¿w>å5X<np?<줯<Y]æ˜!J೸UⳂNे7v௸㛃ᄧ톿䨷鯻v焇=烻TQ!F⦰䣣눿Ké·šëˆ'â­²mæ (äš»": [
+ "蹕 淜੃b\"+몾ⴕ",
+ null,
+ 35892237756161615,
+ {
+ " 듹ã)5æ…ç®±&$~:é°ì®<\/å ‹?% \\勽唅zì†å¸‹ä˜ºH髀麡M퇖uz\u0012m諦d᳤콌æ¨\rX싹̡á²": -433791617729505482,
+ "-j溗ࢵcz!:î€}✽5à´‡,욨Ýs#ë«=å—æµº^}E\\Y\\T*뼈cdêºcÛ˜ïµëŽä¨¸ë±K䠴㉿æ¿é€³îŽœ@wî·¿fì¢<\/[L[": -9.3228549642908109E17,
+ "Ms킭uà®—%\\uâŽ/家欲ἅ答㓽/꯳齳|㭘Pr\"v<\/禇䔆$GA䊻˔-:틊[h?倬è¤á¾žà§³.Gw\u000b": [
+ "0宜塙I@ä´è‰\\Uyë’…=2<hæš’ï…£K._è´¡ç’Yi檻_⮵uá㘗è [f\u0015힢Hê”®}጑;ï´èªyf0\"\u20cc?(=qæ– âž½5ꎾ鞘kⲃ",
+ -2.9234211354411E-19,
+ false,
+ true,
+ {
+ "\u0011⟴GH_;#怵:\u001c\u0002nîž»1U\\p/ì™”(┫]hêšî·ƒ7\r0䵷첗岷O௷?î·°ãŽ[殇|J=?韷pᶟ儜犆?5კ1kê–iH竧뛈ପdmk游y(콪팱ê¾k慧 yè¾£": [
+ false,
+ "O\"ëp覈ykv磂㢠ãµ~뀬íŠlC&4솎䇃:Mj",
+ -7.009964654003924E-20,
+ false,
+ -49306078522414046,
+ null,
+ null,
+ 2160432477732354319,
+ true,
+ "4íš¡h+!踹ê¬P鮄{0&ë±¥M?ìƒéž…n㮞ᨹ?쒆毪l'ç®…^ꚥ頛`e㻨52柳⮙嫪࡟딯a.ï‘„~äµ®1få˜N&zÈ­L榓ۃ鳠5d㟆M@㣥ï Ó‹AÎq0縶$",
+ -3.848996532974368E16,
+ true,
+ null,
+ -3.5240055580952525E18,
+ {
+ " vï­·áµ#ce乃5僞?Z D`묨粇á”ç» vWLè­¢uë½€\\J|tâ“™tâ„–\"ꨋnT凮ᒩè‚ç¯b騩:䢭Hbvì»å³¨z㹚T趗햆귣학津Xiï¼¹@á–¥K": true,
+ "!F 醌yï䉸W2ꇬ\u0006/ä’7~%9擛햀徉9â›°+?㌘;ê “X䇻Dfië¼§ì’’\u0012F謞Õ絺+臕kà¤LSQìŒX쎬幦HZ98è’Šæž³": "澤令#\u001dæŠâ›³@Næ•퀂[5,✄ꘇ~䘷?\u0011Xꈺ[硸⠘⛯X醪è¡x\u0007쌇MiX/|ï¾ëšK8ä¡î¿¥W)銀q僞綂蔕E",
+ "6â²ä£–Rà§ž@ငg?<\/à³´xé™™Xꈺ崸⠅ᇾ\\0X,H쟴셭A稂ힿã‚F\\쑞\u0012懦(Aᯕç­~î½”\u0001ê»®X?逊": 5.7566819207732864E17,
+ "[c?椓": false,
+ "kä’‡": 2583824107104166717,
+ "꙯N훙ã…ﮒ燣㨊瞯咽jî™Mxby뻭뵫װ[\"1畈?à§±L": "ë£á”‚魠羓犴ꚃ+|rY",
+ "ë…ºZ?îˆä¬ï“©é‰‰îˆ­:?â³™ç˜Cኯ.Vs[釿䨉ì§\\\\*쵢猒$\\y溔^,㑳": {"藶꺟": [{
+ "\"d훣N2zq]?'檿죸忷篇ﮟ擤m'9!죶≓pë­»\\ᇷ\f퇶_ä°¸hà¹Q嵃訾㘑従ꯦ䞶jL틊ræ¾µOmᾫ!H䱤팼/;|á­ºI7슎YhuXiâš¼": -1.352716906472438E-19,
+ "M⽇倻5Jä‚«à¤”á”æ¥¸#î „î¾–J[Fﹱ쫮W誻bWz?}1\"9硪뻶fe": "盬:Ѹ砿íšë•£T凊(mç¦å‘œï»R㿎艴䂵h",
+ "Rë¾k힪CHé’™_i苮ⰵoᾨ紑퉎7h؉\"柀è½z0့\"<?嘭$èœ?礲7岇槀묡?Vé’¿T⣜v+솒çšÔ›2ç±³mH?>è–™å©è¿3aFÆÃ": "2,ê“´g?_섦_>Y쪥션钺;=趘F~?D㨫\bX?㹤+>/믟kᠪ멅쬂Uzỵ]$ç§`mé›ç‘Šî’ඖ鯬cꙉ梢f묛bB",
+ "♽n$YjKiXX*GOè´©éƒè±®ç¥´éžK醞眡}ê—¨v嵎꼷0à­¸+Mè‹eH徸Jîžê£†:â¼æ‚¥B켽迚㯃bè«‚\u000bjꠜ碱逮m8": [
+ "푷᣺ﻯd8ﱖ嬇ភHîªé¹Žâ¡±á±…0g:æžœ6$GQ췎{vá·§Yy-è„•xå¹ç ¡ï¨¬â®¸Cï§‚êš=軄H犠Gè°–ES詤Zè ‚3î§™lë´Ÿhï¿’7䦹1GPQG癸숟~[#é§¥8zQ뛣J소obg,",
+ null,
+ 1513751096373485652,
+ null,
+ -6.851466660824754E-19,
+ {"ä©‚-â´®2Ù°K솖풄꾚ႻP앳1Hî³é·›wmR䗂皎칄?醜<\/&à §ã¬X濬䵈K`vJ륒Q/IC묛!;$vÏ‘": {
+ "@-êš—xྐྵ@m瘬\u0010U絨ﮌé©\\켑寛넆T=tQã­¤Lì—°@脸삯e-ï–…î–‘:⩼u㎳VQ㋱襗ຓ<Ⅶ䌸cML3+\u001e_C)r\\9+Jn\\Pﺔ8蠱檾è…Pqé³è¯î¦§Tä„I": -1.80683891195530061E18,
+ "á·­á‹»U~ཷsgSJ`᪅'%ã–”n5픆桪砳峣3ç®æž¾äŒ·âа呀ïŒ": {
+ "Ş੉䓰邟自~X耤pl7间懑徛s첦5ਕXexh⬖鎥á€nNr(J컗|ૃF\"Q겮葲놔엞^겄+㈆è¯ã€¾í¬ç´G'E?飕1fâ¼í…¬æ‚šï•¦æ³¬ë¨Uç¬í›¶Qs": false,
+ "î³…(\u20dag8í½íŠ£>^Y{뤋.袊䂓î†;_ïg]S\u202a꽬L;^'#î—™ë•bႌ?Cç·¡<ä²ä²æ–­ê6\u001asD7IK5Wxo8\u0006på¼Šâ¼‚ê¯æ‰µ\u0003`뵂픋%ꄰ⫙ë¶lå›å°›ïˆ®+ä—…E쟇\\": [
+ true,
+ {
+ "\n鱿aKã¡â’ã¼™2ì´¹f;`ì¾qIà¡”G}ã·äç“°w늮*ç²…9뒪ㄊCj倡翑閳R渚MiUO~仨䜶RꙀA僈㉋⦋n{ã–¥0딿벑î§é€¦â¥»0î¾®h薓쯴ê»": [
+ 5188716534221998369,
+ 2579413015347802508,
+ 9.010794400256652E-21,
+ -6.5327297761238093E17,
+ 1.11635352494065523E18,
+ -6656281618760253655,
+ {
+ "": ")?",
+ "TWKLꑙ裑꺔UE俸塑炌Ũ᜕-ï’‚o\"徚#": {"M/癟6!oI51niíš=댡>xê¨\u0004 ?": {
+ "çš­": {"⢫䋖>u%wî²´ìž¼<ä•ê˜P䋵$é­‹æ‹U䮎緧皇Y훂&|羋ꋕ잿cJ䨈跓齳5\u001a삱籷I꿾뤔S8㌷繖_Yឯ䲱B턼Oæ­µF\\l醴o_欬6ç±=D": [
+ false,
+ true,
+ {"Mt|êžD|Fê¶£MQ뵕T,ëºk+?ãµi": [
+ 7828094884540988137,
+ false,
+ {
+ "!༦鯠,&aﳑ>[euJê½ç¶·æB.h": -7648546591767075632,
+ "-n켧嘰{7æŒæ¯„Y,>â螵煫乌pv醑Qå¶š!|âŒè²¬0왾ë¢ê…蛨S\\)ç«°'舓Q}A釡5#v": 3344849660672723988,
+ "8é–ªéºV=鈢1녈幬6棉⪮둌\u207d᚛驉ꛃ'r䆉æƒà¥ˆ|bἧﺢᒙ<=穊强s혧eꮿ慩⌡ \\æ§³W븧J檀C,ᘉì˜0俯퀉M;筷ࣴ瓿{늊埂鄧_4æ¸Nn阼Jੵ˥(社": true,
+ "oë¼€vwï…®)4A뢵(î¼±a䵢)p姃뛸\u000fK#KiQp\u0005ê…芅ì…îª": null,
+ "ç ¥$ꥸ┇耽uæ–®Gc{z빔깎밇\\숰\u001eê´·å„㶇쵿_á´„+hç©¢p촀Ნ䃬zäé…³Ó‚31xꔄ1_ç šWë ˜G#2葊P ": [
+ -3709692921720865059,
+ null,
+ [
+ 6669892810652602379,
+ -135535375466621127,
+ "뎴iO}Z? 馢녱稹ᄾä©rSt帤넆&7ié¨ë©—ç•–ï”9誧鄜'w{Ͻ^2窭외b㑎粖i矪ꦨ탪跣)KEㆹ\u0015V8[W?⽉>'kc$䨘ᮛ뉻٬M5",
+ 1.10439588726055846E18,
+ false,
+ -4349729830749729097,
+ null,
+ [
+ false,
+ "_è ¢ã ^䟪/D녒㡋ỎCä’ˆíŒïŒ¢\u0006àªq@O펢%;é¹ìŒo戥~A[ꡉ濽ỳ&虃᩾è£å”™ï¤£èŒ¨Ig楡꒻M窓冉?",
+ true,
+ 2.17220752996421728E17,
+ -5079714907315156164,
+ -9.960375974658589E-20,
+ "ᾎ戞༒",
+ true,
+ false,
+ [[
+ "ⶉᖌX⧕홇)g엃⹪xëšç™Ÿ\u0002",
+ -5185853871623955469,
+ {
+ "L㜤9ợㇶKé°â‹“V뽋˖!æ–«as|9"á¬ä†ª?î¾¶7胜&n薑~": -2.11545634977136992E17,
+ "O8뀩D}캖qè‚6༣ã—䈓煮å½à¨†á޼Dᣘí›;": false,
+ "YTá¡…^ï—Lã—ŽcbY$pᣞ縿#fh!ꘂb삵玊颟샞ဢ$ä—é¼’ëª~rkH^:닮먖츸륈⪺쒉砉?㙓扫㆕꣒`R䢱Bé…‚?C뇞<5Iޚ讳騕S瞦z": null,
+ "\\RB?`mG댵鉡å¹ç‰©äµŽæœ‰5*e骄T㌓ᛪç¾é§’Ku\u001a[柆jUq8⋈5鿋츿myï»—?é›ux঴?": 5828963951918205428,
+ "n0æ™…:黯 î¶·xu씪^퓞cB㎊á¬âº˜Ù¤Öƒ~B岚3㥕擄vᲂ~F?Cä¶–@$mï›~å¿”S왖㲚?챴⊟W#벌{'ã°Iä ç¸s樘\\X뢻9í•¡I6èㄛî‚î«8쯶]wॽ0L\"q": null,
+ "x增줖j⦦tä¢áŽ™ïŠ­ã›¿Yf鼘~ê«“æ„4惊\u209c": "oOhbᤃ᛽z&Bi犑\\3B㩬劇䄑oÅ쨅孥ë©àº–acA㖫借ãžvg싰샂ãœ#譞⢤@k]鋰嘘䜾L熶塥_<\/â¾å±ˆï®Š_mYè¹t뙺}Ox=wé®®4S1ê©ï¬¾'å·‘",
+ "㗓蟵ꂾe蠅匳(JPä—à·¸\u0089耀왲": [{
+ "ᤃ㵥韎뤽\r?挥O쯡⇔㞚3ä¼–\u0005Pî•⋪\"Dê¶£QLn(⚘罩䩢Ŏv䤘尗뼤ë›O淽鋋î¡é—šrå´©a{4ç®™{煷m6〈": {
+ "l곺1L": {
+ "T'ਤ?ç …|੬Km]ä„©\"(à¿¶<\/6U爢䫈倔郴l2ã´±^줣k'Læµ–Lé°„Rp今鎗⒗Cì–¨Mí›ã¡§Î˜X粜뫈N꤇輊㌻켑#㮮샶-ä—룲è ç™œã±V>=\\I尬癤t=": 7648082845323511446,
+ "鋞EP:<\/_`á§e混ㇹBd⯢㮂驋\\q碽饩跓྿ᴜ+j箿ë ã—‘yK毢宸p謹h䦹乕U媣\\炤": [[
+ "3",
+ [
+ true,
+ 3.4058271399411134E-20,
+ true,
+ "æ€+憱f逮@먻BpW曉\u001aã£âŽŠ$n劈D枤㡞좾\u001aá›ïŒƒè‹”౩é—1B䷒Ṋ݋âžê€žêƒç£$t੤_:蘺⮼(#N",
+ 697483894874368636,
+ [
+ "vᘯ锴)0訶}䳅⩚0O壱韈ߜ\u0018*Ué¾ä–=䧉뽑å•휻ID쿇嘗?ꌸῬ07",
+ -5.4858784319382006E18,
+ 7.5467775182251151E18,
+ -8911128589670029195,
+ -7531052386005780140,
+ null,
+ [
+ null,
+ true,
+ [[{
+ "1欯twG<uä®â½ê‡£_ჟﱴଶ-쪋\"?홺k:èŽêœª*⺵꽹댅釔좵}P?=9ë ¿46b\u001c\\S?(筈僦⇶爷谰1ྷa": true,
+ "TҫJYxÚª\\鰔℮혡)m_WVi眪1[71><\/ï†Q:0怯押殃탷è«ì‚¬<ỗꕧ蚨ä¡ï¨î³‰nDꌕ\u001cë…¬~è“©<N蹑\"{ä«¥lKcí˜ë«–앺:vⵑ": "gæ§µ?",
+ "aꨩ뻃싥렌1`ë¡—}Yg>鲃g儊>ê¡l㻿/â‘·*ì±³6㻜W毤緛ﹺᨪ4\u0013뺚J髬e3쳸䘦伧?æª&{L掾p+꬜MäŠd娘6": {
+ "2p첼양棜h䜢﮶aQ*c扦v︥뮓kC寵횂S銩&Ç{O*य़iH`Uí…à¡“rä©•5ꄸ?`\\á§«?ᮼ?t〟崾훈kè–ì/iy꤃뵰z1<\/AQ#ë¿©8jJ1z@u䕥": 1.82135747285215155E18,
+ "ZdN &=dë…„á…†'ì‘â…‰:烋5&áŸï”‹á„‚汎æ¥L㯄固{é’§u\\ãŠíŠšeæ‘‘&tå—„ê–„UbâŒ?m䴘熚9EW": [{
+ "ଛ{i*a(": -8.0314147546006822E17,
+ "⫾ꃆY\u000e+W`௸ \"Më’¶+\\ë·lKE}(NTí‚¶Yjé¸ç¯’î©¥ì¶'jNQ硾(똡\\\"逌â´y? IRꜘ὞鄬﨧:M\\fâ ‹Cꚜ쫊ᚴNV^Dä•—ã…–á¼”Iao꿬Câ8": [
+ 287156137829026547,
+ {
+ "H丞N逕<rO䎗:í…•<\/䶩샌Sd%^ᵯëˆ엑者g䖩똭蕮1U驣?Pâ°°\u001fp(W]67\u0015ï«£6굺OR羸#ì´Fè’ˆ;嘙i✵@_æ’¶yã¤â¤(:᧗뼢༌朆@â°ã¤¨ê­²?-n>⯲": {"": {
+ "7-;枮阕梒9ᑄZ": [[[[
+ null,
+ {
+ "": [[[[
+ -7.365909561486078E-19,
+ 2948694324944243408,
+ null,
+ [
+ true,
+ "荒\"并孷䂡쵼9o䀘F\u0002龬7⮹Wz%厖/*? a*R枈㌦ë¾g뒠䤈q딄㺿$쮸tᶎ릑弣^éŽ<\/Y鷇驜L鿽<\/ì¶‹9Mᲆឨ^<\/庲3'lë‚¢",
+ "c鮦\u001bë‘\\~?眾ಢu݆綑෪蘛轋◜gȃ<\/â´ƒcpkDt誩܅\"Y",
+ [[
+ null,
+ null,
+ [
+ 3113744396744005402,
+ true,
+ "v(y",
+ {
+ "AQ幆h쾜O+꺷铀ꛉ練A蚗⼺螔jãŒ3꽂楎䥯뎸먩?": null,
+ "蠗渗iz鱖w]擪E": 1.2927828494783804E-17,
+ "튷|䀭n*曎b✿~æ¤U]î­¡Gz鄭kW|ã´š#㟗ഠ8u擨": [[
+ true,
+ null,
+ null,
+ {"⾪壯톽g7?㥜ώQê‘㦀æƒã§½î“¡ä¼“\\î¦*᧰閖樧뢇赸N휶䎈pIæ°‡ï®é•Šmaᬠ탷#X?î³A+kÐM ༑᩟Ø?5꧎鰜ṚY즫궔 =ঈî³;ﳈ?*s|켦蜌wM笙莔": [
+ null,
+ -3808207793125626469,
+ [
+ -469910450345251234,
+ 7852761921290328872,
+ -2.7979740127017492E18,
+ 1.4458504352519893E-20,
+ true,
+ "㽙깹?ë¨ä†¢:ä´ŽÛ»gæ® JBTU⇞}ꄹꗣi#Iî’¡ëµ£é‰r혯~脀ìƒ#釯:场:ä”>ä°®o'ã¼½HZ擓௧nd",
+ [
+ 974441101787238751,
+ null,
+ -2.1647718292441327E-19,
+ 1.03602824249831488E18,
+ [
+ null,
+ 1.0311977941822604E-17,
+ false,
+ true,
+ {
+ "": -3.7019778830816707E18,
+ "Eå³¾æ†èŒ6xLIm縂0n2视֯J-ᤜz+ᨣè·mYDè±ç¹¹â¹ºäŠ“ëª“ï´€E(@è©®(!ï’Y膽#᎙2䟓섣A䈀㟎,囪QbKæ’wcG湎ꤧtGì—xâ¥ä¿Žj'A一ᯥ뛙6ㅑ鬀": 8999803005418087004,
+ "よ殳\\zDâ§…%Y泥簳Uꈩ*wîRL{3#3FYHା[d岀䉯T稉駅䞘礄P:é—ˆWæ€ElBã¤å–¬èµ”bGä ¼U଄Nw鰯闀楈ePsDꥷ꭬⊊": [
+ 6.77723657904486E-20,
+ null,
+ [
+ "ཚ_뷎꾑è¹q'㾱ꂓ钚蘞慵렜떆`ⴹ⎼櫯]J?[t9Ⓢ !컶躔I᮸uz>3aã •i,錃L$æ°°í…°@7ë…«W㸮?ç¾§W뇧ꃞ,î—‘N鋮숪2ɼì½â”ä²6",
+ "&y?뢶=킕올Za惻HZk>c\u20b58i?ꦶcfBv잉ETî…9jä¡¡",
+ "imçŠÕƒbì¹§<D-è«‚*u2ꡜ췛~䬢(텸ﵦ>æ ¡\\뼾쯀",
+ 9.555715121193197E-20,
+ true,
+ {
+ "<㫚v6腓㨭e1ã•”&&V∌ᗈT奄5Lጥ>탤?튣瑦㳆ꉰ!(ᙪ㿬擇_n쌯IMá¿‹î£ã•¨â°æ«ˆá±·5풔蟹&L.ì²½e鰷쯃劼﫭b#ï­¶í“€7ë·„Wr㢈๧Tʴશ㶑澕é%": -1810142373373748101,
+ "fg晌o?߲ꗄ;>C>?=鑰監侯Kt굅": true,
+ "䫡蓺ꑷ]C蒹㦘\"1à°ƒ@å‘«\u0014NLä¾egå‘®á³,r$裢k>/\\<z": [[
+ null,
+ "Cä¡>?ㄤᇰﻛ쉕1஥'ÄŠ\" \\_?쨔\"ʾr: 9Sä˜ç¦ºáª§ê„‚㲄",
+ [[{
+ "*ç¡™^+E쌺I1䀖ju?:⦈Ꞓl๴竣迃xKC/饉:\fl\"XTFᄄ蟭,芢<\/骡軺ëœhê˜\u001f銿<棔햳▨(궆*=ä¹¥b8\\媦ä·€ë«}닶ꇭ(Kej䤑M": [{
+ "1á¬?>옿Iâ•…C<ÞŽ?ꊌ冉SV5A㢊㶆z-๎玶绢2F뵨@㉌뀌oå¶”f9-庒茪ç“ë·³4": null,
+ ";lá°³": "CbB+è‚»aä„·è‹*/볳+/4fq=ã°h6瘉샴4é“¢Yéª.⌖@哼猎㦞+'gꋸ㒕ߤï—ãž‘(ä¶’è·²tiâ‘´aî¥ç¡‚#Noë³”",
+ "t?/jE幸YHT셵⩎Kî¹!Eq糦ꗣv刴w\"l$ο:=6:ç§»": {
+ "z]鑪醊嫗J-Xm銌ç¿çµ¨c里ëç‚™Ep㣋é£ë˜¼åšŒä€“GPï¹–cmf4é¹­T䅿꣭姧â¸wy6ꦶ;S&(}ᎧKxᾂQ|tï¹ë»³k\"d6\"|Mlì·†hwLtê¼¼4$&8Պ褵婶鯀9": {"嵃닢ᒯ'î–›dá§«ä³³#Nî‡Xe3-붋鸿î¢à¬¢ë–“î§ž%dK\u0013䲎ê–YV.裸Râ‰rR3蟛\\:ì ¯:å—ĺLʆ넕>|텩鴷矔ꋅⒹ{tå­¶ã“‘4_": [
+ true,
+ null,
+ [
+ false,
+ "l怨콈lá’",
+ {
+ "0wä²å¬§-:`䉅쉇漧\\Ü‚yㄨb%㽄j7ᦶ涶<": 3.7899452730383747E-19,
+ "ꯛTẀq纤qå¶Vâ¿£?\"g}ი艹(쥯B î­T騠I=仵ë°X": {"KX6颠+&á…ƒ^fç•’y[": {
+ "H?뱜^?꤂-⦲1a㋞&î‘®êƒç²¾Ii᤾챪咽쬘唂쫷<땡劈훫놡o㥂\\ Kâ´™Dç§¼Fæ°®[{'좴:례晰Iq+Iì­¥_T綺砸GOç…䟪ᚪ`î‘↹l羉qì¼Dê½áœ…훦: vUV": true,
+ "u^yï³0㱓#[y뜌앸ꊬLã·©?蕶蘾â»KӼ": -7931695755102841701,
+ "䤬轉車>\u001c鴵惋\"$쯃྆⇻në½€Gæ° Såª]à²²ê¨æ‡Qxኻ椕駔\\9ࣼ﫻ìœç£¡ï©ˆëºªá¶šë³l㕆t+sζ": [[[
+ true,
+ false,
+ [
+ null,
+ 3363739578828074923,
+ true,
+ {
+ "\"鸣詩 î›ë³°ã‘µgLã¯¦á¿…ì¶æ—«}ED辗ﮈI쀤-ꧤ|ã ¦Z\"娑ᕸ4çˆé¨ã£\"]ì³Af]茛⬻싦oèšk䢯ä©è½3廇喑ޅ": 4.5017999150704666E17,
+ "TYႇ7ʠ值4챳唤~Zo&ݛ": false,
+ "`å¡„J袛㭆ëºã³€N㺣`ê½å¶¥Kï¯SVᶔ∲퀠ç¾N딂X\"á¤hNﬨvI": {"\u20bbã­˜I䖵䰼?sw䂷쇪]î(泒f\"~;꼪FÔsá¦": {"p,'ꉂ軿=Aèš¶?bƉãµä…°è«¬'LYKL6B깯⋩겦뎙(ᜭ\u0006噣d꾆㗼Z;ä„äš”cd<情@äž‚3苼㸲U{)<6&ꩻ钛\u001au〷N숨囖愙j=BXWìš•^x芜å á¿™çˆ‚ë›·ê’»t✘Q\b": [[
+ "ç±›&ଃ䩹.ꃩ㦔\\C颫#暪&!勹ꇶ놽攺J堬镙~軌C'꾖䣹㮅ï¶å²ƒá™´éµ£",
+ 4.317829988264744E15,
+ 6.013585322002147E-20,
+ false,
+ true,
+ null,
+ null,
+ -3.084633632357326E-20,
+ false,
+ null,
+ {
+ "\"짫愔昻 Xï«\"è—£j\"\"ë¨à½…ѻ㘤㬯0晲DU꟒㸃dë²€î¢ìœ’l䦾cà©»*3": null,
+ "è°ˆWm陧阦咟ฯ歖擓Nå–´ã‹éŠ­rCCnVࢥ^♼Ⅾ젲씗刊Sà¼+_tèµ”\\bäšë‰¨ê¬«6펛cL䊘᜼<\/澤pF懽&H": [
+ null,
+ {
+ "W\"HDUuΌ퀟M'P4à¿°H똆ⰱﮯ<\/å‡è˜²\"C鴫ﭒж}ꭩ쥾t5yd诪ﮡí‰â´°@?æ°é†³rj4I6Qt": 6.9090159359219891E17,
+ "絛ﳛ⺂": {"è«°Pã—®î˜è¦`ZQ?ꫦh*à´±cbâ§±}埌茥h{棩렛툽o3é’›5é®l7Q榛6_g)ὄ\u0013kj뤬^爖eO4Ⱈ槞鉨ͺ订%qX0Tì—å«·$?\\\"봅늆'%": [
+ -2.348150870600346E-19,
+ [[
+ true,
+ -6619392047819511778,
+ false,
+ [[
+ -1.2929189982356161E-20,
+ 1.7417192219309838E-19,
+ {"?åµ²2à¿2\u0001啑㷳c縯": [
+ null,
+ [
+ false,
+ true,
+ 2578060295690793218,
+ {
+ "?\"殃呎ïˆ#ã‘‘F": true,
+ "}F炊_æ®›oU헢兔êˆ,èµ­9703.Bæ•°gTz3â¬": {
+ "5&t3,í–“Mݸᵣ㴵;꣫ä©â†³#ï¢@ë«·ä …ï¦+W-ࣇzᓃ鿕ಔ梭?T䮑ꥬ旴]u뫵막bBè®:왳둛lEh=숾鱠på’î›î­ˆ$ì§#?gâ¹·á—Švã·µ.æ–ˆu頻\u0018-G.": "ë½™m-ouࣤ஫牷\"`Ksꕞ筼3HlȨvCï¢î›¦å ˆ\"I]㖡玎r먞#'W賜鴇k'c룼髋䆿飉㗆xgå·¤9;芔cáŒ/ax䊨♢í“rå“㸫೼䢗da᩾\"]å±£`",
+ ":M딪<䢥喠\u0013ã–…x9è•ã‘‚XO]f*Q呰瞊å­VP@9,㨣 D\\穎vˤƩs㜂-曱唅L걬/롬j㈹EB8g<\/ì„©o渀\"u0y&룣": ">æ°ç·©L/ä•‘ë¯êŸ˜îŸ”蕞^aBë’£+0jK⪄瑨痜LXK^힦1qK{æ·št츔X:Vm{2rçB뾄H첚7æ°¥?쉟䨗ꠂv팳圎è¸é½€\\",
+ "D彤5㢷Gꪻ[lㄆ@὜⓰絳[ଃç½ì®¹â˜’[*0ꑚ㜳": 9022717159376231865,
+ "Ò–aV銣tW+$é­¿\u20c3ïœäºœ~ë«¡ᙰ禿쨽ã¡fá¹¼zE/h": "5è‡ï’Œã‹‡á²¯ì®º? 昨탰Wム밎#'\"崲钅U?幫뺀â¾@4kh>騧\\0Ò¾EV=çˆî©®ÍŒUæ€%ꉼ 㮋<{j]{R>:gÔ©L\u001c瀈锌ﯲﳡꚒ'â«¿E4æšãŒ—뵉X\"Háœ",
+ "ᱚגּ;s醒}çŠSἿ㦣&{T$jkB\\\tḮ앾䤹o<é¿(tW": "vb⯽䴪䮢@|)",
+ "⥒í껉%惀뗌+녣迺顀qæ¢g⚯i⤭ë£Mç¹j̈́⽜A": -8385214638503106917,
+ "逨ꊶZ<\/W⫟솪㎮ᘇb?ê ”i\"H㧺x෷韒Xꫨฟ|]窽\u001a熑}Agn?Má¶–a<rà°„4Ů䢤슲AxÄ£eê³–ã´¤x竾éƒB謉鸵kè–½M)\"芣眜`è‰ê‰›ä´º": "é¹^ె캫?3耲]|Ü1ä¡’ã®]8e?ä¶^",
+ "뿸樅#P㡊1M룮Uꪭ绢ꑮZ9꽸": {"\nJ^Ñ”|3袄ã…7⨆銦yîµ”çâ‹·ä»´ct?[,<\/ã…¬`?갔髞%æA೚C": {
+ " 䇞3갫䅪": [{
+ "0|â©ã‘‚砕ㅻ": null,
+ "D箳᠉`|=â¼­)\"*࣊ã¦LjO誋": "",
+ "ࠚDZmê—¥}ᷴ╈r7í—´È¥4Kp5a)o}鎘门Læ°ä†“'✎k俎c#T68Óâ©¶î¶6L鎴<r൦$黊BQYã¼³\\è·¿F慮⡨拵贀!ç”¶Vå–…/": null,
+ "âµ£q⳹ﻨLk]晩1*y\\$%}ä–¶P煑㇆䈦E嫿«•Y࣓嫨ä“OL낮梚㸇洛洚BYtgl∛S☕䉓宑⋢粚ꔯ꠼붠": ")ꬑ윤`\"â°£<\/婽*Y䔸ᓰ_ï³t슲å©éš¥&S糧䛮闵诌è±sh쯽邴*ì„´ØÍŽ=㯨\"RVíž³,^t\"ac?䤒ꉀxHa=Uꛕã™î·“TkF껾",
+ "å¼¾cUAF?暤cë½.欀nKì•­]r傊䀓ﯳ馽垃[䥛oI0N砊鈥헅Co쟋钄ㅷ㊌뷚7": [
+ null,
+ "à«“é¨?^ä†{\u0006`X䧵儱&롡尙砡\u0006ë»ì‘¬sjâ–»Xfᬶgcã„¢V >9韲4$3á»´^=ì煤áë·2䣃%ï…Žé· /eQ9頸쥎",
+ 2398360204813891033,
+ false,
+ 3.2658897259932633E-19,
+ null,
+ "?ꚃ8Nnãž·å¹µd䲳䱲뀙ꪛQ瑓鎴]î’¶ä©‹-é°¾æ¡ï¾ä³¡??掊",
+ false,
+ -1309779089385483661,
+ "ᦲxu_/yecR.6èŠ.áœ‡éŽ ~",
+ -5658779764160586501,
+ "ì’Œ:æ› =lìœä¢œwk#s蕚\"互㮉m䉤~0ë“䋙#Gîš¿;h숄옥顇෤勹(C7㢅雚ã¯Lâ …VVç°…<",
+ null,
+ -4.664877097240962E18,
+ -4.1931322262828017E18,
+ {
+ ",": {
+ "v㮟麑䄠뤵g{Më®.\u001bzt뢜뵡0Ǥ龍떟Ᾰ怷ϓRT@Lꀌ樂Uã â¾•e扉|bJg(뵒㠶唺~ꂿ(땉x⻫싉ìŠ;%0鎻V(o\f,NéŠ%nk郼螺": -1.73631993428376141E18,
+ "쟧摑繮Q@Rᕾ㭚㾣4隅待㓎3蒟": [
+ 4971487283312058201,
+ 8973067552274458613,
+ {
+ "`aæ™á£—î\u0015i<S幼訃锭B0&槩✨[Wpçš©[g≊k葾x2ᡆ橲䲢W": true,
+ "kH皈Sê±qå‚‘u?솹풑~o^F=ï¦N*reî••J沤wW苯7pã¼¹äŽa=ꮧLã·©냴nWꌑ㞱uuè°lVNç¿á¤»(eè±¶5#L쪉ᅄ઄\u0015숟봊P瀚X蓎": false,
+ "䫯דּ〖Scä›­ì Lëµ¾pî«“CꙞ\"엇즓_ﰛ톣ꫀ먩㺣㮠⭴!\\Wâ”tä–°è»…y\u0014~ᇰ렢E7*俜䥪W䀩ä·hë´†vjஉ묣à¼G39.뼳輼:㮿á¦A饕TUL}~": [
+ null,
+ 8.8648298810470003E17,
+ 5.735561205600924E-20,
+ null,
+ -102555823658171644,
+ 1.2674932032973067E-19,
+ {
+ "D胣O㯨\u0017Ku눓ã’í…nᨊ!Ꚇ廫_>Bo¸": 4.3236479112537999E18,
+ "HW&퉡ãåœ<W)6æ‚°ê ‘HEp14xy峑ft\u0005s亘V튉䢮ꦈXåµê¬?lI_ë춇-6Ss噺Nk-ﮥíƒÜ郪*ï“­PR(S6â•‹@ä»™V懸뺵ﯜVç²¹": "9䗌斀4ãˆ^Qséš„ç¡j\u0003",
+ "Vké¶…Cæ³¹ç­HX훉朗*r\\z顊誌儖4?n7á¾6몋䎡ﳈ],Hé ¢pèšã‘„P4满Eä©V䬕à¸L廂쒬î®ì‘¨ê†·hè¿¡ê°è­–墎 î‡]鹿ฌ7ﶽ冭༽<ꈓS\\lä‹®?_ユ檒?": -8598528325153980065,
+ "t=qí£ç–»Ñ‚Z\\錅J.镎|nfḷ鴒1厰Lç¯çºœîŒ•E]୦⥪]á®'ç¾p/å’©0닳ï³qﳖཽk ?X1Ft%ś뭢v鋋⺃爵⒗": [[
+ 5.0824756359232045E-19,
+ [
+ 7.268480839079619E-19,
+ {"탿^굞⧕iјëŠê€›w껩6ꟳXsé…š\\>Y?ç‘¡Qyí›q!帰ï©s舠㫸zêš—aSæ­²v`G株巷Jp6킼 (ê·¶é”â¾î‹¥â¡ˆ>Mæ±ãžá‰´ê™²dv@i㳓ᇆ?é»": [
+ null,
+ 4997607199327183467,
+ "E㻎蠫á¾é«˜ä™Ÿè˜¬æ´¼æ—¾ï« í…›ã‡›?'M$㣒蔸=A_亀绉앭rN帮",
+ null,
+ [{
+ "Eᑞ)8<Zî¿—ã¡¿W镀䛒Cìƒî¿«V?0ꯦ+tL)`é½³AjBå§€Xà³³D빠㻲ƙgn9â‘°à¾á¿œ&\"ãš¹>餧A5u&ã—¾q?": [
+ -1.969987519306507E-19,
+ null,
+ [
+ 3.42437673373841E-20,
+ true,
+ "eê±·Må¢\"割Pâ›í§åŽ€R䱜3ï»´Oí“«r﹉⹊",
+ [
+ -8164221302779285367,
+ [
+ true,
+ null,
+ "爘y^-î¬?蘞Ⲽꪓaâ…ê¨}I",
+ 1.4645984996724427E-19,
+ [{
+ "tY좗⧑mrzïºã¿¥â´–᥷jè«…\u0000q賋è­êž„â®±S\nà¡£B/íƒêµª3ZÉ‘å¤o<\/;ë¡‹": null,
+ "彟hæµ _|V4䦭Dᙣ♞uì¿»=ì‚®ã¦\u001e哀鬌": [{"6횣楠,qʎꗇ鎆빙]ã±­R굋鈌%æ ²j分僅ペ䇰wí¦î¼‹p蛃N溈ê¡ê€?@(GI뉬$ﮄ9èªê“š2e甸ڋ[äº,\u0011\u001cࢃ=\\+衪䷨ᯕ鬸K": [[
+ "ㅩ拏鈩勥\u000etgWVî–¨Xs陂è¦p狵w퓼{뮵_i\u0002ퟑႢâ¬d6é‹«F~챿æŸ\u0096äš¼1ۼ칥0꣯å„=鋷牋ⅈêžé¾",
+ -7283717290969427831,
+ true,
+ [
+ 4911644391234541055,
+ {
+ "Iî¹éˆ’ì²½P릜朸W徨觘-HᎄíŸâ“º>8kr1{ê²µäƒã€›á¬¡Ì¨Oê·‘oä•'쿡鉕p5": "fvç²–RNçž–è›a?q꤄\u001d⸥}'ꣴ犿ꦼ?뤋?鵆쥴ë‹ä¡«s矷̄?à¶£/;괱絢oWfV<\/\u202cC,ã–¦0䑾%nè³¹g&T;|lj_欂N4w",
+ "짨䠗;䌕u i+rà¹0": [{"9ä¥\\à°©8\"馇z䇔<\/á‚¡Y3e狚ì¡\"ุ6ï°†Zé–c\"Ll:ïŠê®¾ç–£<\/᭙O◌납୕湞9⡳Und㫜\u0018^4pj1;ä§å„‚ä—·à­—>@e톬": {
+ "aâ‘‚Fé‹»Qèž°'<퇽Qè´ç€§{ᘪ,cP&~䮃Z?gI彃": [
+ -1.69158726118025933E18,
+ [
+ "ê¶‚z簽㔛㮨瘥⤜䛖Gℤ逆Y⪾j08î±²Sn昞ꘔ캻禀鴚P謦b{ê“®mNéMᥙ5\"ç2냑I\u0011.L&=?6á„ ë»·X鸌t刑\"#z)o꫚n쳟줋",
+ null,
+ 7517598198523963704,
+ "ኑQp襟`uᩄr方]*F48ꔵn俺ሙ9뇒",
+ null,
+ null,
+ 6645782462773449868,
+ 1219168146640438184,
+ null,
+ {
+ ")ယ넌竀Sdä°¾zqâ«£âŒÊ¥\u0010á¿“' |磪&p牢蔑mï³V蘸૰짬꺵;K": [
+ -7.539062290108008E-20,
+ [
+ true,
+ false,
+ null,
+ true,
+ 6574577753576444630,
+ [[
+ 1.2760162530699766E-19,
+ [
+ null,
+ [
+ "顊\\憎zXB,",
+ [{
+ "㇆{CVC9ï¼MN㜋ઘR눽#{h@ퟨ!鼚׼XOvXS\u0017á£=cS+梽៲綆16së½íœy屬?ᇳG2á´­\u00054쫖y룇nKcW̭炦s/鰘ᬽ?J|퓀髣n勌\u0010í™ P>j": false,
+ "ç®´": [
+ false,
+ "éžj\"ꮾ*엇칬瘫xṬ⭽ì©äƒ³\"-⋵?ᦽ<cਔ↎⩧%鱩涎삧u9K⦈\"á¿á¬‘V绩킯愌ṱv@Gê¾è·¶êš†(?ä–ƒvIá§ŠxV\r哦jã ’?*=S굤紴ꊀ鹭쬈s<DrIu솹꧑?",
+ {
+ ".}S㸼L?t\u000fK⑤s~hU鱜꘦}ìªC滈4ꓗ蛌):ྦ\"é¡¥ì´â¢·ïš­á¿³YLn\"?fꘌ>댎Ĝ": true,
+ "Pg帯佃籛n㔠⭹࠳ë·â‰»à¿Ÿ3ãž±ï“!î—-ì’¾!}쭪䃕!籿næ¶»J5ਲ਼yî˜vy;Rኂ%ᔡጀ裃;M⣼)쵂쑈": 1.80447711803435366E18,
+ "ꈑC⡂ᑆ㤉壂뎃Xub<\/쀆༈憓قì¨×§\\": [
+ 7706977185172797197,
+ {"": {"K╥踮砆NWࡆFy韣7ä밥{|紒︧䃀榫rᩛꦡTSy잺iH8}ퟴ,M?Ʂ勺ᴹ@T@~꾂=I㙕뾰_涀쑜嫴曣8IY?ҿo줫fऒ}\\S\"ᦨ뵼#nDX": {
+ "♘k6?଱癫d68?㽚乳䬳-Vé¡·\u0005è•?\u0018䞊V{邾zã˜l]é›k臤~ൖHë’iꢥ]g?.G碄懺䔛p<q꜉Så²—î¥_.%": 7688630934772863849,
+ "溗摽嗙Oã§€,⡢⼰呠ꅧ㓲/葇䢛icc@-r\b渂ꌳ뻨饑è§á–œ\\é®­\u0014엙㥀᧺@æµ¹W2꛵{W률G溮킀轡䬆g㨑'Qè¨ï†áŸªç½‘Hd\"Q늴ᱢﶨ邮昕纚枑?â–°hr羌驀[ç—¹<\/": [
+ -1.0189902027934687E-19,
+ {"窶椸릎뚻shE\"ꪗႥꎳU矖佟{SJ": [{"-æ…œx櫹XYîƒ-æ¾Ü¨â£·àª¢ïŸé¯™%Fu\u0000è¿‹â–’}᥷L嗭臖oញc넨\u0016/迎1b꯸g뢱ã§è“¤ä’8C散삭|\"컪輩鹩\"\\g$zG䥽긷?狸꿭扵ã²:URON&oU8": [
+ null,
+ true,
+ null,
+ -2.8907335031148883E17,
+ -3864019407187144121,
+ {
+ "`빬d⵺4H뜳⧈쓑ohஸ*ã¶ï»‡â¸•ä µ!iä¬ï¹‘h夘▥ê—푹갇㵳TA鳠嚵\\B<X}3訒câ‹{*ï«¢w]ç’¨-gæ­\\j໵侠Ei层\u0011": 3.758356090089446E-19,
+ "䄘ï®)Y놞씃㾱陰í:{\u2059/Sâ“´": [[
+ null,
+ [[
+ -3.8256602120220546E-20,
+ null,
+ 7202317607724472882,
+ "CWQëš¿",
+ null,
+ false,
+ true,
+ null,
+ 2857038485417498625,
+ 6.191302233218633E-20,
+ null,
+ -6795250594296208046,
+ [
+ true,
+ {
+ "%á‹§é°Yᚯ⚀x莰愒Vᔈ턗BNæ´ê¤ŸA1âŒl콹풪H;OX๫륞ìªá°šÑ†@͎黾a邬<L厒Xb龃7f웨窂二;": [[
+ null,
+ "耲?䙧㘓F6Xsí‹­ë©¢.v뚌?鄟æ â–½'묺競?WvᆾCî»txo?dZ;䨸疎",
+ {
+ "@hWê‰&\"빜4礚UO~C;ã†î”殩_ꀥè˜å¥¢^챟k→ᡱKMⵉ<\/Jㅲ붉LÍŸQ": false,
+ "tU뢂8é¾°I먽7,.Yî°î»´æ½Z툼=&⨥覽K乫햶㠸%#@Zë–æ„“^âŠâ¾‚몒3E_噆J(廊ឭyd䞜鈬Ћ档'⣘I": {
+ "tK*ꔵ銂u艗ԃì¿âˆ³ê„‚霫X3♢9y?=â²­dЊb&xy}": [
+ -4.097346784534325E-20,
+ null,
+ 6016848468610144624,
+ -8194387253692332861,
+ null,
+ {
+ "(祬诀譕쯠娣cë´r?ç•„kT뼾⌘⎨?noVä˜ì¥ç¡Žn?": [
+ 1.82679422844617293E18,
+ [
+ false,
+ 2.6849944122427694E18,
+ true,
+ [
+ false,
+ {
+ ";0zâ­†;í™”$bਔ瀓\"衱^ï—´?잢ᢛ⣿~`ꕉ薸⌳໿湘腌'&:ryБꋥá¼ê’¥ç­™ê¬œê¸¨?X": -3536753685245791530,
+ "c;Y7釚Uꃣ割J༨Y戣w}c峰뢨㽑㫈0N>R$ä…’X觨lë´œA刊8R梒',}u邩퉕?;91Eî¦a䈈ë¯G⊶芔h袪&廣㺄j;ã¡ç¶½\u001bN頸쳘橆": -2272208444812560733,
+ "æ‹‘Wﵚî²j鵼駳Oࣿ)#ã¾…é¡‚N傓çºy僱栜'Bê-!KF*ꭇK¦?䈴^:啤wG逭w᧯": "xᣱmYe1Û@霄F$ě꧘푫O䤕í€Pq52憬ꀜ兴㑗ᡚ?ï—ƒLé·íŸî—¼ë­zJê‘™}╆ᅨJB]\"袌㺲u8䯆f",
+ "꿽á…㔂긱Ǧ?SI": -1669030251960539193,
+ "ì‡É¨`!葎>瞺瘡驷錶â¤ï»®é…œ=": -6961311505642101651,
+ "?f7♄꫄Jᡔ훮eì‡îª¼í¾á£ä­´KhखT;Qty}O\\|ë«Iá¿’Ne(5æƒê¥¶ã†·Y9ﮡ\\ oyâ­–-䆩å©m#xë´‰>Y鈕Eç–£s驇↙ᙰm<": {"퉻:dê‚&efᅫ쫢[ï„™\"ëˆëŠ–êº™|Ôå‰1Í–-K:Êšá­•/;ì–㷛]Iç—èŒ4g<Oꗢ뫺N쯂륬J╆.`ᇵP轆&fd$?è‹…oê¶“vO侃沲â©åš…æ²— E%â¿°ì–¦wi\\*è¶«": [
+ 3504362220185634767,
+ false,
+ "qzXæœqT3軞T垈ꮲQ览ᚻ⻑쎎b驌䵆ꬠ5Fà­—ä²ç¼¿ê蒇潇Ltᆄ钯蜀W欥ሺ",
+ "ë³°É霬)ì é¶¼kwocì—·èr \u001d쒷⎹8{%澡K늒?iﺩd=&皼倚J9s@3å›twὡgjä íª5⭉⨺役&놎cﺉ㺡N5",
+ false,
+ null,
+ "D0st[ni锹r*0k6ꀎë‡UX2⽼৞䃚粭#)Zæ¡·36P]<\/`",
+ 4281410120849816730,
+ null,
+ -3256922126984394461,
+ 1.16174580369801549E18,
+ {
+ " ᆼꤗ~î…‰*TN긂<㡴턱℃酰^蘒涯잰淭傛2rൡetì¾£ä‡m*ã¸y\"\\糮᧺qv쌜镜T@yg1譬ﭧﳭ\f": null,
+ "圾ᨿ0xᮛ禵ਗ਼D-㟻ẵ錚e\"赜.˶m)é´‘B(I$<\/轴퉯æ·â‹âº*)宓쓌?*橯Lx\\f쩂㞼⇸\"ﺧ軂é³V\\ë•’\"캘c:G": null,
+ "?ïµ_ê³¢î™ç¿¸íˆ8ã¿ hì—´Q2ã­›}RY㯕YT놂⽻e^B<\/맫ﻇ繱\u0017Gц⟊ᢑﵩS:jt櫣嗒⟰Wã´šæ¦á…‰e[w䋺?藂翙Ⲱ芮ä˜â•¢å›¥lpdu7r볺I è¿‘qFyᗊ": [
+ "$b脬aᅠ襬育Bگ嵺Pw+'M<\/ï­näššvèžbNâ’‚}褺%lቦ阤\"ꓺá—Mç‰,Ûžï– Ò¶!矬?ke9銊Xê´¦)䈽í‹è„½á¹«äˆžá´†^=Yá—¿é›4I귺⋥%",
+ false,
+ 2.9444482723232051E18,
+ 2072621064799640026,
+ "/_뇴뫢jã’=Nꡦâ†Ôºèµ’â¬î»¼í†¥ä¨žç¯su*媸瀳鷔抡oíº-៳è¾å‹·fç»”:äµ¢æ¢2",
+ false,
+ "ì’œ Eî½·äŒ/í\u0018懺_<\\隺&{wF⤊谼(<죽é ïŸ‡8?@*rá¶ŠGd뻻갇&Ⳇq᣿e࢔t_ꩄ梸O詬Cá§§Kê© í’¤9눙醅ëž}竸rw?滨ӽK⥿ཊGé­²']`๖5ã„°",
+ -2375253967958699084,
+ {"嗱⿲\"få„„á¬": {"v?䚑킡`â—¤k3,骥曘뒤Oᒱ㲹^圮᠀YTê»›&ì´®P:G/Tâ£#튣k3ç‚©è k@橈ä·Sä§•,ç†œïŒæ™¬ï£žk1鮥玸먚7䤡fç»å—šìƒ´á¥’~îš¼0q拮垑aë»±Lâ°–_": [{
+ ":på°¢": -6.688985172863383E17,
+ "A0\u0001疠ﻵ爻鼀湶I~W^å²€mZx#ãˆ7r拣$Ꜷ疕≛⦒痋盩Vꬷá­â„¦Qêªï§éˆ‘A(劽詗ꭅo-ç¶é‘º\"Ⓠ@$j탥;": [
+ 8565614620787930994,
+ [
+ "å¶—PC?à¶‹Q㪣$&j幾㾷hæ…‘ 즊慧⪉霄M窊ê·'鮕)äŠé“¨m趦䗲(g罣ЮKVﯦé®î¦®5囗ﰼ鿦",
+ -7168038789747526632,
+ null,
+ -7.8069738975270288E16,
+ 2.25819579241348352E17,
+ -6.5597416611655936E18,
+ {
+ "瘕멦핓+?フZê·¢zé›V": {
+ "ᕾ": 1.7363275204701887E-19,
+ "ã­Œs뎹㳉": {"\u00187Fï–‰I6Yféº+UC쬸éºâ²ä‚¿ê¸•R\\ᆮC?Φ耭\rOத际핅홦*ë² W㸫㯼᡹cㅜ|Gã®—\u0013[o`?jHVì•?蒪꩚!í«áœ¦ãŒ‡äš‡é¿˜:@": [
+ "}푛Г콲<äŸCè—呈#2ã“‹#ྕáŸå°¿9qç«“gI%ëž™mê¬oaç•è´¿Jå’¿D_ç†Zz皳験Iè±¼B扳ḢQ≖㻹㱣Dä¦ï©—2'á—㗣▌ç ²8罿%à°¹F姦;0î·æ‚‡<\/\"påš§",
+ -710184373154164247,
+ "Vo쫬⬾ê«â´·Å»\u0004éŽHBê…¸_aVBHbN>Z4âœkเꛘZ⥺\\Bʫᇩ鄨魢弞&幟ᓮ2̊盜",
+ -9006004849098116748,
+ -3118404930403695681,
+ {
+ "_彃Y艘-\"Xx㤩㳷瑃?%2ä¡éµ›o<A?\"顜ᘌΈ;â·…Cæ´ºL蚴蚀voq:,Oo4쪂)": 5719065258177391842,
+ "l륪맽耞塻論å€Eã—‘/㲕QM辬I\"qi酨玑㖪5q]尾魨鲡ƞY}⮯蠇%衟ï„Fsf윔äšì°¤iè…³": {"ꢪ'a䣊糈": {"ë°‘/♋S8sã¼´5瓹O{댞\"9Xï°‡lJ近8}q{긧ⓈI᱑꿋腸D瀬H\"ﺬ'3?}\u0014#?丙㑯ᥨ圦',gé‘ (樴턇?": [
+ 2.5879275511391145E18,
+ null,
+ [
+ "3㼮ꔌ1Gẃ2Wé¾™jîªÍŠ{1å›ã¦­9xå® ã‘oRä•犽",
+ 1268729930083267852,
+ "땕軚⿦7C",
+ [
+ -3.757935946502082E18,
+ "\"赌'糬_2ë­¾áb",
+ {
+ "(a䕎ጽjÒ°D4.á´¡ïž½66ԃ畮<\/l`k癸\\㇋ࣆ욯R㫜픉녬挛;ڴ맺`.;ç„“q淞뮕ٹ趴r蔞ꯔ䟩vç²u5<\/pZ埖Skrvj帛=\u0005aaï”›": null,
+ "璄≩ v몛ᘮ%?:1頌챀H㷪뉮k滘e": [
+ "ꤾ{`c샬왌펡[俊络vmz㪀悫⸹ᷥ5o'ã¾µ L蹦qjYIYណԠWëƒå‰«<\/W嗂0,}",
+ 2.4817616702666762E18,
+ false,
+ null,
+ null,
+ -8.6036958071260979E17,
+ null,
+ -1.2744078022652468E-19,
+ -4.4752020268429594E17,
+ 1.13672865156637872E17,
+ [
+ false,
+ false,
+ null,
+ -4.178004168554046E-20,
+ true,
+ 2927542512798605527,
+ {
+ ".ꔓ뉤1䵬cHyæ±¼äŠ†è³“á‡Æ©|樷â‡é†Žã¬…4\u0003èµµ}#yD5è†æ™¹ë±“9ê–è™›J㺕 t䊛膎ؤ": {
+ "rVtᓸ5^`েNâ¹»Yv᥋lꌫt拘?<é®°ë„¿ZC?ã’½^": {"âªî©k_:>귵옔夘v*탋èŒ&㳈챗|Oé’§": [
+ false,
+ "daꧺdᗹ羞쯧Hã¤é„³é ³<型孒ン냆㹀f4ã¹°\u000f|C*ሟ鰠(O<ꨭ峹ipຠ*yà³§4VQè””hVæ·¬{?ᵌEfrI_",
+ "j;ꗣ밷é‚副]á—“",
+ -4299029053086432759,
+ -5610837526958786727,
+ [
+ null,
+ [
+ -1.3958390678662759E-19,
+ {
+ "lh좈T_ë¯Y\"伨\u001cꔌG爔겕ꫳ晚è¸â¿»ìT䯎]~e#฽燇\"5hٔ嶰`泯r;ᗜ쮪Q):/tç­‘,榄&5ï¤ëŽ«ç‹(": [{
+ "2áâ“›]r3C攟וּ9è³µsâ›”6'ஂ|\"ⵈ鶆ä¹ç¦3\"痰ࢤéœäµ©ì˜†äŒ€?æ •r7Oç°‚Isd?K᫜`^è®¶}zî°’8?zì–°î§T:X倫⨎ꑹ": -6731128077618251511,
+ "|︦僰~m漿햭\\Y1'Vvخ굇á‰ì±¢cè¶–": [null]
+ }],
+ "虌魿閆5⛔煊뎰㞤ᗴꥰF䮥蘦䂪樳-Ká·-(^\u20dd_": 2.11318679791770592E17
+ }
+ ]
+ ]
+ ]},
+ "묗E䀳㧯᳀逞GMc\bï•¹å¢¹ã“„ë–Æ &U??íŽŒé‘ åª‹k))ᄊ": null,
+ "묥7콽벼諌J_DɯﮪMæ®´ä£,煚ྼ`Y:ì”§<\/â©«%yf䦀!1á²¶kì¶ŽQç±³W∠WC跉鬽*á›±i<?,l<崣炂骵*?8í‘៣ⰵ憉⎑.,Nwç½£q+ο컆弎": false
+ },
+ "e[|଀+î±³lꑸãˆTT?ë¿¿|ê«›9`㱯䊸楋-곳賨?ì³k棽擋wQ餈âŸNq[q霩䵀뷮锅ꚢ": 5753148631596678144,
+ "sá“鴻߸d렶ὕ蜗ဟ툑!诉౿": false,
+ "|4䕳鵻?䈔(]í‹/Ui#æ¹»{듲ーMá‹€t7潔泄Ch⸨}ì£`î¤èž§éŠšã‹¼å£¯kâ°¥Q戵峉갑xè¾™'ì²›": "jd䘯$䕌茷!auw眶ㅥä£ê†¢æ°‘i",
+ "剖駰Ɜî¶sM2]á¾´2ࡷ祅拌Av狔꩛'ê“—í‚§ê£0酜✘O'": false,
+ "澩뢣ê€eU~D\\ꮡ킠": "v^YC嚈ί\u0007죋h>ã´•L꘻ê€ì“ª\"_gé¿„'#tâ½™?,Wg㥖|D鑆eâ¥ìª¸åƒ¬h鯔咼ඡ;4TKèŽî¾‘졠嫞"
+ }
+ ]
+ ]
+ }
+ ]
+ ]
+ ]}}
+ }
+ ]}
+ },
+ "뿋뀾淣截䔲踀&XJ펖꙯^Xb訅ꫥgá¬>棟S\"혧騾밫ê²7-": "擹8C憎W\"ìµ®yR뢩浗絆䠣簿9äˆå¼•Wcy䤶孖ꯥïž;íŒ]輩ä3@{å 뽸0ï€á¡ˆìµ¡î›„Ⲇ\u001dLåŒê§2F~ݕ㪂@W^é½L襒ᦘî¢~沦zZ棸!꒲栬R"
+ }
+ ]
+ ],
+ "Z:ëƒàµ›5Iz찇䅄駠㭧蓡K1": "e8᧤좱U%?ⵇ䯿é¿\u0013縮R∱骒EO\u000fg?幤îš@֗퉙vU`",
+ "äƒìªˆï‘’埽້=Ij,쭗쓇చ": false
+ }]}}
+ ]
+ }
+ ]}
+ }
+ ]
+ ]
+ ],
+ "咰긖VM]á¼6䓑쇎çºetDÒŒ?ãžê©„퇫밉gj8è ƒ\"â©5䛹1ࣚ㵪": "ക蹊?⎲⧘⾚̀I#\"䈈⦞ë·`wo窭戕෱휾䃼)앷嵃꾞稧,Ⴆ윧9S?೗EMk3Მ3+e{â¹”Te驨7äµ’?타Ulg悳o43ï“¢"
+ }
+ ],
+ "zQᤚ纂땺6#ٽ﹧vï¿¿#ࠫ휊冟蹧텈ꃊʆ?&a䥯Deæ½|ì¿“pt瓞㭻啹^盚2êŠf醪,ì–T窧\\Di䕎谄nn父ꋊE": -2914269627845628872,
+ "䉩è·|㨻ᷢã‰B{蓧瞸`î°²I!℄욃힕#ೲᙾ竛ᔺCjk췒늕貭è¯\u0017署?W딚%(pê⤼ë³^=on뺲l䆼bzrﳨ[&j狸䠠=ᜑꦦ\u2061Õµnj=牲攑)Mî»\\é¾": false,
+ "뎕y絬᫡⥮Ϙᯑ㌔/NF*Ë“.ïž¿,QEzvK!Iwz?|쥾\"ê©»Lê¼—Bê”§è³´ç·œs뉣隤茛>ロ?(?^îµ­`>冺飒=噸泥⺭Ᲊ婓鎔븜z^å·è£®Ãªâ“…à»—jM7ﶕ找\\O": 1.376745434746303E-19
+ },
+ "ä›ræ»–wã¤<k;l8ꡔጵ⮂ny辶⋃í¼åƒ®z\"﮲X@t5෼暧퓞猋♅䦖QCé¹®|픨( ,>,|Nዜ": false
+ }
+ ]],
+ "@ê¿™?è–•å°¬ gd晆(ë„5躕ﻫS蔺4)떒錸ç“?~": 1665108992286702624,
+ "wë¯ná =`঺ᅥC>'從ë槷ä¤çœ·èž„ãŽ»æ°æ‰°XᅧCè´½uáƒë‚ŸjKD03T!lDV쀉Ӊy뢖,袛!终캨G?鉮Q)â‘—1쾅庅O4ê‰H7?d\u0010蠈줘월Þ粯Q!낇껉6í…|{": null,
+ "~˷jg쿤촖쉯y": -5.5527605669177098E18,
+ "펅Wᶺzê†ã¨í‘­e?4j仪열[D<鈑皶婆䵽ehS?袪;Hê¨Më—Žã°[(å—M3qíŸg4y╸鰧茀[Bi盤~ï«å”Žé‹†å½ºî½«â¦Šq?î–³B4쉓癚O洙킋툈䶯_?ퟲ": null
+ }
+ ]
+ ]]
+ ]],
+ "꟱Ԕã¤7æ›ï¦—ಃéŒVä·°?v㪃૦~K\"$%请|ꇹn\"kä«›ã¨é²¨\u2023ä„¢\u0004[<S8á¬ë­©è„¥7U.m࿹:Dè‘┆2蘸^U'w1ì …;䠆ꋪBê»®>︊Vï‹•J?䶟ាꮈ䗱=깘U빩": -4863152493797013264
+ }
+ ]}]}
+ ]
+ }}}
+ ],
+ "ì·ì²Û¹í‰ƒ~aEå”™a챑,9㮹gLHd'ä”|í‚—ãžäŽ¥&KZYTë§µ7䥺N<Hp4ê•­â¹ ê½c~çš½z": "课|á–¾ä¡å»‹è„äªW\u0016&Jnê´b~æ‘“M>â±³åŒèŽžé¿§w\\༌疣n/+ꎥU\"å°ëž¾â—‹íŸ™AJá­Œ?9ä›$?é©”9è®ì§˜é­¡TÖ¯cè—³`虉Cì‡ì¦T"
+ }
+ ],
+ "è°¶ê°œgTRï¿>áµÍšdtæ™‘ä‰‡é™æ»º}9㉸P漄": -3350307268584339381
+ }]
+ ]
+ ]
+ ]]
+ ]
+ ],
+ "0y꟭馋X뱔瑇:䌚ï¿å»¿jîžg-懲鸭䷭垤㒬茭u賚찶ಽ+\\mT땱\u20821殑ã„J쩩䭛ꬿNSæ½”*d\\X,壠뒦e殟%LxG9:摸": 3737064585881894882,
+ "í’µO^-â§§â…¶vѪ8廸鉵㈉רâ†Q㿴뺟EႳvNM:磇>wî·/៻唎뷭୥!냹D䯙iëµ±è²C#⼉NH6`柴ʗ#\\!2ä‚—â±§f?諳.Pëˆ-è¿”I꘶6?8î“ê˜": -8934657287877777844,
+ "溎-è˜å¯ƒi诖ര\"æ±µ\"\ftl,?d⼡쾪⺋h匱[,à·©I8MÒ§F{kç“¿PAî…§'橸ꩯ綷퉲翓": null
+ }
+ ]
+ ],
+ "ោ係Øî½<å…ƒ": 1.7926963090826924E-18
+ }}]
+ }
+ ]
+ ]]}]
+ }]
+ ]
+ ]
+ ]
+ ],
+ "ጩV<\"ڸsOᤘ": 2.0527167903723048E-19
+ }]
+ ]}
+ ]
+ ]],
+ "∳㙰3ì ´pá§—ä±™?`<U὇<\/æ„E[ᮚAî›j诂ᒽ阚uv徢ဎ떗尔ê½í›€ì©‘Jä´?âª=륪ᆩ푰ஓã•?럽VK\"X?檨လ齿I/耉A(AWA~â¯ç¨è¹«": false,
+ "å’å¦ë¾‡}䀼链i⇃%⋜&ç’ªIx渥5æ¶§qq棩á¥-â «AA낇yY颕A*ïˆè£¦O|n?䭬혗F": null,
+ "ç­CLì–­B혆Kॎ`鎃nrî€sZiÕªWç )?p~K~A眱ä²QO妣\u001b\u001b]ᵆᆯ&ã‹á¹è±‰ëº˜$ê­§#j=C)祤⫢歑1o㒙諩": 7028426989382601021,
+ "쳱冲&ဤäŒì•§h胺-é½±H忱8왪RDKᅒ䬋ᔶS*J}ስ漵'㼹뮠9ê±¢9p봋경ጕtởꚳT䶽瘙%ì¶´`@nಆ4<d??#僜ᙤ钴=薔ꭂbLXNam蹈": "樭る蹿= Uî ƒurwkn뙧⌲%\"쑃牪\"cq윕o@",
+ "溌[H]焎SLã…?뀼䫨ç½W": 1.1714289118497062E-19,
+ "ﬢp븇剌燇kĔ尘㶿㴞ç ê¾˜Ia;sâº^)$ç©®?sHᢥíªl": null
+ }
+ ]
+ }
+ ]
+ },
+ "TKnzj5o<\/K㊗ꗣ藠⦪駇î€>yZA8Ez0,^á™›4_0븢\u001ft:~䎼s.bb룦明yNP8弆Cå¯;⪾ì§'蕴뮛": -6976654157771105701,
+ "íµê¦€\\㇑:nî‹™v+뒤燻䀪ﴣï·9ᚈ኷K㚊誦撪䚛,ꮪxሲ쳊\u0005HSf?asg昱dqꬌVꙇ㼺'k*'㈈": -5.937042203633044E-20
+ }
+ ]
+ }],
+ "?}\u20e0],så¶³è‹@#2uì’´sQSä©—=ꥮ;烌,|ꘔ䘆": "á…©ì˜Nç’ kZ먕眻?2ቲ芋眑D륟渂⸑ﴃIRE]å•—`K'"
+ }},
+ "쨀jmV賂ﰊå§ä‚¦çŽžã¬™áªM᪟ïՎ씜~`uOn*ॠ8\u000ef6??\\@/?9見d筜ﳋB|Sä¬è‘«ã½o": true
+ },
+ "즛ꄤ酳艚â‚㺘봿㎨iGà§•à¡¿?1\"䘓您\u001fSáŠâº¿æºzៀ뻤B\u0019?ìœa䳵᭱䉺膷d:<\/": 3935553551038864272
+ }
+ ]
+ ]}
+ ]]
+ ]]
+ ]}
+ }
+ ]
+ }
+ ]]}},
+ "᥺3h↛!ê‹°y\"攜(ெl䪕oUkc1A㘞ᡲî촾ᣫ<\/ä’ŒEã›æ½¨i{ï  v?Wà±¾H\\RჅpzè¬R脾;v:碽✘↯삞鷱o㸧瑠jcmK7㶧뾥찲n": true,
+ "ⶸ?x䊺â¬-ä°…â‰!e쩆2ꎿ准G踌XXᩯ1ß}0?.í—€Z馟;稄\baDꟹ{-寪⚈ꉷ鮸_L7ƽᾚ<\u001bጨA䧆송뇵⨔\\ç¤ë—”d设룱㶉cq{Hyã±R㥽å¢ï¬…p": -7985372423148569301,
+ "ç·«#ì½®IB6<\/=5Eh礹\t8럭@饹韠r㰛斣$ç”LVì·a갵îŸ'请o0g:^": "䔨(.",
+ "ë³â„¡åœ¤pï¾à¯„Ä倧訜BìŸGä™”\"Sbâ“®;$$â–S1J뢙SF|赡gï„€*\"Vu䲌y": "䪈&í‹),\\kT鬜1í’¥;ë·´'Zေ䩹@Jéž½Nã¼M?å¥eWb6榀ƩZڮ淽⺞삳煳xჿ絯8eâ¶ç¾·V}ჿ쎱䄫R뱃9Z>'\u20f1â“•äœé½®"
+ }
+ ]
+ ]]]
+ }}
+ }
+ ]
+ ]},
+ "펮b.hç²”í¯2npXè©«g錰鷇㇒<ì™S値bBi@?镬矉`剔}c2壧ଭfhY깨R()痩⺃a\\â”?M&ﯟ<劜꺄ï‘멊ᄟA\"_=": null
+ },
+ "~æ½¹Rqn榢㆓aR鬨侅?䜑亡V_ç¿…ã­”(ä“·w劸á³Dp䀅<\/ï°Žé¶Šm䵱팱긽ꆘ<tD쇋>긓准D3掱;o:_Ñœ)껚콥8곤d矦8nP倥ꃸI": null,
+ "뾎/Q㣩㫸벯➡㠦◕挮aé¶§â‹“å¼\u00001뱓fm覞n?㛅\"": 2.8515592202045408E17
+ }],
+ ",": -5426918750465854828,
+ "2æ««@0柡g䢻/gꆑ6演&D稒肩Y?艘/놘p{f투`飷ᒉ챻ëŽîª–<늛ä˜ï´¡ì¤°ì«„": false,
+ "8î™–(鸑嵀⵹ퟡ<9㣎Tߗ┘d슒ل蘯&㠦뮮eà kç g ì—»": false,
+ "d-\u208b?0ﳮ嵙'(J`蔿d^踅⤔榥\\J⵲v7": 6.8002426206715341E17,
+ "ཎ耰í“ê•ï’ã±·\u0013y=詽I\"盈xm{0쾽倻䉚ષso#é°‘/8㸴짯%ꀄ떸b츟*\\鲷礬ZQå…©?np㋄椂榨kc᡹醅3": false,
+ "싊j20": false
+ }]]
+ ]],
+ "ä¿›\u0017nç·½Tu뫉èœé¼Ÿçƒ¬.ï‘ꭠIâ°“\"Ἀ᜾uC쎆J@å¤%ê›m뻨ᾀ画è›íœƒT:錖㑸ዚ9죡$": true
+ }
+ ]
+ ],
+ "ãµâ‡˜ê¦–辈s}㱮慀밒s`\"㞟j:`ií”»Z<C1衽$\"-饧?℃\u0010⼒{î°p飗%R\"ä²”\")ì¹€\\%": true,
+ "苧.8\u00120ݬ仓": 6912164821255417986,
+ "ë–Žé¡£ä¿X;.#Qí‹.笂'p쟨唒í랩냆¦aâ±{è°.b我$蜑SH\u000fç¾=äŸ¼â£¼ï©¿áœæ”•B&挰繗ã”ê…‚-Qv\\0ä¶äš¥ãºio[㑮-ᇼ䬰컪ṼiY){ë°\u0010q螰掻~\n輚x\u0014罺)è»´": 3.024364150712629E-20
+ }
+ ]
+ ]
+ ]
+ ]}
+ ]]
+ }
+ ]
+ ]]
+ ]
+ ]]]],
+ "\"凲o肉Iz絾豉J8?i~傠᫽䇂!Wï›—D溊J?á¡’vsè†åµ¹âž’ïŸæ·´î‡…>ì„«^諎0Ok{켿æ­à·£èƒ°a2﨤[탳뚬쎼嫭뉮m": 409440660915023105,
+ "w墄#*ᢄ峠밮jLa`ㆪ꺊漓Lã§ëŽ!Agkï¹ï¾'ê›ë¢ƒã¯å²¬D#ã’¦": false,
+ "ଦPGI䕺L몥罭ꃑ궩﮶#⮈ᢓӢ䚬p7웼臧%ï‘¥~Sè âŒíž€6îž’&t䳙y㪘ëƒ\\*;é‰ï¿Šé¿µ'å—•pa\"oL쇿꬈Cgî“": "ã¶½1ç¸D⟸䴅ᆤ뉎﷛渤csî¸x ä”цꬃ锚æ¬?ຽ+x~꘩uI࡞\u0007æ ²5呚ẓem?è¢\")=㥴䨃pac!/æŽY",
+ "á·±o\\||뎂몷r篙|#X䦜I#딌媸픕åžRDæ–³X4t⯩夬=[ï‹ë­²r=绥jhë·±ì¸âª˜%]⚋܈㖴スHí…¹m(WOæ›åЉ0~K3c柢Õã‰ïªªé€³~": false,
+ "ç…½_qb[첑\\륌wEâ½Ztï”´CNï­+餌ᕜOê›­": "{ﳾ쉌&s惧á­âµ†3䢫;䨞팑ï›ê’ªí˜è¤€à¢–Qä ¿V5뭀䎂澻%ë°›u5í…¸oA⮥U㎦;B䳌wzä•™$áž¿\\௅婺ëµâª¾í†\\`Kyौꋟ._\u0006L챯l뇠Hi䧈å’5",
+ "艊ä½à£ƒë¡‡ä± çˆ¬ï˜‚!*;⨣æŽïžæ…“qé“|儑ᨋL+è¿¥=6㒺딉6弄3è¾…J-㕎뛄듘SG㆛(\noAzQê±ä°©X*ã¢O퀌%펠낌moí‹®a^<\/F&_눊ᾉ㨦ы4\"8H": 2974648459619059400,
+ "鬙@뎣䫳á®ë¡?){y?5K;î§„TA*k溱䫜J汃ꂯ싔ì\u001dA}룖(<\/^,": false,
+ "ëª@QꋦFꊩá’뎶î‡lXl垨4î¤^郣|ꮇ;ä´á“}ìµ²zç–": null
+ }
+ ]]]],
+ ":_=ë‹§å¼—D䙋暨é›. 㱻붘ä‚Jå„’&ZK/녩䪜rå›â½¯D喠죥7ï“⹌䪥c\u001a\u2076￞妈朹oLkè®F౟覛ì§ã®7T;}è›™2{9\"å´“bB<\/⡷룀;즮鿹)丒툃୤뷠5W⊢嶜(fb뭳갣": "E{å“1WM"
+ }},
+ "䘨tjJ驳豨?y輊M*᳑梵瞻઻ofQG瑮e": 2.222802939724948E-19,
+ "ä®´=â‘âž¶Tà·‹wäžœ\"垦ꃼUt\u001dx;B$뵣䙶E↌艣ᡥ!á§Ÿ;ä±€[䔯k쬃`à©8饙른ç†î‹”'2_'袻tGfè’­J땟as꯳╖&å•’zWࡇᒫYSá¬\u0014ℑ첥鈤|cG~Pá“®\">\"": "ႆl\f7V儊㦬nHꄬꨧC{ì¢~C⮃⛓嶦vꄎ1w鰠嘩뿠魄&\"_qMâµ–é‡”ë…®îœ¡ê‡ ãš{ç³Jå“‹ cî°¸v?-jkﻯྌ鹑L舟r",
+ "龧葆yB✱H盋夔ﶉ?n*0(": "ꧣኆ㢓氥î³qZZ酒ຜ)鮢樛)X䣆gTSî»»Ò‘Gí…žï’˜k.J圬ç–ë¡«ïœì¯­z L:\\ྤ@w炋塜쿖ᾳy뢀䶃ë±N䥨㚔勇ê²#p",
+ "ë„畎Q娡\"@S/뼋:äµ!Pè¡…ì´šfVHQs✜á«i㻑殡B䜇%믚k*U#濨낄~": "êŸá‹•ì³¸êˆæ•‹&lå¦\u0005憡멗瘌uPgá…ªm<\/To쯬锩h뒓k"
+ }
+ ]
+ }],
+ "墥홞r绚<\/⸹ⰃB}<躅\\Y;๑@䔸>韫䜲뱀X뗩鿥쩗SI%ﴞ㳕䛇?<\/\u00018x\\&侂9é‹™a[LRã‹­W胕)â¡¿8ãž™0JF,}?í—ˆd1cDMáƒâ›é„ⱕ%X)!XQ": "â³ê—³=橇a;3t⦾꼑仈î¥á€°aᚯ⯋ꕃAsé´·Nâ•_䎃ꙎAz\u0016䯷\\<à¿«>8q{}ï½·?ᣰ}'0ᴕ펓B┦lF#趤厃T?㕊#撹圂䆲"
+ },
+ "Ü‹ë‹é¾«ï¥c웑": false,
+ "ㇿ/q\"6-co髨íœCí¦#\u001b4~?3ä¹E삇<<": 7.600917488140322E-20,
+ "äE6?㣖êƒé—´t祗*é‘ {ḣV(æµ¾h逇íž=W?ૉ?nꇽ8ꅉຉj으쮺@Ꚅ㰤u]Oyr": "vâ‰á«¸_*όAඤԆl)ۓᦇQ}í zà¼q滚",
+ "ソ᥊/넺I": true
+ }]]
+ ]
+ ]
+ ]
+ ]]
+ },
+ "䭑Ik攑\u0002QV烄:芩.麑㟴㘨≕": true,
+ "å„꿕C쇻풉~å´%碼\\8\"䬦꣙": null,
+ "欌L圬䅘Y8c(♺2?ON}o椳s宥2䉀eJ%é—¹rå†O^K諭%凞⺉⡻,掜?$ꥉ?略焕찳㯊艼誜4?\"﯎<ï±ã‚›XáˆINT:è©“ +": -1.0750456770694562E-19,
+ "ç’àc뜭싼ﺳ뎤K`ïŸ]p隨LtE": null,
+ "ç”™8䵊神EIꩤé¯á¢€,ïµ®Uä‘u疒ử驺䚿≚ഋ梶秓F`覤è­#짾蔀묊4<åªì¬¦éª_Yzgcà¡¶î²§4kç´¥`kc[Lï®—î°£ç°*I瀑[â¾°L殽鑥_mGÈ <\/|囹ç gæ¡°iri": true,
+ "챓ꖙꟻì¢è‡ou,å— 0\\jK핻뜠qwQ?ഩ㼕3Y彦b\u009bJ榶N棨f?ë¦é–綃6é³µM[OEë´¨uí–.Ꮁ癜蟳뽲ꩌ뻾rM豈Rï¨ç¾« uDꎚ%": null
+ },
+ "V傜2<": 7175127699521359521
+ }],
+ "é“«aG切<\/\"ী⊆e<^g࢛)Dé¡ï½Žï¬®é¥¼\u008c猪繩嵿ﱚCꡬ㻊g엺Aì—¦\u000fæš¿_f꿤ë³ã¦•桦`蒦䎔j甬%å²rj ç³": "䚢åŽëˆ´Au<4箞7礦Iï±”å eȧ䪸uï„€äµp|逹$嗫쨘ꖾï·!胠z寓팢^㨔|u8Nሇe텔ꅦ抷]،鹎ã³#༔繁 ",
+ "낂乕ꃻ볨ϱ-ꇋã–fsâ¿«)zꜦ/K?솞♞ꑌ宭hJ᤭瑥Fu": false,
+ "쟰ãœé­›G\u0003u?`㾕ℾ㣭5螠烶這趩ꖢ:@å’•ê¶xë’˜ëŠmä°¨bç—ƒë 0鳊喵熬딃$摉_~7*ⱦ녯1錾GKhJ惎秴6'H妈Tᧅ窹㺒疄矤铟wላ": null,
+ "쯆q4!3錕ã²âµ†ã‡›ê˜·Zç‘©ë­†\\â—ªNH\u001d\\ã½°U~㯶<\"쑣낞3ᵤ'峉eꢬ;鬹o꣒木X*é•·PXᘱu\"ä ¹n惞": null,
+ "ᅸ祊\"&ꥴCjࢼ﴿?䡉`U效5殼㮞V昽êª#ﺸ\\&t6x꠹盥꣰a[\u001aêªSpe鎿蠹": -1.1564713893659811E-19
+ }
+ ]]
+ ]
+ ]
+ ],
+ "羵䥳H,6ⱎ겾|@t\"#í–Šî¦1|稃 ì„­)ëœ=뻔ꡜ???櫎~*ῡ꫌/繣ﻠq": null
+ }
+ ]}
+ ]},
+ "츤": false
+ }},
+ "s": 3.7339341963399598E18
+ }
+ ],
+ "N,I?1+㢓|ࣱ嶃쩥V2\u0012(4EE虪朶$|w颇væ­¥": "~ì¢~_,Mzrã«YB溓Eæ·š\"â…¹äˆ”áºæŠ™ b,nt5Vã’J檶ê¨â»”?",
+ "Q껑ꡡ}$넎qHç…”æƒ/ez^!ẳF댙äŒé¦»å‰8": "梲;yté’°$i冄}Aî‘”L%a jëœå¥·ê±³ëš¾d꿽*ሬuDY3î…—?뮟鼯뮟wãªí‹±îŸ‚V",
+ "o{Q/K O胟ãzUdê€m&⨺J舕â¾é­¸è¨ŸãŒ¥[T籨櫉å”í‚ aṭ뱫촙莛>碶覆⧬짙쭰ׯdAiH໥벤í¥_æ¸[ 0î­¬e:죃TCå¼¼èŽëµDA:w唵ê£": null,
+ "á½æ¨Žäµ®è»§|?à±—aWH쩃1 ê…­su": null
+ }
+ ]
+ },
+ "勂\\&m鰈J釮=Ⲽ鳋+䂡郑": null,
+ "殣b綊倶5㥗惢⳷è¢á‘€ä¬„é•§M^ï±´3⣢翣næ«»1㨵}ኯ뗙顖Z.Q➷ꮨ뗇\u0004": "ê”™ä¼>n^[GीA䨟AMç¢á’ŠS쨲w?d㶣젊嘶çºéº“+æ„£a%気ྞScë“ᔘ:8bM7Xd8㶑臌]Ꙥ0ê­ì’™ä«£æŒµCè–½î€Dfⵃ떼᷸",
+ "?ç´¡.ì…ª_à·¨j\u0013Oxâ” $Xᶨ-á…‡oè–¹-}軫;yæ¯ãªœKã£?.EVì®±4둽⛻䤜'2盡\u001f60(|eì°ã¼Žá¦€ã’§-$l@ﻑå³\u0003ä­±å“å·—WFo5c㧆Tí„Y맸♤(": -2.50917882560589088E17
+ }}
+ ],
+ "侸\\릩.᳠뎠狣살cs项䭩畳H1s瀉븇19?.w骴崖㤊h痠볭㞳㞳ä®Ql怠㦵": "@䟴-=7f",
+ "鹟1x௢+d ;viä­´FSDS\u0004hꎹãš?â’â¦Ñž6u,扩@ë·Su)Pag휛Tá’—Vç—©!çžé‡€ê–žè˜¥&ೞè˜ê­°êž‡áŽ": "ah懱Ժ&\u20f7䵅♎඀䞧鿪굛ౕ湚粎蚵ᯋ幌YOE)५襦ãŠY*^\"R+ඈî¶å’·è¶9î—ꥂ榨艦멎헦é–ë¶v좛咊E)K㓷ྭr",
+ "æ†q쮦4綱켙ì….f4<\/g<籽늷?#蚴픘:fF\u00051㹉뀭.á°–í’ŽfÖ¦Hv蔎㧤.!ä­½=éž½]ìŒH:?\"-4": 8.740133984938656E-20
+ }]}
+ }
+ ],
+ "tVKn딩꘥⊾蹓᤹{\u0003lR꼽ᄲQFá…傅ﱋ猢⤊á”,E㓒秤nTà¶­v`â™›I\u0000]꫔ṞD\"麵cè¸î“²æ°X&æ¿¿ë˜ê£¹ê¹³à±¥è‘‚鿎\\aꡨ?": 3900062609292104525
+ }
+ ],
+ "ਉ샒⊩Lu@S䧰^g": -1.1487677090371648E18,
+ "⎢k⑊꬗yá«7^err糎Dt\u000bJç¤¯í™•ã†æ²‘サꋽeèµ”ã¢^J\u0004笲㿋idra剰-᪉C錇/Ĝ䂾ညSì§€?~ì½®gR敉⬹'ä§­": 1901472137232418266,
+ "ç—kä¶¥:?ì´½è´ì“‰ê“ˆã’¸gç˜[뵎\\胕?\u0014_榙p.j稶,$`糉妋0>Fá¡°ly㘽$?": "]ê™›O赎&#ã ƒë±å‰³î°·\"<â—†>0誉é½_|z|裵씪>áŒã¼\"Z[ç•}O?G뚇諦cs⠜撺5cuç—‘U圲\u001c?鴴計lì¶¥/╓哼䄗èŒîšªê®…뫈댽AëŒë¡–뤫V窗讬sHd&\nOi;_î´–u"
+ }
+ ],
+ "Uﺗ\\Y\\梷䄬~\u0002": null,
+ "k\"Y磓ᗔ휎@U冈<\/w컑)[": false,
+ "æ›Jè·âŒ»ë¦\u001f㙳s꥓âŸé‚«P늮쥄c∬ྡྷ舆렮칤Zè¶£5콡넛A쳨\\뀙骫(棻.*&è¼›LiIfi{@EA婳KᬰTXT": -4.3088230431977587E17
+ }]}
+ ]
+ ],
+ "곃㲧<\/dఓꂟs其ࡧ&N葶=?c㠤Ჴ'횠숄臼#\u001a~": false
+ }
+ ]
+ ]}]
+ }]
+ }}
+ ],
+ "2f`â½°E쵟>Jî•笂裭!〛觬囀ۺ쟰#桊l鹛ⲋ|RA_Vxá­gEë“h﵀mfá»|?juTUæ¡£[d⢼⺻p濚7E峿": 5613688852456817133
+ },
+ "濘ë¶gå¿®7ãµæ®¬W팕Qæ› ë«°)惃廊5%-î«è¹šzYZ樭ﴷQ锘쯤崫îŸgg": true,
+ "絥ᇑâ¦ì’“븣爚H.ã—Šß„o蘵貆ꂚ(쎔O᥉î¼ï®“]姨Wê“!RMA|o퉢THxè½®7Mê»U즨'i뾘舯o": "è·¥f꜃?"
+ }}
+ ],
+ "é·°é¹®K-9k;ï°°?_ݦѷ-ꅣ䩨Zꥱ\"mꠟ屎/콑Y╘2&鸞脇ã¢ê€‡à ºâ°¼æ‹¾å–­í‹®îL꽩bt俸墶 [l/웄\"꾦\u20d3iও-&+\u000fQ+໱뵞": -1.296494662286671E-19
+ },
+ "HX੹/⨇୕붷Uﮘ旧\\쾜͔3l鄈磣糂̖䟎Eá³wæ©–bá¿€_딕huè‘°î¤çª³é—¹Ð²U颵|染H죶.fPä—®:jä«¢\\b뎖i燕ꜚGâ® W-≚뉗lè¶•": "ଊ칭Oa᡺$IVã·§L\u0019脴셀붿餲햪$迳å‘ì¯ì¼‚PqfT\" ?î¹€I屉鴼쿕@ç¡™z^é•㊵M}ãš›T젣쓌-Wâ©-g%⺵<ë®±~빅╴瑿浂脬\u0005왦燲4áƒb|Då § <\/oEQh",
+ "䘶#㥘à©îººìº”ï” f巋ἡAJ䢚쭈ࣨ뫒*mᇊK,ࣺAꑱ\u000bR<\/A\"1a6鵌㯀bh곿w(\"$ê˜*rà²è¶£.dà¿©k/抶면䒎9W⊃9": "漩b挋Swè—Ž\u0000",
+ "畀e㨼mK꙼HglKb,\"'䤜": null
+ }]}]
+ ]
+ ]
+ }]
+ ]}
+ ]
+ ]}
+ ],
+ "æ­™>駿ꣂ숰Q`J΋方樛(d鱾뼣(ë«–í„­\u20f9lচ9æ­Œ8o]8윶lì–¶?é•–G摄탗6í‹íµ+g:䱫홊<멀뀿/س|ê­ºsê±è·¶ç¨šW々c㫣⎖": "㣮蔊깚Cꓔ舊|XRfé»ã†šï¸†'쾉ì·\\&言",
+ "æ®­\"cÞɨê™äž˜:嬮eæ½½Y펪㳅/\"O@à —ê²´]ì·–YÇž(t>R\"N?梳LDæ­=næ°¯Tè±°2R諸#N}*ç§ï¡§4}ã¶ŠGä£bì–š": null,
+ "襞<\/å•§ B|싞W瓇)6簭鼡艆lNì©`|펭佡\\é–“é‚[z릶&쭟愱ꅅ\\Tá°½1靝忠ˆ4̸s윜R7â’/똽?치X": "âŠèº–Cﱰ2Qẫè„&இ?%ëƒæ‚Š",
+ ",é°§åµì…£îˆ›ì‹¹xᎹ힨᯳EṬHïŽã¹–9": -4604276727380542356
+ }
+ }
+ ]]]],
+ "웺㚑xs}q䭵䪠馯8?LB犯zK'os䚛HZ\"L?셎s^㿧㴘Cv2": null
+ }]
+ ]
+ ]
+ ],
+ "Kdî©´2Kv+|z": 7367845130646124107,
+ "ᦂⶨ?ᢠ祂些ഷ牢㋇æ“\"腭䙾㖪\\(y4cE뽺ㆷ쫺ᔖ%zfÛ»$Ñž1柦,ã¶¢9r漢": -3.133230960444846E-20,
+ "ç˜Mç„€q%㢟f鸯Oâ£è“‘맕鯊$Oå™·|)z褫^㢦⠮ꚯ꫞`毕1qꢚ{ĭ䎀বώT\"뱘3G൴?ï¢ï¢^^oï…¯f": null
+ }
+ ],
+ "a8V᯺?:ﺃ/8ꉿBq|9啓댚;*i2": null,
+ "cpT瀇Hç°á»ªpೃi鎪Rrâ£ìˆ¬-鹸ҩ䠚z脚цGoN8å…¥y%è¶ŒI┽2ឪЀiJNcN)æ§£/â–Ÿ6S숆牟\"箑X僛G殱娇葱T%æ»:J諹昰qV쨰": 8331037591040855245
+ }],
+ "G5ᩜ䄗巢껳": true
+ }
+ },
+ "Ồ巢ゕ@_è­™A`碫é„㡥砄㠓(^K": "?܃B혢▦@犑ὺD~Tâ§|é†;o=J牌9냚⢽㨘{4è§èš”9#$∺\u0016p囅\\3Xk阖⪚\"UzA穕롬✎âžã­’춺C㣌ဉ\"2瓑员ᅽê¶ë«}꽚ꞇ鶂舟彺]ê½JCè§éЉ",
+ "â†Äšè†\"b-í‰ACR言J謈53~V튥x䜢?ꃽɄY뮩ꚜ": "K/↾eèƒ}]Bs⾿q룅鷦-膋?m+æ­»^魊镲6",
+ "粡霦cæž‹AHíŸo礼Ke?qWcA趸㡔ê‚?\u000eì¶‚8iতᦜ婪\u0015㢼nﵿê»!á´é–¢\u001d5j㨻gfá¿©UK5Juä¸tã‹TI'?ã“t>⼟o a>i}á°—;뤕Ü": false,
+ "ꄮ匴껢ꂰ涽+䜨B蛹H䛓-k蕞fu7kLè°–,'涃V~챳逋穞cT\"vQ쓕ObaCRQã“¡â²®?轭⫦輢墳?vA餽=h䮇킵ní²í‰…喙?\"'1ç–¬V嬗Qdç—'Lự": "6v!së¯ã­Ÿî€µî¦˜ã£¯çƒ!磸餠ቂh0C뿯봗Fé·­gê–¶~コkK<ᦈTtïŽ\\è·“w㭣횋钘ᆹ듡䑚W䟾X'ê…”4ï€FL勉Vܴ邨y)2'〚쭉⽵-鞣E,Q.?å—",
+ "?(˧쩯@å´Ÿå‹æ­„K": null
+ },
+ "Gc럃녧>?2DYIé´¿\\륨)æ¾”0ᔬlx'è§”7젘⤡縷螩%Sv׫묈/]↱&S ï…h\u0006æ­‹á‘›xi̘}ã²Y蔯_醨鯘煑橾8?䵎쨋z儬ê*@츾:": null
+ }
+ }
+ }
+ ]
+ ]
+ ]}
+ },
+ "HO츧G": 3.694949578823609E17,
+ "QC\u0012(翻曇Tfã·ŸbGBJ옉53\\嚇ᛎDï–/\u001b夾á‰4\"í•€@祎)쫆yD\"i먎Vnî¿ã¿¿V1Wá¨ä¶€": -6150931500380982286,
+ "Zã“®P翸é±é‰¼K䋞꘺튿â­Y": -7704503411315138850,
+ "]모开ꬖP븣c霤<[3aΠ\"é»ä––䰑뮋ꤦ秽∼㑷冹T+YUt\"싳F↭ä–&鋌": -2.7231911483181824E18,
+ "tꎖ": -4.9517948741799555E-19,
+ "䋘즊îŽ.⬅IꬃۣQ챢ꄑé»|f?C⾺|å…•ì¯sC鬸섾整腨솷V": "旆柩l<Ké«î–žM戶鯮t:wRî°2ꉱ`9'l픪*í芦㊢Pjjoå ¡^ ì‡ì–›å¶…있ষ0?F",
+ "下9T挞\\$yᮇk쌋⼇,ਉ": true,
+ "櫨:ㆣ,é‚lî ¬r崕祜ã®çƒœZ,XXD蕼㉴ kM꯽?P0﹉릗": null,
+ "îŠgv솠歽閘4镳䗄2æ¾¾>쪦sá–¸My㦅울ì‰ç˜—㎜檵9ï……ê‚駓ૉᚿ/u3ì”…å¾ï¤¥[Z䞸ࡗ1ꆱ&Q풘?Ç‚8\u0011BCDY2볨;é¸": null,
+ "幫 nç…¥sì‡íއ 왊-$C\"è¡:\u0014㣯舼.3ë™—Yl⋇\"K迎멎[ê½µs}9鉳UK8ì¥\"掄㹖h㙈!얄સ?Ꜳ봺R伕UTD媚I䜘Wé¨è”®": -4.150842714188901E-17,
+ "ﺯ^ã„„\b죵@fྉkf颡팋î¤êž¦{/Pm0V둳⻿/è½éŸ’ꊔᚬ@5螺G\\å’¸a谆⊪ቧ慷绖?è´¢(é·‡uéŒF=ráæ©¢áž³n:^iá´µtD볠覅Nèµ´": null
+ }]
+ }]
+ }
+ ]
+ ]}
+ ]},
+ "謯?w厓奰Tï§¡í——èážè²–o⪇弒L!캶$ᆅ": -4299324168507841322,
+ "뺊奉_åžæµ¸å»¶ëªå­„Z舰2i$q붿좾껇d▵é¤\"v暜Ҭì„mï¿´g>": -1.60911932510533427E18
+ }
+ ]
+ }
+ ]
+ ]],
+ "í‰êº”㠦楶Pê…±": 7517896876489142899,
+ "ï™°": false
+ }
+ ]},
+ "是u&I狻餼|è°–j\"7cë®sï­-踳鉷`䣷쉄_A艣鳞凃*m⯾☦椿q㎭Nîœæº”铉tlㆈ^": 1.93547720203604352E18,
+ "ï…µkⲨ\\%vr#\u000bâ’ºY\\t<\/3﬌R訤='﹠8è¤êž´ë ´æ›”r": false
+ }
+ ]},
+ "阨{c?C\u001d~K?鎌Ԭ8烫#뙣Pì´ˆé—tã­±E­ë’䆺}ç”—[R*1!\\~hã•…á°º@<9JêષIä³–æ ­6綘걹ᅩM\"▯是∔v鬽顭⋊譬": "ìš´ï¶Kæ•‚(欖C취پ℄爦賾"
+ }
+ }}
+ }],
+ "鷨赼鸙+\\ä­£t圙ڹx᜾ČN<\/踘\"S_ë§¶a鷺漇T彚⎲i㈥LT-xA캔$\u001cUH=a0츺l릦": "溣㣂0æ¿•=鉵氬駘>Pꌢpb솇쬤h힊줎çªãª¬CrQ矠a&è„꼬爼M茴/á¿®\u0017å¼è½¼y#êž c6ë‘´=?Rå´ë· éº–w?"
+ },
+ "閕ᘜ]CT)䵞l9z'xZF{:ØI/躅匽ì¡:䟇AGF૸\u001cퟗ9)駬慟ꡒꆒRS״툋A<>\u0010\"ꂔ炃7gëšEà§îˆbꅰ輤]oã±_뷕ܘ暂\"u": "芢+U^+㢩^鱆8*1鈶鮀\u0002뺰9⬳ꪮlL䃣괟,G8\u20a8DF㉪錖0ㄤ瓶8Nଷd?眡GLc陓\\_죌Vì°à¤²äºŒ?cë¦æ± \u0019JC\u0011b⤉zẒT볕\"绣蘨뚋cꡉkî« I\u001eé³´",
+ "ꃣI'{6u^㡃#཰Kq4逹y൒䧠䵮!㱙ï®/n??{Lí’“ZETã™ í¿X2᩟綳跠葿㚙w཮x캽扳B唕S|å°¾}ì´•%N?o䪨": null,
+ "ⰴFjà·Ÿì…ˆ[\u0018è¾·px?椯\\1<ﲻ栘á£ë´¢æ† ë‰´p": -5263694954586507640
+ }
+ ]
+ ]]
+ ]}
+ ]}]
+ ]
+ ],
+ "?#癘82禩鋆êŠty?&": -1.9419029518535086E-19
+ }
+ ]
+ ]
+ ]}
+ ]
+ ]
+ ],
+ "훊榲.|῕戄&.ãšZꛦ2\"䢥ሆ⤢fV_æ‘•å©”?â‰Fji冀탆꜕iã¬_ẑKᅢ꫄蔻XWc|饡Siẘ^㲦?羡2ã´1ç¸á™…?ì‰Ou": false
+ }]]
+ ]}}},
+ "æ…‚ë—„å“è“”á“åŒåš–/颹蘯/翻ㆼL?뇊,í…µ<\\ç·ã”Cボ": null
+ },
+ "p溉ᑟi짣z:䒤棇r^٫%G9缑r砌롧.물农g?0׼ሩ4ƸO㣥㯄쩞ጩ": null,
+ "껎繥YxK\"F젷쨹뤤1wq轫o?鱑뜀瘊?뎃hç‘\\ꛣ}Kå³^ኖâ¤ï§´ê‰“hy": null
+ }
+ ],
+ "á±€nè‚“ã„›\"å »2>mæ®®'1橌%êž´êµ°=Ӳ鯨9耛<\/n據0u彘8㬇៩fá¿è¯™]嚊": "䋯쪦S럶åŒã…›#î½)O`ሀX_éªæ¸²â›€ã¨»å®…闩➈ꢙஶDRâª"
+ },
+ "tAì“龇 â‹¥bj왎录r땽✒롰;羋^\\?툳*┎?ì€ma䵳넅U䳆૘〹䆀LQ0\bç–€U~u$M}(鵸gï­â³¾i抦뛹?䤈땚검.鹆?ê©¡tâ¶¥GÄ’;!ቹHïš©Så³»B츪ì¼f5≺": 2366175040075384032,
+ "ì „pJjleb]áž½": -7.5418493141528422E18,
+ "n.鎖ጲ\n?,$䪘": true
+ },
+ "欈Ar㉣螵᪚茩?O)": null
+ },
+ "쫸M#x}Dç§±æ¬K=侫们ä¸ï‡ª.KꕾxẠ\u001e㿯䣛FÜ캗ï¬qq8꟞ṢFD훎⵳簕꭛^鳜\u205cÙ«~⑟~冫ऊ2ì«°<\/戲윱o<\"": true
+ },
+ "ã·è¥/T뱂\u0010锕|内䞇xä¾â‰¦ã­–:M?iM᣿IJeç…œdG࣯尃⚩gPt*辂.{磼럾äª@a\\袛?}ᓺBç¼": true
+ }
+ }
+ ]]}]}},
+ "tn\"6î´ê«¤ìƒ¾ä„„;銞^%VBPwu묪`Y僑N.↺Ws?3C⤻9唩Sä ®á´m;sᇷ냞඘B/;툥B?lB∤)G+O9m裢0kC햪䪤": -4.5941249382502277E18,
+ "áš”t'\\æ„«?éµ€@\\ã³ê‚•Pí <<]ç…¹G-b!S?\nꖽ鼫,Ý›&é ºy踦?Eæ†î¬–릱H}햧캡b@手.p탻>췽㣬ꒅ`qeä½­P>á“‚&?u}毚ᜉ蟶頳졪áŽzl2wO": -2.53561440423275936E17
+ }]}
+ }
+ ]
+ ]],
+ "潈촒⿂å¡": 5495738871964062986
+ }
+ ]]
+ }
+ ]
+ ]}
+ ]]
+ ]]
+ ]}
+ ]
+ ]},
+ "á‚qí‚è“…R`謈èŸá¦î’³å„‚æ§åƒ»ï¹¶9å©Œî¬æ«žé‡ˆ~\"%匹躾ɢ뤥>࢟瀴愅?殕节/냔O✬H鲽엢?ᮈà©î“Žâ‹§dâ½ã«zCe*": 2.15062231586689536E17,
+ "ã¶µUi曚ç°é‹ªá¾¼è‡§P{ä䷪쨑̟A뼿T渠誈äšD1!ìž¶<\/ã¡7?)2l≣穷᛾ç¨{:;㡹nemיּ訊`Gî¹²": null,
+ "䀕\"飕辭påœf#뫆䶷뛮;â›´á©3çšëá°ìŽ“â¦·è©µ%᜖Մfs⇫(\u001e~P|ï­—CⲾផv湟W첋(텪બTî¾·<บSê‰à©—⋲X婵i ӵ⇮?L䬇|êˆ?졸": 1.548341247351782E-19
+ }
+ ]
+ },
+ "t;:N\u0015qé¦Rt缆{ê®C?஛㷱敪\\+鲊㉫㓪몗릙ç«(æ°µkYS": "Xá°‚T?൮ô",
+ "碕飦幑|+ 㚦é¶`é•¥ê© B<\/加륙": -4314053432419755959,
+ "秌孳(p!G?Vå‚«%8ሽ8w;5鲗㦙LI檸\u2098": "zG N볞䆭éŽí˜\\ONK3íš™<\/樚立圌Q튅k쩎Ffì‹aׂJK銆ઘì¦ç‹©6༥✙䩜篥CzP(è»é§‡HHퟲ讃%,ά{ë p而刲vy䦅ክ^톺M楒é¢ã¹³]Mdg2>䤉洞",
+ "踛M젧>忔芿㌜Zk": 2215369545966507819,
+ "ì”A`$æ§­é °í»^U覒\bG毲aᣴU;8!팲f꜇E⸃_åµ{å«ç¾ƒX쀳C7ë—®m(åš¼u NÜè°ŸD劯9]#": true,
+ "ﻩ!뵸-ç­šPá­›}á¼°å±¥lPh?౮ⶹꆛ穉뎃gè‘㑓溢CX뾇Gã–¬A錟]RKï’î´²aꄘ]Yo+@ä˜'s섎襠$^í™°}F": null
+ },
+ "粘ꪒ4HXᕘ蹵.$å€\r\u001dë¬77pPc^yî¶ç¬²Q<\/ê–¶ è¨äƒá¨•G?*": 1.73773035935040224E17
+ },
+ "婅拳?bkU;#D矠â´vVN쩆t㜷A풃갮娪a%é®çµª3dAv룒#tm쑬⌛qYwc4|L8KZ;xU⓭㳔밆拓EZ7襨eD|隰ऌ䧼u9Ô¢+]è´´Pè¿": 2.9628516456987075E18
+ }]}}]
+ ]}
+ }}
+ ]}]
+ ],
+ "|g翉F*湹̶\u0005â1脉̀eI쩓ᖂ㫱0碞l䴨ꑅ㵽7AtἈ턧yq䳥塑:z:é€ï¾¼X눔擉)`N3昛oQì…–y-ڨ⾶æ¢êˆµq^<\/": null,
+ "è¹\\ëž“G^璬x৴뭸ゆUSê²§ï®·Bꮤ ┉銜᯻0%N7}~fæ´‹å„Xꔼ<\/4妟Vꄟ9:౟곡t킅冩䧉笭裟炂4ë´‹â±³åºæ€Št+怯涗\"0ã–ˆHq": false,
+ "졬믟'ﺇফ圪쓬멤m邸QLà¦¬ä—æ„4jvsç¿™ à¾ê§€è‰³H-|": null,
+ "컮襱⣱뗠 R毪/鹙꾀%헳8&": -5770986448525107020
+ }
+ ],
+ "î½­B䔚bê»ë™å§“展槰T-똌鷺tcï§ç¿á«½^㓟ä€o3o$꘭趙è¬Ié¡©)뇭Ἑä“\f@{ᣨ`x3è”›": null
+ }
+ ]
+ ]
+ }],
+ "⦖扚vWꃱ꥙㾠壢輓{-⎳鹷è´ç’¿äœ‘bG倛â‹ç£Žc皇皩7a~ﳫUâ•£Q࠭ꎉS摅姽OW.홌ೞ.": null,
+ "蚪eVlH献r}á®ë¯ ï°©ê”„@ç‘„â²±": null,
+ "퀭$JWoê©¢gì—­ì䖔㑺h&à­¢tXX愰㱇?㾫I_6 OaB瑈q裿": null,
+ "꽦ﲼLyr纛ZduçB絟쬴糔?ã•‚ì§¹äµe": "ḱ\u2009cX9ë©€i䶛簆㳀k"
+ }
+ ]]]],
+ "(_ê®g່澮?ᩑyM<艷\u001aꪽ\\庼뙭Zë§·ã°©Vm\\lYç­º]3㋲2㌩㄀Eਟäµâ¨„ì¨á”ŸgङHné–⤇놋瓇Q탚單oY\"♆臾jHᶈå¾îž«á‰„??uㇰA?#1侓": null
+ },
+ "è§“^~ሢ&iIë†g륎ḱ캀.ᓡꀮ胙鈉": 1.0664523593012836E-19,
+ "yè©­GbᔶऽsëŒU:æœî „⤎ϲì—⮼D醄诿që™°I#즧v蔎xHᵿt᡽[**?崮耖p缫쿃Lè,ë´¬ï–ꤦC쯵#=X1çž»@OZc鱗CQTï‹„x": null
+ }
+ ]
+ }}],
+ "剘ç´\u0004\\Xn⊠6,á€×±;嵣崇}讃iႽ)d1\\䔓": null
+ },
+ "脨z\"{X,1u찜<'k&@?1}Yn$\u0015Rd輲ーa쮂굄+B$l": true,
+ "諳>*ì­®ê´äµŸÒ+<ç®}빀䅱⡔æªï€è‡’hIH脟ꩪCí•ଗP좕\"0i<\/C褻DÛžæ—+^5?'ꂱ䚫^7}ã¡ cq6\\쨪ꔞꥢ?纖䫀氮蒫侲빦敶q{Aç…²G": -6880961710038544266
+ }}]
+ },
+ "5s⨲JvಽῶꭂᄢI.a৊": null,
+ "?1qê½ì¿»ê›‹DR%Uå¨>DgNä¹­G": -1.2105047302732358E-19
+ }
+ ]
+ ]},
+ "qZz`撋뙹둣j碇ì\\ꆥ\u0018@ïœè—´ç–°Wz)O{Fä¶›l᷂绘訥$]ë®å¤»ä¢‹ä©‡è¿ç°æ¨§çŒµâ£­jè¶q)$꬚⵷0馢W:â°!Qoe": -1666634370862219540,
+ "t": "=î¹›wp|~碎Q鬳Ó\\l-<\/^ﳊhní–}ä”t碵ḛ혷?é»äŠ—",
+ "邙쇡㯇%#=,î‰E4勃驆V繚q[Y댻XV㡸[逹á°è‘¢B@u=JS5?bLRnì–®ã‰â…ï°³?a6[&íŸ!è—ˆ": 1.2722786745736667E-19
+ },
+ "X블땨4{ph鵋ꉯ웸 5p簂䦭s_E徔濧dç¨~No穔噕뽲)뉈c5M윅>âš‹[岦䲟懷æ?éŽê“†à¸¬çˆ‹ç äœ”s{\u001bméšå„¸ç…›%bﯿXT>ê—˜@8G": 1157841540507770724,
+ "媤娪Qæ¸ï‡\u0011SAyᡈ쿯": true,
+ "çš^ಸ%ê±<\/蛯<O\"-刷ã R(kO=䢊䅎l䰓팪A絫픧": "è­”\\ãš„ ?R7㔪G㋉⣰渆?\\#|gN⤴;Wì¹·A׫癮଼ೣã³ë’œ7dæ“ê¾²0扬S0ᆵi/贎ྡn䆋武",
+ "è‡ç ‡Gã“æœ¦ì¼‹Wq`㞲攊*å†î‘µî¨~霓L剢zI腧튴Tç¹™Cঅ뫬╈뮜ㄾ䦧촄椘B⊬츩r2f㶱厊8eϬ{挚â¯OM焄覤\\(KÓ¡>?\"祴å“\\\\'í": -3.4614808555942579E18,
+ "釴U:O湛㴑䀣렑縓\ta)<D8ï­³æ§é«­D.L|xsæ–‹æ• \"ë‹æ—©7wáŽ": true,
+ "쵈+쬎簨up䓬?q+~\u0019仇îŒëµˆá«¯3áµ£æ˜æž°åŠ«ãª¢uç˜-퀭:ì»™:u`⌿ï«A(9鄦!<çšnj3:Hà£¨å·‹ä€æ—¸ëŽˆë§»v\"\\(곘vO㤰aZe<\/W鹙鄜;l厮ë‘": null,
+ "î–·": -1.2019926774977002E-18,
+ "%者Oî–‹7.Nêªs梇接z蕜綛<\/䜭\"죊y<曋漵@Śâ¹sD⟓jݗᢜ?zî–†/9á²Ma쨮긗贎8ᔮ㦛;6p뾥໭䭊0B찛+)(Yã¿ é¸ä•’^옥": "鬃뫤&痽舎Jì½®è—󽸰ᨨMꈫ髿v<N\\î·.ì‚’ê»…Ñ1ê­¼5ä´·5쳬臨wjë¥"
+ }],
+ "é·Ž'ã³—@帚妇OAj' è°¬f94ǯ(횡ヒ%io쪖ì‚좛>(j:숾å´ä—ŒgCiB뽬Oyuqè¼¥åŽ/7)?今hY︺Q": null
+ }
+ ]
+ ]]]}]
+ ],
+ "I笔趠Ph!<ཛྷ㸞诘X$畉F\u0005笷èŸ.Esr릙!W☆ï›ä²–뗷莾뒭U\"䀸犜Uo3ï¯Gꯌx4r蔇᡹㧪쨢準<ä‚€%ࡡꟼç‘8ç‚Xs0ä€é”€?fi쥱ê†àª²BB": -8571484181158525797,
+ "Lâ¦o#J|\"⽩-ã±¢d㌛8d\\㶤傩儻E[Y熯)r噤὘勇 }": "e(濨쓌K䧚僒ã˜è ¤Vᛸ\"络QJL2,嬓ì™î¿‰ä¼¢ã‹’䴿考澰@(ã¾`kX$ë‘ÑE斡,èœ&~y",
+ "vj.|统圪ᵮPL?2oŶ`ë°§\"勃+0ue%⿥绬췈체$6:qaë Q;~晘3㙘鹑": true,
+ "à·Ø™4ç„â¶¿c︋iâš…:ã‚“é–Ⳙ苆籦kw{䙞셕pCì·ƒê¬âœêŸ¯êš“é…„bížhwkê­­M鬋8B耳쑘WQ\\å™ac'唀x᪌\u2048*hì§Ž#á‡é® ë¾áž¿ë€Œ": false,
+ "⎀jꄒ牺3Ⓝ컴~?親ꕽã¼Ü“å–瘘!@<튋ãŒê¿±â©¦{a?Yv%⪧笯Uܱ栅Eæši뚬:ꄃx7䙳ꦋ&䓹vq☶Iä˜á¾˜æ¶œ\\ì‰ëºŒLr%Bcãœ3?î¤ï…¨ê­ç ¿è£ž]": null,
+ "⭤뙓z(㡂%亳K䌽꫿AԾ岺㦦㼴輞낚Vꦴw냟鬓㹈뽈+o3譻K1잞": 2091209026076965894,
+ "ㇲ\t⋇轑ꠤ룫X긒\"zoYì‡í¬wjæ¢ì‘l侸`e%s": -9.9240075473576563E17,
+ "啸ꮑ㉰!áš“}éŠ": -4.0694813896301194E18,
+ "ï‰>]囋੽EK뇜>_ꀣ緳碖{ì裔[<ನ\"䇅\"5L?#îµ³xTwv#ç½\u0005래t应\\N?빗;": "v쮽瞭pë­ƒ"
+ }
+ ]],
+ "æ–´æ§¾?Zç¿\"~æ…弞ﻆ=꜡o5é‹ï’½dw\"?Kè ¡i샾ogDï²°_C*⬟iㇷ4nયèŸ[㟉U꽌娛苸 à§æ“贻洞펻)쿗૊許X⨪VY츚Zä¾ã¶­~튃ᵦ<\/E臭tve猑x嚢": null,
+ "锡⛩<\/칥ꈙᬙè€&êšç±¬â– 865?_>Lè©ì¿¨äˆŒæµ¿å¼¥ï©‰Ì«î¾½ï‘lj&zx<\/C쉾?覯n?": null,
+ "꾳鑤/꼩ï¨d=ᘈn挫ᑩ䰬ZC": "3錢爋6Ƹ䴗v⪿Wr益G韠[\u0010å±—9ì¡é’u?殢c䳀蓃樄욂NAq赟c튒ç˜ë ¶î‚³Aà«¡Éšæ"
+ }
+ ]
+ ]
+ ]}
+ ]
+ ]
+ }]]]}}
+ ]}],
+ "ï‚’Ejä—³U<\/Q=ç’샎䞦,å °é  @褙g_\u0003ꤾfâ¶½?퇋!łB〙ד3CC䌴鈌U:뭔咎(Qો臃䡬è‹BO7î¼§ã¢äŸ¸\"Yb": 2.36010731779814E-20,
+ "逸'0å²”j\u000e눘먷翌C츊秦=ꭣ棭ှ;鳸=麱$XP⩉駚橄A\\좱⛌jqvä°ž3Ь踌v㳆¹gT┌gvLBè³–ïžçƒ¡m?@E঳i": null
+ },
+ "曺vì°˜×?&绫OáŸ": 9107241066550187880
+ }
+ ]
+ ],
+ "(e屄\u0019昜훕ç–b蓘ᬄ0/۲묇Z蘮á€â¨è›˜èƒ¯ë¢ƒ@㘉8ሪWᨮ⦬ᅳ䅴HIá‡ì¨³z囕陻엣1赳o": true,
+ ",b刈Z,á æ™Tì†Å•B⩆ou'í¼â‰ƒç»—é›—dè­Š": null,
+ "a唥KB\"ï³è‚•$u\n^â…„P䟼냉䞸⩪u윗瀱ꔨ#yÅŸsî««ê’¬=ï‹•1ïš–|ﲤ爢`tà±íмî£ì³«_Az(Ṋ擬㦷좕耈6": 2099309172767331582,
+ "?ã´¸U<\/䢔ꯡ阽扆ã¤qé‹?f㔫wM嬙-;UV죫嚔픞G&\"Cá—äªí’ŠQ": "VM7ç–¹+陕枡툩窲}ç¿¡ä–¶8欞ÄsTë®}ç’¤:jﺋ鎴}HfAàµâ§»Zd#Qï¬u茅J髒皣Y-︴[?-~쉜vë”璮㹚䅊﩯<-#\u000eê±€h\u0004u抱﵊㼃U<㱷⊱IC進"
+ },
+ "숌dee節é½é‚ºp넱蹓+e罕U": true
+ }
+ ],
+ "b⧴ë£??á” 3ã±>%郿劃ç¿ê¬ê ›Wï¡°çž³á«ëˆ„躨狀ໄy੽\"ីuS=㨞馸k乆E": "トz݈^9R䬑<ﮛG<s~<\/?ⵆá¥è€ç†·uë“·"
+ }}
+ ]
+ }
+ ]}
+ }
+ }
+ }
+ }},
+ "宩j鬅쳜Qê–јyç”Zá­µï1væ“–}䨿F%cֲ᫺贴m塼딚NP亪\"ï¿‹sa뺯ꘓ2:9뛓ï à¼‚쌅䊈#>Rꨳ\u000fTT泠纷꽀MR<CBxPñ±’«X쇤": -2.22390568492330598E18,
+ "?䯣ᄽ@Z鸅->ᴱ纊:ã ­ë³®?%N56%鈕1ä—äœaä²—j陇=ë¿»å‚衋࿘ᓸ?ᕵZ+<\/}H耢bä€z^f$&ã’LkꢳI脚뙛u": 5.694374481577558E-20
+ }]
+ }
+ ]],
+ "obj": {"key": "wrong value"},
+ "퓲꽪m{ã¶©/뇿#â¼¢&᭙硞㪔E嚉c樱㬇1aç¶‘á–DḾä©": null
+ }
} \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/data/webapp.json b/3rdparty/rapidjson/bin/data/webapp.json
index d540b57f0df..ee7b0f8bab2 100644
--- a/3rdparty/rapidjson/bin/data/webapp.json
+++ b/3rdparty/rapidjson/bin/data/webapp.json
@@ -1,88 +1,88 @@
-{"web-app": {
- "servlet": [
- {
- "servlet-name": "cofaxCDS",
- "servlet-class": "org.cofax.cds.CDSServlet",
- "init-param": {
- "configGlossary:installationAt": "Philadelphia, PA",
- "configGlossary:adminEmail": "ksm@pobox.com",
- "configGlossary:poweredBy": "Cofax",
- "configGlossary:poweredByIcon": "/images/cofax.gif",
- "configGlossary:staticPath": "/content/static",
- "templateProcessorClass": "org.cofax.WysiwygTemplate",
- "templateLoaderClass": "org.cofax.FilesTemplateLoader",
- "templatePath": "templates",
- "templateOverridePath": "",
- "defaultListTemplate": "listTemplate.htm",
- "defaultFileTemplate": "articleTemplate.htm",
- "useJSP": false,
- "jspListTemplate": "listTemplate.jsp",
- "jspFileTemplate": "articleTemplate.jsp",
- "cachePackageTagsTrack": 200,
- "cachePackageTagsStore": 200,
- "cachePackageTagsRefresh": 60,
- "cacheTemplatesTrack": 100,
- "cacheTemplatesStore": 50,
- "cacheTemplatesRefresh": 15,
- "cachePagesTrack": 200,
- "cachePagesStore": 100,
- "cachePagesRefresh": 10,
- "cachePagesDirtyRead": 10,
- "searchEngineListTemplate": "forSearchEnginesList.htm",
- "searchEngineFileTemplate": "forSearchEngines.htm",
- "searchEngineRobotsDb": "WEB-INF/robots.db",
- "useDataStore": true,
- "dataStoreClass": "org.cofax.SqlDataStore",
- "redirectionClass": "org.cofax.SqlRedirection",
- "dataStoreName": "cofax",
- "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver",
- "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
- "dataStoreUser": "sa",
- "dataStorePassword": "dataStoreTestQuery",
- "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';",
- "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log",
- "dataStoreInitConns": 10,
- "dataStoreMaxConns": 100,
- "dataStoreConnUsageLimit": 100,
- "dataStoreLogLevel": "debug",
- "maxUrlLength": 500}},
- {
- "servlet-name": "cofaxEmail",
- "servlet-class": "org.cofax.cds.EmailServlet",
- "init-param": {
- "mailHost": "mail1",
- "mailHostOverride": "mail2"}},
- {
- "servlet-name": "cofaxAdmin",
- "servlet-class": "org.cofax.cds.AdminServlet"},
-
- {
- "servlet-name": "fileServlet",
- "servlet-class": "org.cofax.cds.FileServlet"},
- {
- "servlet-name": "cofaxTools",
- "servlet-class": "org.cofax.cms.CofaxToolsServlet",
- "init-param": {
- "templatePath": "toolstemplates/",
- "log": 1,
- "logLocation": "/usr/local/tomcat/logs/CofaxTools.log",
- "logMaxSize": "",
- "dataLog": 1,
- "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log",
- "dataLogMaxSize": "",
- "removePageCache": "/content/admin/remove?cache=pages&id=",
- "removeTemplateCache": "/content/admin/remove?cache=templates&id=",
- "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder",
- "lookInContext": 1,
- "adminGroupID": 4,
- "betaServer": true}}],
- "servlet-mapping": {
- "cofaxCDS": "/",
- "cofaxEmail": "/cofaxutil/aemail/*",
- "cofaxAdmin": "/admin/*",
- "fileServlet": "/static/*",
- "cofaxTools": "/tools/*"},
-
- "taglib": {
- "taglib-uri": "cofax.tld",
+{"web-app": {
+ "servlet": [
+ {
+ "servlet-name": "cofaxCDS",
+ "servlet-class": "org.cofax.cds.CDSServlet",
+ "init-param": {
+ "configGlossary:installationAt": "Philadelphia, PA",
+ "configGlossary:adminEmail": "ksm@pobox.com",
+ "configGlossary:poweredBy": "Cofax",
+ "configGlossary:poweredByIcon": "/images/cofax.gif",
+ "configGlossary:staticPath": "/content/static",
+ "templateProcessorClass": "org.cofax.WysiwygTemplate",
+ "templateLoaderClass": "org.cofax.FilesTemplateLoader",
+ "templatePath": "templates",
+ "templateOverridePath": "",
+ "defaultListTemplate": "listTemplate.htm",
+ "defaultFileTemplate": "articleTemplate.htm",
+ "useJSP": false,
+ "jspListTemplate": "listTemplate.jsp",
+ "jspFileTemplate": "articleTemplate.jsp",
+ "cachePackageTagsTrack": 200,
+ "cachePackageTagsStore": 200,
+ "cachePackageTagsRefresh": 60,
+ "cacheTemplatesTrack": 100,
+ "cacheTemplatesStore": 50,
+ "cacheTemplatesRefresh": 15,
+ "cachePagesTrack": 200,
+ "cachePagesStore": 100,
+ "cachePagesRefresh": 10,
+ "cachePagesDirtyRead": 10,
+ "searchEngineListTemplate": "forSearchEnginesList.htm",
+ "searchEngineFileTemplate": "forSearchEngines.htm",
+ "searchEngineRobotsDb": "WEB-INF/robots.db",
+ "useDataStore": true,
+ "dataStoreClass": "org.cofax.SqlDataStore",
+ "redirectionClass": "org.cofax.SqlRedirection",
+ "dataStoreName": "cofax",
+ "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver",
+ "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
+ "dataStoreUser": "sa",
+ "dataStorePassword": "dataStoreTestQuery",
+ "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';",
+ "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log",
+ "dataStoreInitConns": 10,
+ "dataStoreMaxConns": 100,
+ "dataStoreConnUsageLimit": 100,
+ "dataStoreLogLevel": "debug",
+ "maxUrlLength": 500}},
+ {
+ "servlet-name": "cofaxEmail",
+ "servlet-class": "org.cofax.cds.EmailServlet",
+ "init-param": {
+ "mailHost": "mail1",
+ "mailHostOverride": "mail2"}},
+ {
+ "servlet-name": "cofaxAdmin",
+ "servlet-class": "org.cofax.cds.AdminServlet"},
+
+ {
+ "servlet-name": "fileServlet",
+ "servlet-class": "org.cofax.cds.FileServlet"},
+ {
+ "servlet-name": "cofaxTools",
+ "servlet-class": "org.cofax.cms.CofaxToolsServlet",
+ "init-param": {
+ "templatePath": "toolstemplates/",
+ "log": 1,
+ "logLocation": "/usr/local/tomcat/logs/CofaxTools.log",
+ "logMaxSize": "",
+ "dataLog": 1,
+ "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log",
+ "dataLogMaxSize": "",
+ "removePageCache": "/content/admin/remove?cache=pages&id=",
+ "removeTemplateCache": "/content/admin/remove?cache=templates&id=",
+ "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder",
+ "lookInContext": 1,
+ "adminGroupID": 4,
+ "betaServer": true}}],
+ "servlet-mapping": {
+ "cofaxCDS": "/",
+ "cofaxEmail": "/cofaxutil/aemail/*",
+ "cofaxAdmin": "/admin/*",
+ "fileServlet": "/static/*",
+ "cofaxTools": "/tools/*"},
+
+ "taglib": {
+ "taglib-uri": "cofax.tld",
"taglib-location": "/WEB-INF/tlds/cofax.tld"}}} \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/data/widget.json b/3rdparty/rapidjson/bin/data/widget.json
index 0449493a644..32690e8b763 100644
--- a/3rdparty/rapidjson/bin/data/widget.json
+++ b/3rdparty/rapidjson/bin/data/widget.json
@@ -1,26 +1,26 @@
-{"widget": {
- "debug": "on",
- "window": {
- "title": "Sample Konfabulator Widget",
- "name": "main_window",
- "width": 500,
- "height": 500
- },
- "image": {
- "src": "Images/Sun.png",
- "name": "sun1",
- "hOffset": 250,
- "vOffset": 250,
- "alignment": "center"
- },
- "text": {
- "data": "Click Here",
- "size": 36,
- "style": "bold",
- "name": "text1",
- "hOffset": 250,
- "vOffset": 100,
- "alignment": "center",
- "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
- }
+{"widget": {
+ "debug": "on",
+ "window": {
+ "title": "Sample Konfabulator Widget",
+ "name": "main_window",
+ "width": 500,
+ "height": 500
+ },
+ "image": {
+ "src": "Images/Sun.png",
+ "name": "sun1",
+ "hOffset": 250,
+ "vOffset": 250,
+ "alignment": "center"
+ },
+ "text": {
+ "data": "Click Here",
+ "size": 36,
+ "style": "bold",
+ "name": "text1",
+ "hOffset": 250,
+ "vOffset": 100,
+ "alignment": "center",
+ "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
+ }
}} \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/encodings/utf8.json b/3rdparty/rapidjson/bin/encodings/utf8.json
index 1e27ece50e4..c500c943f6b 100644
--- a/3rdparty/rapidjson/bin/encodings/utf8.json
+++ b/3rdparty/rapidjson/bin/encodings/utf8.json
@@ -1,7 +1,7 @@
-{
- "en":"I can eat glass and it doesn't hurt me.",
- "zh-Hant":"我能åžä¸‹çŽ»ç’ƒè€Œä¸å‚·èº«é«”。",
- "zh-Hans":"我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。",
- "ja":"ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“。",
- "ko":"나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요"
+{
+ "en":"I can eat glass and it doesn't hurt me.",
+ "zh-Hant":"我能åžä¸‹çŽ»ç’ƒè€Œä¸å‚·èº«é«”。",
+ "zh-Hans":"我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。",
+ "ja":"ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“。",
+ "ko":"나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요"
} \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/encodings/utf8bom.json b/3rdparty/rapidjson/bin/encodings/utf8bom.json
index 07e81e10528..b9839fe2fa7 100644
--- a/3rdparty/rapidjson/bin/encodings/utf8bom.json
+++ b/3rdparty/rapidjson/bin/encodings/utf8bom.json
@@ -1,7 +1,7 @@
-{
- "en":"I can eat glass and it doesn't hurt me.",
- "zh-Hant":"我能åžä¸‹çŽ»ç’ƒè€Œä¸å‚·èº«é«”。",
- "zh-Hans":"我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。",
- "ja":"ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“。",
- "ko":"나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요"
+{
+ "en":"I can eat glass and it doesn't hurt me.",
+ "zh-Hant":"我能åžä¸‹çŽ»ç’ƒè€Œä¸å‚·èº«é«”。",
+ "zh-Hans":"我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。",
+ "ja":"ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“。",
+ "ko":"나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요"
} \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/jsonchecker/fail27.json b/3rdparty/rapidjson/bin/jsonchecker/fail27.json
index 6b01a2ca4a9..e2aeef5ca2a 100644
--- a/3rdparty/rapidjson/bin/jsonchecker/fail27.json
+++ b/3rdparty/rapidjson/bin/jsonchecker/fail27.json
@@ -1,2 +1,2 @@
-["line
+["line
break"] \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/jsonchecker/fail28.json b/3rdparty/rapidjson/bin/jsonchecker/fail28.json
index 621a0101c66..3c8978fd8d3 100644
--- a/3rdparty/rapidjson/bin/jsonchecker/fail28.json
+++ b/3rdparty/rapidjson/bin/jsonchecker/fail28.json
@@ -1,2 +1,2 @@
-["line\
+["line\
break"] \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/jsonchecker/pass1.json b/3rdparty/rapidjson/bin/jsonchecker/pass1.json
index 70e26854369..01305d4e487 100644
--- a/3rdparty/rapidjson/bin/jsonchecker/pass1.json
+++ b/3rdparty/rapidjson/bin/jsonchecker/pass1.json
@@ -1,58 +1,58 @@
-[
- "JSON Test Pattern pass1",
- {"object with 1 member":["array with 1 element"]},
- {},
- [],
- -42,
- true,
- false,
- null,
- {
- "integer": 1234567890,
- "real": -9876.543210,
- "e": 0.123456789e-12,
- "E": 1.234567890E+34,
- "": 23456789012E66,
- "zero": 0,
- "one": 1,
- "space": " ",
- "quote": "\"",
- "backslash": "\\",
- "controls": "\b\f\n\r\t",
- "slash": "/ & \/",
- "alpha": "abcdefghijklmnopqrstuvwyz",
- "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
- "digit": "0123456789",
- "0123456789": "digit",
- "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
- "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
- "true": true,
- "false": false,
- "null": null,
- "array":[ ],
- "object":{ },
- "address": "50 St. James Street",
- "url": "http://www.JSON.org/",
- "comment": "// /* <!-- --",
- "# -- --> */": " ",
- " s p a c e d " :[1,2 , 3
-
-,
-
-4 , 5 , 6 ,7 ],"compact":[1,2,3,4,5,6,7],
- "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
- "quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
- "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
-: "A key can be any string"
- },
- 0.5 ,98.6
-,
-99.44
-,
-
-1066,
-1e1,
-0.1e1,
-1e-1,
-1e00,2e+00,2e-00
+[
+ "JSON Test Pattern pass1",
+ {"object with 1 member":["array with 1 element"]},
+ {},
+ [],
+ -42,
+ true,
+ false,
+ null,
+ {
+ "integer": 1234567890,
+ "real": -9876.543210,
+ "e": 0.123456789e-12,
+ "E": 1.234567890E+34,
+ "": 23456789012E66,
+ "zero": 0,
+ "one": 1,
+ "space": " ",
+ "quote": "\"",
+ "backslash": "\\",
+ "controls": "\b\f\n\r\t",
+ "slash": "/ & \/",
+ "alpha": "abcdefghijklmnopqrstuvwyz",
+ "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
+ "digit": "0123456789",
+ "0123456789": "digit",
+ "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
+ "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
+ "true": true,
+ "false": false,
+ "null": null,
+ "array":[ ],
+ "object":{ },
+ "address": "50 St. James Street",
+ "url": "http://www.JSON.org/",
+ "comment": "// /* <!-- --",
+ "# -- --> */": " ",
+ " s p a c e d " :[1,2 , 3
+
+,
+
+4 , 5 , 6 ,7 ],"compact":[1,2,3,4,5,6,7],
+ "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
+ "quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
+ "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
+: "A key can be any string"
+ },
+ 0.5 ,98.6
+,
+99.44
+,
+
+1066,
+1e1,
+0.1e1,
+1e-1,
+1e00,2e+00,2e-00
,"rosebud"] \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/jsonchecker/pass3.json b/3rdparty/rapidjson/bin/jsonchecker/pass3.json
index 4528d51f1ac..27e6eb1d247 100644
--- a/3rdparty/rapidjson/bin/jsonchecker/pass3.json
+++ b/3rdparty/rapidjson/bin/jsonchecker/pass3.json
@@ -1,6 +1,6 @@
-{
- "JSON Test Pattern pass3": {
- "The outermost value": "must be an object or array.",
- "In this test": "It is an object."
- }
-}
+{
+ "JSON Test Pattern pass3": {
+ "The outermost value": "must be an object or array.",
+ "In this test": "It is an object."
+ }
+}
diff --git a/3rdparty/rapidjson/bin/jsonschema/remotes/folder/folderInteger.json b/3rdparty/rapidjson/bin/jsonschema/remotes/folder/folderInteger.json
index dbe5c758ee3..a72739321a2 100644
--- a/3rdparty/rapidjson/bin/jsonschema/remotes/folder/folderInteger.json
+++ b/3rdparty/rapidjson/bin/jsonschema/remotes/folder/folderInteger.json
@@ -1,3 +1,3 @@
-{
- "type": "integer"
+{
+ "type": "integer"
} \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/jsonschema/remotes/integer.json b/3rdparty/rapidjson/bin/jsonschema/remotes/integer.json
index dbe5c758ee3..a72739321a2 100644
--- a/3rdparty/rapidjson/bin/jsonschema/remotes/integer.json
+++ b/3rdparty/rapidjson/bin/jsonschema/remotes/integer.json
@@ -1,3 +1,3 @@
-{
- "type": "integer"
+{
+ "type": "integer"
} \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/jsonschema/remotes/subSchemas.json b/3rdparty/rapidjson/bin/jsonschema/remotes/subSchemas.json
index 8b6d8f842fc..307669c4a0d 100644
--- a/3rdparty/rapidjson/bin/jsonschema/remotes/subSchemas.json
+++ b/3rdparty/rapidjson/bin/jsonschema/remotes/subSchemas.json
@@ -1,8 +1,8 @@
-{
- "integer": {
- "type": "integer"
- },
- "refToInteger": {
- "$ref": "#/integer"
- }
+{
+ "integer": {
+ "type": "integer"
+ },
+ "refToInteger": {
+ "$ref": "#/integer"
+ }
} \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/additionalItems.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/additionalItems.json
index 6d4bff51cf3..dda27d4f108 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/additionalItems.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/additionalItems.json
@@ -1,82 +1,82 @@
-[
- {
- "description": "additionalItems as schema",
- "schema": {
- "items": [],
- "additionalItems": {"type": "integer"}
- },
- "tests": [
- {
- "description": "additional items match schema",
- "data": [ 1, 2, 3, 4 ],
- "valid": true
- },
- {
- "description": "additional items do not match schema",
- "data": [ 1, 2, 3, "foo" ],
- "valid": false
- }
- ]
- },
- {
- "description": "items is schema, no additionalItems",
- "schema": {
- "items": {},
- "additionalItems": false
- },
- "tests": [
- {
- "description": "all items match schema",
- "data": [ 1, 2, 3, 4, 5 ],
- "valid": true
- }
- ]
- },
- {
- "description": "array of items with no additionalItems",
- "schema": {
- "items": [{}, {}, {}],
- "additionalItems": false
- },
- "tests": [
- {
- "description": "no additional items present",
- "data": [ 1, 2, 3 ],
- "valid": true
- },
- {
- "description": "additional items are not permitted",
- "data": [ 1, 2, 3, 4 ],
- "valid": false
- }
- ]
- },
- {
- "description": "additionalItems as false without items",
- "schema": {"additionalItems": false},
- "tests": [
- {
- "description":
- "items defaults to empty schema so everything is valid",
- "data": [ 1, 2, 3, 4, 5 ],
- "valid": true
- },
- {
- "description": "ignores non-arrays",
- "data": {"foo" : "bar"},
- "valid": true
- }
- ]
- },
- {
- "description": "additionalItems are allowed by default",
- "schema": {"items": []},
- "tests": [
- {
- "description": "only the first items are validated",
- "data": [1, "foo", false],
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "additionalItems as schema",
+ "schema": {
+ "items": [],
+ "additionalItems": {"type": "integer"}
+ },
+ "tests": [
+ {
+ "description": "additional items match schema",
+ "data": [ 1, 2, 3, 4 ],
+ "valid": true
+ },
+ {
+ "description": "additional items do not match schema",
+ "data": [ 1, 2, 3, "foo" ],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "items is schema, no additionalItems",
+ "schema": {
+ "items": {},
+ "additionalItems": false
+ },
+ "tests": [
+ {
+ "description": "all items match schema",
+ "data": [ 1, 2, 3, 4, 5 ],
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "array of items with no additionalItems",
+ "schema": {
+ "items": [{}, {}, {}],
+ "additionalItems": false
+ },
+ "tests": [
+ {
+ "description": "no additional items present",
+ "data": [ 1, 2, 3 ],
+ "valid": true
+ },
+ {
+ "description": "additional items are not permitted",
+ "data": [ 1, 2, 3, 4 ],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "additionalItems as false without items",
+ "schema": {"additionalItems": false},
+ "tests": [
+ {
+ "description":
+ "items defaults to empty schema so everything is valid",
+ "data": [ 1, 2, 3, 4, 5 ],
+ "valid": true
+ },
+ {
+ "description": "ignores non-arrays",
+ "data": {"foo" : "bar"},
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "additionalItems are allowed by default",
+ "schema": {"items": []},
+ "tests": [
+ {
+ "description": "only the first items are validated",
+ "data": [1, "foo", false],
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/additionalProperties.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/additionalProperties.json
index 40831f9e9aa..fc817daac47 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/additionalProperties.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/additionalProperties.json
@@ -1,88 +1,88 @@
-[
- {
- "description":
- "additionalProperties being false does not allow other properties",
- "schema": {
- "properties": {"foo": {}, "bar": {}},
- "patternProperties": { "^v": {} },
- "additionalProperties": false
- },
- "tests": [
- {
- "description": "no additional properties is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "an additional property is invalid",
- "data": {"foo" : 1, "bar" : 2, "quux" : "boom"},
- "valid": false
- },
- {
- "description": "ignores non-objects",
- "data": [1, 2, 3],
- "valid": true
- },
- {
- "description": "patternProperties are not additional properties",
- "data": {"foo":1, "vroom": 2},
- "valid": true
- }
- ]
- },
- {
- "description":
- "additionalProperties allows a schema which should validate",
- "schema": {
- "properties": {"foo": {}, "bar": {}},
- "additionalProperties": {"type": "boolean"}
- },
- "tests": [
- {
- "description": "no additional properties is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "an additional valid property is valid",
- "data": {"foo" : 1, "bar" : 2, "quux" : true},
- "valid": true
- },
- {
- "description": "an additional invalid property is invalid",
- "data": {"foo" : 1, "bar" : 2, "quux" : 12},
- "valid": false
- }
- ]
- },
- {
- "description":
- "additionalProperties can exist by itself",
- "schema": {
- "additionalProperties": {"type": "boolean"}
- },
- "tests": [
- {
- "description": "an additional valid property is valid",
- "data": {"foo" : true},
- "valid": true
- },
- {
- "description": "an additional invalid property is invalid",
- "data": {"foo" : 1},
- "valid": false
- }
- ]
- },
- {
- "description": "additionalProperties are allowed by default",
- "schema": {"properties": {"foo": {}, "bar": {}}},
- "tests": [
- {
- "description": "additional properties are allowed",
- "data": {"foo": 1, "bar": 2, "quux": true},
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description":
+ "additionalProperties being false does not allow other properties",
+ "schema": {
+ "properties": {"foo": {}, "bar": {}},
+ "patternProperties": { "^v": {} },
+ "additionalProperties": false
+ },
+ "tests": [
+ {
+ "description": "no additional properties is valid",
+ "data": {"foo": 1},
+ "valid": true
+ },
+ {
+ "description": "an additional property is invalid",
+ "data": {"foo" : 1, "bar" : 2, "quux" : "boom"},
+ "valid": false
+ },
+ {
+ "description": "ignores non-objects",
+ "data": [1, 2, 3],
+ "valid": true
+ },
+ {
+ "description": "patternProperties are not additional properties",
+ "data": {"foo":1, "vroom": 2},
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description":
+ "additionalProperties allows a schema which should validate",
+ "schema": {
+ "properties": {"foo": {}, "bar": {}},
+ "additionalProperties": {"type": "boolean"}
+ },
+ "tests": [
+ {
+ "description": "no additional properties is valid",
+ "data": {"foo": 1},
+ "valid": true
+ },
+ {
+ "description": "an additional valid property is valid",
+ "data": {"foo" : 1, "bar" : 2, "quux" : true},
+ "valid": true
+ },
+ {
+ "description": "an additional invalid property is invalid",
+ "data": {"foo" : 1, "bar" : 2, "quux" : 12},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description":
+ "additionalProperties can exist by itself",
+ "schema": {
+ "additionalProperties": {"type": "boolean"}
+ },
+ "tests": [
+ {
+ "description": "an additional valid property is valid",
+ "data": {"foo" : true},
+ "valid": true
+ },
+ {
+ "description": "an additional invalid property is invalid",
+ "data": {"foo" : 1},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "additionalProperties are allowed by default",
+ "schema": {"properties": {"foo": {}, "bar": {}}},
+ "tests": [
+ {
+ "description": "additional properties are allowed",
+ "data": {"foo": 1, "bar": 2, "quux": true},
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/default.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/default.json
index 17629779fbe..c2b76c62170 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/default.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/default.json
@@ -1,49 +1,49 @@
-[
- {
- "description": "invalid type for default",
- "schema": {
- "properties": {
- "foo": {
- "type": "integer",
- "default": []
- }
- }
- },
- "tests": [
- {
- "description": "valid when property is specified",
- "data": {"foo": 13},
- "valid": true
- },
- {
- "description": "still valid when the invalid default is used",
- "data": {},
- "valid": true
- }
- ]
- },
- {
- "description": "invalid string value for default",
- "schema": {
- "properties": {
- "bar": {
- "type": "string",
- "minLength": 4,
- "default": "bad"
- }
- }
- },
- "tests": [
- {
- "description": "valid when property is specified",
- "data": {"bar": "good"},
- "valid": true
- },
- {
- "description": "still valid when the invalid default is used",
- "data": {},
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "invalid type for default",
+ "schema": {
+ "properties": {
+ "foo": {
+ "type": "integer",
+ "default": []
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "valid when property is specified",
+ "data": {"foo": 13},
+ "valid": true
+ },
+ {
+ "description": "still valid when the invalid default is used",
+ "data": {},
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "invalid string value for default",
+ "schema": {
+ "properties": {
+ "bar": {
+ "type": "string",
+ "minLength": 4,
+ "default": "bad"
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "valid when property is specified",
+ "data": {"bar": "good"},
+ "valid": true
+ },
+ {
+ "description": "still valid when the invalid default is used",
+ "data": {},
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/dependencies.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/dependencies.json
index 2f6ae489aed..14b0cff8a76 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/dependencies.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/dependencies.json
@@ -1,108 +1,108 @@
-[
- {
- "description": "dependencies",
- "schema": {
- "dependencies": {"bar": "foo"}
- },
- "tests": [
- {
- "description": "neither",
- "data": {},
- "valid": true
- },
- {
- "description": "nondependant",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "with dependency",
- "data": {"foo": 1, "bar": 2},
- "valid": true
- },
- {
- "description": "missing dependency",
- "data": {"bar": 2},
- "valid": false
- },
- {
- "description": "ignores non-objects",
- "data": "foo",
- "valid": true
- }
- ]
- },
- {
- "description": "multiple dependencies",
- "schema": {
- "dependencies": {"quux": ["foo", "bar"]}
- },
- "tests": [
- {
- "description": "neither",
- "data": {},
- "valid": true
- },
- {
- "description": "nondependants",
- "data": {"foo": 1, "bar": 2},
- "valid": true
- },
- {
- "description": "with dependencies",
- "data": {"foo": 1, "bar": 2, "quux": 3},
- "valid": true
- },
- {
- "description": "missing dependency",
- "data": {"foo": 1, "quux": 2},
- "valid": false
- },
- {
- "description": "missing other dependency",
- "data": {"bar": 1, "quux": 2},
- "valid": false
- },
- {
- "description": "missing both dependencies",
- "data": {"quux": 1},
- "valid": false
- }
- ]
- },
- {
- "description": "multiple dependencies subschema",
- "schema": {
- "dependencies": {
- "bar": {
- "properties": {
- "foo": {"type": "integer"},
- "bar": {"type": "integer"}
- }
- }
- }
- },
- "tests": [
- {
- "description": "valid",
- "data": {"foo": 1, "bar": 2},
- "valid": true
- },
- {
- "description": "wrong type",
- "data": {"foo": "quux", "bar": 2},
- "valid": false
- },
- {
- "description": "wrong type other",
- "data": {"foo": 2, "bar": "quux"},
- "valid": false
- },
- {
- "description": "wrong type both",
- "data": {"foo": "quux", "bar": "quux"},
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "dependencies",
+ "schema": {
+ "dependencies": {"bar": "foo"}
+ },
+ "tests": [
+ {
+ "description": "neither",
+ "data": {},
+ "valid": true
+ },
+ {
+ "description": "nondependant",
+ "data": {"foo": 1},
+ "valid": true
+ },
+ {
+ "description": "with dependency",
+ "data": {"foo": 1, "bar": 2},
+ "valid": true
+ },
+ {
+ "description": "missing dependency",
+ "data": {"bar": 2},
+ "valid": false
+ },
+ {
+ "description": "ignores non-objects",
+ "data": "foo",
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "multiple dependencies",
+ "schema": {
+ "dependencies": {"quux": ["foo", "bar"]}
+ },
+ "tests": [
+ {
+ "description": "neither",
+ "data": {},
+ "valid": true
+ },
+ {
+ "description": "nondependants",
+ "data": {"foo": 1, "bar": 2},
+ "valid": true
+ },
+ {
+ "description": "with dependencies",
+ "data": {"foo": 1, "bar": 2, "quux": 3},
+ "valid": true
+ },
+ {
+ "description": "missing dependency",
+ "data": {"foo": 1, "quux": 2},
+ "valid": false
+ },
+ {
+ "description": "missing other dependency",
+ "data": {"bar": 1, "quux": 2},
+ "valid": false
+ },
+ {
+ "description": "missing both dependencies",
+ "data": {"quux": 1},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "multiple dependencies subschema",
+ "schema": {
+ "dependencies": {
+ "bar": {
+ "properties": {
+ "foo": {"type": "integer"},
+ "bar": {"type": "integer"}
+ }
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "valid",
+ "data": {"foo": 1, "bar": 2},
+ "valid": true
+ },
+ {
+ "description": "wrong type",
+ "data": {"foo": "quux", "bar": 2},
+ "valid": false
+ },
+ {
+ "description": "wrong type other",
+ "data": {"foo": 2, "bar": "quux"},
+ "valid": false
+ },
+ {
+ "description": "wrong type both",
+ "data": {"foo": "quux", "bar": "quux"},
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/disallow.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/disallow.json
index a5c9d90ccee..75111afe7de 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/disallow.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/disallow.json
@@ -1,80 +1,80 @@
-[
- {
- "description": "disallow",
- "schema": {
- "disallow": "integer"
- },
- "tests": [
- {
- "description": "allowed",
- "data": "foo",
- "valid": true
- },
- {
- "description": "disallowed",
- "data": 1,
- "valid": false
- }
- ]
- },
- {
- "description": "multiple disallow",
- "schema": {
- "disallow": ["integer", "boolean"]
- },
- "tests": [
- {
- "description": "valid",
- "data": "foo",
- "valid": true
- },
- {
- "description": "mismatch",
- "data": 1,
- "valid": false
- },
- {
- "description": "other mismatch",
- "data": true,
- "valid": false
- }
- ]
- },
- {
- "description": "multiple disallow subschema",
- "schema": {
- "disallow":
- ["string",
- {
- "type": "object",
- "properties": {
- "foo": {
- "type": "string"
- }
- }
- }]
- },
- "tests": [
- {
- "description": "match",
- "data": 1,
- "valid": true
- },
- {
- "description": "other match",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "mismatch",
- "data": "foo",
- "valid": false
- },
- {
- "description": "other mismatch",
- "data": {"foo": "bar"},
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "disallow",
+ "schema": {
+ "disallow": "integer"
+ },
+ "tests": [
+ {
+ "description": "allowed",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "disallowed",
+ "data": 1,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "multiple disallow",
+ "schema": {
+ "disallow": ["integer", "boolean"]
+ },
+ "tests": [
+ {
+ "description": "valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "mismatch",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "other mismatch",
+ "data": true,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "multiple disallow subschema",
+ "schema": {
+ "disallow":
+ ["string",
+ {
+ "type": "object",
+ "properties": {
+ "foo": {
+ "type": "string"
+ }
+ }
+ }]
+ },
+ "tests": [
+ {
+ "description": "match",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "other match",
+ "data": {"foo": 1},
+ "valid": true
+ },
+ {
+ "description": "mismatch",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "other mismatch",
+ "data": {"foo": "bar"},
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/divisibleBy.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/divisibleBy.json
index ef7cc148902..a9623989839 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/divisibleBy.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/divisibleBy.json
@@ -1,60 +1,60 @@
-[
- {
- "description": "by int",
- "schema": {"divisibleBy": 2},
- "tests": [
- {
- "description": "int by int",
- "data": 10,
- "valid": true
- },
- {
- "description": "int by int fail",
- "data": 7,
- "valid": false
- },
- {
- "description": "ignores non-numbers",
- "data": "foo",
- "valid": true
- }
- ]
- },
- {
- "description": "by number",
- "schema": {"divisibleBy": 1.5},
- "tests": [
- {
- "description": "zero is divisible by anything (except 0)",
- "data": 0,
- "valid": true
- },
- {
- "description": "4.5 is divisible by 1.5",
- "data": 4.5,
- "valid": true
- },
- {
- "description": "35 is not divisible by 1.5",
- "data": 35,
- "valid": false
- }
- ]
- },
- {
- "description": "by small number",
- "schema": {"divisibleBy": 0.0001},
- "tests": [
- {
- "description": "0.0075 is divisible by 0.0001",
- "data": 0.0075,
- "valid": true
- },
- {
- "description": "0.00751 is not divisible by 0.0001",
- "data": 0.00751,
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "by int",
+ "schema": {"divisibleBy": 2},
+ "tests": [
+ {
+ "description": "int by int",
+ "data": 10,
+ "valid": true
+ },
+ {
+ "description": "int by int fail",
+ "data": 7,
+ "valid": false
+ },
+ {
+ "description": "ignores non-numbers",
+ "data": "foo",
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "by number",
+ "schema": {"divisibleBy": 1.5},
+ "tests": [
+ {
+ "description": "zero is divisible by anything (except 0)",
+ "data": 0,
+ "valid": true
+ },
+ {
+ "description": "4.5 is divisible by 1.5",
+ "data": 4.5,
+ "valid": true
+ },
+ {
+ "description": "35 is not divisible by 1.5",
+ "data": 35,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "by small number",
+ "schema": {"divisibleBy": 0.0001},
+ "tests": [
+ {
+ "description": "0.0075 is divisible by 0.0001",
+ "data": 0.0075,
+ "valid": true
+ },
+ {
+ "description": "0.00751 is not divisible by 0.0001",
+ "data": 0.00751,
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/enum.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/enum.json
index 0c83f0804d0..01e8882de51 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/enum.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/enum.json
@@ -1,71 +1,71 @@
-[
- {
- "description": "simple enum validation",
- "schema": {"enum": [1, 2, 3]},
- "tests": [
- {
- "description": "one of the enum is valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "something else is invalid",
- "data": 4,
- "valid": false
- }
- ]
- },
- {
- "description": "heterogeneous enum validation",
- "schema": {"enum": [6, "foo", [], true, {"foo": 12}]},
- "tests": [
- {
- "description": "one of the enum is valid",
- "data": [],
- "valid": true
- },
- {
- "description": "something else is invalid",
- "data": null,
- "valid": false
- },
- {
- "description": "objects are deep compared",
- "data": {"foo": false},
- "valid": false
- }
- ]
- },
- {
- "description": "enums in properties",
- "schema": {
- "type":"object",
- "properties": {
- "foo": {"enum":["foo"]},
- "bar": {"enum":["bar"], "required":true}
- }
- },
- "tests": [
- {
- "description": "both properties are valid",
- "data": {"foo":"foo", "bar":"bar"},
- "valid": true
- },
- {
- "description": "missing optional property is valid",
- "data": {"bar":"bar"},
- "valid": true
- },
- {
- "description": "missing required property is invalid",
- "data": {"foo":"foo"},
- "valid": false
- },
- {
- "description": "missing all properties is invalid",
- "data": {},
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "simple enum validation",
+ "schema": {"enum": [1, 2, 3]},
+ "tests": [
+ {
+ "description": "one of the enum is valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "something else is invalid",
+ "data": 4,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "heterogeneous enum validation",
+ "schema": {"enum": [6, "foo", [], true, {"foo": 12}]},
+ "tests": [
+ {
+ "description": "one of the enum is valid",
+ "data": [],
+ "valid": true
+ },
+ {
+ "description": "something else is invalid",
+ "data": null,
+ "valid": false
+ },
+ {
+ "description": "objects are deep compared",
+ "data": {"foo": false},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "enums in properties",
+ "schema": {
+ "type":"object",
+ "properties": {
+ "foo": {"enum":["foo"]},
+ "bar": {"enum":["bar"], "required":true}
+ }
+ },
+ "tests": [
+ {
+ "description": "both properties are valid",
+ "data": {"foo":"foo", "bar":"bar"},
+ "valid": true
+ },
+ {
+ "description": "missing optional property is valid",
+ "data": {"bar":"bar"},
+ "valid": true
+ },
+ {
+ "description": "missing required property is invalid",
+ "data": {"foo":"foo"},
+ "valid": false
+ },
+ {
+ "description": "missing all properties is invalid",
+ "data": {},
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/extends.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/extends.json
index 909bce575ae..c595184893e 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/extends.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/extends.json
@@ -1,94 +1,94 @@
-[
- {
- "description": "extends",
- "schema": {
- "properties": {"bar": {"type": "integer", "required": true}},
- "extends": {
- "properties": {
- "foo": {"type": "string", "required": true}
- }
- }
- },
- "tests": [
- {
- "description": "extends",
- "data": {"foo": "baz", "bar": 2},
- "valid": true
- },
- {
- "description": "mismatch extends",
- "data": {"foo": "baz"},
- "valid": false
- },
- {
- "description": "mismatch extended",
- "data": {"bar": 2},
- "valid": false
- },
- {
- "description": "wrong type",
- "data": {"foo": "baz", "bar": "quux"},
- "valid": false
- }
- ]
- },
- {
- "description": "multiple extends",
- "schema": {
- "properties": {"bar": {"type": "integer", "required": true}},
- "extends" : [
- {
- "properties": {
- "foo": {"type": "string", "required": true}
- }
- },
- {
- "properties": {
- "baz": {"type": "null", "required": true}
- }
- }
- ]
- },
- "tests": [
- {
- "description": "valid",
- "data": {"foo": "quux", "bar": 2, "baz": null},
- "valid": true
- },
- {
- "description": "mismatch first extends",
- "data": {"bar": 2, "baz": null},
- "valid": false
- },
- {
- "description": "mismatch second extends",
- "data": {"foo": "quux", "bar": 2},
- "valid": false
- },
- {
- "description": "mismatch both",
- "data": {"bar": 2},
- "valid": false
- }
- ]
- },
- {
- "description": "extends simple types",
- "schema": {
- "minimum": 20,
- "extends": {"maximum": 30}
- },
- "tests": [
- {
- "description": "valid",
- "data": 25,
- "valid": true
- },
- {
- "description": "mismatch extends",
- "data": 35,
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "extends",
+ "schema": {
+ "properties": {"bar": {"type": "integer", "required": true}},
+ "extends": {
+ "properties": {
+ "foo": {"type": "string", "required": true}
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "extends",
+ "data": {"foo": "baz", "bar": 2},
+ "valid": true
+ },
+ {
+ "description": "mismatch extends",
+ "data": {"foo": "baz"},
+ "valid": false
+ },
+ {
+ "description": "mismatch extended",
+ "data": {"bar": 2},
+ "valid": false
+ },
+ {
+ "description": "wrong type",
+ "data": {"foo": "baz", "bar": "quux"},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "multiple extends",
+ "schema": {
+ "properties": {"bar": {"type": "integer", "required": true}},
+ "extends" : [
+ {
+ "properties": {
+ "foo": {"type": "string", "required": true}
+ }
+ },
+ {
+ "properties": {
+ "baz": {"type": "null", "required": true}
+ }
+ }
+ ]
+ },
+ "tests": [
+ {
+ "description": "valid",
+ "data": {"foo": "quux", "bar": 2, "baz": null},
+ "valid": true
+ },
+ {
+ "description": "mismatch first extends",
+ "data": {"bar": 2, "baz": null},
+ "valid": false
+ },
+ {
+ "description": "mismatch second extends",
+ "data": {"foo": "quux", "bar": 2},
+ "valid": false
+ },
+ {
+ "description": "mismatch both",
+ "data": {"bar": 2},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "extends simple types",
+ "schema": {
+ "minimum": 20,
+ "extends": {"maximum": 30}
+ },
+ "tests": [
+ {
+ "description": "valid",
+ "data": 25,
+ "valid": true
+ },
+ {
+ "description": "mismatch extends",
+ "data": 35,
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/items.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/items.json
index f5e18a13848..1683e440f9a 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/items.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/items.json
@@ -1,46 +1,46 @@
-[
- {
- "description": "a schema given for items",
- "schema": {
- "items": {"type": "integer"}
- },
- "tests": [
- {
- "description": "valid items",
- "data": [ 1, 2, 3 ],
- "valid": true
- },
- {
- "description": "wrong type of items",
- "data": [1, "x"],
- "valid": false
- },
- {
- "description": "ignores non-arrays",
- "data": {"foo" : "bar"},
- "valid": true
- }
- ]
- },
- {
- "description": "an array of schemas for items",
- "schema": {
- "items": [
- {"type": "integer"},
- {"type": "string"}
- ]
- },
- "tests": [
- {
- "description": "correct types",
- "data": [ 1, "foo" ],
- "valid": true
- },
- {
- "description": "wrong types",
- "data": [ "foo", 1 ],
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "a schema given for items",
+ "schema": {
+ "items": {"type": "integer"}
+ },
+ "tests": [
+ {
+ "description": "valid items",
+ "data": [ 1, 2, 3 ],
+ "valid": true
+ },
+ {
+ "description": "wrong type of items",
+ "data": [1, "x"],
+ "valid": false
+ },
+ {
+ "description": "ignores non-arrays",
+ "data": {"foo" : "bar"},
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "an array of schemas for items",
+ "schema": {
+ "items": [
+ {"type": "integer"},
+ {"type": "string"}
+ ]
+ },
+ "tests": [
+ {
+ "description": "correct types",
+ "data": [ 1, "foo" ],
+ "valid": true
+ },
+ {
+ "description": "wrong types",
+ "data": [ "foo", 1 ],
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/maxItems.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/maxItems.json
index 3b53a6b371a..5f5c963b656 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/maxItems.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/maxItems.json
@@ -1,28 +1,28 @@
-[
- {
- "description": "maxItems validation",
- "schema": {"maxItems": 2},
- "tests": [
- {
- "description": "shorter is valid",
- "data": [1],
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": [1, 2],
- "valid": true
- },
- {
- "description": "too long is invalid",
- "data": [1, 2, 3],
- "valid": false
- },
- {
- "description": "ignores non-arrays",
- "data": "foobar",
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "maxItems validation",
+ "schema": {"maxItems": 2},
+ "tests": [
+ {
+ "description": "shorter is valid",
+ "data": [1],
+ "valid": true
+ },
+ {
+ "description": "exact length is valid",
+ "data": [1, 2],
+ "valid": true
+ },
+ {
+ "description": "too long is invalid",
+ "data": [1, 2, 3],
+ "valid": false
+ },
+ {
+ "description": "ignores non-arrays",
+ "data": "foobar",
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/maxLength.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/maxLength.json
index 4de42bcaba0..5c5fd71708a 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/maxLength.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/maxLength.json
@@ -1,33 +1,33 @@
-[
- {
- "description": "maxLength validation",
- "schema": {"maxLength": 2},
- "tests": [
- {
- "description": "shorter is valid",
- "data": "f",
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": "fo",
- "valid": true
- },
- {
- "description": "too long is invalid",
- "data": "foo",
- "valid": false
- },
- {
- "description": "ignores non-strings",
- "data": 10,
- "valid": true
- },
- {
- "description": "two supplementary Unicode code points is long enough",
- "data": "\uD83D\uDCA9\uD83D\uDCA9",
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "maxLength validation",
+ "schema": {"maxLength": 2},
+ "tests": [
+ {
+ "description": "shorter is valid",
+ "data": "f",
+ "valid": true
+ },
+ {
+ "description": "exact length is valid",
+ "data": "fo",
+ "valid": true
+ },
+ {
+ "description": "too long is invalid",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "ignores non-strings",
+ "data": 10,
+ "valid": true
+ },
+ {
+ "description": "two supplementary Unicode code points is long enough",
+ "data": "\uD83D\uDCA9\uD83D\uDCA9",
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/maximum.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/maximum.json
index 86c7b89c9a9..6c069bb29b4 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/maximum.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/maximum.json
@@ -1,42 +1,42 @@
-[
- {
- "description": "maximum validation",
- "schema": {"maximum": 3.0},
- "tests": [
- {
- "description": "below the maximum is valid",
- "data": 2.6,
- "valid": true
- },
- {
- "description": "above the maximum is invalid",
- "data": 3.5,
- "valid": false
- },
- {
- "description": "ignores non-numbers",
- "data": "x",
- "valid": true
- }
- ]
- },
- {
- "description": "exclusiveMaximum validation",
- "schema": {
- "maximum": 3.0,
- "exclusiveMaximum": true
- },
- "tests": [
- {
- "description": "below the maximum is still valid",
- "data": 2.2,
- "valid": true
- },
- {
- "description": "boundary point is invalid",
- "data": 3.0,
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "maximum validation",
+ "schema": {"maximum": 3.0},
+ "tests": [
+ {
+ "description": "below the maximum is valid",
+ "data": 2.6,
+ "valid": true
+ },
+ {
+ "description": "above the maximum is invalid",
+ "data": 3.5,
+ "valid": false
+ },
+ {
+ "description": "ignores non-numbers",
+ "data": "x",
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "exclusiveMaximum validation",
+ "schema": {
+ "maximum": 3.0,
+ "exclusiveMaximum": true
+ },
+ "tests": [
+ {
+ "description": "below the maximum is still valid",
+ "data": 2.2,
+ "valid": true
+ },
+ {
+ "description": "boundary point is invalid",
+ "data": 3.0,
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/minItems.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/minItems.json
index ed5118815ee..df8e0981c40 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/minItems.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/minItems.json
@@ -1,28 +1,28 @@
-[
- {
- "description": "minItems validation",
- "schema": {"minItems": 1},
- "tests": [
- {
- "description": "longer is valid",
- "data": [1, 2],
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": [1],
- "valid": true
- },
- {
- "description": "too short is invalid",
- "data": [],
- "valid": false
- },
- {
- "description": "ignores non-arrays",
- "data": "",
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "minItems validation",
+ "schema": {"minItems": 1},
+ "tests": [
+ {
+ "description": "longer is valid",
+ "data": [1, 2],
+ "valid": true
+ },
+ {
+ "description": "exact length is valid",
+ "data": [1],
+ "valid": true
+ },
+ {
+ "description": "too short is invalid",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "ignores non-arrays",
+ "data": "",
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/minLength.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/minLength.json
index 3f09158deef..96fa0c662f7 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/minLength.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/minLength.json
@@ -1,33 +1,33 @@
-[
- {
- "description": "minLength validation",
- "schema": {"minLength": 2},
- "tests": [
- {
- "description": "longer is valid",
- "data": "foo",
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": "fo",
- "valid": true
- },
- {
- "description": "too short is invalid",
- "data": "f",
- "valid": false
- },
- {
- "description": "ignores non-strings",
- "data": 1,
- "valid": true
- },
- {
- "description": "one supplementary Unicode code point is not long enough",
- "data": "\uD83D\uDCA9",
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "minLength validation",
+ "schema": {"minLength": 2},
+ "tests": [
+ {
+ "description": "longer is valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "exact length is valid",
+ "data": "fo",
+ "valid": true
+ },
+ {
+ "description": "too short is invalid",
+ "data": "f",
+ "valid": false
+ },
+ {
+ "description": "ignores non-strings",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "one supplementary Unicode code point is not long enough",
+ "data": "\uD83D\uDCA9",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/minimum.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/minimum.json
index d5bf000bcc6..0c87f45a9c3 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/minimum.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/minimum.json
@@ -1,42 +1,42 @@
-[
- {
- "description": "minimum validation",
- "schema": {"minimum": 1.1},
- "tests": [
- {
- "description": "above the minimum is valid",
- "data": 2.6,
- "valid": true
- },
- {
- "description": "below the minimum is invalid",
- "data": 0.6,
- "valid": false
- },
- {
- "description": "ignores non-numbers",
- "data": "x",
- "valid": true
- }
- ]
- },
- {
- "description": "exclusiveMinimum validation",
- "schema": {
- "minimum": 1.1,
- "exclusiveMinimum": true
- },
- "tests": [
- {
- "description": "above the minimum is still valid",
- "data": 1.2,
- "valid": true
- },
- {
- "description": "boundary point is invalid",
- "data": 1.1,
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "minimum validation",
+ "schema": {"minimum": 1.1},
+ "tests": [
+ {
+ "description": "above the minimum is valid",
+ "data": 2.6,
+ "valid": true
+ },
+ {
+ "description": "below the minimum is invalid",
+ "data": 0.6,
+ "valid": false
+ },
+ {
+ "description": "ignores non-numbers",
+ "data": "x",
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "exclusiveMinimum validation",
+ "schema": {
+ "minimum": 1.1,
+ "exclusiveMinimum": true
+ },
+ "tests": [
+ {
+ "description": "above the minimum is still valid",
+ "data": 1.2,
+ "valid": true
+ },
+ {
+ "description": "boundary point is invalid",
+ "data": 1.1,
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/bignum.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/bignum.json
index ccc7c17fe8d..31df120efe7 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/bignum.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/bignum.json
@@ -1,107 +1,107 @@
-[
- {
- "description": "integer",
- "schema": {"type": "integer"},
- "tests": [
- {
- "description": "a bignum is an integer",
- "data": 12345678910111213141516171819202122232425262728293031,
- "valid": true
- }
- ]
- },
- {
- "description": "number",
- "schema": {"type": "number"},
- "tests": [
- {
- "description": "a bignum is a number",
- "data": 98249283749234923498293171823948729348710298301928331,
- "valid": true
- }
- ]
- },
- {
- "description": "integer",
- "schema": {"type": "integer"},
- "tests": [
- {
- "description": "a negative bignum is an integer",
- "data": -12345678910111213141516171819202122232425262728293031,
- "valid": true
- }
- ]
- },
- {
- "description": "number",
- "schema": {"type": "number"},
- "tests": [
- {
- "description": "a negative bignum is a number",
- "data": -98249283749234923498293171823948729348710298301928331,
- "valid": true
- }
- ]
- },
- {
- "description": "string",
- "schema": {"type": "string"},
- "tests": [
- {
- "description": "a bignum is not a string",
- "data": 98249283749234923498293171823948729348710298301928331,
- "valid": false
- }
- ]
- },
- {
- "description": "integer comparison",
- "schema": {"maximum": 18446744073709551615},
- "tests": [
- {
- "description": "comparison works for high numbers",
- "data": 18446744073709551600,
- "valid": true
- }
- ]
- },
- {
- "description": "float comparison with high precision",
- "schema": {
- "maximum": 972783798187987123879878123.18878137,
- "exclusiveMaximum": true
- },
- "tests": [
- {
- "description": "comparison works for high numbers",
- "data": 972783798187987123879878123.188781371,
- "valid": false
- }
- ]
- },
- {
- "description": "integer comparison",
- "schema": {"minimum": -18446744073709551615},
- "tests": [
- {
- "description": "comparison works for very negative numbers",
- "data": -18446744073709551600,
- "valid": true
- }
- ]
- },
- {
- "description": "float comparison with high precision on negative numbers",
- "schema": {
- "minimum": -972783798187987123879878123.18878137,
- "exclusiveMinimum": true
- },
- "tests": [
- {
- "description": "comparison works for very negative numbers",
- "data": -972783798187987123879878123.188781371,
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "integer",
+ "schema": {"type": "integer"},
+ "tests": [
+ {
+ "description": "a bignum is an integer",
+ "data": 12345678910111213141516171819202122232425262728293031,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "number",
+ "schema": {"type": "number"},
+ "tests": [
+ {
+ "description": "a bignum is a number",
+ "data": 98249283749234923498293171823948729348710298301928331,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "integer",
+ "schema": {"type": "integer"},
+ "tests": [
+ {
+ "description": "a negative bignum is an integer",
+ "data": -12345678910111213141516171819202122232425262728293031,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "number",
+ "schema": {"type": "number"},
+ "tests": [
+ {
+ "description": "a negative bignum is a number",
+ "data": -98249283749234923498293171823948729348710298301928331,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "string",
+ "schema": {"type": "string"},
+ "tests": [
+ {
+ "description": "a bignum is not a string",
+ "data": 98249283749234923498293171823948729348710298301928331,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "integer comparison",
+ "schema": {"maximum": 18446744073709551615},
+ "tests": [
+ {
+ "description": "comparison works for high numbers",
+ "data": 18446744073709551600,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "float comparison with high precision",
+ "schema": {
+ "maximum": 972783798187987123879878123.18878137,
+ "exclusiveMaximum": true
+ },
+ "tests": [
+ {
+ "description": "comparison works for high numbers",
+ "data": 972783798187987123879878123.188781371,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "integer comparison",
+ "schema": {"minimum": -18446744073709551615},
+ "tests": [
+ {
+ "description": "comparison works for very negative numbers",
+ "data": -18446744073709551600,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "float comparison with high precision on negative numbers",
+ "schema": {
+ "minimum": -972783798187987123879878123.18878137,
+ "exclusiveMinimum": true
+ },
+ "tests": [
+ {
+ "description": "comparison works for very negative numbers",
+ "data": -972783798187987123879878123.188781371,
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/format.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/format.json
index 3ca7319dda0..4708088b7d7 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/format.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/format.json
@@ -1,222 +1,222 @@
-[
- {
- "description": "validation of regular expressions",
- "schema": {"format": "regex"},
- "tests": [
- {
- "description": "a valid regular expression",
- "data": "([abc])+\\s+$",
- "valid": true
- },
- {
- "description": "a regular expression with unclosed parens is invalid",
- "data": "^(abc]",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of date-time strings",
- "schema": {"format": "date-time"},
- "tests": [
- {
- "description": "a valid date-time string",
- "data": "1963-06-19T08:30:06.283185Z",
- "valid": true
- },
- {
- "description": "an invalid date-time string",
- "data": "06/19/1963 08:30:06 PST",
- "valid": false
- },
- {
- "description": "only RFC3339 not all of ISO 8601 are valid",
- "data": "2013-350T01:01:01",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of date strings",
- "schema": {"format": "date"},
- "tests": [
- {
- "description": "a valid date string",
- "data": "1963-06-19",
- "valid": true
- },
- {
- "description": "an invalid date string",
- "data": "06/19/1963",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of time strings",
- "schema": {"format": "time"},
- "tests": [
- {
- "description": "a valid time string",
- "data": "08:30:06",
- "valid": true
- },
- {
- "description": "an invalid time string",
- "data": "8:30 AM",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of URIs",
- "schema": {"format": "uri"},
- "tests": [
- {
- "description": "a valid URI",
- "data": "http://foo.bar/?baz=qux#quux",
- "valid": true
- },
- {
- "description": "a valid protocol-relative URI",
- "data": "//foo.bar/?baz=qux#quux",
- "valid": true
- },
- {
- "description": "an invalid URI",
- "data": "\\\\WINDOWS\\fileshare",
- "valid": false
- },
- {
- "description": "an invalid URI though valid URI reference",
- "data": "abc",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of e-mail addresses",
- "schema": {"format": "email"},
- "tests": [
- {
- "description": "a valid e-mail address",
- "data": "joe.bloggs@example.com",
- "valid": true
- },
- {
- "description": "an invalid e-mail address",
- "data": "2962",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of IP addresses",
- "schema": {"format": "ip-address"},
- "tests": [
- {
- "description": "a valid IP address",
- "data": "192.168.0.1",
- "valid": true
- },
- {
- "description": "an IP address with too many components",
- "data": "127.0.0.0.1",
- "valid": false
- },
- {
- "description": "an IP address with out-of-range values",
- "data": "256.256.256.256",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of IPv6 addresses",
- "schema": {"format": "ipv6"},
- "tests": [
- {
- "description": "a valid IPv6 address",
- "data": "::1",
- "valid": true
- },
- {
- "description": "an IPv6 address with out-of-range values",
- "data": "12345::",
- "valid": false
- },
- {
- "description": "an IPv6 address with too many components",
- "data": "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1",
- "valid": false
- },
- {
- "description": "an IPv6 address containing illegal characters",
- "data": "::laptop",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of host names",
- "schema": {"format": "host-name"},
- "tests": [
- {
- "description": "a valid host name",
- "data": "www.example.com",
- "valid": true
- },
- {
- "description": "a host name starting with an illegal character",
- "data": "-a-host-name-that-starts-with--",
- "valid": false
- },
- {
- "description": "a host name containing illegal characters",
- "data": "not_a_valid_host_name",
- "valid": false
- },
- {
- "description": "a host name with a component too long",
- "data": "a-vvvvvvvvvvvvvvvveeeeeeeeeeeeeeeerrrrrrrrrrrrrrrryyyyyyyyyyyyyyyy-long-host-name-component",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of CSS colors",
- "schema": {"format": "color"},
- "tests": [
- {
- "description": "a valid CSS color name",
- "data": "fuchsia",
- "valid": true
- },
- {
- "description": "a valid six-digit CSS color code",
- "data": "#CC8899",
- "valid": true
- },
- {
- "description": "a valid three-digit CSS color code",
- "data": "#C89",
- "valid": true
- },
- {
- "description": "an invalid CSS color code",
- "data": "#00332520",
- "valid": false
- },
- {
- "description": "an invalid CSS color name",
- "data": "puce",
- "valid": false
- },
- {
- "description": "a CSS color name containing invalid characters",
- "data": "light_grayish_red-violet",
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "validation of regular expressions",
+ "schema": {"format": "regex"},
+ "tests": [
+ {
+ "description": "a valid regular expression",
+ "data": "([abc])+\\s+$",
+ "valid": true
+ },
+ {
+ "description": "a regular expression with unclosed parens is invalid",
+ "data": "^(abc]",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "validation of date-time strings",
+ "schema": {"format": "date-time"},
+ "tests": [
+ {
+ "description": "a valid date-time string",
+ "data": "1963-06-19T08:30:06.283185Z",
+ "valid": true
+ },
+ {
+ "description": "an invalid date-time string",
+ "data": "06/19/1963 08:30:06 PST",
+ "valid": false
+ },
+ {
+ "description": "only RFC3339 not all of ISO 8601 are valid",
+ "data": "2013-350T01:01:01",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "validation of date strings",
+ "schema": {"format": "date"},
+ "tests": [
+ {
+ "description": "a valid date string",
+ "data": "1963-06-19",
+ "valid": true
+ },
+ {
+ "description": "an invalid date string",
+ "data": "06/19/1963",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "validation of time strings",
+ "schema": {"format": "time"},
+ "tests": [
+ {
+ "description": "a valid time string",
+ "data": "08:30:06",
+ "valid": true
+ },
+ {
+ "description": "an invalid time string",
+ "data": "8:30 AM",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "validation of URIs",
+ "schema": {"format": "uri"},
+ "tests": [
+ {
+ "description": "a valid URI",
+ "data": "http://foo.bar/?baz=qux#quux",
+ "valid": true
+ },
+ {
+ "description": "a valid protocol-relative URI",
+ "data": "//foo.bar/?baz=qux#quux",
+ "valid": true
+ },
+ {
+ "description": "an invalid URI",
+ "data": "\\\\WINDOWS\\fileshare",
+ "valid": false
+ },
+ {
+ "description": "an invalid URI though valid URI reference",
+ "data": "abc",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "validation of e-mail addresses",
+ "schema": {"format": "email"},
+ "tests": [
+ {
+ "description": "a valid e-mail address",
+ "data": "joe.bloggs@example.com",
+ "valid": true
+ },
+ {
+ "description": "an invalid e-mail address",
+ "data": "2962",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "validation of IP addresses",
+ "schema": {"format": "ip-address"},
+ "tests": [
+ {
+ "description": "a valid IP address",
+ "data": "192.168.0.1",
+ "valid": true
+ },
+ {
+ "description": "an IP address with too many components",
+ "data": "127.0.0.0.1",
+ "valid": false
+ },
+ {
+ "description": "an IP address with out-of-range values",
+ "data": "256.256.256.256",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "validation of IPv6 addresses",
+ "schema": {"format": "ipv6"},
+ "tests": [
+ {
+ "description": "a valid IPv6 address",
+ "data": "::1",
+ "valid": true
+ },
+ {
+ "description": "an IPv6 address with out-of-range values",
+ "data": "12345::",
+ "valid": false
+ },
+ {
+ "description": "an IPv6 address with too many components",
+ "data": "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1",
+ "valid": false
+ },
+ {
+ "description": "an IPv6 address containing illegal characters",
+ "data": "::laptop",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "validation of host names",
+ "schema": {"format": "host-name"},
+ "tests": [
+ {
+ "description": "a valid host name",
+ "data": "www.example.com",
+ "valid": true
+ },
+ {
+ "description": "a host name starting with an illegal character",
+ "data": "-a-host-name-that-starts-with--",
+ "valid": false
+ },
+ {
+ "description": "a host name containing illegal characters",
+ "data": "not_a_valid_host_name",
+ "valid": false
+ },
+ {
+ "description": "a host name with a component too long",
+ "data": "a-vvvvvvvvvvvvvvvveeeeeeeeeeeeeeeerrrrrrrrrrrrrrrryyyyyyyyyyyyyyyy-long-host-name-component",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "validation of CSS colors",
+ "schema": {"format": "color"},
+ "tests": [
+ {
+ "description": "a valid CSS color name",
+ "data": "fuchsia",
+ "valid": true
+ },
+ {
+ "description": "a valid six-digit CSS color code",
+ "data": "#CC8899",
+ "valid": true
+ },
+ {
+ "description": "a valid three-digit CSS color code",
+ "data": "#C89",
+ "valid": true
+ },
+ {
+ "description": "an invalid CSS color code",
+ "data": "#00332520",
+ "valid": false
+ },
+ {
+ "description": "an invalid CSS color name",
+ "data": "puce",
+ "valid": false
+ },
+ {
+ "description": "a CSS color name containing invalid characters",
+ "data": "light_grayish_red-violet",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/jsregex.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/jsregex.json
index 03fe97724c0..8c28e4af5af 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/jsregex.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/jsregex.json
@@ -1,18 +1,18 @@
-[
- {
- "description": "ECMA 262 regex dialect recognition",
- "schema": { "format": "regex" },
- "tests": [
- {
- "description": "[^] is a valid regex",
- "data": "[^]",
- "valid": true
- },
- {
- "description": "ECMA 262 has no support for lookbehind",
- "data": "(?<=foo)bar",
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "ECMA 262 regex dialect recognition",
+ "schema": { "format": "regex" },
+ "tests": [
+ {
+ "description": "[^] is a valid regex",
+ "data": "[^]",
+ "valid": true
+ },
+ {
+ "description": "ECMA 262 has no support for lookbehind",
+ "data": "(?<=foo)bar",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/zeroTerminatedFloats.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/zeroTerminatedFloats.json
index 9b50ea27769..445fffc5d61 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/zeroTerminatedFloats.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/optional/zeroTerminatedFloats.json
@@ -1,15 +1,15 @@
-[
- {
- "description": "some languages do not distinguish between different types of numeric value",
- "schema": {
- "type": "integer"
- },
- "tests": [
- {
- "description": "a float is not an integer even without fractional part",
- "data": 1.0,
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "some languages do not distinguish between different types of numeric value",
+ "schema": {
+ "type": "integer"
+ },
+ "tests": [
+ {
+ "description": "a float is not an integer even without fractional part",
+ "data": 1.0,
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/pattern.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/pattern.json
index 25e72997314..70b5e10950a 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/pattern.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/pattern.json
@@ -1,34 +1,34 @@
-[
- {
- "description": "pattern validation",
- "schema": {"pattern": "^a*$"},
- "tests": [
- {
- "description": "a matching pattern is valid",
- "data": "aaa",
- "valid": true
- },
- {
- "description": "a non-matching pattern is invalid",
- "data": "abc",
- "valid": false
- },
- {
- "description": "ignores non-strings",
- "data": true,
- "valid": true
- }
- ]
- },
- {
- "description": "pattern is not anchored",
- "schema": {"pattern": "a+"},
- "tests": [
- {
- "description": "matches a substring",
- "data": "xxaayy",
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "pattern validation",
+ "schema": {"pattern": "^a*$"},
+ "tests": [
+ {
+ "description": "a matching pattern is valid",
+ "data": "aaa",
+ "valid": true
+ },
+ {
+ "description": "a non-matching pattern is invalid",
+ "data": "abc",
+ "valid": false
+ },
+ {
+ "description": "ignores non-strings",
+ "data": true,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "pattern is not anchored",
+ "schema": {"pattern": "a+"},
+ "tests": [
+ {
+ "description": "matches a substring",
+ "data": "xxaayy",
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/patternProperties.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/patternProperties.json
index 18586e5daba..8d7cea77577 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/patternProperties.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/patternProperties.json
@@ -1,110 +1,110 @@
-[
- {
- "description":
- "patternProperties validates properties matching a regex",
- "schema": {
- "patternProperties": {
- "f.*o": {"type": "integer"}
- }
- },
- "tests": [
- {
- "description": "a single valid match is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "multiple valid matches is valid",
- "data": {"foo": 1, "foooooo" : 2},
- "valid": true
- },
- {
- "description": "a single invalid match is invalid",
- "data": {"foo": "bar", "fooooo": 2},
- "valid": false
- },
- {
- "description": "multiple invalid matches is invalid",
- "data": {"foo": "bar", "foooooo" : "baz"},
- "valid": false
- },
- {
- "description": "ignores non-objects",
- "data": 12,
- "valid": true
- }
- ]
- },
- {
- "description": "multiple simultaneous patternProperties are validated",
- "schema": {
- "patternProperties": {
- "a*": {"type": "integer"},
- "aaa*": {"maximum": 20}
- }
- },
- "tests": [
- {
- "description": "a single valid match is valid",
- "data": {"a": 21},
- "valid": true
- },
- {
- "description": "a simultaneous match is valid",
- "data": {"aaaa": 18},
- "valid": true
- },
- {
- "description": "multiple matches is valid",
- "data": {"a": 21, "aaaa": 18},
- "valid": true
- },
- {
- "description": "an invalid due to one is invalid",
- "data": {"a": "bar"},
- "valid": false
- },
- {
- "description": "an invalid due to the other is invalid",
- "data": {"aaaa": 31},
- "valid": false
- },
- {
- "description": "an invalid due to both is invalid",
- "data": {"aaa": "foo", "aaaa": 31},
- "valid": false
- }
- ]
- },
- {
- "description": "regexes are not anchored by default and are case sensitive",
- "schema": {
- "patternProperties": {
- "[0-9]{2,}": { "type": "boolean" },
- "X_": { "type": "string" }
- }
- },
- "tests": [
- {
- "description": "non recognized members are ignored",
- "data": { "answer 1": "42" },
- "valid": true
- },
- {
- "description": "recognized members are accounted for",
- "data": { "a31b": null },
- "valid": false
- },
- {
- "description": "regexes are case sensitive",
- "data": { "a_x_3": 3 },
- "valid": true
- },
- {
- "description": "regexes are case sensitive, 2",
- "data": { "a_X_3": 3 },
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description":
+ "patternProperties validates properties matching a regex",
+ "schema": {
+ "patternProperties": {
+ "f.*o": {"type": "integer"}
+ }
+ },
+ "tests": [
+ {
+ "description": "a single valid match is valid",
+ "data": {"foo": 1},
+ "valid": true
+ },
+ {
+ "description": "multiple valid matches is valid",
+ "data": {"foo": 1, "foooooo" : 2},
+ "valid": true
+ },
+ {
+ "description": "a single invalid match is invalid",
+ "data": {"foo": "bar", "fooooo": 2},
+ "valid": false
+ },
+ {
+ "description": "multiple invalid matches is invalid",
+ "data": {"foo": "bar", "foooooo" : "baz"},
+ "valid": false
+ },
+ {
+ "description": "ignores non-objects",
+ "data": 12,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "multiple simultaneous patternProperties are validated",
+ "schema": {
+ "patternProperties": {
+ "a*": {"type": "integer"},
+ "aaa*": {"maximum": 20}
+ }
+ },
+ "tests": [
+ {
+ "description": "a single valid match is valid",
+ "data": {"a": 21},
+ "valid": true
+ },
+ {
+ "description": "a simultaneous match is valid",
+ "data": {"aaaa": 18},
+ "valid": true
+ },
+ {
+ "description": "multiple matches is valid",
+ "data": {"a": 21, "aaaa": 18},
+ "valid": true
+ },
+ {
+ "description": "an invalid due to one is invalid",
+ "data": {"a": "bar"},
+ "valid": false
+ },
+ {
+ "description": "an invalid due to the other is invalid",
+ "data": {"aaaa": 31},
+ "valid": false
+ },
+ {
+ "description": "an invalid due to both is invalid",
+ "data": {"aaa": "foo", "aaaa": 31},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "regexes are not anchored by default and are case sensitive",
+ "schema": {
+ "patternProperties": {
+ "[0-9]{2,}": { "type": "boolean" },
+ "X_": { "type": "string" }
+ }
+ },
+ "tests": [
+ {
+ "description": "non recognized members are ignored",
+ "data": { "answer 1": "42" },
+ "valid": true
+ },
+ {
+ "description": "recognized members are accounted for",
+ "data": { "a31b": null },
+ "valid": false
+ },
+ {
+ "description": "regexes are case sensitive",
+ "data": { "a_x_3": 3 },
+ "valid": true
+ },
+ {
+ "description": "regexes are case sensitive, 2",
+ "data": { "a_X_3": 3 },
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/properties.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/properties.json
index cd1644dcd91..8bda460ce16 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/properties.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/properties.json
@@ -1,92 +1,92 @@
-[
- {
- "description": "object properties validation",
- "schema": {
- "properties": {
- "foo": {"type": "integer"},
- "bar": {"type": "string"}
- }
- },
- "tests": [
- {
- "description": "both properties present and valid is valid",
- "data": {"foo": 1, "bar": "baz"},
- "valid": true
- },
- {
- "description": "one property invalid is invalid",
- "data": {"foo": 1, "bar": {}},
- "valid": false
- },
- {
- "description": "both properties invalid is invalid",
- "data": {"foo": [], "bar": {}},
- "valid": false
- },
- {
- "description": "doesn't invalidate other properties",
- "data": {"quux": []},
- "valid": true
- },
- {
- "description": "ignores non-objects",
- "data": [],
- "valid": true
- }
- ]
- },
- {
- "description":
- "properties, patternProperties, additionalProperties interaction",
- "schema": {
- "properties": {
- "foo": {"type": "array", "maxItems": 3},
- "bar": {"type": "array"}
- },
- "patternProperties": {"f.o": {"minItems": 2}},
- "additionalProperties": {"type": "integer"}
- },
- "tests": [
- {
- "description": "property validates property",
- "data": {"foo": [1, 2]},
- "valid": true
- },
- {
- "description": "property invalidates property",
- "data": {"foo": [1, 2, 3, 4]},
- "valid": false
- },
- {
- "description": "patternProperty invalidates property",
- "data": {"foo": []},
- "valid": false
- },
- {
- "description": "patternProperty validates nonproperty",
- "data": {"fxo": [1, 2]},
- "valid": true
- },
- {
- "description": "patternProperty invalidates nonproperty",
- "data": {"fxo": []},
- "valid": false
- },
- {
- "description": "additionalProperty ignores property",
- "data": {"bar": []},
- "valid": true
- },
- {
- "description": "additionalProperty validates others",
- "data": {"quux": 3},
- "valid": true
- },
- {
- "description": "additionalProperty invalidates others",
- "data": {"quux": "foo"},
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "object properties validation",
+ "schema": {
+ "properties": {
+ "foo": {"type": "integer"},
+ "bar": {"type": "string"}
+ }
+ },
+ "tests": [
+ {
+ "description": "both properties present and valid is valid",
+ "data": {"foo": 1, "bar": "baz"},
+ "valid": true
+ },
+ {
+ "description": "one property invalid is invalid",
+ "data": {"foo": 1, "bar": {}},
+ "valid": false
+ },
+ {
+ "description": "both properties invalid is invalid",
+ "data": {"foo": [], "bar": {}},
+ "valid": false
+ },
+ {
+ "description": "doesn't invalidate other properties",
+ "data": {"quux": []},
+ "valid": true
+ },
+ {
+ "description": "ignores non-objects",
+ "data": [],
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description":
+ "properties, patternProperties, additionalProperties interaction",
+ "schema": {
+ "properties": {
+ "foo": {"type": "array", "maxItems": 3},
+ "bar": {"type": "array"}
+ },
+ "patternProperties": {"f.o": {"minItems": 2}},
+ "additionalProperties": {"type": "integer"}
+ },
+ "tests": [
+ {
+ "description": "property validates property",
+ "data": {"foo": [1, 2]},
+ "valid": true
+ },
+ {
+ "description": "property invalidates property",
+ "data": {"foo": [1, 2, 3, 4]},
+ "valid": false
+ },
+ {
+ "description": "patternProperty invalidates property",
+ "data": {"foo": []},
+ "valid": false
+ },
+ {
+ "description": "patternProperty validates nonproperty",
+ "data": {"fxo": [1, 2]},
+ "valid": true
+ },
+ {
+ "description": "patternProperty invalidates nonproperty",
+ "data": {"fxo": []},
+ "valid": false
+ },
+ {
+ "description": "additionalProperty ignores property",
+ "data": {"bar": []},
+ "valid": true
+ },
+ {
+ "description": "additionalProperty validates others",
+ "data": {"quux": 3},
+ "valid": true
+ },
+ {
+ "description": "additionalProperty invalidates others",
+ "data": {"quux": "foo"},
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/ref.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/ref.json
index 903ecb6bce1..124edf6b41c 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/ref.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/ref.json
@@ -1,159 +1,159 @@
-[
- {
- "description": "root pointer ref",
- "schema": {
- "properties": {
- "foo": {"$ref": "#"}
- },
- "additionalProperties": false
- },
- "tests": [
- {
- "description": "match",
- "data": {"foo": false},
- "valid": true
- },
- {
- "description": "recursive match",
- "data": {"foo": {"foo": false}},
- "valid": true
- },
- {
- "description": "mismatch",
- "data": {"bar": false},
- "valid": false
- },
- {
- "description": "recursive mismatch",
- "data": {"foo": {"bar": false}},
- "valid": false
- }
- ]
- },
- {
- "description": "relative pointer ref to object",
- "schema": {
- "properties": {
- "foo": {"type": "integer"},
- "bar": {"$ref": "#/properties/foo"}
- }
- },
- "tests": [
- {
- "description": "match",
- "data": {"bar": 3},
- "valid": true
- },
- {
- "description": "mismatch",
- "data": {"bar": true},
- "valid": false
- }
- ]
- },
- {
- "description": "relative pointer ref to array",
- "schema": {
- "items": [
- {"type": "integer"},
- {"$ref": "#/items/0"}
- ]
- },
- "tests": [
- {
- "description": "match array",
- "data": [1, 2],
- "valid": true
- },
- {
- "description": "mismatch array",
- "data": [1, "foo"],
- "valid": false
- }
- ]
- },
- {
- "description": "escaped pointer ref",
- "schema": {
- "tilda~field": {"type": "integer"},
- "slash/field": {"type": "integer"},
- "percent%field": {"type": "integer"},
- "properties": {
- "tilda": {"$ref": "#/tilda~0field"},
- "slash": {"$ref": "#/slash~1field"},
- "percent": {"$ref": "#/percent%25field"}
- }
- },
- "tests": [
- {
- "description": "slash invalid",
- "data": {"slash": "aoeu"},
- "valid": false
- },
- {
- "description": "tilda invalid",
- "data": {"tilda": "aoeu"},
- "valid": false
- },
- {
- "description": "percent invalid",
- "data": {"percent": "aoeu"},
- "valid": false
- },
- {
- "description": "slash valid",
- "data": {"slash": 123},
- "valid": true
- },
- {
- "description": "tilda valid",
- "data": {"tilda": 123},
- "valid": true
- },
- {
- "description": "percent valid",
- "data": {"percent": 123},
- "valid": true
- }
- ]
- },
- {
- "description": "nested refs",
- "schema": {
- "definitions": {
- "a": {"type": "integer"},
- "b": {"$ref": "#/definitions/a"},
- "c": {"$ref": "#/definitions/b"}
- },
- "$ref": "#/definitions/c"
- },
- "tests": [
- {
- "description": "nested ref valid",
- "data": 5,
- "valid": true
- },
- {
- "description": "nested ref invalid",
- "data": "a",
- "valid": false
- }
- ]
- },
- {
- "description": "remote ref, containing refs itself",
- "schema": {"$ref": "http://json-schema.org/draft-03/schema#"},
- "tests": [
- {
- "description": "remote ref valid",
- "data": {"items": {"type": "integer"}},
- "valid": true
- },
- {
- "description": "remote ref invalid",
- "data": {"items": {"type": 1}},
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "root pointer ref",
+ "schema": {
+ "properties": {
+ "foo": {"$ref": "#"}
+ },
+ "additionalProperties": false
+ },
+ "tests": [
+ {
+ "description": "match",
+ "data": {"foo": false},
+ "valid": true
+ },
+ {
+ "description": "recursive match",
+ "data": {"foo": {"foo": false}},
+ "valid": true
+ },
+ {
+ "description": "mismatch",
+ "data": {"bar": false},
+ "valid": false
+ },
+ {
+ "description": "recursive mismatch",
+ "data": {"foo": {"bar": false}},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "relative pointer ref to object",
+ "schema": {
+ "properties": {
+ "foo": {"type": "integer"},
+ "bar": {"$ref": "#/properties/foo"}
+ }
+ },
+ "tests": [
+ {
+ "description": "match",
+ "data": {"bar": 3},
+ "valid": true
+ },
+ {
+ "description": "mismatch",
+ "data": {"bar": true},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "relative pointer ref to array",
+ "schema": {
+ "items": [
+ {"type": "integer"},
+ {"$ref": "#/items/0"}
+ ]
+ },
+ "tests": [
+ {
+ "description": "match array",
+ "data": [1, 2],
+ "valid": true
+ },
+ {
+ "description": "mismatch array",
+ "data": [1, "foo"],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "escaped pointer ref",
+ "schema": {
+ "tilda~field": {"type": "integer"},
+ "slash/field": {"type": "integer"},
+ "percent%field": {"type": "integer"},
+ "properties": {
+ "tilda": {"$ref": "#/tilda~0field"},
+ "slash": {"$ref": "#/slash~1field"},
+ "percent": {"$ref": "#/percent%25field"}
+ }
+ },
+ "tests": [
+ {
+ "description": "slash invalid",
+ "data": {"slash": "aoeu"},
+ "valid": false
+ },
+ {
+ "description": "tilda invalid",
+ "data": {"tilda": "aoeu"},
+ "valid": false
+ },
+ {
+ "description": "percent invalid",
+ "data": {"percent": "aoeu"},
+ "valid": false
+ },
+ {
+ "description": "slash valid",
+ "data": {"slash": 123},
+ "valid": true
+ },
+ {
+ "description": "tilda valid",
+ "data": {"tilda": 123},
+ "valid": true
+ },
+ {
+ "description": "percent valid",
+ "data": {"percent": 123},
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "nested refs",
+ "schema": {
+ "definitions": {
+ "a": {"type": "integer"},
+ "b": {"$ref": "#/definitions/a"},
+ "c": {"$ref": "#/definitions/b"}
+ },
+ "$ref": "#/definitions/c"
+ },
+ "tests": [
+ {
+ "description": "nested ref valid",
+ "data": 5,
+ "valid": true
+ },
+ {
+ "description": "nested ref invalid",
+ "data": "a",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "remote ref, containing refs itself",
+ "schema": {"$ref": "http://json-schema.org/draft-03/schema#"},
+ "tests": [
+ {
+ "description": "remote ref valid",
+ "data": {"items": {"type": "integer"}},
+ "valid": true
+ },
+ {
+ "description": "remote ref invalid",
+ "data": {"items": {"type": 1}},
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/refRemote.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/refRemote.json
index 4ca804732c9..85d136c8400 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/refRemote.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/refRemote.json
@@ -1,74 +1,74 @@
-[
- {
- "description": "remote ref",
- "schema": {"$ref": "http://localhost:1234/integer.json"},
- "tests": [
- {
- "description": "remote ref valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "remote ref invalid",
- "data": "a",
- "valid": false
- }
- ]
- },
- {
- "description": "fragment within remote ref",
- "schema": {"$ref": "http://localhost:1234/subSchemas.json#/integer"},
- "tests": [
- {
- "description": "remote fragment valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "remote fragment invalid",
- "data": "a",
- "valid": false
- }
- ]
- },
- {
- "description": "ref within remote ref",
- "schema": {
- "$ref": "http://localhost:1234/subSchemas.json#/refToInteger"
- },
- "tests": [
- {
- "description": "ref within ref valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "ref within ref invalid",
- "data": "a",
- "valid": false
- }
- ]
- },
- {
- "description": "change resolution scope",
- "schema": {
- "id": "http://localhost:1234/",
- "items": {
- "id": "folder/",
- "items": {"$ref": "folderInteger.json"}
- }
- },
- "tests": [
- {
- "description": "changed scope ref valid",
- "data": [[1]],
- "valid": true
- },
- {
- "description": "changed scope ref invalid",
- "data": [["a"]],
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "remote ref",
+ "schema": {"$ref": "http://localhost:1234/integer.json"},
+ "tests": [
+ {
+ "description": "remote ref valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "remote ref invalid",
+ "data": "a",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "fragment within remote ref",
+ "schema": {"$ref": "http://localhost:1234/subSchemas.json#/integer"},
+ "tests": [
+ {
+ "description": "remote fragment valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "remote fragment invalid",
+ "data": "a",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "ref within remote ref",
+ "schema": {
+ "$ref": "http://localhost:1234/subSchemas.json#/refToInteger"
+ },
+ "tests": [
+ {
+ "description": "ref within ref valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "ref within ref invalid",
+ "data": "a",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "change resolution scope",
+ "schema": {
+ "id": "http://localhost:1234/",
+ "items": {
+ "id": "folder/",
+ "items": {"$ref": "folderInteger.json"}
+ }
+ },
+ "tests": [
+ {
+ "description": "changed scope ref valid",
+ "data": [[1]],
+ "valid": true
+ },
+ {
+ "description": "changed scope ref invalid",
+ "data": [["a"]],
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/required.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/required.json
index aaaf0242737..6f71c77d235 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/required.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/required.json
@@ -1,53 +1,53 @@
-[
- {
- "description": "required validation",
- "schema": {
- "properties": {
- "foo": {"required" : true},
- "bar": {}
- }
- },
- "tests": [
- {
- "description": "present required property is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "non-present required property is invalid",
- "data": {"bar": 1},
- "valid": false
- }
- ]
- },
- {
- "description": "required default validation",
- "schema": {
- "properties": {
- "foo": {}
- }
- },
- "tests": [
- {
- "description": "not required by default",
- "data": {},
- "valid": true
- }
- ]
- },
- {
- "description": "required explicitly false validation",
- "schema": {
- "properties": {
- "foo": {"required": false}
- }
- },
- "tests": [
- {
- "description": "not required if required is false",
- "data": {},
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "required validation",
+ "schema": {
+ "properties": {
+ "foo": {"required" : true},
+ "bar": {}
+ }
+ },
+ "tests": [
+ {
+ "description": "present required property is valid",
+ "data": {"foo": 1},
+ "valid": true
+ },
+ {
+ "description": "non-present required property is invalid",
+ "data": {"bar": 1},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "required default validation",
+ "schema": {
+ "properties": {
+ "foo": {}
+ }
+ },
+ "tests": [
+ {
+ "description": "not required by default",
+ "data": {},
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "required explicitly false validation",
+ "schema": {
+ "properties": {
+ "foo": {"required": false}
+ }
+ },
+ "tests": [
+ {
+ "description": "not required if required is false",
+ "data": {},
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/type.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/type.json
index 337da1206da..e0495af9d03 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/type.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/type.json
@@ -1,474 +1,474 @@
-[
- {
- "description": "integer type matches integers",
- "schema": {"type": "integer"},
- "tests": [
- {
- "description": "an integer is an integer",
- "data": 1,
- "valid": true
- },
- {
- "description": "a float is not an integer",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not an integer",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not an integer",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not an integer",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not an integer",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not an integer",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "number type matches numbers",
- "schema": {"type": "number"},
- "tests": [
- {
- "description": "an integer is a number",
- "data": 1,
- "valid": true
- },
- {
- "description": "a float is a number",
- "data": 1.1,
- "valid": true
- },
- {
- "description": "a string is not a number",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not a number",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not a number",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not a number",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not a number",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "string type matches strings",
- "schema": {"type": "string"},
- "tests": [
- {
- "description": "1 is not a string",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not a string",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is a string",
- "data": "foo",
- "valid": true
- },
- {
- "description": "an object is not a string",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not a string",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not a string",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not a string",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "object type matches objects",
- "schema": {"type": "object"},
- "tests": [
- {
- "description": "an integer is not an object",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not an object",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not an object",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is an object",
- "data": {},
- "valid": true
- },
- {
- "description": "an array is not an object",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not an object",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not an object",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "array type matches arrays",
- "schema": {"type": "array"},
- "tests": [
- {
- "description": "an integer is not an array",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not an array",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not an array",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not an array",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is an array",
- "data": [],
- "valid": true
- },
- {
- "description": "a boolean is not an array",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not an array",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "boolean type matches booleans",
- "schema": {"type": "boolean"},
- "tests": [
- {
- "description": "an integer is not a boolean",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not a boolean",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not a boolean",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not a boolean",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not a boolean",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is a boolean",
- "data": true,
- "valid": true
- },
- {
- "description": "null is not a boolean",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "null type matches only the null object",
- "schema": {"type": "null"},
- "tests": [
- {
- "description": "an integer is not null",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not null",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not null",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not null",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not null",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not null",
- "data": true,
- "valid": false
- },
- {
- "description": "null is null",
- "data": null,
- "valid": true
- }
- ]
- },
- {
- "description": "any type matches any type",
- "schema": {"type": "any"},
- "tests": [
- {
- "description": "any type includes integers",
- "data": 1,
- "valid": true
- },
- {
- "description": "any type includes float",
- "data": 1.1,
- "valid": true
- },
- {
- "description": "any type includes string",
- "data": "foo",
- "valid": true
- },
- {
- "description": "any type includes object",
- "data": {},
- "valid": true
- },
- {
- "description": "any type includes array",
- "data": [],
- "valid": true
- },
- {
- "description": "any type includes boolean",
- "data": true,
- "valid": true
- },
- {
- "description": "any type includes null",
- "data": null,
- "valid": true
- }
- ]
- },
- {
- "description": "multiple types can be specified in an array",
- "schema": {"type": ["integer", "string"]},
- "tests": [
- {
- "description": "an integer is valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "a string is valid",
- "data": "foo",
- "valid": true
- },
- {
- "description": "a float is invalid",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "an object is invalid",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is invalid",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is invalid",
- "data": true,
- "valid": false
- },
- {
- "description": "null is invalid",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "types can include schemas",
- "schema": {
- "type": [
- "array",
- {"type": "object"}
- ]
- },
- "tests": [
- {
- "description": "an integer is invalid",
- "data": 1,
- "valid": false
- },
- {
- "description": "a string is invalid",
- "data": "foo",
- "valid": false
- },
- {
- "description": "a float is invalid",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "an object is valid",
- "data": {},
- "valid": true
- },
- {
- "description": "an array is valid",
- "data": [],
- "valid": true
- },
- {
- "description": "a boolean is invalid",
- "data": true,
- "valid": false
- },
- {
- "description": "null is invalid",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description":
- "when types includes a schema it should fully validate the schema",
- "schema": {
- "type": [
- "integer",
- {
- "properties": {
- "foo": {"type": "null"}
- }
- }
- ]
- },
- "tests": [
- {
- "description": "an integer is valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "an object is valid only if it is fully valid",
- "data": {"foo": null},
- "valid": true
- },
- {
- "description": "an object is invalid otherwise",
- "data": {"foo": "bar"},
- "valid": false
- }
- ]
- },
- {
- "description": "types from separate schemas are merged",
- "schema": {
- "type": [
- {"type": ["string"]},
- {"type": ["array", "null"]}
- ]
- },
- "tests": [
- {
- "description": "an integer is invalid",
- "data": 1,
- "valid": false
- },
- {
- "description": "a string is valid",
- "data": "foo",
- "valid": true
- },
- {
- "description": "an array is valid",
- "data": [1, 2, 3],
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "integer type matches integers",
+ "schema": {"type": "integer"},
+ "tests": [
+ {
+ "description": "an integer is an integer",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "a float is not an integer",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "a string is not an integer",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "an object is not an integer",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "an array is not an integer",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "a boolean is not an integer",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is not an integer",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "number type matches numbers",
+ "schema": {"type": "number"},
+ "tests": [
+ {
+ "description": "an integer is a number",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "a float is a number",
+ "data": 1.1,
+ "valid": true
+ },
+ {
+ "description": "a string is not a number",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "an object is not a number",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "an array is not a number",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "a boolean is not a number",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is not a number",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "string type matches strings",
+ "schema": {"type": "string"},
+ "tests": [
+ {
+ "description": "1 is not a string",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "a float is not a string",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "a string is a string",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "an object is not a string",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "an array is not a string",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "a boolean is not a string",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is not a string",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "object type matches objects",
+ "schema": {"type": "object"},
+ "tests": [
+ {
+ "description": "an integer is not an object",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "a float is not an object",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "a string is not an object",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "an object is an object",
+ "data": {},
+ "valid": true
+ },
+ {
+ "description": "an array is not an object",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "a boolean is not an object",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is not an object",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "array type matches arrays",
+ "schema": {"type": "array"},
+ "tests": [
+ {
+ "description": "an integer is not an array",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "a float is not an array",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "a string is not an array",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "an object is not an array",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "an array is an array",
+ "data": [],
+ "valid": true
+ },
+ {
+ "description": "a boolean is not an array",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is not an array",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "boolean type matches booleans",
+ "schema": {"type": "boolean"},
+ "tests": [
+ {
+ "description": "an integer is not a boolean",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "a float is not a boolean",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "a string is not a boolean",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "an object is not a boolean",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "an array is not a boolean",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "a boolean is a boolean",
+ "data": true,
+ "valid": true
+ },
+ {
+ "description": "null is not a boolean",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "null type matches only the null object",
+ "schema": {"type": "null"},
+ "tests": [
+ {
+ "description": "an integer is not null",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "a float is not null",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "a string is not null",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "an object is not null",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "an array is not null",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "a boolean is not null",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is null",
+ "data": null,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "any type matches any type",
+ "schema": {"type": "any"},
+ "tests": [
+ {
+ "description": "any type includes integers",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "any type includes float",
+ "data": 1.1,
+ "valid": true
+ },
+ {
+ "description": "any type includes string",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "any type includes object",
+ "data": {},
+ "valid": true
+ },
+ {
+ "description": "any type includes array",
+ "data": [],
+ "valid": true
+ },
+ {
+ "description": "any type includes boolean",
+ "data": true,
+ "valid": true
+ },
+ {
+ "description": "any type includes null",
+ "data": null,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "multiple types can be specified in an array",
+ "schema": {"type": ["integer", "string"]},
+ "tests": [
+ {
+ "description": "an integer is valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "a string is valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "a float is invalid",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "an object is invalid",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "an array is invalid",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "a boolean is invalid",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is invalid",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "types can include schemas",
+ "schema": {
+ "type": [
+ "array",
+ {"type": "object"}
+ ]
+ },
+ "tests": [
+ {
+ "description": "an integer is invalid",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "a string is invalid",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "a float is invalid",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "an object is valid",
+ "data": {},
+ "valid": true
+ },
+ {
+ "description": "an array is valid",
+ "data": [],
+ "valid": true
+ },
+ {
+ "description": "a boolean is invalid",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is invalid",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description":
+ "when types includes a schema it should fully validate the schema",
+ "schema": {
+ "type": [
+ "integer",
+ {
+ "properties": {
+ "foo": {"type": "null"}
+ }
+ }
+ ]
+ },
+ "tests": [
+ {
+ "description": "an integer is valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "an object is valid only if it is fully valid",
+ "data": {"foo": null},
+ "valid": true
+ },
+ {
+ "description": "an object is invalid otherwise",
+ "data": {"foo": "bar"},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "types from separate schemas are merged",
+ "schema": {
+ "type": [
+ {"type": ["string"]},
+ {"type": ["array", "null"]}
+ ]
+ },
+ "tests": [
+ {
+ "description": "an integer is invalid",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "a string is valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "an array is valid",
+ "data": [1, 2, 3],
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/uniqueItems.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/uniqueItems.json
index c1f4ab99c9a..f54133987e4 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft3/uniqueItems.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft3/uniqueItems.json
@@ -1,79 +1,79 @@
-[
- {
- "description": "uniqueItems validation",
- "schema": {"uniqueItems": true},
- "tests": [
- {
- "description": "unique array of integers is valid",
- "data": [1, 2],
- "valid": true
- },
- {
- "description": "non-unique array of integers is invalid",
- "data": [1, 1],
- "valid": false
- },
- {
- "description": "numbers are unique if mathematically unequal",
- "data": [1.0, 1.00, 1],
- "valid": false
- },
- {
- "description": "unique array of objects is valid",
- "data": [{"foo": "bar"}, {"foo": "baz"}],
- "valid": true
- },
- {
- "description": "non-unique array of objects is invalid",
- "data": [{"foo": "bar"}, {"foo": "bar"}],
- "valid": false
- },
- {
- "description": "unique array of nested objects is valid",
- "data": [
- {"foo": {"bar" : {"baz" : true}}},
- {"foo": {"bar" : {"baz" : false}}}
- ],
- "valid": true
- },
- {
- "description": "non-unique array of nested objects is invalid",
- "data": [
- {"foo": {"bar" : {"baz" : true}}},
- {"foo": {"bar" : {"baz" : true}}}
- ],
- "valid": false
- },
- {
- "description": "unique array of arrays is valid",
- "data": [["foo"], ["bar"]],
- "valid": true
- },
- {
- "description": "non-unique array of arrays is invalid",
- "data": [["foo"], ["foo"]],
- "valid": false
- },
- {
- "description": "1 and true are unique",
- "data": [1, true],
- "valid": true
- },
- {
- "description": "0 and false are unique",
- "data": [0, false],
- "valid": true
- },
- {
- "description": "unique heterogeneous types are valid",
- "data": [{}, [1], true, null, 1],
- "valid": true
- },
- {
- "description": "non-unique heterogeneous types are invalid",
- "data": [{}, [1], true, null, {}, 1],
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "uniqueItems validation",
+ "schema": {"uniqueItems": true},
+ "tests": [
+ {
+ "description": "unique array of integers is valid",
+ "data": [1, 2],
+ "valid": true
+ },
+ {
+ "description": "non-unique array of integers is invalid",
+ "data": [1, 1],
+ "valid": false
+ },
+ {
+ "description": "numbers are unique if mathematically unequal",
+ "data": [1.0, 1.00, 1],
+ "valid": false
+ },
+ {
+ "description": "unique array of objects is valid",
+ "data": [{"foo": "bar"}, {"foo": "baz"}],
+ "valid": true
+ },
+ {
+ "description": "non-unique array of objects is invalid",
+ "data": [{"foo": "bar"}, {"foo": "bar"}],
+ "valid": false
+ },
+ {
+ "description": "unique array of nested objects is valid",
+ "data": [
+ {"foo": {"bar" : {"baz" : true}}},
+ {"foo": {"bar" : {"baz" : false}}}
+ ],
+ "valid": true
+ },
+ {
+ "description": "non-unique array of nested objects is invalid",
+ "data": [
+ {"foo": {"bar" : {"baz" : true}}},
+ {"foo": {"bar" : {"baz" : true}}}
+ ],
+ "valid": false
+ },
+ {
+ "description": "unique array of arrays is valid",
+ "data": [["foo"], ["bar"]],
+ "valid": true
+ },
+ {
+ "description": "non-unique array of arrays is invalid",
+ "data": [["foo"], ["foo"]],
+ "valid": false
+ },
+ {
+ "description": "1 and true are unique",
+ "data": [1, true],
+ "valid": true
+ },
+ {
+ "description": "0 and false are unique",
+ "data": [0, false],
+ "valid": true
+ },
+ {
+ "description": "unique heterogeneous types are valid",
+ "data": [{}, [1], true, null, 1],
+ "valid": true
+ },
+ {
+ "description": "non-unique heterogeneous types are invalid",
+ "data": [{}, [1], true, null, {}, 1],
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/additionalItems.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/additionalItems.json
index 521745c8d6e..ceb42549c2c 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/additionalItems.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/additionalItems.json
@@ -1,82 +1,82 @@
-[
- {
- "description": "additionalItems as schema",
- "schema": {
- "items": [{}],
- "additionalItems": {"type": "integer"}
- },
- "tests": [
- {
- "description": "additional items match schema",
- "data": [ null, 2, 3, 4 ],
- "valid": true
- },
- {
- "description": "additional items do not match schema",
- "data": [ null, 2, 3, "foo" ],
- "valid": false
- }
- ]
- },
- {
- "description": "items is schema, no additionalItems",
- "schema": {
- "items": {},
- "additionalItems": false
- },
- "tests": [
- {
- "description": "all items match schema",
- "data": [ 1, 2, 3, 4, 5 ],
- "valid": true
- }
- ]
- },
- {
- "description": "array of items with no additionalItems",
- "schema": {
- "items": [{}, {}, {}],
- "additionalItems": false
- },
- "tests": [
- {
- "description": "no additional items present",
- "data": [ 1, 2, 3 ],
- "valid": true
- },
- {
- "description": "additional items are not permitted",
- "data": [ 1, 2, 3, 4 ],
- "valid": false
- }
- ]
- },
- {
- "description": "additionalItems as false without items",
- "schema": {"additionalItems": false},
- "tests": [
- {
- "description":
- "items defaults to empty schema so everything is valid",
- "data": [ 1, 2, 3, 4, 5 ],
- "valid": true
- },
- {
- "description": "ignores non-arrays",
- "data": {"foo" : "bar"},
- "valid": true
- }
- ]
- },
- {
- "description": "additionalItems are allowed by default",
- "schema": {"items": [{"type": "integer"}]},
- "tests": [
- {
- "description": "only the first item is validated",
- "data": [1, "foo", false],
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "additionalItems as schema",
+ "schema": {
+ "items": [{}],
+ "additionalItems": {"type": "integer"}
+ },
+ "tests": [
+ {
+ "description": "additional items match schema",
+ "data": [ null, 2, 3, 4 ],
+ "valid": true
+ },
+ {
+ "description": "additional items do not match schema",
+ "data": [ null, 2, 3, "foo" ],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "items is schema, no additionalItems",
+ "schema": {
+ "items": {},
+ "additionalItems": false
+ },
+ "tests": [
+ {
+ "description": "all items match schema",
+ "data": [ 1, 2, 3, 4, 5 ],
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "array of items with no additionalItems",
+ "schema": {
+ "items": [{}, {}, {}],
+ "additionalItems": false
+ },
+ "tests": [
+ {
+ "description": "no additional items present",
+ "data": [ 1, 2, 3 ],
+ "valid": true
+ },
+ {
+ "description": "additional items are not permitted",
+ "data": [ 1, 2, 3, 4 ],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "additionalItems as false without items",
+ "schema": {"additionalItems": false},
+ "tests": [
+ {
+ "description":
+ "items defaults to empty schema so everything is valid",
+ "data": [ 1, 2, 3, 4, 5 ],
+ "valid": true
+ },
+ {
+ "description": "ignores non-arrays",
+ "data": {"foo" : "bar"},
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "additionalItems are allowed by default",
+ "schema": {"items": [{"type": "integer"}]},
+ "tests": [
+ {
+ "description": "only the first item is validated",
+ "data": [1, "foo", false],
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/additionalProperties.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/additionalProperties.json
index 40831f9e9aa..fc817daac47 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/additionalProperties.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/additionalProperties.json
@@ -1,88 +1,88 @@
-[
- {
- "description":
- "additionalProperties being false does not allow other properties",
- "schema": {
- "properties": {"foo": {}, "bar": {}},
- "patternProperties": { "^v": {} },
- "additionalProperties": false
- },
- "tests": [
- {
- "description": "no additional properties is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "an additional property is invalid",
- "data": {"foo" : 1, "bar" : 2, "quux" : "boom"},
- "valid": false
- },
- {
- "description": "ignores non-objects",
- "data": [1, 2, 3],
- "valid": true
- },
- {
- "description": "patternProperties are not additional properties",
- "data": {"foo":1, "vroom": 2},
- "valid": true
- }
- ]
- },
- {
- "description":
- "additionalProperties allows a schema which should validate",
- "schema": {
- "properties": {"foo": {}, "bar": {}},
- "additionalProperties": {"type": "boolean"}
- },
- "tests": [
- {
- "description": "no additional properties is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "an additional valid property is valid",
- "data": {"foo" : 1, "bar" : 2, "quux" : true},
- "valid": true
- },
- {
- "description": "an additional invalid property is invalid",
- "data": {"foo" : 1, "bar" : 2, "quux" : 12},
- "valid": false
- }
- ]
- },
- {
- "description":
- "additionalProperties can exist by itself",
- "schema": {
- "additionalProperties": {"type": "boolean"}
- },
- "tests": [
- {
- "description": "an additional valid property is valid",
- "data": {"foo" : true},
- "valid": true
- },
- {
- "description": "an additional invalid property is invalid",
- "data": {"foo" : 1},
- "valid": false
- }
- ]
- },
- {
- "description": "additionalProperties are allowed by default",
- "schema": {"properties": {"foo": {}, "bar": {}}},
- "tests": [
- {
- "description": "additional properties are allowed",
- "data": {"foo": 1, "bar": 2, "quux": true},
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description":
+ "additionalProperties being false does not allow other properties",
+ "schema": {
+ "properties": {"foo": {}, "bar": {}},
+ "patternProperties": { "^v": {} },
+ "additionalProperties": false
+ },
+ "tests": [
+ {
+ "description": "no additional properties is valid",
+ "data": {"foo": 1},
+ "valid": true
+ },
+ {
+ "description": "an additional property is invalid",
+ "data": {"foo" : 1, "bar" : 2, "quux" : "boom"},
+ "valid": false
+ },
+ {
+ "description": "ignores non-objects",
+ "data": [1, 2, 3],
+ "valid": true
+ },
+ {
+ "description": "patternProperties are not additional properties",
+ "data": {"foo":1, "vroom": 2},
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description":
+ "additionalProperties allows a schema which should validate",
+ "schema": {
+ "properties": {"foo": {}, "bar": {}},
+ "additionalProperties": {"type": "boolean"}
+ },
+ "tests": [
+ {
+ "description": "no additional properties is valid",
+ "data": {"foo": 1},
+ "valid": true
+ },
+ {
+ "description": "an additional valid property is valid",
+ "data": {"foo" : 1, "bar" : 2, "quux" : true},
+ "valid": true
+ },
+ {
+ "description": "an additional invalid property is invalid",
+ "data": {"foo" : 1, "bar" : 2, "quux" : 12},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description":
+ "additionalProperties can exist by itself",
+ "schema": {
+ "additionalProperties": {"type": "boolean"}
+ },
+ "tests": [
+ {
+ "description": "an additional valid property is valid",
+ "data": {"foo" : true},
+ "valid": true
+ },
+ {
+ "description": "an additional invalid property is invalid",
+ "data": {"foo" : 1},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "additionalProperties are allowed by default",
+ "schema": {"properties": {"foo": {}, "bar": {}}},
+ "tests": [
+ {
+ "description": "additional properties are allowed",
+ "data": {"foo": 1, "bar": 2, "quux": true},
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/allOf.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/allOf.json
index bbb5f89e4bc..db4d6b8e8ec 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/allOf.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/allOf.json
@@ -1,112 +1,112 @@
-[
- {
- "description": "allOf",
- "schema": {
- "allOf": [
- {
- "properties": {
- "bar": {"type": "integer"}
- },
- "required": ["bar"]
- },
- {
- "properties": {
- "foo": {"type": "string"}
- },
- "required": ["foo"]
- }
- ]
- },
- "tests": [
- {
- "description": "allOf",
- "data": {"foo": "baz", "bar": 2},
- "valid": true
- },
- {
- "description": "mismatch second",
- "data": {"foo": "baz"},
- "valid": false
- },
- {
- "description": "mismatch first",
- "data": {"bar": 2},
- "valid": false
- },
- {
- "description": "wrong type",
- "data": {"foo": "baz", "bar": "quux"},
- "valid": false
- }
- ]
- },
- {
- "description": "allOf with base schema",
- "schema": {
- "properties": {"bar": {"type": "integer"}},
- "required": ["bar"],
- "allOf" : [
- {
- "properties": {
- "foo": {"type": "string"}
- },
- "required": ["foo"]
- },
- {
- "properties": {
- "baz": {"type": "null"}
- },
- "required": ["baz"]
- }
- ]
- },
- "tests": [
- {
- "description": "valid",
- "data": {"foo": "quux", "bar": 2, "baz": null},
- "valid": true
- },
- {
- "description": "mismatch base schema",
- "data": {"foo": "quux", "baz": null},
- "valid": false
- },
- {
- "description": "mismatch first allOf",
- "data": {"bar": 2, "baz": null},
- "valid": false
- },
- {
- "description": "mismatch second allOf",
- "data": {"foo": "quux", "bar": 2},
- "valid": false
- },
- {
- "description": "mismatch both",
- "data": {"bar": 2},
- "valid": false
- }
- ]
- },
- {
- "description": "allOf simple types",
- "schema": {
- "allOf": [
- {"maximum": 30},
- {"minimum": 20}
- ]
- },
- "tests": [
- {
- "description": "valid",
- "data": 25,
- "valid": true
- },
- {
- "description": "mismatch one",
- "data": 35,
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "allOf",
+ "schema": {
+ "allOf": [
+ {
+ "properties": {
+ "bar": {"type": "integer"}
+ },
+ "required": ["bar"]
+ },
+ {
+ "properties": {
+ "foo": {"type": "string"}
+ },
+ "required": ["foo"]
+ }
+ ]
+ },
+ "tests": [
+ {
+ "description": "allOf",
+ "data": {"foo": "baz", "bar": 2},
+ "valid": true
+ },
+ {
+ "description": "mismatch second",
+ "data": {"foo": "baz"},
+ "valid": false
+ },
+ {
+ "description": "mismatch first",
+ "data": {"bar": 2},
+ "valid": false
+ },
+ {
+ "description": "wrong type",
+ "data": {"foo": "baz", "bar": "quux"},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "allOf with base schema",
+ "schema": {
+ "properties": {"bar": {"type": "integer"}},
+ "required": ["bar"],
+ "allOf" : [
+ {
+ "properties": {
+ "foo": {"type": "string"}
+ },
+ "required": ["foo"]
+ },
+ {
+ "properties": {
+ "baz": {"type": "null"}
+ },
+ "required": ["baz"]
+ }
+ ]
+ },
+ "tests": [
+ {
+ "description": "valid",
+ "data": {"foo": "quux", "bar": 2, "baz": null},
+ "valid": true
+ },
+ {
+ "description": "mismatch base schema",
+ "data": {"foo": "quux", "baz": null},
+ "valid": false
+ },
+ {
+ "description": "mismatch first allOf",
+ "data": {"bar": 2, "baz": null},
+ "valid": false
+ },
+ {
+ "description": "mismatch second allOf",
+ "data": {"foo": "quux", "bar": 2},
+ "valid": false
+ },
+ {
+ "description": "mismatch both",
+ "data": {"bar": 2},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "allOf simple types",
+ "schema": {
+ "allOf": [
+ {"maximum": 30},
+ {"minimum": 20}
+ ]
+ },
+ "tests": [
+ {
+ "description": "valid",
+ "data": 25,
+ "valid": true
+ },
+ {
+ "description": "mismatch one",
+ "data": 35,
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/anyOf.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/anyOf.json
index a58714afd89..636a6474105 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/anyOf.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/anyOf.json
@@ -1,68 +1,68 @@
-[
- {
- "description": "anyOf",
- "schema": {
- "anyOf": [
- {
- "type": "integer"
- },
- {
- "minimum": 2
- }
- ]
- },
- "tests": [
- {
- "description": "first anyOf valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "second anyOf valid",
- "data": 2.5,
- "valid": true
- },
- {
- "description": "both anyOf valid",
- "data": 3,
- "valid": true
- },
- {
- "description": "neither anyOf valid",
- "data": 1.5,
- "valid": false
- }
- ]
- },
- {
- "description": "anyOf with base schema",
- "schema": {
- "type": "string",
- "anyOf" : [
- {
- "maxLength": 2
- },
- {
- "minLength": 4
- }
- ]
- },
- "tests": [
- {
- "description": "mismatch base schema",
- "data": 3,
- "valid": false
- },
- {
- "description": "one anyOf valid",
- "data": "foobar",
- "valid": true
- },
- {
- "description": "both anyOf invalid",
- "data": "foo",
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "anyOf",
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "minimum": 2
+ }
+ ]
+ },
+ "tests": [
+ {
+ "description": "first anyOf valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "second anyOf valid",
+ "data": 2.5,
+ "valid": true
+ },
+ {
+ "description": "both anyOf valid",
+ "data": 3,
+ "valid": true
+ },
+ {
+ "description": "neither anyOf valid",
+ "data": 1.5,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "anyOf with base schema",
+ "schema": {
+ "type": "string",
+ "anyOf" : [
+ {
+ "maxLength": 2
+ },
+ {
+ "minLength": 4
+ }
+ ]
+ },
+ "tests": [
+ {
+ "description": "mismatch base schema",
+ "data": 3,
+ "valid": false
+ },
+ {
+ "description": "one anyOf valid",
+ "data": "foobar",
+ "valid": true
+ },
+ {
+ "description": "both anyOf invalid",
+ "data": "foo",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/default.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/default.json
index 17629779fbe..c2b76c62170 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/default.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/default.json
@@ -1,49 +1,49 @@
-[
- {
- "description": "invalid type for default",
- "schema": {
- "properties": {
- "foo": {
- "type": "integer",
- "default": []
- }
- }
- },
- "tests": [
- {
- "description": "valid when property is specified",
- "data": {"foo": 13},
- "valid": true
- },
- {
- "description": "still valid when the invalid default is used",
- "data": {},
- "valid": true
- }
- ]
- },
- {
- "description": "invalid string value for default",
- "schema": {
- "properties": {
- "bar": {
- "type": "string",
- "minLength": 4,
- "default": "bad"
- }
- }
- },
- "tests": [
- {
- "description": "valid when property is specified",
- "data": {"bar": "good"},
- "valid": true
- },
- {
- "description": "still valid when the invalid default is used",
- "data": {},
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "invalid type for default",
+ "schema": {
+ "properties": {
+ "foo": {
+ "type": "integer",
+ "default": []
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "valid when property is specified",
+ "data": {"foo": 13},
+ "valid": true
+ },
+ {
+ "description": "still valid when the invalid default is used",
+ "data": {},
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "invalid string value for default",
+ "schema": {
+ "properties": {
+ "bar": {
+ "type": "string",
+ "minLength": 4,
+ "default": "bad"
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "valid when property is specified",
+ "data": {"bar": "good"},
+ "valid": true
+ },
+ {
+ "description": "still valid when the invalid default is used",
+ "data": {},
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/definitions.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/definitions.json
index cf935a32153..520068c141f 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/definitions.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/definitions.json
@@ -1,32 +1,32 @@
-[
- {
- "description": "valid definition",
- "schema": {"$ref": "http://json-schema.org/draft-04/schema#"},
- "tests": [
- {
- "description": "valid definition schema",
- "data": {
- "definitions": {
- "foo": {"type": "integer"}
- }
- },
- "valid": true
- }
- ]
- },
- {
- "description": "invalid definition",
- "schema": {"$ref": "http://json-schema.org/draft-04/schema#"},
- "tests": [
- {
- "description": "invalid definition schema",
- "data": {
- "definitions": {
- "foo": {"type": 1}
- }
- },
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "valid definition",
+ "schema": {"$ref": "http://json-schema.org/draft-04/schema#"},
+ "tests": [
+ {
+ "description": "valid definition schema",
+ "data": {
+ "definitions": {
+ "foo": {"type": "integer"}
+ }
+ },
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "invalid definition",
+ "schema": {"$ref": "http://json-schema.org/draft-04/schema#"},
+ "tests": [
+ {
+ "description": "invalid definition schema",
+ "data": {
+ "definitions": {
+ "foo": {"type": 1}
+ }
+ },
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/dependencies.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/dependencies.json
index 7b9b16a7e12..decf3e0f4c5 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/dependencies.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/dependencies.json
@@ -1,113 +1,113 @@
-[
- {
- "description": "dependencies",
- "schema": {
- "dependencies": {"bar": ["foo"]}
- },
- "tests": [
- {
- "description": "neither",
- "data": {},
- "valid": true
- },
- {
- "description": "nondependant",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "with dependency",
- "data": {"foo": 1, "bar": 2},
- "valid": true
- },
- {
- "description": "missing dependency",
- "data": {"bar": 2},
- "valid": false
- },
- {
- "description": "ignores non-objects",
- "data": "foo",
- "valid": true
- }
- ]
- },
- {
- "description": "multiple dependencies",
- "schema": {
- "dependencies": {"quux": ["foo", "bar"]}
- },
- "tests": [
- {
- "description": "neither",
- "data": {},
- "valid": true
- },
- {
- "description": "nondependants",
- "data": {"foo": 1, "bar": 2},
- "valid": true
- },
- {
- "description": "with dependencies",
- "data": {"foo": 1, "bar": 2, "quux": 3},
- "valid": true
- },
- {
- "description": "missing dependency",
- "data": {"foo": 1, "quux": 2},
- "valid": false
- },
- {
- "description": "missing other dependency",
- "data": {"bar": 1, "quux": 2},
- "valid": false
- },
- {
- "description": "missing both dependencies",
- "data": {"quux": 1},
- "valid": false
- }
- ]
- },
- {
- "description": "multiple dependencies subschema",
- "schema": {
- "dependencies": {
- "bar": {
- "properties": {
- "foo": {"type": "integer"},
- "bar": {"type": "integer"}
- }
- }
- }
- },
- "tests": [
- {
- "description": "valid",
- "data": {"foo": 1, "bar": 2},
- "valid": true
- },
- {
- "description": "no dependency",
- "data": {"foo": "quux"},
- "valid": true
- },
- {
- "description": "wrong type",
- "data": {"foo": "quux", "bar": 2},
- "valid": false
- },
- {
- "description": "wrong type other",
- "data": {"foo": 2, "bar": "quux"},
- "valid": false
- },
- {
- "description": "wrong type both",
- "data": {"foo": "quux", "bar": "quux"},
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "dependencies",
+ "schema": {
+ "dependencies": {"bar": ["foo"]}
+ },
+ "tests": [
+ {
+ "description": "neither",
+ "data": {},
+ "valid": true
+ },
+ {
+ "description": "nondependant",
+ "data": {"foo": 1},
+ "valid": true
+ },
+ {
+ "description": "with dependency",
+ "data": {"foo": 1, "bar": 2},
+ "valid": true
+ },
+ {
+ "description": "missing dependency",
+ "data": {"bar": 2},
+ "valid": false
+ },
+ {
+ "description": "ignores non-objects",
+ "data": "foo",
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "multiple dependencies",
+ "schema": {
+ "dependencies": {"quux": ["foo", "bar"]}
+ },
+ "tests": [
+ {
+ "description": "neither",
+ "data": {},
+ "valid": true
+ },
+ {
+ "description": "nondependants",
+ "data": {"foo": 1, "bar": 2},
+ "valid": true
+ },
+ {
+ "description": "with dependencies",
+ "data": {"foo": 1, "bar": 2, "quux": 3},
+ "valid": true
+ },
+ {
+ "description": "missing dependency",
+ "data": {"foo": 1, "quux": 2},
+ "valid": false
+ },
+ {
+ "description": "missing other dependency",
+ "data": {"bar": 1, "quux": 2},
+ "valid": false
+ },
+ {
+ "description": "missing both dependencies",
+ "data": {"quux": 1},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "multiple dependencies subschema",
+ "schema": {
+ "dependencies": {
+ "bar": {
+ "properties": {
+ "foo": {"type": "integer"},
+ "bar": {"type": "integer"}
+ }
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "valid",
+ "data": {"foo": 1, "bar": 2},
+ "valid": true
+ },
+ {
+ "description": "no dependency",
+ "data": {"foo": "quux"},
+ "valid": true
+ },
+ {
+ "description": "wrong type",
+ "data": {"foo": "quux", "bar": 2},
+ "valid": false
+ },
+ {
+ "description": "wrong type other",
+ "data": {"foo": 2, "bar": "quux"},
+ "valid": false
+ },
+ {
+ "description": "wrong type both",
+ "data": {"foo": "quux", "bar": "quux"},
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/enum.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/enum.json
index f124436a7d9..a2cabcbc6a8 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/enum.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/enum.json
@@ -1,72 +1,72 @@
-[
- {
- "description": "simple enum validation",
- "schema": {"enum": [1, 2, 3]},
- "tests": [
- {
- "description": "one of the enum is valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "something else is invalid",
- "data": 4,
- "valid": false
- }
- ]
- },
- {
- "description": "heterogeneous enum validation",
- "schema": {"enum": [6, "foo", [], true, {"foo": 12}]},
- "tests": [
- {
- "description": "one of the enum is valid",
- "data": [],
- "valid": true
- },
- {
- "description": "something else is invalid",
- "data": null,
- "valid": false
- },
- {
- "description": "objects are deep compared",
- "data": {"foo": false},
- "valid": false
- }
- ]
- },
- {
- "description": "enums in properties",
- "schema": {
- "type":"object",
- "properties": {
- "foo": {"enum":["foo"]},
- "bar": {"enum":["bar"]}
- },
- "required": ["bar"]
- },
- "tests": [
- {
- "description": "both properties are valid",
- "data": {"foo":"foo", "bar":"bar"},
- "valid": true
- },
- {
- "description": "missing optional property is valid",
- "data": {"bar":"bar"},
- "valid": true
- },
- {
- "description": "missing required property is invalid",
- "data": {"foo":"foo"},
- "valid": false
- },
- {
- "description": "missing all properties is invalid",
- "data": {},
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "simple enum validation",
+ "schema": {"enum": [1, 2, 3]},
+ "tests": [
+ {
+ "description": "one of the enum is valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "something else is invalid",
+ "data": 4,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "heterogeneous enum validation",
+ "schema": {"enum": [6, "foo", [], true, {"foo": 12}]},
+ "tests": [
+ {
+ "description": "one of the enum is valid",
+ "data": [],
+ "valid": true
+ },
+ {
+ "description": "something else is invalid",
+ "data": null,
+ "valid": false
+ },
+ {
+ "description": "objects are deep compared",
+ "data": {"foo": false},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "enums in properties",
+ "schema": {
+ "type":"object",
+ "properties": {
+ "foo": {"enum":["foo"]},
+ "bar": {"enum":["bar"]}
+ },
+ "required": ["bar"]
+ },
+ "tests": [
+ {
+ "description": "both properties are valid",
+ "data": {"foo":"foo", "bar":"bar"},
+ "valid": true
+ },
+ {
+ "description": "missing optional property is valid",
+ "data": {"bar":"bar"},
+ "valid": true
+ },
+ {
+ "description": "missing required property is invalid",
+ "data": {"foo":"foo"},
+ "valid": false
+ },
+ {
+ "description": "missing all properties is invalid",
+ "data": {},
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/items.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/items.json
index f5e18a13848..1683e440f9a 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/items.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/items.json
@@ -1,46 +1,46 @@
-[
- {
- "description": "a schema given for items",
- "schema": {
- "items": {"type": "integer"}
- },
- "tests": [
- {
- "description": "valid items",
- "data": [ 1, 2, 3 ],
- "valid": true
- },
- {
- "description": "wrong type of items",
- "data": [1, "x"],
- "valid": false
- },
- {
- "description": "ignores non-arrays",
- "data": {"foo" : "bar"},
- "valid": true
- }
- ]
- },
- {
- "description": "an array of schemas for items",
- "schema": {
- "items": [
- {"type": "integer"},
- {"type": "string"}
- ]
- },
- "tests": [
- {
- "description": "correct types",
- "data": [ 1, "foo" ],
- "valid": true
- },
- {
- "description": "wrong types",
- "data": [ "foo", 1 ],
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "a schema given for items",
+ "schema": {
+ "items": {"type": "integer"}
+ },
+ "tests": [
+ {
+ "description": "valid items",
+ "data": [ 1, 2, 3 ],
+ "valid": true
+ },
+ {
+ "description": "wrong type of items",
+ "data": [1, "x"],
+ "valid": false
+ },
+ {
+ "description": "ignores non-arrays",
+ "data": {"foo" : "bar"},
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "an array of schemas for items",
+ "schema": {
+ "items": [
+ {"type": "integer"},
+ {"type": "string"}
+ ]
+ },
+ "tests": [
+ {
+ "description": "correct types",
+ "data": [ 1, "foo" ],
+ "valid": true
+ },
+ {
+ "description": "wrong types",
+ "data": [ "foo", 1 ],
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxItems.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxItems.json
index 3b53a6b371a..5f5c963b656 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxItems.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxItems.json
@@ -1,28 +1,28 @@
-[
- {
- "description": "maxItems validation",
- "schema": {"maxItems": 2},
- "tests": [
- {
- "description": "shorter is valid",
- "data": [1],
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": [1, 2],
- "valid": true
- },
- {
- "description": "too long is invalid",
- "data": [1, 2, 3],
- "valid": false
- },
- {
- "description": "ignores non-arrays",
- "data": "foobar",
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "maxItems validation",
+ "schema": {"maxItems": 2},
+ "tests": [
+ {
+ "description": "shorter is valid",
+ "data": [1],
+ "valid": true
+ },
+ {
+ "description": "exact length is valid",
+ "data": [1, 2],
+ "valid": true
+ },
+ {
+ "description": "too long is invalid",
+ "data": [1, 2, 3],
+ "valid": false
+ },
+ {
+ "description": "ignores non-arrays",
+ "data": "foobar",
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxLength.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxLength.json
index 811d35b253c..a2e4c95b099 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxLength.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxLength.json
@@ -1,33 +1,33 @@
-[
- {
- "description": "maxLength validation",
- "schema": {"maxLength": 2},
- "tests": [
- {
- "description": "shorter is valid",
- "data": "f",
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": "fo",
- "valid": true
- },
- {
- "description": "too long is invalid",
- "data": "foo",
- "valid": false
- },
- {
- "description": "ignores non-strings",
- "data": 100,
- "valid": true
- },
- {
- "description": "two supplementary Unicode code points is long enough",
- "data": "\uD83D\uDCA9\uD83D\uDCA9",
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "maxLength validation",
+ "schema": {"maxLength": 2},
+ "tests": [
+ {
+ "description": "shorter is valid",
+ "data": "f",
+ "valid": true
+ },
+ {
+ "description": "exact length is valid",
+ "data": "fo",
+ "valid": true
+ },
+ {
+ "description": "too long is invalid",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "ignores non-strings",
+ "data": 100,
+ "valid": true
+ },
+ {
+ "description": "two supplementary Unicode code points is long enough",
+ "data": "\uD83D\uDCA9\uD83D\uDCA9",
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxProperties.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxProperties.json
index d282446ad69..7725029a122 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxProperties.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maxProperties.json
@@ -1,28 +1,28 @@
-[
- {
- "description": "maxProperties validation",
- "schema": {"maxProperties": 2},
- "tests": [
- {
- "description": "shorter is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": {"foo": 1, "bar": 2},
- "valid": true
- },
- {
- "description": "too long is invalid",
- "data": {"foo": 1, "bar": 2, "baz": 3},
- "valid": false
- },
- {
- "description": "ignores non-objects",
- "data": "foobar",
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "maxProperties validation",
+ "schema": {"maxProperties": 2},
+ "tests": [
+ {
+ "description": "shorter is valid",
+ "data": {"foo": 1},
+ "valid": true
+ },
+ {
+ "description": "exact length is valid",
+ "data": {"foo": 1, "bar": 2},
+ "valid": true
+ },
+ {
+ "description": "too long is invalid",
+ "data": {"foo": 1, "bar": 2, "baz": 3},
+ "valid": false
+ },
+ {
+ "description": "ignores non-objects",
+ "data": "foobar",
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maximum.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maximum.json
index 86c7b89c9a9..6c069bb29b4 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maximum.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/maximum.json
@@ -1,42 +1,42 @@
-[
- {
- "description": "maximum validation",
- "schema": {"maximum": 3.0},
- "tests": [
- {
- "description": "below the maximum is valid",
- "data": 2.6,
- "valid": true
- },
- {
- "description": "above the maximum is invalid",
- "data": 3.5,
- "valid": false
- },
- {
- "description": "ignores non-numbers",
- "data": "x",
- "valid": true
- }
- ]
- },
- {
- "description": "exclusiveMaximum validation",
- "schema": {
- "maximum": 3.0,
- "exclusiveMaximum": true
- },
- "tests": [
- {
- "description": "below the maximum is still valid",
- "data": 2.2,
- "valid": true
- },
- {
- "description": "boundary point is invalid",
- "data": 3.0,
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "maximum validation",
+ "schema": {"maximum": 3.0},
+ "tests": [
+ {
+ "description": "below the maximum is valid",
+ "data": 2.6,
+ "valid": true
+ },
+ {
+ "description": "above the maximum is invalid",
+ "data": 3.5,
+ "valid": false
+ },
+ {
+ "description": "ignores non-numbers",
+ "data": "x",
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "exclusiveMaximum validation",
+ "schema": {
+ "maximum": 3.0,
+ "exclusiveMaximum": true
+ },
+ "tests": [
+ {
+ "description": "below the maximum is still valid",
+ "data": 2.2,
+ "valid": true
+ },
+ {
+ "description": "boundary point is invalid",
+ "data": 3.0,
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minItems.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minItems.json
index ed5118815ee..df8e0981c40 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minItems.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minItems.json
@@ -1,28 +1,28 @@
-[
- {
- "description": "minItems validation",
- "schema": {"minItems": 1},
- "tests": [
- {
- "description": "longer is valid",
- "data": [1, 2],
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": [1],
- "valid": true
- },
- {
- "description": "too short is invalid",
- "data": [],
- "valid": false
- },
- {
- "description": "ignores non-arrays",
- "data": "",
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "minItems validation",
+ "schema": {"minItems": 1},
+ "tests": [
+ {
+ "description": "longer is valid",
+ "data": [1, 2],
+ "valid": true
+ },
+ {
+ "description": "exact length is valid",
+ "data": [1],
+ "valid": true
+ },
+ {
+ "description": "too short is invalid",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "ignores non-arrays",
+ "data": "",
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minLength.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minLength.json
index 3f09158deef..96fa0c662f7 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minLength.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minLength.json
@@ -1,33 +1,33 @@
-[
- {
- "description": "minLength validation",
- "schema": {"minLength": 2},
- "tests": [
- {
- "description": "longer is valid",
- "data": "foo",
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": "fo",
- "valid": true
- },
- {
- "description": "too short is invalid",
- "data": "f",
- "valid": false
- },
- {
- "description": "ignores non-strings",
- "data": 1,
- "valid": true
- },
- {
- "description": "one supplementary Unicode code point is not long enough",
- "data": "\uD83D\uDCA9",
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "minLength validation",
+ "schema": {"minLength": 2},
+ "tests": [
+ {
+ "description": "longer is valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "exact length is valid",
+ "data": "fo",
+ "valid": true
+ },
+ {
+ "description": "too short is invalid",
+ "data": "f",
+ "valid": false
+ },
+ {
+ "description": "ignores non-strings",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "one supplementary Unicode code point is not long enough",
+ "data": "\uD83D\uDCA9",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minProperties.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minProperties.json
index a72c7d293e6..350b4fa00e8 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minProperties.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minProperties.json
@@ -1,28 +1,28 @@
-[
- {
- "description": "minProperties validation",
- "schema": {"minProperties": 1},
- "tests": [
- {
- "description": "longer is valid",
- "data": {"foo": 1, "bar": 2},
- "valid": true
- },
- {
- "description": "exact length is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "too short is invalid",
- "data": {},
- "valid": false
- },
- {
- "description": "ignores non-objects",
- "data": "",
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "minProperties validation",
+ "schema": {"minProperties": 1},
+ "tests": [
+ {
+ "description": "longer is valid",
+ "data": {"foo": 1, "bar": 2},
+ "valid": true
+ },
+ {
+ "description": "exact length is valid",
+ "data": {"foo": 1},
+ "valid": true
+ },
+ {
+ "description": "too short is invalid",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "ignores non-objects",
+ "data": "",
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minimum.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minimum.json
index d5bf000bcc6..0c87f45a9c3 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minimum.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/minimum.json
@@ -1,42 +1,42 @@
-[
- {
- "description": "minimum validation",
- "schema": {"minimum": 1.1},
- "tests": [
- {
- "description": "above the minimum is valid",
- "data": 2.6,
- "valid": true
- },
- {
- "description": "below the minimum is invalid",
- "data": 0.6,
- "valid": false
- },
- {
- "description": "ignores non-numbers",
- "data": "x",
- "valid": true
- }
- ]
- },
- {
- "description": "exclusiveMinimum validation",
- "schema": {
- "minimum": 1.1,
- "exclusiveMinimum": true
- },
- "tests": [
- {
- "description": "above the minimum is still valid",
- "data": 1.2,
- "valid": true
- },
- {
- "description": "boundary point is invalid",
- "data": 1.1,
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "minimum validation",
+ "schema": {"minimum": 1.1},
+ "tests": [
+ {
+ "description": "above the minimum is valid",
+ "data": 2.6,
+ "valid": true
+ },
+ {
+ "description": "below the minimum is invalid",
+ "data": 0.6,
+ "valid": false
+ },
+ {
+ "description": "ignores non-numbers",
+ "data": "x",
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "exclusiveMinimum validation",
+ "schema": {
+ "minimum": 1.1,
+ "exclusiveMinimum": true
+ },
+ "tests": [
+ {
+ "description": "above the minimum is still valid",
+ "data": 1.2,
+ "valid": true
+ },
+ {
+ "description": "boundary point is invalid",
+ "data": 1.1,
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/multipleOf.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/multipleOf.json
index ca3b7618053..cba96043b6c 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/multipleOf.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/multipleOf.json
@@ -1,60 +1,60 @@
-[
- {
- "description": "by int",
- "schema": {"multipleOf": 2},
- "tests": [
- {
- "description": "int by int",
- "data": 10,
- "valid": true
- },
- {
- "description": "int by int fail",
- "data": 7,
- "valid": false
- },
- {
- "description": "ignores non-numbers",
- "data": "foo",
- "valid": true
- }
- ]
- },
- {
- "description": "by number",
- "schema": {"multipleOf": 1.5},
- "tests": [
- {
- "description": "zero is multiple of anything",
- "data": 0,
- "valid": true
- },
- {
- "description": "4.5 is multiple of 1.5",
- "data": 4.5,
- "valid": true
- },
- {
- "description": "35 is not multiple of 1.5",
- "data": 35,
- "valid": false
- }
- ]
- },
- {
- "description": "by small number",
- "schema": {"multipleOf": 0.0001},
- "tests": [
- {
- "description": "0.0075 is multiple of 0.0001",
- "data": 0.0075,
- "valid": true
- },
- {
- "description": "0.00751 is not multiple of 0.0001",
- "data": 0.00751,
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "by int",
+ "schema": {"multipleOf": 2},
+ "tests": [
+ {
+ "description": "int by int",
+ "data": 10,
+ "valid": true
+ },
+ {
+ "description": "int by int fail",
+ "data": 7,
+ "valid": false
+ },
+ {
+ "description": "ignores non-numbers",
+ "data": "foo",
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "by number",
+ "schema": {"multipleOf": 1.5},
+ "tests": [
+ {
+ "description": "zero is multiple of anything",
+ "data": 0,
+ "valid": true
+ },
+ {
+ "description": "4.5 is multiple of 1.5",
+ "data": 4.5,
+ "valid": true
+ },
+ {
+ "description": "35 is not multiple of 1.5",
+ "data": 35,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "by small number",
+ "schema": {"multipleOf": 0.0001},
+ "tests": [
+ {
+ "description": "0.0075 is multiple of 0.0001",
+ "data": 0.0075,
+ "valid": true
+ },
+ {
+ "description": "0.00751 is not multiple of 0.0001",
+ "data": 0.00751,
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/not.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/not.json
index cbb7f46bf8b..ee81f06afa8 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/not.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/not.json
@@ -1,96 +1,96 @@
-[
- {
- "description": "not",
- "schema": {
- "not": {"type": "integer"}
- },
- "tests": [
- {
- "description": "allowed",
- "data": "foo",
- "valid": true
- },
- {
- "description": "disallowed",
- "data": 1,
- "valid": false
- }
- ]
- },
- {
- "description": "not multiple types",
- "schema": {
- "not": {"type": ["integer", "boolean"]}
- },
- "tests": [
- {
- "description": "valid",
- "data": "foo",
- "valid": true
- },
- {
- "description": "mismatch",
- "data": 1,
- "valid": false
- },
- {
- "description": "other mismatch",
- "data": true,
- "valid": false
- }
- ]
- },
- {
- "description": "not more complex schema",
- "schema": {
- "not": {
- "type": "object",
- "properties": {
- "foo": {
- "type": "string"
- }
- }
- }
- },
- "tests": [
- {
- "description": "match",
- "data": 1,
- "valid": true
- },
- {
- "description": "other match",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "mismatch",
- "data": {"foo": "bar"},
- "valid": false
- }
- ]
- },
- {
- "description": "forbidden property",
- "schema": {
- "properties": {
- "foo": {
- "not": {}
- }
- }
- },
- "tests": [
- {
- "description": "property present",
- "data": {"foo": 1, "bar": 2},
- "valid": false
- },
- {
- "description": "property absent",
- "data": {"bar": 1, "baz": 2},
- "valid": true
- }
- ]
- }
-
-]
+[
+ {
+ "description": "not",
+ "schema": {
+ "not": {"type": "integer"}
+ },
+ "tests": [
+ {
+ "description": "allowed",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "disallowed",
+ "data": 1,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "not multiple types",
+ "schema": {
+ "not": {"type": ["integer", "boolean"]}
+ },
+ "tests": [
+ {
+ "description": "valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "mismatch",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "other mismatch",
+ "data": true,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "not more complex schema",
+ "schema": {
+ "not": {
+ "type": "object",
+ "properties": {
+ "foo": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "match",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "other match",
+ "data": {"foo": 1},
+ "valid": true
+ },
+ {
+ "description": "mismatch",
+ "data": {"foo": "bar"},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "forbidden property",
+ "schema": {
+ "properties": {
+ "foo": {
+ "not": {}
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "property present",
+ "data": {"foo": 1, "bar": 2},
+ "valid": false
+ },
+ {
+ "description": "property absent",
+ "data": {"bar": 1, "baz": 2},
+ "valid": true
+ }
+ ]
+ }
+
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/oneOf.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/oneOf.json
index 1eaa4e47949..349aeb6becb 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/oneOf.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/oneOf.json
@@ -1,68 +1,68 @@
-[
- {
- "description": "oneOf",
- "schema": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "minimum": 2
- }
- ]
- },
- "tests": [
- {
- "description": "first oneOf valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "second oneOf valid",
- "data": 2.5,
- "valid": true
- },
- {
- "description": "both oneOf valid",
- "data": 3,
- "valid": false
- },
- {
- "description": "neither oneOf valid",
- "data": 1.5,
- "valid": false
- }
- ]
- },
- {
- "description": "oneOf with base schema",
- "schema": {
- "type": "string",
- "oneOf" : [
- {
- "minLength": 2
- },
- {
- "maxLength": 4
- }
- ]
- },
- "tests": [
- {
- "description": "mismatch base schema",
- "data": 3,
- "valid": false
- },
- {
- "description": "one oneOf valid",
- "data": "foobar",
- "valid": true
- },
- {
- "description": "both oneOf valid",
- "data": "foo",
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "oneOf",
+ "schema": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "minimum": 2
+ }
+ ]
+ },
+ "tests": [
+ {
+ "description": "first oneOf valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "second oneOf valid",
+ "data": 2.5,
+ "valid": true
+ },
+ {
+ "description": "both oneOf valid",
+ "data": 3,
+ "valid": false
+ },
+ {
+ "description": "neither oneOf valid",
+ "data": 1.5,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "oneOf with base schema",
+ "schema": {
+ "type": "string",
+ "oneOf" : [
+ {
+ "minLength": 2
+ },
+ {
+ "maxLength": 4
+ }
+ ]
+ },
+ "tests": [
+ {
+ "description": "mismatch base schema",
+ "data": 3,
+ "valid": false
+ },
+ {
+ "description": "one oneOf valid",
+ "data": "foobar",
+ "valid": true
+ },
+ {
+ "description": "both oneOf valid",
+ "data": "foo",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/bignum.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/bignum.json
index ccc7c17fe8d..31df120efe7 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/bignum.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/bignum.json
@@ -1,107 +1,107 @@
-[
- {
- "description": "integer",
- "schema": {"type": "integer"},
- "tests": [
- {
- "description": "a bignum is an integer",
- "data": 12345678910111213141516171819202122232425262728293031,
- "valid": true
- }
- ]
- },
- {
- "description": "number",
- "schema": {"type": "number"},
- "tests": [
- {
- "description": "a bignum is a number",
- "data": 98249283749234923498293171823948729348710298301928331,
- "valid": true
- }
- ]
- },
- {
- "description": "integer",
- "schema": {"type": "integer"},
- "tests": [
- {
- "description": "a negative bignum is an integer",
- "data": -12345678910111213141516171819202122232425262728293031,
- "valid": true
- }
- ]
- },
- {
- "description": "number",
- "schema": {"type": "number"},
- "tests": [
- {
- "description": "a negative bignum is a number",
- "data": -98249283749234923498293171823948729348710298301928331,
- "valid": true
- }
- ]
- },
- {
- "description": "string",
- "schema": {"type": "string"},
- "tests": [
- {
- "description": "a bignum is not a string",
- "data": 98249283749234923498293171823948729348710298301928331,
- "valid": false
- }
- ]
- },
- {
- "description": "integer comparison",
- "schema": {"maximum": 18446744073709551615},
- "tests": [
- {
- "description": "comparison works for high numbers",
- "data": 18446744073709551600,
- "valid": true
- }
- ]
- },
- {
- "description": "float comparison with high precision",
- "schema": {
- "maximum": 972783798187987123879878123.18878137,
- "exclusiveMaximum": true
- },
- "tests": [
- {
- "description": "comparison works for high numbers",
- "data": 972783798187987123879878123.188781371,
- "valid": false
- }
- ]
- },
- {
- "description": "integer comparison",
- "schema": {"minimum": -18446744073709551615},
- "tests": [
- {
- "description": "comparison works for very negative numbers",
- "data": -18446744073709551600,
- "valid": true
- }
- ]
- },
- {
- "description": "float comparison with high precision on negative numbers",
- "schema": {
- "minimum": -972783798187987123879878123.18878137,
- "exclusiveMinimum": true
- },
- "tests": [
- {
- "description": "comparison works for very negative numbers",
- "data": -972783798187987123879878123.188781371,
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "integer",
+ "schema": {"type": "integer"},
+ "tests": [
+ {
+ "description": "a bignum is an integer",
+ "data": 12345678910111213141516171819202122232425262728293031,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "number",
+ "schema": {"type": "number"},
+ "tests": [
+ {
+ "description": "a bignum is a number",
+ "data": 98249283749234923498293171823948729348710298301928331,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "integer",
+ "schema": {"type": "integer"},
+ "tests": [
+ {
+ "description": "a negative bignum is an integer",
+ "data": -12345678910111213141516171819202122232425262728293031,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "number",
+ "schema": {"type": "number"},
+ "tests": [
+ {
+ "description": "a negative bignum is a number",
+ "data": -98249283749234923498293171823948729348710298301928331,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "string",
+ "schema": {"type": "string"},
+ "tests": [
+ {
+ "description": "a bignum is not a string",
+ "data": 98249283749234923498293171823948729348710298301928331,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "integer comparison",
+ "schema": {"maximum": 18446744073709551615},
+ "tests": [
+ {
+ "description": "comparison works for high numbers",
+ "data": 18446744073709551600,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "float comparison with high precision",
+ "schema": {
+ "maximum": 972783798187987123879878123.18878137,
+ "exclusiveMaximum": true
+ },
+ "tests": [
+ {
+ "description": "comparison works for high numbers",
+ "data": 972783798187987123879878123.188781371,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "integer comparison",
+ "schema": {"minimum": -18446744073709551615},
+ "tests": [
+ {
+ "description": "comparison works for very negative numbers",
+ "data": -18446744073709551600,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "float comparison with high precision on negative numbers",
+ "schema": {
+ "minimum": -972783798187987123879878123.18878137,
+ "exclusiveMinimum": true
+ },
+ "tests": [
+ {
+ "description": "comparison works for very negative numbers",
+ "data": -972783798187987123879878123.188781371,
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/format.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/format.json
index aacfd119843..6b0e98771d6 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/format.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/format.json
@@ -1,148 +1,148 @@
-[
- {
- "description": "validation of date-time strings",
- "schema": {"format": "date-time"},
- "tests": [
- {
- "description": "a valid date-time string",
- "data": "1963-06-19T08:30:06.283185Z",
- "valid": true
- },
- {
- "description": "an invalid date-time string",
- "data": "06/19/1963 08:30:06 PST",
- "valid": false
- },
- {
- "description": "only RFC3339 not all of ISO 8601 are valid",
- "data": "2013-350T01:01:01",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of URIs",
- "schema": {"format": "uri"},
- "tests": [
- {
- "description": "a valid URI",
- "data": "http://foo.bar/?baz=qux#quux",
- "valid": true
- },
- {
- "description": "a valid protocol-relative URI",
- "data": "//foo.bar/?baz=qux#quux",
- "valid": true
- },
- {
- "description": "an invalid URI",
- "data": "\\\\WINDOWS\\fileshare",
- "valid": false
- },
- {
- "description": "an invalid URI though valid URI reference",
- "data": "abc",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of e-mail addresses",
- "schema": {"format": "email"},
- "tests": [
- {
- "description": "a valid e-mail address",
- "data": "joe.bloggs@example.com",
- "valid": true
- },
- {
- "description": "an invalid e-mail address",
- "data": "2962",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of IP addresses",
- "schema": {"format": "ipv4"},
- "tests": [
- {
- "description": "a valid IP address",
- "data": "192.168.0.1",
- "valid": true
- },
- {
- "description": "an IP address with too many components",
- "data": "127.0.0.0.1",
- "valid": false
- },
- {
- "description": "an IP address with out-of-range values",
- "data": "256.256.256.256",
- "valid": false
- },
- {
- "description": "an IP address without 4 components",
- "data": "127.0",
- "valid": false
- },
- {
- "description": "an IP address as an integer",
- "data": "0x7f000001",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of IPv6 addresses",
- "schema": {"format": "ipv6"},
- "tests": [
- {
- "description": "a valid IPv6 address",
- "data": "::1",
- "valid": true
- },
- {
- "description": "an IPv6 address with out-of-range values",
- "data": "12345::",
- "valid": false
- },
- {
- "description": "an IPv6 address with too many components",
- "data": "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1",
- "valid": false
- },
- {
- "description": "an IPv6 address containing illegal characters",
- "data": "::laptop",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of host names",
- "schema": {"format": "hostname"},
- "tests": [
- {
- "description": "a valid host name",
- "data": "www.example.com",
- "valid": true
- },
- {
- "description": "a host name starting with an illegal character",
- "data": "-a-host-name-that-starts-with--",
- "valid": false
- },
- {
- "description": "a host name containing illegal characters",
- "data": "not_a_valid_host_name",
- "valid": false
- },
- {
- "description": "a host name with a component too long",
- "data": "a-vvvvvvvvvvvvvvvveeeeeeeeeeeeeeeerrrrrrrrrrrrrrrryyyyyyyyyyyyyyyy-long-host-name-component",
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "validation of date-time strings",
+ "schema": {"format": "date-time"},
+ "tests": [
+ {
+ "description": "a valid date-time string",
+ "data": "1963-06-19T08:30:06.283185Z",
+ "valid": true
+ },
+ {
+ "description": "an invalid date-time string",
+ "data": "06/19/1963 08:30:06 PST",
+ "valid": false
+ },
+ {
+ "description": "only RFC3339 not all of ISO 8601 are valid",
+ "data": "2013-350T01:01:01",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "validation of URIs",
+ "schema": {"format": "uri"},
+ "tests": [
+ {
+ "description": "a valid URI",
+ "data": "http://foo.bar/?baz=qux#quux",
+ "valid": true
+ },
+ {
+ "description": "a valid protocol-relative URI",
+ "data": "//foo.bar/?baz=qux#quux",
+ "valid": true
+ },
+ {
+ "description": "an invalid URI",
+ "data": "\\\\WINDOWS\\fileshare",
+ "valid": false
+ },
+ {
+ "description": "an invalid URI though valid URI reference",
+ "data": "abc",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "validation of e-mail addresses",
+ "schema": {"format": "email"},
+ "tests": [
+ {
+ "description": "a valid e-mail address",
+ "data": "joe.bloggs@example.com",
+ "valid": true
+ },
+ {
+ "description": "an invalid e-mail address",
+ "data": "2962",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "validation of IP addresses",
+ "schema": {"format": "ipv4"},
+ "tests": [
+ {
+ "description": "a valid IP address",
+ "data": "192.168.0.1",
+ "valid": true
+ },
+ {
+ "description": "an IP address with too many components",
+ "data": "127.0.0.0.1",
+ "valid": false
+ },
+ {
+ "description": "an IP address with out-of-range values",
+ "data": "256.256.256.256",
+ "valid": false
+ },
+ {
+ "description": "an IP address without 4 components",
+ "data": "127.0",
+ "valid": false
+ },
+ {
+ "description": "an IP address as an integer",
+ "data": "0x7f000001",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "validation of IPv6 addresses",
+ "schema": {"format": "ipv6"},
+ "tests": [
+ {
+ "description": "a valid IPv6 address",
+ "data": "::1",
+ "valid": true
+ },
+ {
+ "description": "an IPv6 address with out-of-range values",
+ "data": "12345::",
+ "valid": false
+ },
+ {
+ "description": "an IPv6 address with too many components",
+ "data": "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1",
+ "valid": false
+ },
+ {
+ "description": "an IPv6 address containing illegal characters",
+ "data": "::laptop",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "validation of host names",
+ "schema": {"format": "hostname"},
+ "tests": [
+ {
+ "description": "a valid host name",
+ "data": "www.example.com",
+ "valid": true
+ },
+ {
+ "description": "a host name starting with an illegal character",
+ "data": "-a-host-name-that-starts-with--",
+ "valid": false
+ },
+ {
+ "description": "a host name containing illegal characters",
+ "data": "not_a_valid_host_name",
+ "valid": false
+ },
+ {
+ "description": "a host name with a component too long",
+ "data": "a-vvvvvvvvvvvvvvvveeeeeeeeeeeeeeeerrrrrrrrrrrrrrrryyyyyyyyyyyyyyyy-long-host-name-component",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/zeroTerminatedFloats.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/zeroTerminatedFloats.json
index 9b50ea27769..445fffc5d61 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/zeroTerminatedFloats.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/optional/zeroTerminatedFloats.json
@@ -1,15 +1,15 @@
-[
- {
- "description": "some languages do not distinguish between different types of numeric value",
- "schema": {
- "type": "integer"
- },
- "tests": [
- {
- "description": "a float is not an integer even without fractional part",
- "data": 1.0,
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "some languages do not distinguish between different types of numeric value",
+ "schema": {
+ "type": "integer"
+ },
+ "tests": [
+ {
+ "description": "a float is not an integer even without fractional part",
+ "data": 1.0,
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/pattern.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/pattern.json
index 25e72997314..70b5e10950a 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/pattern.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/pattern.json
@@ -1,34 +1,34 @@
-[
- {
- "description": "pattern validation",
- "schema": {"pattern": "^a*$"},
- "tests": [
- {
- "description": "a matching pattern is valid",
- "data": "aaa",
- "valid": true
- },
- {
- "description": "a non-matching pattern is invalid",
- "data": "abc",
- "valid": false
- },
- {
- "description": "ignores non-strings",
- "data": true,
- "valid": true
- }
- ]
- },
- {
- "description": "pattern is not anchored",
- "schema": {"pattern": "a+"},
- "tests": [
- {
- "description": "matches a substring",
- "data": "xxaayy",
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "pattern validation",
+ "schema": {"pattern": "^a*$"},
+ "tests": [
+ {
+ "description": "a matching pattern is valid",
+ "data": "aaa",
+ "valid": true
+ },
+ {
+ "description": "a non-matching pattern is invalid",
+ "data": "abc",
+ "valid": false
+ },
+ {
+ "description": "ignores non-strings",
+ "data": true,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "pattern is not anchored",
+ "schema": {"pattern": "a+"},
+ "tests": [
+ {
+ "description": "matches a substring",
+ "data": "xxaayy",
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/patternProperties.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/patternProperties.json
index 18586e5daba..8d7cea77577 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/patternProperties.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/patternProperties.json
@@ -1,110 +1,110 @@
-[
- {
- "description":
- "patternProperties validates properties matching a regex",
- "schema": {
- "patternProperties": {
- "f.*o": {"type": "integer"}
- }
- },
- "tests": [
- {
- "description": "a single valid match is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "multiple valid matches is valid",
- "data": {"foo": 1, "foooooo" : 2},
- "valid": true
- },
- {
- "description": "a single invalid match is invalid",
- "data": {"foo": "bar", "fooooo": 2},
- "valid": false
- },
- {
- "description": "multiple invalid matches is invalid",
- "data": {"foo": "bar", "foooooo" : "baz"},
- "valid": false
- },
- {
- "description": "ignores non-objects",
- "data": 12,
- "valid": true
- }
- ]
- },
- {
- "description": "multiple simultaneous patternProperties are validated",
- "schema": {
- "patternProperties": {
- "a*": {"type": "integer"},
- "aaa*": {"maximum": 20}
- }
- },
- "tests": [
- {
- "description": "a single valid match is valid",
- "data": {"a": 21},
- "valid": true
- },
- {
- "description": "a simultaneous match is valid",
- "data": {"aaaa": 18},
- "valid": true
- },
- {
- "description": "multiple matches is valid",
- "data": {"a": 21, "aaaa": 18},
- "valid": true
- },
- {
- "description": "an invalid due to one is invalid",
- "data": {"a": "bar"},
- "valid": false
- },
- {
- "description": "an invalid due to the other is invalid",
- "data": {"aaaa": 31},
- "valid": false
- },
- {
- "description": "an invalid due to both is invalid",
- "data": {"aaa": "foo", "aaaa": 31},
- "valid": false
- }
- ]
- },
- {
- "description": "regexes are not anchored by default and are case sensitive",
- "schema": {
- "patternProperties": {
- "[0-9]{2,}": { "type": "boolean" },
- "X_": { "type": "string" }
- }
- },
- "tests": [
- {
- "description": "non recognized members are ignored",
- "data": { "answer 1": "42" },
- "valid": true
- },
- {
- "description": "recognized members are accounted for",
- "data": { "a31b": null },
- "valid": false
- },
- {
- "description": "regexes are case sensitive",
- "data": { "a_x_3": 3 },
- "valid": true
- },
- {
- "description": "regexes are case sensitive, 2",
- "data": { "a_X_3": 3 },
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description":
+ "patternProperties validates properties matching a regex",
+ "schema": {
+ "patternProperties": {
+ "f.*o": {"type": "integer"}
+ }
+ },
+ "tests": [
+ {
+ "description": "a single valid match is valid",
+ "data": {"foo": 1},
+ "valid": true
+ },
+ {
+ "description": "multiple valid matches is valid",
+ "data": {"foo": 1, "foooooo" : 2},
+ "valid": true
+ },
+ {
+ "description": "a single invalid match is invalid",
+ "data": {"foo": "bar", "fooooo": 2},
+ "valid": false
+ },
+ {
+ "description": "multiple invalid matches is invalid",
+ "data": {"foo": "bar", "foooooo" : "baz"},
+ "valid": false
+ },
+ {
+ "description": "ignores non-objects",
+ "data": 12,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "multiple simultaneous patternProperties are validated",
+ "schema": {
+ "patternProperties": {
+ "a*": {"type": "integer"},
+ "aaa*": {"maximum": 20}
+ }
+ },
+ "tests": [
+ {
+ "description": "a single valid match is valid",
+ "data": {"a": 21},
+ "valid": true
+ },
+ {
+ "description": "a simultaneous match is valid",
+ "data": {"aaaa": 18},
+ "valid": true
+ },
+ {
+ "description": "multiple matches is valid",
+ "data": {"a": 21, "aaaa": 18},
+ "valid": true
+ },
+ {
+ "description": "an invalid due to one is invalid",
+ "data": {"a": "bar"},
+ "valid": false
+ },
+ {
+ "description": "an invalid due to the other is invalid",
+ "data": {"aaaa": 31},
+ "valid": false
+ },
+ {
+ "description": "an invalid due to both is invalid",
+ "data": {"aaa": "foo", "aaaa": 31},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "regexes are not anchored by default and are case sensitive",
+ "schema": {
+ "patternProperties": {
+ "[0-9]{2,}": { "type": "boolean" },
+ "X_": { "type": "string" }
+ }
+ },
+ "tests": [
+ {
+ "description": "non recognized members are ignored",
+ "data": { "answer 1": "42" },
+ "valid": true
+ },
+ {
+ "description": "recognized members are accounted for",
+ "data": { "a31b": null },
+ "valid": false
+ },
+ {
+ "description": "regexes are case sensitive",
+ "data": { "a_x_3": 3 },
+ "valid": true
+ },
+ {
+ "description": "regexes are case sensitive, 2",
+ "data": { "a_X_3": 3 },
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/properties.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/properties.json
index cd1644dcd91..8bda460ce16 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/properties.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/properties.json
@@ -1,92 +1,92 @@
-[
- {
- "description": "object properties validation",
- "schema": {
- "properties": {
- "foo": {"type": "integer"},
- "bar": {"type": "string"}
- }
- },
- "tests": [
- {
- "description": "both properties present and valid is valid",
- "data": {"foo": 1, "bar": "baz"},
- "valid": true
- },
- {
- "description": "one property invalid is invalid",
- "data": {"foo": 1, "bar": {}},
- "valid": false
- },
- {
- "description": "both properties invalid is invalid",
- "data": {"foo": [], "bar": {}},
- "valid": false
- },
- {
- "description": "doesn't invalidate other properties",
- "data": {"quux": []},
- "valid": true
- },
- {
- "description": "ignores non-objects",
- "data": [],
- "valid": true
- }
- ]
- },
- {
- "description":
- "properties, patternProperties, additionalProperties interaction",
- "schema": {
- "properties": {
- "foo": {"type": "array", "maxItems": 3},
- "bar": {"type": "array"}
- },
- "patternProperties": {"f.o": {"minItems": 2}},
- "additionalProperties": {"type": "integer"}
- },
- "tests": [
- {
- "description": "property validates property",
- "data": {"foo": [1, 2]},
- "valid": true
- },
- {
- "description": "property invalidates property",
- "data": {"foo": [1, 2, 3, 4]},
- "valid": false
- },
- {
- "description": "patternProperty invalidates property",
- "data": {"foo": []},
- "valid": false
- },
- {
- "description": "patternProperty validates nonproperty",
- "data": {"fxo": [1, 2]},
- "valid": true
- },
- {
- "description": "patternProperty invalidates nonproperty",
- "data": {"fxo": []},
- "valid": false
- },
- {
- "description": "additionalProperty ignores property",
- "data": {"bar": []},
- "valid": true
- },
- {
- "description": "additionalProperty validates others",
- "data": {"quux": 3},
- "valid": true
- },
- {
- "description": "additionalProperty invalidates others",
- "data": {"quux": "foo"},
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "object properties validation",
+ "schema": {
+ "properties": {
+ "foo": {"type": "integer"},
+ "bar": {"type": "string"}
+ }
+ },
+ "tests": [
+ {
+ "description": "both properties present and valid is valid",
+ "data": {"foo": 1, "bar": "baz"},
+ "valid": true
+ },
+ {
+ "description": "one property invalid is invalid",
+ "data": {"foo": 1, "bar": {}},
+ "valid": false
+ },
+ {
+ "description": "both properties invalid is invalid",
+ "data": {"foo": [], "bar": {}},
+ "valid": false
+ },
+ {
+ "description": "doesn't invalidate other properties",
+ "data": {"quux": []},
+ "valid": true
+ },
+ {
+ "description": "ignores non-objects",
+ "data": [],
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description":
+ "properties, patternProperties, additionalProperties interaction",
+ "schema": {
+ "properties": {
+ "foo": {"type": "array", "maxItems": 3},
+ "bar": {"type": "array"}
+ },
+ "patternProperties": {"f.o": {"minItems": 2}},
+ "additionalProperties": {"type": "integer"}
+ },
+ "tests": [
+ {
+ "description": "property validates property",
+ "data": {"foo": [1, 2]},
+ "valid": true
+ },
+ {
+ "description": "property invalidates property",
+ "data": {"foo": [1, 2, 3, 4]},
+ "valid": false
+ },
+ {
+ "description": "patternProperty invalidates property",
+ "data": {"foo": []},
+ "valid": false
+ },
+ {
+ "description": "patternProperty validates nonproperty",
+ "data": {"fxo": [1, 2]},
+ "valid": true
+ },
+ {
+ "description": "patternProperty invalidates nonproperty",
+ "data": {"fxo": []},
+ "valid": false
+ },
+ {
+ "description": "additionalProperty ignores property",
+ "data": {"bar": []},
+ "valid": true
+ },
+ {
+ "description": "additionalProperty validates others",
+ "data": {"quux": 3},
+ "valid": true
+ },
+ {
+ "description": "additionalProperty invalidates others",
+ "data": {"quux": "foo"},
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/ref.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/ref.json
index 7e805522492..fa95df466f3 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/ref.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/ref.json
@@ -1,159 +1,159 @@
-[
- {
- "description": "root pointer ref",
- "schema": {
- "properties": {
- "foo": {"$ref": "#"}
- },
- "additionalProperties": false
- },
- "tests": [
- {
- "description": "match",
- "data": {"foo": false},
- "valid": true
- },
- {
- "description": "recursive match",
- "data": {"foo": {"foo": false}},
- "valid": true
- },
- {
- "description": "mismatch",
- "data": {"bar": false},
- "valid": false
- },
- {
- "description": "recursive mismatch",
- "data": {"foo": {"bar": false}},
- "valid": false
- }
- ]
- },
- {
- "description": "relative pointer ref to object",
- "schema": {
- "properties": {
- "foo": {"type": "integer"},
- "bar": {"$ref": "#/properties/foo"}
- }
- },
- "tests": [
- {
- "description": "match",
- "data": {"bar": 3},
- "valid": true
- },
- {
- "description": "mismatch",
- "data": {"bar": true},
- "valid": false
- }
- ]
- },
- {
- "description": "relative pointer ref to array",
- "schema": {
- "items": [
- {"type": "integer"},
- {"$ref": "#/items/0"}
- ]
- },
- "tests": [
- {
- "description": "match array",
- "data": [1, 2],
- "valid": true
- },
- {
- "description": "mismatch array",
- "data": [1, "foo"],
- "valid": false
- }
- ]
- },
- {
- "description": "escaped pointer ref",
- "schema": {
- "tilda~field": {"type": "integer"},
- "slash/field": {"type": "integer"},
- "percent%field": {"type": "integer"},
- "properties": {
- "tilda": {"$ref": "#/tilda~0field"},
- "slash": {"$ref": "#/slash~1field"},
- "percent": {"$ref": "#/percent%25field"}
- }
- },
- "tests": [
- {
- "description": "slash invalid",
- "data": {"slash": "aoeu"},
- "valid": false
- },
- {
- "description": "tilda invalid",
- "data": {"tilda": "aoeu"},
- "valid": false
- },
- {
- "description": "percent invalid",
- "data": {"percent": "aoeu"},
- "valid": false
- },
- {
- "description": "slash valid",
- "data": {"slash": 123},
- "valid": true
- },
- {
- "description": "tilda valid",
- "data": {"tilda": 123},
- "valid": true
- },
- {
- "description": "percent valid",
- "data": {"percent": 123},
- "valid": true
- }
- ]
- },
- {
- "description": "nested refs",
- "schema": {
- "definitions": {
- "a": {"type": "integer"},
- "b": {"$ref": "#/definitions/a"},
- "c": {"$ref": "#/definitions/b"}
- },
- "$ref": "#/definitions/c"
- },
- "tests": [
- {
- "description": "nested ref valid",
- "data": 5,
- "valid": true
- },
- {
- "description": "nested ref invalid",
- "data": "a",
- "valid": false
- }
- ]
- },
- {
- "description": "remote ref, containing refs itself",
- "schema": {"$ref": "http://json-schema.org/draft-04/schema#"},
- "tests": [
- {
- "description": "remote ref valid",
- "data": {"minLength": 1},
- "valid": true
- },
- {
- "description": "remote ref invalid",
- "data": {"minLength": -1},
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "root pointer ref",
+ "schema": {
+ "properties": {
+ "foo": {"$ref": "#"}
+ },
+ "additionalProperties": false
+ },
+ "tests": [
+ {
+ "description": "match",
+ "data": {"foo": false},
+ "valid": true
+ },
+ {
+ "description": "recursive match",
+ "data": {"foo": {"foo": false}},
+ "valid": true
+ },
+ {
+ "description": "mismatch",
+ "data": {"bar": false},
+ "valid": false
+ },
+ {
+ "description": "recursive mismatch",
+ "data": {"foo": {"bar": false}},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "relative pointer ref to object",
+ "schema": {
+ "properties": {
+ "foo": {"type": "integer"},
+ "bar": {"$ref": "#/properties/foo"}
+ }
+ },
+ "tests": [
+ {
+ "description": "match",
+ "data": {"bar": 3},
+ "valid": true
+ },
+ {
+ "description": "mismatch",
+ "data": {"bar": true},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "relative pointer ref to array",
+ "schema": {
+ "items": [
+ {"type": "integer"},
+ {"$ref": "#/items/0"}
+ ]
+ },
+ "tests": [
+ {
+ "description": "match array",
+ "data": [1, 2],
+ "valid": true
+ },
+ {
+ "description": "mismatch array",
+ "data": [1, "foo"],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "escaped pointer ref",
+ "schema": {
+ "tilda~field": {"type": "integer"},
+ "slash/field": {"type": "integer"},
+ "percent%field": {"type": "integer"},
+ "properties": {
+ "tilda": {"$ref": "#/tilda~0field"},
+ "slash": {"$ref": "#/slash~1field"},
+ "percent": {"$ref": "#/percent%25field"}
+ }
+ },
+ "tests": [
+ {
+ "description": "slash invalid",
+ "data": {"slash": "aoeu"},
+ "valid": false
+ },
+ {
+ "description": "tilda invalid",
+ "data": {"tilda": "aoeu"},
+ "valid": false
+ },
+ {
+ "description": "percent invalid",
+ "data": {"percent": "aoeu"},
+ "valid": false
+ },
+ {
+ "description": "slash valid",
+ "data": {"slash": 123},
+ "valid": true
+ },
+ {
+ "description": "tilda valid",
+ "data": {"tilda": 123},
+ "valid": true
+ },
+ {
+ "description": "percent valid",
+ "data": {"percent": 123},
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "nested refs",
+ "schema": {
+ "definitions": {
+ "a": {"type": "integer"},
+ "b": {"$ref": "#/definitions/a"},
+ "c": {"$ref": "#/definitions/b"}
+ },
+ "$ref": "#/definitions/c"
+ },
+ "tests": [
+ {
+ "description": "nested ref valid",
+ "data": 5,
+ "valid": true
+ },
+ {
+ "description": "nested ref invalid",
+ "data": "a",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "remote ref, containing refs itself",
+ "schema": {"$ref": "http://json-schema.org/draft-04/schema#"},
+ "tests": [
+ {
+ "description": "remote ref valid",
+ "data": {"minLength": 1},
+ "valid": true
+ },
+ {
+ "description": "remote ref invalid",
+ "data": {"minLength": -1},
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/refRemote.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/refRemote.json
index 4ca804732c9..85d136c8400 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/refRemote.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/refRemote.json
@@ -1,74 +1,74 @@
-[
- {
- "description": "remote ref",
- "schema": {"$ref": "http://localhost:1234/integer.json"},
- "tests": [
- {
- "description": "remote ref valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "remote ref invalid",
- "data": "a",
- "valid": false
- }
- ]
- },
- {
- "description": "fragment within remote ref",
- "schema": {"$ref": "http://localhost:1234/subSchemas.json#/integer"},
- "tests": [
- {
- "description": "remote fragment valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "remote fragment invalid",
- "data": "a",
- "valid": false
- }
- ]
- },
- {
- "description": "ref within remote ref",
- "schema": {
- "$ref": "http://localhost:1234/subSchemas.json#/refToInteger"
- },
- "tests": [
- {
- "description": "ref within ref valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "ref within ref invalid",
- "data": "a",
- "valid": false
- }
- ]
- },
- {
- "description": "change resolution scope",
- "schema": {
- "id": "http://localhost:1234/",
- "items": {
- "id": "folder/",
- "items": {"$ref": "folderInteger.json"}
- }
- },
- "tests": [
- {
- "description": "changed scope ref valid",
- "data": [[1]],
- "valid": true
- },
- {
- "description": "changed scope ref invalid",
- "data": [["a"]],
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "remote ref",
+ "schema": {"$ref": "http://localhost:1234/integer.json"},
+ "tests": [
+ {
+ "description": "remote ref valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "remote ref invalid",
+ "data": "a",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "fragment within remote ref",
+ "schema": {"$ref": "http://localhost:1234/subSchemas.json#/integer"},
+ "tests": [
+ {
+ "description": "remote fragment valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "remote fragment invalid",
+ "data": "a",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "ref within remote ref",
+ "schema": {
+ "$ref": "http://localhost:1234/subSchemas.json#/refToInteger"
+ },
+ "tests": [
+ {
+ "description": "ref within ref valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "ref within ref invalid",
+ "data": "a",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "change resolution scope",
+ "schema": {
+ "id": "http://localhost:1234/",
+ "items": {
+ "id": "folder/",
+ "items": {"$ref": "folderInteger.json"}
+ }
+ },
+ "tests": [
+ {
+ "description": "changed scope ref valid",
+ "data": [[1]],
+ "valid": true
+ },
+ {
+ "description": "changed scope ref invalid",
+ "data": [["a"]],
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/required.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/required.json
index 612f73f3472..4e9735dc429 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/required.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/required.json
@@ -1,39 +1,39 @@
-[
- {
- "description": "required validation",
- "schema": {
- "properties": {
- "foo": {},
- "bar": {}
- },
- "required": ["foo"]
- },
- "tests": [
- {
- "description": "present required property is valid",
- "data": {"foo": 1},
- "valid": true
- },
- {
- "description": "non-present required property is invalid",
- "data": {"bar": 1},
- "valid": false
- }
- ]
- },
- {
- "description": "required default validation",
- "schema": {
- "properties": {
- "foo": {}
- }
- },
- "tests": [
- {
- "description": "not required by default",
- "data": {},
- "valid": true
- }
- ]
- }
-]
+[
+ {
+ "description": "required validation",
+ "schema": {
+ "properties": {
+ "foo": {},
+ "bar": {}
+ },
+ "required": ["foo"]
+ },
+ "tests": [
+ {
+ "description": "present required property is valid",
+ "data": {"foo": 1},
+ "valid": true
+ },
+ {
+ "description": "non-present required property is invalid",
+ "data": {"bar": 1},
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "required default validation",
+ "schema": {
+ "properties": {
+ "foo": {}
+ }
+ },
+ "tests": [
+ {
+ "description": "not required by default",
+ "data": {},
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/type.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/type.json
index db42a44d3fa..eaa48ccb8f0 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/type.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/type.json
@@ -1,330 +1,330 @@
-[
- {
- "description": "integer type matches integers",
- "schema": {"type": "integer"},
- "tests": [
- {
- "description": "an integer is an integer",
- "data": 1,
- "valid": true
- },
- {
- "description": "a float is not an integer",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not an integer",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not an integer",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not an integer",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not an integer",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not an integer",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "number type matches numbers",
- "schema": {"type": "number"},
- "tests": [
- {
- "description": "an integer is a number",
- "data": 1,
- "valid": true
- },
- {
- "description": "a float is a number",
- "data": 1.1,
- "valid": true
- },
- {
- "description": "a string is not a number",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not a number",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not a number",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not a number",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not a number",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "string type matches strings",
- "schema": {"type": "string"},
- "tests": [
- {
- "description": "1 is not a string",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not a string",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is a string",
- "data": "foo",
- "valid": true
- },
- {
- "description": "an object is not a string",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not a string",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not a string",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not a string",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "object type matches objects",
- "schema": {"type": "object"},
- "tests": [
- {
- "description": "an integer is not an object",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not an object",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not an object",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is an object",
- "data": {},
- "valid": true
- },
- {
- "description": "an array is not an object",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not an object",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not an object",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "array type matches arrays",
- "schema": {"type": "array"},
- "tests": [
- {
- "description": "an integer is not an array",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not an array",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not an array",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not an array",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is an array",
- "data": [],
- "valid": true
- },
- {
- "description": "a boolean is not an array",
- "data": true,
- "valid": false
- },
- {
- "description": "null is not an array",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "boolean type matches booleans",
- "schema": {"type": "boolean"},
- "tests": [
- {
- "description": "an integer is not a boolean",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not a boolean",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not a boolean",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not a boolean",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not a boolean",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is a boolean",
- "data": true,
- "valid": true
- },
- {
- "description": "null is not a boolean",
- "data": null,
- "valid": false
- }
- ]
- },
- {
- "description": "null type matches only the null object",
- "schema": {"type": "null"},
- "tests": [
- {
- "description": "an integer is not null",
- "data": 1,
- "valid": false
- },
- {
- "description": "a float is not null",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "a string is not null",
- "data": "foo",
- "valid": false
- },
- {
- "description": "an object is not null",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is not null",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is not null",
- "data": true,
- "valid": false
- },
- {
- "description": "null is null",
- "data": null,
- "valid": true
- }
- ]
- },
- {
- "description": "multiple types can be specified in an array",
- "schema": {"type": ["integer", "string"]},
- "tests": [
- {
- "description": "an integer is valid",
- "data": 1,
- "valid": true
- },
- {
- "description": "a string is valid",
- "data": "foo",
- "valid": true
- },
- {
- "description": "a float is invalid",
- "data": 1.1,
- "valid": false
- },
- {
- "description": "an object is invalid",
- "data": {},
- "valid": false
- },
- {
- "description": "an array is invalid",
- "data": [],
- "valid": false
- },
- {
- "description": "a boolean is invalid",
- "data": true,
- "valid": false
- },
- {
- "description": "null is invalid",
- "data": null,
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "integer type matches integers",
+ "schema": {"type": "integer"},
+ "tests": [
+ {
+ "description": "an integer is an integer",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "a float is not an integer",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "a string is not an integer",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "an object is not an integer",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "an array is not an integer",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "a boolean is not an integer",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is not an integer",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "number type matches numbers",
+ "schema": {"type": "number"},
+ "tests": [
+ {
+ "description": "an integer is a number",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "a float is a number",
+ "data": 1.1,
+ "valid": true
+ },
+ {
+ "description": "a string is not a number",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "an object is not a number",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "an array is not a number",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "a boolean is not a number",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is not a number",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "string type matches strings",
+ "schema": {"type": "string"},
+ "tests": [
+ {
+ "description": "1 is not a string",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "a float is not a string",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "a string is a string",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "an object is not a string",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "an array is not a string",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "a boolean is not a string",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is not a string",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "object type matches objects",
+ "schema": {"type": "object"},
+ "tests": [
+ {
+ "description": "an integer is not an object",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "a float is not an object",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "a string is not an object",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "an object is an object",
+ "data": {},
+ "valid": true
+ },
+ {
+ "description": "an array is not an object",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "a boolean is not an object",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is not an object",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "array type matches arrays",
+ "schema": {"type": "array"},
+ "tests": [
+ {
+ "description": "an integer is not an array",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "a float is not an array",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "a string is not an array",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "an object is not an array",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "an array is an array",
+ "data": [],
+ "valid": true
+ },
+ {
+ "description": "a boolean is not an array",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is not an array",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "boolean type matches booleans",
+ "schema": {"type": "boolean"},
+ "tests": [
+ {
+ "description": "an integer is not a boolean",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "a float is not a boolean",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "a string is not a boolean",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "an object is not a boolean",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "an array is not a boolean",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "a boolean is a boolean",
+ "data": true,
+ "valid": true
+ },
+ {
+ "description": "null is not a boolean",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "null type matches only the null object",
+ "schema": {"type": "null"},
+ "tests": [
+ {
+ "description": "an integer is not null",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "a float is not null",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "a string is not null",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "an object is not null",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "an array is not null",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "a boolean is not null",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is null",
+ "data": null,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "multiple types can be specified in an array",
+ "schema": {"type": ["integer", "string"]},
+ "tests": [
+ {
+ "description": "an integer is valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "a string is valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "a float is invalid",
+ "data": 1.1,
+ "valid": false
+ },
+ {
+ "description": "an object is invalid",
+ "data": {},
+ "valid": false
+ },
+ {
+ "description": "an array is invalid",
+ "data": [],
+ "valid": false
+ },
+ {
+ "description": "a boolean is invalid",
+ "data": true,
+ "valid": false
+ },
+ {
+ "description": "null is invalid",
+ "data": null,
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/uniqueItems.json b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/uniqueItems.json
index c1f4ab99c9a..f54133987e4 100644
--- a/3rdparty/rapidjson/bin/jsonschema/tests/draft4/uniqueItems.json
+++ b/3rdparty/rapidjson/bin/jsonschema/tests/draft4/uniqueItems.json
@@ -1,79 +1,79 @@
-[
- {
- "description": "uniqueItems validation",
- "schema": {"uniqueItems": true},
- "tests": [
- {
- "description": "unique array of integers is valid",
- "data": [1, 2],
- "valid": true
- },
- {
- "description": "non-unique array of integers is invalid",
- "data": [1, 1],
- "valid": false
- },
- {
- "description": "numbers are unique if mathematically unequal",
- "data": [1.0, 1.00, 1],
- "valid": false
- },
- {
- "description": "unique array of objects is valid",
- "data": [{"foo": "bar"}, {"foo": "baz"}],
- "valid": true
- },
- {
- "description": "non-unique array of objects is invalid",
- "data": [{"foo": "bar"}, {"foo": "bar"}],
- "valid": false
- },
- {
- "description": "unique array of nested objects is valid",
- "data": [
- {"foo": {"bar" : {"baz" : true}}},
- {"foo": {"bar" : {"baz" : false}}}
- ],
- "valid": true
- },
- {
- "description": "non-unique array of nested objects is invalid",
- "data": [
- {"foo": {"bar" : {"baz" : true}}},
- {"foo": {"bar" : {"baz" : true}}}
- ],
- "valid": false
- },
- {
- "description": "unique array of arrays is valid",
- "data": [["foo"], ["bar"]],
- "valid": true
- },
- {
- "description": "non-unique array of arrays is invalid",
- "data": [["foo"], ["foo"]],
- "valid": false
- },
- {
- "description": "1 and true are unique",
- "data": [1, true],
- "valid": true
- },
- {
- "description": "0 and false are unique",
- "data": [0, false],
- "valid": true
- },
- {
- "description": "unique heterogeneous types are valid",
- "data": [{}, [1], true, null, 1],
- "valid": true
- },
- {
- "description": "non-unique heterogeneous types are invalid",
- "data": [{}, [1], true, null, {}, 1],
- "valid": false
- }
- ]
- }
-]
+[
+ {
+ "description": "uniqueItems validation",
+ "schema": {"uniqueItems": true},
+ "tests": [
+ {
+ "description": "unique array of integers is valid",
+ "data": [1, 2],
+ "valid": true
+ },
+ {
+ "description": "non-unique array of integers is invalid",
+ "data": [1, 1],
+ "valid": false
+ },
+ {
+ "description": "numbers are unique if mathematically unequal",
+ "data": [1.0, 1.00, 1],
+ "valid": false
+ },
+ {
+ "description": "unique array of objects is valid",
+ "data": [{"foo": "bar"}, {"foo": "baz"}],
+ "valid": true
+ },
+ {
+ "description": "non-unique array of objects is invalid",
+ "data": [{"foo": "bar"}, {"foo": "bar"}],
+ "valid": false
+ },
+ {
+ "description": "unique array of nested objects is valid",
+ "data": [
+ {"foo": {"bar" : {"baz" : true}}},
+ {"foo": {"bar" : {"baz" : false}}}
+ ],
+ "valid": true
+ },
+ {
+ "description": "non-unique array of nested objects is invalid",
+ "data": [
+ {"foo": {"bar" : {"baz" : true}}},
+ {"foo": {"bar" : {"baz" : true}}}
+ ],
+ "valid": false
+ },
+ {
+ "description": "unique array of arrays is valid",
+ "data": [["foo"], ["bar"]],
+ "valid": true
+ },
+ {
+ "description": "non-unique array of arrays is invalid",
+ "data": [["foo"], ["foo"]],
+ "valid": false
+ },
+ {
+ "description": "1 and true are unique",
+ "data": [1, true],
+ "valid": true
+ },
+ {
+ "description": "0 and false are unique",
+ "data": [0, false],
+ "valid": true
+ },
+ {
+ "description": "unique heterogeneous types are valid",
+ "data": [{}, [1], true, null, 1],
+ "valid": true
+ },
+ {
+ "description": "non-unique heterogeneous types are invalid",
+ "data": [{}, [1], true, null, {}, 1],
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/3rdparty/rapidjson/bin/types/booleans.json b/3rdparty/rapidjson/bin/types/booleans.json
index 2dcbb5fe876..6ba33199d12 100644
--- a/3rdparty/rapidjson/bin/types/booleans.json
+++ b/3rdparty/rapidjson/bin/types/booleans.json
@@ -1,102 +1,102 @@
-[
- true,
- true,
- false,
- false,
- true,
- true,
- true,
- false,
- false,
- true,
- false,
- false,
- true,
- false,
- false,
- false,
- true,
- false,
- false,
- true,
- true,
- false,
- true,
- true,
- true,
- false,
- false,
- false,
- true,
- false,
- true,
- false,
- false,
- true,
- true,
- true,
- true,
- true,
- true,
- false,
- false,
- true,
- false,
- false,
- false,
- true,
- true,
- false,
- true,
- true,
- false,
- true,
- false,
- true,
- true,
- true,
- false,
- false,
- false,
- true,
- false,
- false,
- false,
- true,
- true,
- false,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- false,
- false,
- false,
- false,
- false,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- false,
- false,
- false,
- true,
- false,
- false,
- false,
- true,
- true,
- true,
- false,
- false,
- true,
- false
+[
+ true,
+ true,
+ false,
+ false,
+ true,
+ true,
+ true,
+ false,
+ false,
+ true,
+ false,
+ false,
+ true,
+ false,
+ false,
+ false,
+ true,
+ false,
+ false,
+ true,
+ true,
+ false,
+ true,
+ true,
+ true,
+ false,
+ false,
+ false,
+ true,
+ false,
+ true,
+ false,
+ false,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ false,
+ false,
+ true,
+ false,
+ false,
+ false,
+ true,
+ true,
+ false,
+ true,
+ true,
+ false,
+ true,
+ false,
+ true,
+ true,
+ true,
+ false,
+ false,
+ false,
+ true,
+ false,
+ false,
+ false,
+ true,
+ true,
+ false,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ false,
+ false,
+ false,
+ false,
+ false,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ false,
+ false,
+ false,
+ true,
+ false,
+ false,
+ false,
+ true,
+ true,
+ true,
+ false,
+ false,
+ true,
+ false
] \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/types/floats.json b/3rdparty/rapidjson/bin/types/floats.json
index 12b94a11dc4..b46c682be57 100644
--- a/3rdparty/rapidjson/bin/types/floats.json
+++ b/3rdparty/rapidjson/bin/types/floats.json
@@ -1,102 +1,102 @@
-[
- 135.747111636,
- 123.377054008,
- 140.527504552,
- -72.299143906,
- -23.851678949,
- 73.586193519,
- -158.299382442,
- 177.477876032,
- 32.268518982,
- -139.560009969,
- 115.203105183,
- -106.025823607,
- 167.224138231,
- 103.378383732,
- -97.498486285,
- 18.184723416,
- 69.137075711,
- 33.849002681,
- -120.185228215,
- -20.841408615,
- -172.659492727,
- -2.691464061,
- 22.426164066,
- -98.416909437,
- -31.603082708,
- -85.072296561,
- 108.620987395,
- -43.127078238,
- -126.473562057,
- -158.595489097,
- -57.890678254,
- -13.254016573,
- -85.024504709,
- 171.663552644,
- -146.495558248,
- -10.606748276,
- -118.786969354,
- 153.352057804,
- -45.215545083,
- 37.038725288,
- 106.344071897,
- -64.607402031,
- 85.148030911,
- 28.897784566,
- 39.51082061,
- 20.450382102,
- -113.174943618,
- 71.60785784,
- -168.202648062,
- -157.338200017,
- 10.879588527,
- -114.261694831,
- -5.622927072,
- -173.330830616,
- -29.47002003,
- -39.829034201,
- 50.031545162,
- 82.815735508,
- -119.188760828,
- -48.455928081,
- 163.964263034,
- 46.30378861,
- -26.248889762,
- -47.354615322,
- 155.388677633,
- -166.710356904,
- 42.987233558,
- 144.275297374,
- 37.394383186,
- -122.550388725,
- 177.469945914,
- 101.104677413,
- 109.429869885,
- -104.919625624,
- 147.522756541,
- -81.294703727,
- 122.744731363,
- 81.803603684,
- 26.321556167,
- 147.045441354,
- 147.256895816,
- -174.211095908,
- 52.518769316,
- -78.58250334,
- -173.356685435,
- -107.728209264,
- -69.982325771,
- -113.776095893,
- -35.785267074,
- -105.748545976,
- -30.206523864,
- -76.185311723,
- -126.400112781,
- -26.864958639,
- 56.840053629,
- 93.781553535,
- -116.002949803,
- -46.617140948,
- 176.846840093,
- -144.24821335
-]
+[
+ 135.747111636,
+ 123.377054008,
+ 140.527504552,
+ -72.299143906,
+ -23.851678949,
+ 73.586193519,
+ -158.299382442,
+ 177.477876032,
+ 32.268518982,
+ -139.560009969,
+ 115.203105183,
+ -106.025823607,
+ 167.224138231,
+ 103.378383732,
+ -97.498486285,
+ 18.184723416,
+ 69.137075711,
+ 33.849002681,
+ -120.185228215,
+ -20.841408615,
+ -172.659492727,
+ -2.691464061,
+ 22.426164066,
+ -98.416909437,
+ -31.603082708,
+ -85.072296561,
+ 108.620987395,
+ -43.127078238,
+ -126.473562057,
+ -158.595489097,
+ -57.890678254,
+ -13.254016573,
+ -85.024504709,
+ 171.663552644,
+ -146.495558248,
+ -10.606748276,
+ -118.786969354,
+ 153.352057804,
+ -45.215545083,
+ 37.038725288,
+ 106.344071897,
+ -64.607402031,
+ 85.148030911,
+ 28.897784566,
+ 39.51082061,
+ 20.450382102,
+ -113.174943618,
+ 71.60785784,
+ -168.202648062,
+ -157.338200017,
+ 10.879588527,
+ -114.261694831,
+ -5.622927072,
+ -173.330830616,
+ -29.47002003,
+ -39.829034201,
+ 50.031545162,
+ 82.815735508,
+ -119.188760828,
+ -48.455928081,
+ 163.964263034,
+ 46.30378861,
+ -26.248889762,
+ -47.354615322,
+ 155.388677633,
+ -166.710356904,
+ 42.987233558,
+ 144.275297374,
+ 37.394383186,
+ -122.550388725,
+ 177.469945914,
+ 101.104677413,
+ 109.429869885,
+ -104.919625624,
+ 147.522756541,
+ -81.294703727,
+ 122.744731363,
+ 81.803603684,
+ 26.321556167,
+ 147.045441354,
+ 147.256895816,
+ -174.211095908,
+ 52.518769316,
+ -78.58250334,
+ -173.356685435,
+ -107.728209264,
+ -69.982325771,
+ -113.776095893,
+ -35.785267074,
+ -105.748545976,
+ -30.206523864,
+ -76.185311723,
+ -126.400112781,
+ -26.864958639,
+ 56.840053629,
+ 93.781553535,
+ -116.002949803,
+ -46.617140948,
+ 176.846840093,
+ -144.24821335
+]
diff --git a/3rdparty/rapidjson/bin/types/guids.json b/3rdparty/rapidjson/bin/types/guids.json
index 9d7f5dbc8f9..0f83f34e1e8 100644
--- a/3rdparty/rapidjson/bin/types/guids.json
+++ b/3rdparty/rapidjson/bin/types/guids.json
@@ -1,102 +1,102 @@
-[
- "d35bf0d4-8d8f-4e17-a5c3-ad9bfd675266",
- "db402774-eeb6-463b-9986-c458c44d8b5a",
- "2a2e4101-b5f2-40b8-8750-e03f01661e60",
- "76787cfa-f4eb-4d62-aaad-e1d588d00ad5",
- "fd73894b-b500-4a7c-888c-06b5bd9cec65",
- "cce1862a-cf31-4ef2-9e23-f1d23b4e6163",
- "00a98bb0-2b6e-4368-8512-71c21aa87db7",
- "ab9a8d69-cec7-4550-bd35-3ed678e22782",
- "f18b48e1-5114-4fbe-9652-579e8d66950e",
- "4efe3baa-7ac5-4d6a-a839-6b9cfe825764",
- "b4aec119-5b0a-434c-b388-109816c482a5",
- "e0ef0cbb-127a-4a28-9831-5741b4295275",
- "d50286a5-cb7b-4c9e-be99-f214439bae8c",
- "a981094c-f1ac-42ed-a9fa-86404c7210ff",
- "2a34ee57-5815-4829-b77b-eeebaa8fe340",
- "a0530d44-48f8-4eff-b9ea-8810c4308351",
- "c6f91509-83e1-4ea1-9680-e667fbfd56ee",
- "cab11402-dcdd-4454-b190-6da124947395",
- "283d159c-2b18-4856-b4c7-5059252eaa15",
- "146157c6-72a8-4051-9991-cb6ea6743d81",
- "aef6f269-7306-4bd2-83f7-6d5605b5dc9a",
- "37fe6027-d638-4017-80a9-e7b0567b278e",
- "5003d731-33fb-4159-af61-d76348a44079",
- "e0e06979-5f80-4713-9fe0-8a4d60dc89f8",
- "7e85bdc3-0345-4cb6-9398-ccab06e79976",
- "f2ebf5af-6568-4ffe-a46d-403863fd4b66",
- "e0b5bb1c-b4dd-4535-9a9e-3c73f1167d46",
- "c852d20b-6bcb-4b12-bd57-308296c64c5a",
- "7ac3ae82-1818-49cd-a8a4-5ac77dfafd46",
- "138004a9-76e2-4ad7-bd42-e74dabdbb803",
- "ab25b5be-96be-45b0-b765-947b40ec36a6",
- "08404734-fd57-499e-a4cf-71e9ec782ede",
- "8dfdeb16-248b-4a21-bf89-2e22b11a4101",
- "a0e44ef0-3b09-41e8-ad5d-ed8e6a1a2a67",
- "a7981e49-188d-414a-9779-b1ad91e599d1",
- "329186c0-bf27-4208-baf7-c0a0a5a2d5b7",
- "cb5f3381-d33e-4b30-b1a9-f482623cad33",
- "15031262-ca73-4e3c-bd0a-fcf89bdf0caf",
- "6d7333d1-2e8c-4d78-bfde-5be47e70eb13",
- "acaa160c-670a-4e8f-ac45-49416e77d5f9",
- "228f87eb-cde4-4106-808b-2dbf3c7b6d2e",
- "2ff830a3-5445-4d8e-b161-bddd30666697",
- "f488bedd-ff6e-4108-b9a7-07f6da62f476",
- "2e12b846-0a34-478e-adf7-a438493803e6",
- "6686b8ef-7446-4d86-bd8c-df24119e3bfe",
- "e474a5c5-5793-4d41-b4ab-5423acc56ef1",
- "ac046573-e718-44dc-a0dc-9037eeaba6a9",
- "6b0e9099-cf53-4d5a-8a71-977528628fcf",
- "d51a3f22-0ff9-4087-ba9b-fcee2a2d8ade",
- "bdc01286-3511-4d22-bfb8-76d01203d366",
- "ca44eb84-17ff-4f27-8f1e-1bd25f4e8725",
- "4e9a8c2f-be0b-4913-92d2-c801b9a50d04",
- "7685d231-dadd-4041-9165-898397438ab7",
- "86f0bf26-d66a-44d8-99f5-d6768addae3b",
- "2ca1167c-72ba-45a0-aa42-faf033db0d0b",
- "199a1182-ea55-49ff-ba51-71c29cdd0aac",
- "be6a4dd2-c821-4aa0-8b83-d64d6644b5b2",
- "4c5f4781-7f80-4daa-9c20-76b183000514",
- "513b31bd-54fb-4d12-a427-42a7c13ff8e1",
- "8e211bcb-d76c-4012-83ad-74dd7d23b687",
- "44d5807e-0501-4f66-8779-e244d4fdca0a",
- "db8cd555-0563-4b7b-b00c-eada300a7065",
- "cb14d0c9-46cc-4797-bd3a-752b05629f07",
- "4f68b3ef-ac9b-47a0-b6d7-57f398a5c6a5",
- "77221aae-1bcf-471c-be45-7f31f733f9d6",
- "42a7cac8-9e80-4c45-8c71-511d863c98ea",
- "f9018d22-b82c-468c-bdb5-8864d5964801",
- "75f4e9b8-62a2-4f21-ad8a-e19eff0419bc",
- "9b7385c8-8653-4184-951c-b0ac1b36b42e",
- "571018aa-ffbf-4b42-a16d-07b57a7f5f0e",
- "35de4a2f-6bf1-45aa-b820-2a27ea833e44",
- "0b8edb20-3bb4-4cb4-b089-31957466dbab",
- "97da4778-9a7b-4140-a545-968148c81fb7",
- "969f326c-8f2a-47c5-b41c-d9c2f06c9b9d",
- "ae211037-8b53-4b17-bfc8-c06fc7774409",
- "12c5c3c4-0bd5-45d3-bc1d-d04a3c65d3e6",
- "ec02024f-ce43-4dd3-8169-a59f7baee043",
- "5b6afe77-ce48-47ca-90a0-25cd10ca5ffd",
- "2e3a61d4-6b8f-4d2f-ba86-878b4012efd8",
- "19a88a67-a5d3-4647-898f-1cde07bce040",
- "6db6f420-b5c8-48b9-bbb2-8864fe6fed65",
- "5a45dbde-7b53-4f6b-b864-e3b63be3708a",
- "c878321b-8a02-4239-9981-15760c2e7d15",
- "4e36687f-8bf6-4b12-b496-3a8e382d067e",
- "a59a63cd-43c0-4c6e-b208-6dbca86f8176",
- "303308c4-2e4a-45b5-8bf3-3e66e9ad05a1",
- "8b58fdf1-43a6-4c98-9547-6361b50791af",
- "a3563591-72ed-42b5-8e41-bac1d76d70cf",
- "38db8c78-3739-4f6e-8313-de4138082114",
- "86615bea-7e73-4daf-95da-ae6b9eee1bbb",
- "35d38e3e-076e-40dd-9aa8-05be2603bd59",
- "9f84c62d-b454-4ba3-8c19-a01878985cdc",
- "6721bbae-d765-4a06-8289-6fe46a1bf943",
- "0837796f-d0dd-4e50-9b7c-1983e6cc7c48",
- "021eb7d7-e869-49b9-80c3-9dd16ce2d981",
- "819c56f8-e040-475d-aad5-c6d5e98b20aa",
- "3a61ef02-735e-4229-937d-b3777a3f4e1f",
- "79dfab84-12e6-4ec8-bfc8-460ae71e4eca",
- "a106fabf-e149-476c-8053-b62388b6eb57",
- "9a3900a5-bfb4-4de0-baa5-253a8bd0b634"
+[
+ "d35bf0d4-8d8f-4e17-a5c3-ad9bfd675266",
+ "db402774-eeb6-463b-9986-c458c44d8b5a",
+ "2a2e4101-b5f2-40b8-8750-e03f01661e60",
+ "76787cfa-f4eb-4d62-aaad-e1d588d00ad5",
+ "fd73894b-b500-4a7c-888c-06b5bd9cec65",
+ "cce1862a-cf31-4ef2-9e23-f1d23b4e6163",
+ "00a98bb0-2b6e-4368-8512-71c21aa87db7",
+ "ab9a8d69-cec7-4550-bd35-3ed678e22782",
+ "f18b48e1-5114-4fbe-9652-579e8d66950e",
+ "4efe3baa-7ac5-4d6a-a839-6b9cfe825764",
+ "b4aec119-5b0a-434c-b388-109816c482a5",
+ "e0ef0cbb-127a-4a28-9831-5741b4295275",
+ "d50286a5-cb7b-4c9e-be99-f214439bae8c",
+ "a981094c-f1ac-42ed-a9fa-86404c7210ff",
+ "2a34ee57-5815-4829-b77b-eeebaa8fe340",
+ "a0530d44-48f8-4eff-b9ea-8810c4308351",
+ "c6f91509-83e1-4ea1-9680-e667fbfd56ee",
+ "cab11402-dcdd-4454-b190-6da124947395",
+ "283d159c-2b18-4856-b4c7-5059252eaa15",
+ "146157c6-72a8-4051-9991-cb6ea6743d81",
+ "aef6f269-7306-4bd2-83f7-6d5605b5dc9a",
+ "37fe6027-d638-4017-80a9-e7b0567b278e",
+ "5003d731-33fb-4159-af61-d76348a44079",
+ "e0e06979-5f80-4713-9fe0-8a4d60dc89f8",
+ "7e85bdc3-0345-4cb6-9398-ccab06e79976",
+ "f2ebf5af-6568-4ffe-a46d-403863fd4b66",
+ "e0b5bb1c-b4dd-4535-9a9e-3c73f1167d46",
+ "c852d20b-6bcb-4b12-bd57-308296c64c5a",
+ "7ac3ae82-1818-49cd-a8a4-5ac77dfafd46",
+ "138004a9-76e2-4ad7-bd42-e74dabdbb803",
+ "ab25b5be-96be-45b0-b765-947b40ec36a6",
+ "08404734-fd57-499e-a4cf-71e9ec782ede",
+ "8dfdeb16-248b-4a21-bf89-2e22b11a4101",
+ "a0e44ef0-3b09-41e8-ad5d-ed8e6a1a2a67",
+ "a7981e49-188d-414a-9779-b1ad91e599d1",
+ "329186c0-bf27-4208-baf7-c0a0a5a2d5b7",
+ "cb5f3381-d33e-4b30-b1a9-f482623cad33",
+ "15031262-ca73-4e3c-bd0a-fcf89bdf0caf",
+ "6d7333d1-2e8c-4d78-bfde-5be47e70eb13",
+ "acaa160c-670a-4e8f-ac45-49416e77d5f9",
+ "228f87eb-cde4-4106-808b-2dbf3c7b6d2e",
+ "2ff830a3-5445-4d8e-b161-bddd30666697",
+ "f488bedd-ff6e-4108-b9a7-07f6da62f476",
+ "2e12b846-0a34-478e-adf7-a438493803e6",
+ "6686b8ef-7446-4d86-bd8c-df24119e3bfe",
+ "e474a5c5-5793-4d41-b4ab-5423acc56ef1",
+ "ac046573-e718-44dc-a0dc-9037eeaba6a9",
+ "6b0e9099-cf53-4d5a-8a71-977528628fcf",
+ "d51a3f22-0ff9-4087-ba9b-fcee2a2d8ade",
+ "bdc01286-3511-4d22-bfb8-76d01203d366",
+ "ca44eb84-17ff-4f27-8f1e-1bd25f4e8725",
+ "4e9a8c2f-be0b-4913-92d2-c801b9a50d04",
+ "7685d231-dadd-4041-9165-898397438ab7",
+ "86f0bf26-d66a-44d8-99f5-d6768addae3b",
+ "2ca1167c-72ba-45a0-aa42-faf033db0d0b",
+ "199a1182-ea55-49ff-ba51-71c29cdd0aac",
+ "be6a4dd2-c821-4aa0-8b83-d64d6644b5b2",
+ "4c5f4781-7f80-4daa-9c20-76b183000514",
+ "513b31bd-54fb-4d12-a427-42a7c13ff8e1",
+ "8e211bcb-d76c-4012-83ad-74dd7d23b687",
+ "44d5807e-0501-4f66-8779-e244d4fdca0a",
+ "db8cd555-0563-4b7b-b00c-eada300a7065",
+ "cb14d0c9-46cc-4797-bd3a-752b05629f07",
+ "4f68b3ef-ac9b-47a0-b6d7-57f398a5c6a5",
+ "77221aae-1bcf-471c-be45-7f31f733f9d6",
+ "42a7cac8-9e80-4c45-8c71-511d863c98ea",
+ "f9018d22-b82c-468c-bdb5-8864d5964801",
+ "75f4e9b8-62a2-4f21-ad8a-e19eff0419bc",
+ "9b7385c8-8653-4184-951c-b0ac1b36b42e",
+ "571018aa-ffbf-4b42-a16d-07b57a7f5f0e",
+ "35de4a2f-6bf1-45aa-b820-2a27ea833e44",
+ "0b8edb20-3bb4-4cb4-b089-31957466dbab",
+ "97da4778-9a7b-4140-a545-968148c81fb7",
+ "969f326c-8f2a-47c5-b41c-d9c2f06c9b9d",
+ "ae211037-8b53-4b17-bfc8-c06fc7774409",
+ "12c5c3c4-0bd5-45d3-bc1d-d04a3c65d3e6",
+ "ec02024f-ce43-4dd3-8169-a59f7baee043",
+ "5b6afe77-ce48-47ca-90a0-25cd10ca5ffd",
+ "2e3a61d4-6b8f-4d2f-ba86-878b4012efd8",
+ "19a88a67-a5d3-4647-898f-1cde07bce040",
+ "6db6f420-b5c8-48b9-bbb2-8864fe6fed65",
+ "5a45dbde-7b53-4f6b-b864-e3b63be3708a",
+ "c878321b-8a02-4239-9981-15760c2e7d15",
+ "4e36687f-8bf6-4b12-b496-3a8e382d067e",
+ "a59a63cd-43c0-4c6e-b208-6dbca86f8176",
+ "303308c4-2e4a-45b5-8bf3-3e66e9ad05a1",
+ "8b58fdf1-43a6-4c98-9547-6361b50791af",
+ "a3563591-72ed-42b5-8e41-bac1d76d70cf",
+ "38db8c78-3739-4f6e-8313-de4138082114",
+ "86615bea-7e73-4daf-95da-ae6b9eee1bbb",
+ "35d38e3e-076e-40dd-9aa8-05be2603bd59",
+ "9f84c62d-b454-4ba3-8c19-a01878985cdc",
+ "6721bbae-d765-4a06-8289-6fe46a1bf943",
+ "0837796f-d0dd-4e50-9b7c-1983e6cc7c48",
+ "021eb7d7-e869-49b9-80c3-9dd16ce2d981",
+ "819c56f8-e040-475d-aad5-c6d5e98b20aa",
+ "3a61ef02-735e-4229-937d-b3777a3f4e1f",
+ "79dfab84-12e6-4ec8-bfc8-460ae71e4eca",
+ "a106fabf-e149-476c-8053-b62388b6eb57",
+ "9a3900a5-bfb4-4de0-baa5-253a8bd0b634"
] \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/types/integers.json b/3rdparty/rapidjson/bin/types/integers.json
index 5dd05e097a4..2d3aca096cf 100644
--- a/3rdparty/rapidjson/bin/types/integers.json
+++ b/3rdparty/rapidjson/bin/types/integers.json
@@ -1,102 +1,102 @@
-[
- 8125686,
- 8958709,
- 5976222,
- 1889524,
- 7968493,
- 1357486,
- 118415,
- 7081097,
- 4635968,
- 7555332,
- 2270233,
- 3428352,
- 8699968,
- 2087333,
- 7861337,
- 7554440,
- 2017031,
- 7981692,
- 6060687,
- 1877715,
- 3297474,
- 8373177,
- 6158629,
- 7853641,
- 3004441,
- 9650406,
- 2695251,
- 1180761,
- 4988426,
- 6043805,
- 8063373,
- 6103218,
- 2848339,
- 8188690,
- 9235573,
- 5949816,
- 6116081,
- 6471138,
- 3354531,
- 4787414,
- 9660600,
- 942529,
- 7278535,
- 7967399,
- 554292,
- 1436493,
- 267319,
- 2606657,
- 7900601,
- 4276634,
- 7996757,
- 8544466,
- 7266469,
- 3301373,
- 4005350,
- 6437652,
- 7717672,
- 7126292,
- 8588394,
- 2127902,
- 7410190,
- 1517806,
- 4583602,
- 3123440,
- 7747613,
- 5029464,
- 9834390,
- 3087227,
- 4913822,
- 7550487,
- 4518144,
- 5862588,
- 1778599,
- 9493290,
- 5588455,
- 3638706,
- 7394293,
- 4294719,
- 3837830,
- 6381878,
- 7175866,
- 8575492,
- 1415229,
- 1453733,
- 6972404,
- 9782571,
- 4234063,
- 7117418,
- 7293130,
- 8057071,
- 9345285,
- 7626648,
- 3358911,
- 4574537,
- 9371826,
- 7627107,
- 6154093,
- 5392367,
- 5398105,
- 6956377
+[
+ 8125686,
+ 8958709,
+ 5976222,
+ 1889524,
+ 7968493,
+ 1357486,
+ 118415,
+ 7081097,
+ 4635968,
+ 7555332,
+ 2270233,
+ 3428352,
+ 8699968,
+ 2087333,
+ 7861337,
+ 7554440,
+ 2017031,
+ 7981692,
+ 6060687,
+ 1877715,
+ 3297474,
+ 8373177,
+ 6158629,
+ 7853641,
+ 3004441,
+ 9650406,
+ 2695251,
+ 1180761,
+ 4988426,
+ 6043805,
+ 8063373,
+ 6103218,
+ 2848339,
+ 8188690,
+ 9235573,
+ 5949816,
+ 6116081,
+ 6471138,
+ 3354531,
+ 4787414,
+ 9660600,
+ 942529,
+ 7278535,
+ 7967399,
+ 554292,
+ 1436493,
+ 267319,
+ 2606657,
+ 7900601,
+ 4276634,
+ 7996757,
+ 8544466,
+ 7266469,
+ 3301373,
+ 4005350,
+ 6437652,
+ 7717672,
+ 7126292,
+ 8588394,
+ 2127902,
+ 7410190,
+ 1517806,
+ 4583602,
+ 3123440,
+ 7747613,
+ 5029464,
+ 9834390,
+ 3087227,
+ 4913822,
+ 7550487,
+ 4518144,
+ 5862588,
+ 1778599,
+ 9493290,
+ 5588455,
+ 3638706,
+ 7394293,
+ 4294719,
+ 3837830,
+ 6381878,
+ 7175866,
+ 8575492,
+ 1415229,
+ 1453733,
+ 6972404,
+ 9782571,
+ 4234063,
+ 7117418,
+ 7293130,
+ 8057071,
+ 9345285,
+ 7626648,
+ 3358911,
+ 4574537,
+ 9371826,
+ 7627107,
+ 6154093,
+ 5392367,
+ 5398105,
+ 6956377
] \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/types/mixed.json b/3rdparty/rapidjson/bin/types/mixed.json
index 43e9a1d7be0..cec10a5660d 100644
--- a/3rdparty/rapidjson/bin/types/mixed.json
+++ b/3rdparty/rapidjson/bin/types/mixed.json
@@ -1,592 +1,592 @@
-[
- {
- "favoriteFruit": "banana",
- "greeting": "Hello, Kim! You have 10 unread messages.",
- "friends": [
- {
- "name": "Higgins Rodriquez",
- "id": 0
- },
- {
- "name": "James Floyd",
- "id": 1
- },
- {
- "name": "Gay Stewart",
- "id": 2
- }
- ],
- "range": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9
- ],
- "tags": [
- "pariatur",
- "ad",
- "eiusmod",
- "sit",
- "et",
- "velit",
- "culpa"
- ],
- "longitude": -57.919246,
- "latitude": -36.022812,
- "registered": "Friday, March 21, 2014 9:13 PM",
- "about": "Laborum nulla aliquip ullamco proident excepteur est officia ipsum. Eiusmod exercitation minim ex do labore reprehenderit aliqua minim qui excepteur reprehenderit cupidatat. Sint enim exercitation duis id consequat nisi enim magna. Commodo aliqua id ipsum sit magna enim. Veniam officia in labore fugiat veniam ea laboris ex veniam duis.\r\n",
- "address": "323 Pulaski Street, Ronco, North Carolina, 7701",
- "phone": "+1 (919) 438-2678",
- "email": "kim.griffith@cipromox.biz",
- "company": "CIPROMOX",
- "name": {
- "last": "Griffith",
- "first": "Kim"
- },
- "eyeColor": "green",
- "age": 26,
- "picture": "http://placehold.it/32x32",
- "balance": "$1,283.55",
- "isActive": false,
- "guid": "10ab0392-c5e2-48a3-9473-aa725bad892d",
- "index": 0,
- "_id": "551b91198238a0bcf9a41133"
- },
- {
- "favoriteFruit": "banana",
- "greeting": "Hello, Skinner! You have 9 unread messages.",
- "friends": [
- {
- "name": "Rhonda Justice",
- "id": 0
- },
- {
- "name": "Audra Castaneda",
- "id": 1
- },
- {
- "name": "Vicky Chavez",
- "id": 2
- }
- ],
- "range": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9
- ],
- "tags": [
- "dolore",
- "enim",
- "sit",
- "non",
- "exercitation",
- "fugiat",
- "adipisicing"
- ],
- "longitude": -60.291407,
- "latitude": -84.619318,
- "registered": "Friday, February 7, 2014 3:17 AM",
- "about": "Consectetur eiusmod laboris dolore est ullamco nulla in velit quis esse Lorem. Amet aliqua sunt aute occaecat veniam officia in duis proident aliqua cupidatat mollit. Sint eu qui anim duis ut anim duis eu cillum. Cillum nostrud adipisicing tempor Lorem commodo sit in ad qui non et irure qui. Labore eu aliquip id duis eiusmod veniam.\r\n",
- "address": "347 Autumn Avenue, Fidelis, Puerto Rico, 543",
- "phone": "+1 (889) 457-2319",
- "email": "skinner.maddox@moltonic.co.uk",
- "company": "MOLTONIC",
- "name": {
- "last": "Maddox",
- "first": "Skinner"
- },
- "eyeColor": "green",
- "age": 22,
- "picture": "http://placehold.it/32x32",
- "balance": "$3,553.10",
- "isActive": false,
- "guid": "cfbc2fb6-2641-4388-b06d-ec0212cfac1e",
- "index": 1,
- "_id": "551b91197e0abe92d6642700"
- },
- {
- "favoriteFruit": "strawberry",
- "greeting": "Hello, Reynolds! You have 5 unread messages.",
- "friends": [
- {
- "name": "Brady Valdez",
- "id": 0
- },
- {
- "name": "Boyer Golden",
- "id": 1
- },
- {
- "name": "Gladys Knapp",
- "id": 2
- }
- ],
- "range": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9
- ],
- "tags": [
- "commodo",
- "eiusmod",
- "cupidatat",
- "et",
- "occaecat",
- "proident",
- "Lorem"
- ],
- "longitude": 140.866287,
- "latitude": 1.401032,
- "registered": "Monday, October 20, 2014 8:01 AM",
- "about": "Deserunt elit consequat ea dolor pariatur aute consectetur et nulla ipsum ad. Laboris occaecat ipsum ad duis et esse ea ut voluptate. Ex magna consequat pariatur amet. Quis excepteur non mollit dolore cillum dolor ex esse veniam esse deserunt non occaecat veniam. Sit amet proident proident amet. Nisi est id ut ut adipisicing esse fugiat non dolor aute.\r\n",
- "address": "872 Montague Terrace, Haena, Montana, 3106",
- "phone": "+1 (974) 410-2655",
- "email": "reynolds.sanford@combot.biz",
- "company": "COMBOT",
- "name": {
- "last": "Sanford",
- "first": "Reynolds"
- },
- "eyeColor": "green",
- "age": 21,
- "picture": "http://placehold.it/32x32",
- "balance": "$3,664.47",
- "isActive": true,
- "guid": "f9933a9c-c41a-412f-a18d-e727c569870b",
- "index": 2,
- "_id": "551b91197f170b65413a06e3"
- },
- {
- "favoriteFruit": "banana",
- "greeting": "Hello, Neva! You have 7 unread messages.",
- "friends": [
- {
- "name": "Clara Cotton",
- "id": 0
- },
- {
- "name": "Ray Gates",
- "id": 1
- },
- {
- "name": "Jacobs Reese",
- "id": 2
- }
- ],
- "range": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9
- ],
- "tags": [
- "magna",
- "labore",
- "incididunt",
- "velit",
- "ea",
- "et",
- "eiusmod"
- ],
- "longitude": -133.058479,
- "latitude": 87.803677,
- "registered": "Friday, May 9, 2014 5:41 PM",
- "about": "Do duis occaecat ut officia occaecat officia nostrud reprehenderit ex excepteur aute anim in reprehenderit. Cupidatat nulla eiusmod nulla non minim veniam aute nulla deserunt adipisicing consectetur veniam. Sit consequat ex laboris aliqua labore consectetur tempor proident consequat est. Fugiat quis esse culpa aliquip. Excepteur laborum aliquip sunt eu cupidatat magna eiusmod amet nisi labore aliquip. Ut consectetur esse aliquip exercitation nulla ex occaecat elit do ex eiusmod deserunt. Ex eu voluptate minim deserunt fugiat minim est occaecat ad Lorem nisi.\r\n",
- "address": "480 Eagle Street, Fostoria, Oklahoma, 2614",
- "phone": "+1 (983) 439-3000",
- "email": "neva.barker@pushcart.us",
- "company": "PUSHCART",
- "name": {
- "last": "Barker",
- "first": "Neva"
- },
- "eyeColor": "brown",
- "age": 36,
- "picture": "http://placehold.it/32x32",
- "balance": "$3,182.24",
- "isActive": true,
- "guid": "52489849-78e1-4b27-8b86-e3e5ab2b7dc8",
- "index": 3,
- "_id": "551b9119a13061c083c878d5"
- },
- {
- "favoriteFruit": "banana",
- "greeting": "Hello, Rodgers! You have 6 unread messages.",
- "friends": [
- {
- "name": "Marguerite Conway",
- "id": 0
- },
- {
- "name": "Margarita Cunningham",
- "id": 1
- },
- {
- "name": "Carmela Gallagher",
- "id": 2
- }
- ],
- "range": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9
- ],
- "tags": [
- "ipsum",
- "magna",
- "amet",
- "elit",
- "sit",
- "occaecat",
- "elit"
- ],
- "longitude": -125.436981,
- "latitude": 19.868524,
- "registered": "Tuesday, July 8, 2014 8:09 PM",
- "about": "In cillum esse tempor do magna id ad excepteur ex nostrud mollit deserunt aliqua. Minim aliqua commodo commodo consectetur exercitation nulla nisi dolore aliqua in. Incididunt deserunt mollit nostrud excepteur. Ipsum fugiat anim deserunt Lorem aliquip nisi consequat eu minim in ex duis.\r\n",
- "address": "989 Varanda Place, Duryea, Palau, 3972",
- "phone": "+1 (968) 578-2974",
- "email": "rodgers.conner@frenex.net",
- "company": "FRENEX",
- "name": {
- "last": "Conner",
- "first": "Rodgers"
- },
- "eyeColor": "blue",
- "age": 23,
- "picture": "http://placehold.it/32x32",
- "balance": "$1,665.17",
- "isActive": true,
- "guid": "ed3b2374-5afe-4fca-9325-8a7bbc9f81a0",
- "index": 4,
- "_id": "551b91197bcedb1b56a241ce"
- },
- {
- "favoriteFruit": "strawberry",
- "greeting": "Hello, Mari! You have 10 unread messages.",
- "friends": [
- {
- "name": "Irwin Boyd",
- "id": 0
- },
- {
- "name": "Dejesus Flores",
- "id": 1
- },
- {
- "name": "Lane Mcmahon",
- "id": 2
- }
- ],
- "range": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9
- ],
- "tags": [
- "esse",
- "aliquip",
- "excepteur",
- "dolor",
- "ex",
- "commodo",
- "anim"
- ],
- "longitude": -17.038176,
- "latitude": 17.154663,
- "registered": "Sunday, April 6, 2014 4:46 AM",
- "about": "Excepteur veniam occaecat sint nulla magna in in officia elit. Eiusmod qui dolor fugiat tempor in minim esse officia minim consequat. Lorem ullamco labore proident ipsum id pariatur fugiat consectetur anim cupidatat qui proident non ipsum.\r\n",
- "address": "563 Hendrickson Street, Westwood, South Dakota, 4959",
- "phone": "+1 (980) 434-3976",
- "email": "mari.fleming@beadzza.org",
- "company": "BEADZZA",
- "name": {
- "last": "Fleming",
- "first": "Mari"
- },
- "eyeColor": "blue",
- "age": 21,
- "picture": "http://placehold.it/32x32",
- "balance": "$1,948.04",
- "isActive": true,
- "guid": "6bd02166-3b1f-4ed8-84c9-ed96cbf12abc",
- "index": 5,
- "_id": "551b9119b359ff6d24846f77"
- },
- {
- "favoriteFruit": "strawberry",
- "greeting": "Hello, Maxine! You have 7 unread messages.",
- "friends": [
- {
- "name": "Sullivan Stark",
- "id": 0
- },
- {
- "name": "Underwood Mclaughlin",
- "id": 1
- },
- {
- "name": "Kristy Carlson",
- "id": 2
- }
- ],
- "range": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9
- ],
- "tags": [
- "commodo",
- "ipsum",
- "quis",
- "non",
- "est",
- "mollit",
- "exercitation"
- ],
- "longitude": -105.40635,
- "latitude": 37.197993,
- "registered": "Tuesday, January 20, 2015 12:30 AM",
- "about": "Proident ullamco Lorem est consequat consectetur non eiusmod esse nostrud pariatur eiusmod enim exercitation eiusmod. Consequat duis elit elit minim ullamco et dolor eu minim do tempor esse consequat excepteur. Mollit dolor do voluptate nostrud quis anim cillum velit tempor eiusmod adipisicing tempor do culpa. Eu magna dolor sit amet nisi do laborum dolore nisi. Deserunt ipsum et deserunt non nisi.\r\n",
- "address": "252 Boulevard Court, Brenton, Tennessee, 9444",
- "phone": "+1 (950) 466-3377",
- "email": "maxine.moreno@zentia.tv",
- "company": "ZENTIA",
- "name": {
- "last": "Moreno",
- "first": "Maxine"
- },
- "eyeColor": "brown",
- "age": 24,
- "picture": "http://placehold.it/32x32",
- "balance": "$1,200.24",
- "isActive": false,
- "guid": "ce307a37-ca1f-43f5-b637-dca2605712be",
- "index": 6,
- "_id": "551b91195a6164b2e35f6dc8"
- },
- {
- "favoriteFruit": "strawberry",
- "greeting": "Hello, Helga! You have 5 unread messages.",
- "friends": [
- {
- "name": "Alicia Vance",
- "id": 0
- },
- {
- "name": "Vinson Phelps",
- "id": 1
- },
- {
- "name": "Francisca Kelley",
- "id": 2
- }
- ],
- "range": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9
- ],
- "tags": [
- "nostrud",
- "eiusmod",
- "dolore",
- "officia",
- "sint",
- "non",
- "qui"
- ],
- "longitude": -7.275151,
- "latitude": 75.54202,
- "registered": "Wednesday, October 1, 2014 6:35 PM",
- "about": "Quis duis ullamco velit qui. Consectetur non adipisicing id magna anim. Deserunt est officia qui esse. Et do pariatur incididunt anim ad mollit non. Et eiusmod sunt fugiat elit mollit ad excepteur anim nisi laboris eiusmod aliquip aliquip.\r\n",
- "address": "981 Bush Street, Beaulieu, Vermont, 3775",
- "phone": "+1 (956) 506-3807",
- "email": "helga.burch@synkgen.name",
- "company": "SYNKGEN",
- "name": {
- "last": "Burch",
- "first": "Helga"
- },
- "eyeColor": "blue",
- "age": 22,
- "picture": "http://placehold.it/32x32",
- "balance": "$3,827.89",
- "isActive": false,
- "guid": "ff5dfea0-1052-4ef2-8b66-4dc1aad0a4fb",
- "index": 7,
- "_id": "551b911946be8358ae40e90e"
- },
- {
- "favoriteFruit": "banana",
- "greeting": "Hello, Shaw! You have 5 unread messages.",
- "friends": [
- {
- "name": "Christian Cardenas",
- "id": 0
- },
- {
- "name": "Cohen Pennington",
- "id": 1
- },
- {
- "name": "Mary Lindsay",
- "id": 2
- }
- ],
- "range": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9
- ],
- "tags": [
- "occaecat",
- "ut",
- "occaecat",
- "magna",
- "exercitation",
- "incididunt",
- "irure"
- ],
- "longitude": -89.102972,
- "latitude": 89.489596,
- "registered": "Thursday, August 21, 2014 5:00 PM",
- "about": "Amet cupidatat quis velit aute Lorem consequat pariatur mollit deserunt et sint culpa excepteur duis. Enim proident duis qui ex tempor sunt nostrud occaecat. Officia sit veniam mollit eiusmod minim do aute eiusmod fugiat qui anim adipisicing in laboris. Do tempor reprehenderit sunt laborum esse irure dolor ad consectetur aute sit id ipsum. Commodo et voluptate anim consequat do. Minim laborum ad veniam ad minim incididunt excepteur excepteur aliqua.\r\n",
- "address": "237 Pierrepont Street, Herbster, New York, 3490",
- "phone": "+1 (976) 455-2880",
- "email": "shaw.zamora@shadease.me",
- "company": "SHADEASE",
- "name": {
- "last": "Zamora",
- "first": "Shaw"
- },
- "eyeColor": "blue",
- "age": 38,
- "picture": "http://placehold.it/32x32",
- "balance": "$3,440.82",
- "isActive": false,
- "guid": "ac5fdb0e-e1fb-427e-881d-da461be0d1ca",
- "index": 8,
- "_id": "551b9119af0077bc28a2de25"
- },
- {
- "favoriteFruit": "apple",
- "greeting": "Hello, Melissa! You have 5 unread messages.",
- "friends": [
- {
- "name": "Marion Villarreal",
- "id": 0
- },
- {
- "name": "Kate Rose",
- "id": 1
- },
- {
- "name": "Hines Simon",
- "id": 2
- }
- ],
- "range": [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9
- ],
- "tags": [
- "amet",
- "veniam",
- "mollit",
- "ad",
- "cupidatat",
- "deserunt",
- "Lorem"
- ],
- "longitude": -52.735052,
- "latitude": 16.258838,
- "registered": "Wednesday, April 16, 2014 7:56 PM",
- "about": "Aute ut culpa eiusmod tempor duis dolor tempor incididunt. Nisi non proident excepteur eiusmod incididunt nisi minim irure sit. In veniam commodo deserunt proident reprehenderit et consectetur ullamco quis nulla cupidatat.\r\n",
- "address": "642 Halsey Street, Blandburg, Kansas, 6761",
- "phone": "+1 (941) 539-3851",
- "email": "melissa.vaughn@memora.io",
- "company": "MEMORA",
- "name": {
- "last": "Vaughn",
- "first": "Melissa"
- },
- "eyeColor": "brown",
- "age": 24,
- "picture": "http://placehold.it/32x32",
- "balance": "$2,399.44",
- "isActive": true,
- "guid": "1769f022-a7f1-4a69-bf4c-f5a5ebeab2d1",
- "index": 9,
- "_id": "551b9119b607c09c7ffc3b8a"
- }
+[
+ {
+ "favoriteFruit": "banana",
+ "greeting": "Hello, Kim! You have 10 unread messages.",
+ "friends": [
+ {
+ "name": "Higgins Rodriquez",
+ "id": 0
+ },
+ {
+ "name": "James Floyd",
+ "id": 1
+ },
+ {
+ "name": "Gay Stewart",
+ "id": 2
+ }
+ ],
+ "range": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "tags": [
+ "pariatur",
+ "ad",
+ "eiusmod",
+ "sit",
+ "et",
+ "velit",
+ "culpa"
+ ],
+ "longitude": -57.919246,
+ "latitude": -36.022812,
+ "registered": "Friday, March 21, 2014 9:13 PM",
+ "about": "Laborum nulla aliquip ullamco proident excepteur est officia ipsum. Eiusmod exercitation minim ex do labore reprehenderit aliqua minim qui excepteur reprehenderit cupidatat. Sint enim exercitation duis id consequat nisi enim magna. Commodo aliqua id ipsum sit magna enim. Veniam officia in labore fugiat veniam ea laboris ex veniam duis.\r\n",
+ "address": "323 Pulaski Street, Ronco, North Carolina, 7701",
+ "phone": "+1 (919) 438-2678",
+ "email": "kim.griffith@cipromox.biz",
+ "company": "CIPROMOX",
+ "name": {
+ "last": "Griffith",
+ "first": "Kim"
+ },
+ "eyeColor": "green",
+ "age": 26,
+ "picture": "http://placehold.it/32x32",
+ "balance": "$1,283.55",
+ "isActive": false,
+ "guid": "10ab0392-c5e2-48a3-9473-aa725bad892d",
+ "index": 0,
+ "_id": "551b91198238a0bcf9a41133"
+ },
+ {
+ "favoriteFruit": "banana",
+ "greeting": "Hello, Skinner! You have 9 unread messages.",
+ "friends": [
+ {
+ "name": "Rhonda Justice",
+ "id": 0
+ },
+ {
+ "name": "Audra Castaneda",
+ "id": 1
+ },
+ {
+ "name": "Vicky Chavez",
+ "id": 2
+ }
+ ],
+ "range": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "tags": [
+ "dolore",
+ "enim",
+ "sit",
+ "non",
+ "exercitation",
+ "fugiat",
+ "adipisicing"
+ ],
+ "longitude": -60.291407,
+ "latitude": -84.619318,
+ "registered": "Friday, February 7, 2014 3:17 AM",
+ "about": "Consectetur eiusmod laboris dolore est ullamco nulla in velit quis esse Lorem. Amet aliqua sunt aute occaecat veniam officia in duis proident aliqua cupidatat mollit. Sint eu qui anim duis ut anim duis eu cillum. Cillum nostrud adipisicing tempor Lorem commodo sit in ad qui non et irure qui. Labore eu aliquip id duis eiusmod veniam.\r\n",
+ "address": "347 Autumn Avenue, Fidelis, Puerto Rico, 543",
+ "phone": "+1 (889) 457-2319",
+ "email": "skinner.maddox@moltonic.co.uk",
+ "company": "MOLTONIC",
+ "name": {
+ "last": "Maddox",
+ "first": "Skinner"
+ },
+ "eyeColor": "green",
+ "age": 22,
+ "picture": "http://placehold.it/32x32",
+ "balance": "$3,553.10",
+ "isActive": false,
+ "guid": "cfbc2fb6-2641-4388-b06d-ec0212cfac1e",
+ "index": 1,
+ "_id": "551b91197e0abe92d6642700"
+ },
+ {
+ "favoriteFruit": "strawberry",
+ "greeting": "Hello, Reynolds! You have 5 unread messages.",
+ "friends": [
+ {
+ "name": "Brady Valdez",
+ "id": 0
+ },
+ {
+ "name": "Boyer Golden",
+ "id": 1
+ },
+ {
+ "name": "Gladys Knapp",
+ "id": 2
+ }
+ ],
+ "range": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "tags": [
+ "commodo",
+ "eiusmod",
+ "cupidatat",
+ "et",
+ "occaecat",
+ "proident",
+ "Lorem"
+ ],
+ "longitude": 140.866287,
+ "latitude": 1.401032,
+ "registered": "Monday, October 20, 2014 8:01 AM",
+ "about": "Deserunt elit consequat ea dolor pariatur aute consectetur et nulla ipsum ad. Laboris occaecat ipsum ad duis et esse ea ut voluptate. Ex magna consequat pariatur amet. Quis excepteur non mollit dolore cillum dolor ex esse veniam esse deserunt non occaecat veniam. Sit amet proident proident amet. Nisi est id ut ut adipisicing esse fugiat non dolor aute.\r\n",
+ "address": "872 Montague Terrace, Haena, Montana, 3106",
+ "phone": "+1 (974) 410-2655",
+ "email": "reynolds.sanford@combot.biz",
+ "company": "COMBOT",
+ "name": {
+ "last": "Sanford",
+ "first": "Reynolds"
+ },
+ "eyeColor": "green",
+ "age": 21,
+ "picture": "http://placehold.it/32x32",
+ "balance": "$3,664.47",
+ "isActive": true,
+ "guid": "f9933a9c-c41a-412f-a18d-e727c569870b",
+ "index": 2,
+ "_id": "551b91197f170b65413a06e3"
+ },
+ {
+ "favoriteFruit": "banana",
+ "greeting": "Hello, Neva! You have 7 unread messages.",
+ "friends": [
+ {
+ "name": "Clara Cotton",
+ "id": 0
+ },
+ {
+ "name": "Ray Gates",
+ "id": 1
+ },
+ {
+ "name": "Jacobs Reese",
+ "id": 2
+ }
+ ],
+ "range": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "tags": [
+ "magna",
+ "labore",
+ "incididunt",
+ "velit",
+ "ea",
+ "et",
+ "eiusmod"
+ ],
+ "longitude": -133.058479,
+ "latitude": 87.803677,
+ "registered": "Friday, May 9, 2014 5:41 PM",
+ "about": "Do duis occaecat ut officia occaecat officia nostrud reprehenderit ex excepteur aute anim in reprehenderit. Cupidatat nulla eiusmod nulla non minim veniam aute nulla deserunt adipisicing consectetur veniam. Sit consequat ex laboris aliqua labore consectetur tempor proident consequat est. Fugiat quis esse culpa aliquip. Excepteur laborum aliquip sunt eu cupidatat magna eiusmod amet nisi labore aliquip. Ut consectetur esse aliquip exercitation nulla ex occaecat elit do ex eiusmod deserunt. Ex eu voluptate minim deserunt fugiat minim est occaecat ad Lorem nisi.\r\n",
+ "address": "480 Eagle Street, Fostoria, Oklahoma, 2614",
+ "phone": "+1 (983) 439-3000",
+ "email": "neva.barker@pushcart.us",
+ "company": "PUSHCART",
+ "name": {
+ "last": "Barker",
+ "first": "Neva"
+ },
+ "eyeColor": "brown",
+ "age": 36,
+ "picture": "http://placehold.it/32x32",
+ "balance": "$3,182.24",
+ "isActive": true,
+ "guid": "52489849-78e1-4b27-8b86-e3e5ab2b7dc8",
+ "index": 3,
+ "_id": "551b9119a13061c083c878d5"
+ },
+ {
+ "favoriteFruit": "banana",
+ "greeting": "Hello, Rodgers! You have 6 unread messages.",
+ "friends": [
+ {
+ "name": "Marguerite Conway",
+ "id": 0
+ },
+ {
+ "name": "Margarita Cunningham",
+ "id": 1
+ },
+ {
+ "name": "Carmela Gallagher",
+ "id": 2
+ }
+ ],
+ "range": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "tags": [
+ "ipsum",
+ "magna",
+ "amet",
+ "elit",
+ "sit",
+ "occaecat",
+ "elit"
+ ],
+ "longitude": -125.436981,
+ "latitude": 19.868524,
+ "registered": "Tuesday, July 8, 2014 8:09 PM",
+ "about": "In cillum esse tempor do magna id ad excepteur ex nostrud mollit deserunt aliqua. Minim aliqua commodo commodo consectetur exercitation nulla nisi dolore aliqua in. Incididunt deserunt mollit nostrud excepteur. Ipsum fugiat anim deserunt Lorem aliquip nisi consequat eu minim in ex duis.\r\n",
+ "address": "989 Varanda Place, Duryea, Palau, 3972",
+ "phone": "+1 (968) 578-2974",
+ "email": "rodgers.conner@frenex.net",
+ "company": "FRENEX",
+ "name": {
+ "last": "Conner",
+ "first": "Rodgers"
+ },
+ "eyeColor": "blue",
+ "age": 23,
+ "picture": "http://placehold.it/32x32",
+ "balance": "$1,665.17",
+ "isActive": true,
+ "guid": "ed3b2374-5afe-4fca-9325-8a7bbc9f81a0",
+ "index": 4,
+ "_id": "551b91197bcedb1b56a241ce"
+ },
+ {
+ "favoriteFruit": "strawberry",
+ "greeting": "Hello, Mari! You have 10 unread messages.",
+ "friends": [
+ {
+ "name": "Irwin Boyd",
+ "id": 0
+ },
+ {
+ "name": "Dejesus Flores",
+ "id": 1
+ },
+ {
+ "name": "Lane Mcmahon",
+ "id": 2
+ }
+ ],
+ "range": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "tags": [
+ "esse",
+ "aliquip",
+ "excepteur",
+ "dolor",
+ "ex",
+ "commodo",
+ "anim"
+ ],
+ "longitude": -17.038176,
+ "latitude": 17.154663,
+ "registered": "Sunday, April 6, 2014 4:46 AM",
+ "about": "Excepteur veniam occaecat sint nulla magna in in officia elit. Eiusmod qui dolor fugiat tempor in minim esse officia minim consequat. Lorem ullamco labore proident ipsum id pariatur fugiat consectetur anim cupidatat qui proident non ipsum.\r\n",
+ "address": "563 Hendrickson Street, Westwood, South Dakota, 4959",
+ "phone": "+1 (980) 434-3976",
+ "email": "mari.fleming@beadzza.org",
+ "company": "BEADZZA",
+ "name": {
+ "last": "Fleming",
+ "first": "Mari"
+ },
+ "eyeColor": "blue",
+ "age": 21,
+ "picture": "http://placehold.it/32x32",
+ "balance": "$1,948.04",
+ "isActive": true,
+ "guid": "6bd02166-3b1f-4ed8-84c9-ed96cbf12abc",
+ "index": 5,
+ "_id": "551b9119b359ff6d24846f77"
+ },
+ {
+ "favoriteFruit": "strawberry",
+ "greeting": "Hello, Maxine! You have 7 unread messages.",
+ "friends": [
+ {
+ "name": "Sullivan Stark",
+ "id": 0
+ },
+ {
+ "name": "Underwood Mclaughlin",
+ "id": 1
+ },
+ {
+ "name": "Kristy Carlson",
+ "id": 2
+ }
+ ],
+ "range": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "tags": [
+ "commodo",
+ "ipsum",
+ "quis",
+ "non",
+ "est",
+ "mollit",
+ "exercitation"
+ ],
+ "longitude": -105.40635,
+ "latitude": 37.197993,
+ "registered": "Tuesday, January 20, 2015 12:30 AM",
+ "about": "Proident ullamco Lorem est consequat consectetur non eiusmod esse nostrud pariatur eiusmod enim exercitation eiusmod. Consequat duis elit elit minim ullamco et dolor eu minim do tempor esse consequat excepteur. Mollit dolor do voluptate nostrud quis anim cillum velit tempor eiusmod adipisicing tempor do culpa. Eu magna dolor sit amet nisi do laborum dolore nisi. Deserunt ipsum et deserunt non nisi.\r\n",
+ "address": "252 Boulevard Court, Brenton, Tennessee, 9444",
+ "phone": "+1 (950) 466-3377",
+ "email": "maxine.moreno@zentia.tv",
+ "company": "ZENTIA",
+ "name": {
+ "last": "Moreno",
+ "first": "Maxine"
+ },
+ "eyeColor": "brown",
+ "age": 24,
+ "picture": "http://placehold.it/32x32",
+ "balance": "$1,200.24",
+ "isActive": false,
+ "guid": "ce307a37-ca1f-43f5-b637-dca2605712be",
+ "index": 6,
+ "_id": "551b91195a6164b2e35f6dc8"
+ },
+ {
+ "favoriteFruit": "strawberry",
+ "greeting": "Hello, Helga! You have 5 unread messages.",
+ "friends": [
+ {
+ "name": "Alicia Vance",
+ "id": 0
+ },
+ {
+ "name": "Vinson Phelps",
+ "id": 1
+ },
+ {
+ "name": "Francisca Kelley",
+ "id": 2
+ }
+ ],
+ "range": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "tags": [
+ "nostrud",
+ "eiusmod",
+ "dolore",
+ "officia",
+ "sint",
+ "non",
+ "qui"
+ ],
+ "longitude": -7.275151,
+ "latitude": 75.54202,
+ "registered": "Wednesday, October 1, 2014 6:35 PM",
+ "about": "Quis duis ullamco velit qui. Consectetur non adipisicing id magna anim. Deserunt est officia qui esse. Et do pariatur incididunt anim ad mollit non. Et eiusmod sunt fugiat elit mollit ad excepteur anim nisi laboris eiusmod aliquip aliquip.\r\n",
+ "address": "981 Bush Street, Beaulieu, Vermont, 3775",
+ "phone": "+1 (956) 506-3807",
+ "email": "helga.burch@synkgen.name",
+ "company": "SYNKGEN",
+ "name": {
+ "last": "Burch",
+ "first": "Helga"
+ },
+ "eyeColor": "blue",
+ "age": 22,
+ "picture": "http://placehold.it/32x32",
+ "balance": "$3,827.89",
+ "isActive": false,
+ "guid": "ff5dfea0-1052-4ef2-8b66-4dc1aad0a4fb",
+ "index": 7,
+ "_id": "551b911946be8358ae40e90e"
+ },
+ {
+ "favoriteFruit": "banana",
+ "greeting": "Hello, Shaw! You have 5 unread messages.",
+ "friends": [
+ {
+ "name": "Christian Cardenas",
+ "id": 0
+ },
+ {
+ "name": "Cohen Pennington",
+ "id": 1
+ },
+ {
+ "name": "Mary Lindsay",
+ "id": 2
+ }
+ ],
+ "range": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "tags": [
+ "occaecat",
+ "ut",
+ "occaecat",
+ "magna",
+ "exercitation",
+ "incididunt",
+ "irure"
+ ],
+ "longitude": -89.102972,
+ "latitude": 89.489596,
+ "registered": "Thursday, August 21, 2014 5:00 PM",
+ "about": "Amet cupidatat quis velit aute Lorem consequat pariatur mollit deserunt et sint culpa excepteur duis. Enim proident duis qui ex tempor sunt nostrud occaecat. Officia sit veniam mollit eiusmod minim do aute eiusmod fugiat qui anim adipisicing in laboris. Do tempor reprehenderit sunt laborum esse irure dolor ad consectetur aute sit id ipsum. Commodo et voluptate anim consequat do. Minim laborum ad veniam ad minim incididunt excepteur excepteur aliqua.\r\n",
+ "address": "237 Pierrepont Street, Herbster, New York, 3490",
+ "phone": "+1 (976) 455-2880",
+ "email": "shaw.zamora@shadease.me",
+ "company": "SHADEASE",
+ "name": {
+ "last": "Zamora",
+ "first": "Shaw"
+ },
+ "eyeColor": "blue",
+ "age": 38,
+ "picture": "http://placehold.it/32x32",
+ "balance": "$3,440.82",
+ "isActive": false,
+ "guid": "ac5fdb0e-e1fb-427e-881d-da461be0d1ca",
+ "index": 8,
+ "_id": "551b9119af0077bc28a2de25"
+ },
+ {
+ "favoriteFruit": "apple",
+ "greeting": "Hello, Melissa! You have 5 unread messages.",
+ "friends": [
+ {
+ "name": "Marion Villarreal",
+ "id": 0
+ },
+ {
+ "name": "Kate Rose",
+ "id": 1
+ },
+ {
+ "name": "Hines Simon",
+ "id": 2
+ }
+ ],
+ "range": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "tags": [
+ "amet",
+ "veniam",
+ "mollit",
+ "ad",
+ "cupidatat",
+ "deserunt",
+ "Lorem"
+ ],
+ "longitude": -52.735052,
+ "latitude": 16.258838,
+ "registered": "Wednesday, April 16, 2014 7:56 PM",
+ "about": "Aute ut culpa eiusmod tempor duis dolor tempor incididunt. Nisi non proident excepteur eiusmod incididunt nisi minim irure sit. In veniam commodo deserunt proident reprehenderit et consectetur ullamco quis nulla cupidatat.\r\n",
+ "address": "642 Halsey Street, Blandburg, Kansas, 6761",
+ "phone": "+1 (941) 539-3851",
+ "email": "melissa.vaughn@memora.io",
+ "company": "MEMORA",
+ "name": {
+ "last": "Vaughn",
+ "first": "Melissa"
+ },
+ "eyeColor": "brown",
+ "age": 24,
+ "picture": "http://placehold.it/32x32",
+ "balance": "$2,399.44",
+ "isActive": true,
+ "guid": "1769f022-a7f1-4a69-bf4c-f5a5ebeab2d1",
+ "index": 9,
+ "_id": "551b9119b607c09c7ffc3b8a"
+ }
] \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/types/nulls.json b/3rdparty/rapidjson/bin/types/nulls.json
index 7a636ec87cd..1cdf9a6888e 100644
--- a/3rdparty/rapidjson/bin/types/nulls.json
+++ b/3rdparty/rapidjson/bin/types/nulls.json
@@ -1,102 +1,102 @@
-[
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null
+[
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null
] \ No newline at end of file
diff --git a/3rdparty/rapidjson/bin/types/paragraphs.json b/3rdparty/rapidjson/bin/types/paragraphs.json
index 8ab3e1c561c..a335d9ece2c 100644
--- a/3rdparty/rapidjson/bin/types/paragraphs.json
+++ b/3rdparty/rapidjson/bin/types/paragraphs.json
@@ -1,102 +1,102 @@
-[
- "Commodo ullamco cupidatat nisi sit proident ex. Cillum pariatur occaecat in officia do commodo nisi cillum tempor minim. Ad dolor ut et aliquip fugiat eu officia cupidatat occaecat consectetur eiusmod veniam enim officia.\r\n",
- "Adipisicing cillum laborum nisi irure. Cillum dolor proident duis nulla qui mollit dolore reprehenderit mollit. Irure nulla dolor ipsum irure nulla quis laboris do.\r\n",
- "Est adipisicing consectetur incididunt in. Occaecat ea magna ex consequat irure sit laborum cillum officia magna sunt do exercitation aliquip. Laboris id aute in dolore reprehenderit voluptate non deserunt laborum.\r\n",
- "Consectetur eu aute est est occaecat adipisicing sint enim dolor eu. Tempor amet id non mollit eu consectetur cillum duis. Eu labore velit nulla ipsum commodo consequat aliquip. Cupidatat commodo dolore mollit enim sit excepteur nisi duis laboris deserunt esse.\r\n",
- "Incididunt ullamco est fugiat enim fugiat. Do sit mollit anim ad excepteur eu laboris exercitation officia labore nulla ut. Voluptate non voluptate cillum sit et voluptate anim duis velit consequat aliquip dolor. Elit et et esse laboris consectetur officia eiusmod aliquip nisi est. Qui labore dolore ad dolor.\r\n",
- "Anim adipisicing est irure proident sit officia ullamco voluptate sunt consectetur duis mollit excepteur veniam. Nostrud ut duis aute exercitation officia et quis elit commodo elit tempor aute aliquip enim. Est officia non cillum consequat voluptate ipsum sit voluptate nulla id.\r\n",
- "Ipsum enim consectetur aliquip nulla commodo ut ex aliqua elit duis do. Officia et sunt aliqua dolor minim voluptate veniam esse elit enim. Adipisicing reprehenderit duis ex magna non in fugiat sunt ipsum nostrud fugiat aliquip. Labore voluptate id officia voluptate eu. Magna do nostrud excepteur sunt aliqua adipisicing qui.\r\n",
- "Est occaecat non non cupidatat laborum qui. Veniam sit est voluptate labore sit irure consectetur fugiat. Anim enim enim fugiat exercitation anim ad proident esse in aliqua. Laboris ut aute culpa ullamco.\r\n",
- "Sit et aliquip cupidatat deserunt eiusmod sint aliquip occaecat nostrud aliqua elit commodo ut magna. Amet sit est deserunt id duis in officia pariatur cupidatat ex. Mollit duis est consequat nulla aute velit ipsum sit consectetur pariatur ut non ex ipsum. Tempor esse velit pariatur reprehenderit et nostrud commodo laborum mollit labore.\r\n",
- "Aliquip irure quis esse aliquip. Ex non deserunt culpa aliqua ad anim occaecat ad. Lorem consectetur mollit eu consectetur est non nisi non ipsum. Qui veniam ullamco officia est ut excepteur. Nulla elit dolore cupidatat aliqua enim Lorem elit consequat eiusmod non aliqua eu in. Pariatur in culpa labore sint ipsum consectetur occaecat ad ex ipsum laboris aliquip officia. Non officia eiusmod nisi officia id id laboris deserunt sunt enim magna mollit sit.\r\n",
- "Mollit velit laboris laborum nulla aliquip consequat Lorem non incididunt irure. Eu voluptate sint do consectetur tempor sit Lorem in. Laborum eiusmod nisi Lorem ipsum dolore do aute laborum occaecat aute sunt. Sit laborum in ea do ipsum officia irure cillum irure nisi laboris. Ad anim deserunt excepteur ea veniam eiusmod culpa velit veniam. Commodo incididunt ea Lorem eu enim esse nisi incididunt mollit.\r\n",
- "Velit proident sunt aute dolore reprehenderit culpa. Pariatur reprehenderit commodo ad ea voluptate anim nulla ipsum eu irure fugiat aliqua et. Adipisicing incididunt anim excepteur voluptate minim qui culpa. Sunt veniam enim reprehenderit magna magna. Sit ad amet deserunt ut aute dolore ad minim.\r\n",
- "Esse ullamco sunt mollit mollit. Eu enim dolore laboris cupidatat. Cupidatat adipisicing non aute exercitation fugiat. Non ut cillum labore fugiat aliquip ex duis quis consectetur ut nisi Lorem amet qui. Proident veniam amet qui reprehenderit duis qui. Nisi culpa sit occaecat ullamco occaecat laborum fugiat ut. Non duis deserunt culpa duis.\r\n",
- "Id ipsum eiusmod laboris non est ipsum deserunt labore duis reprehenderit deserunt. Sint tempor fugiat eiusmod nostrud in ut laborum esse in nostrud sit deserunt nostrud reprehenderit. Cupidatat aliqua qui anim consequat eu quis consequat consequat elit ipsum pariatur. Cupidatat in dolore velit quis. Exercitation cillum ullamco ex consectetur commodo tempor incididunt exercitation labore ad dolore. Minim incididunt consequat adipisicing esse eu eu voluptate.\r\n",
- "Anim sint eiusmod nisi anim do deserunt voluptate ut cillum eiusmod esse ex reprehenderit laborum. Dolore nulla excepteur duis excepteur. Magna nisi nostrud duis non commodo velit esse ipsum Lorem incididunt. Nulla enim consequat ad aliqua. Incididunt irure culpa nostrud ea aute ex sit non ad esse.\r\n",
- "Ullamco nostrud cupidatat adipisicing anim fugiat mollit eu. Et ut eu in nulla consequat. Sunt do pariatur culpa non est.\r\n",
- "Pariatur incididunt reprehenderit non qui excepteur cillum exercitation nisi occaecat ad. Lorem aliquip laborum commodo reprehenderit sint. Laboris qui ut veniam magna quis et et ullamco voluptate. Tempor reprehenderit deserunt consequat nisi. Esse duis sint in tempor. Amet aute cupidatat in sint et.\r\n",
- "Est officia nisi dolore consequat irure et excepteur. Sit qui elit tempor magna qui cillum anim amet proident exercitation proident. Eu cupidatat laborum consectetur duis ullamco irure nulla. Adipisicing culpa non reprehenderit anim aute.\r\n",
- "Eu est laborum culpa velit dolore non sunt. Tempor magna veniam ea sit non qui Lorem qui exercitation aliqua aliqua et excepteur eiusmod. Culpa aute anim proident culpa adipisicing duis tempor elit aliquip elit nulla laboris esse dolore. Sit adipisicing non dolor eiusmod occaecat cupidatat.\r\n",
- "Culpa velit eu esse sunt. Laborum irure aliqua reprehenderit velit ipsum fugiat officia dolor ut aute officia deserunt. Ipsum sit quis fugiat nostrud aliqua cupidatat ex pariatur et. Cillum proident est irure nisi dolor aliqua deserunt esse occaecat velit dolor.\r\n",
- "Exercitation nulla officia sit eiusmod cillum eu incididunt officia exercitation qui Lorem deserunt. Voluptate Lorem minim commodo laborum esse in duis excepteur do duis aliquip nisi voluptate consectetur. Amet tempor officia enim ex esse minim reprehenderit.\r\n",
- "Laboris sint deserunt ad aute incididunt. Anim officia sunt elit qui laborum labore commodo irure non. Mollit adipisicing ullamco do aute nulla eu laborum et quis sint aute adipisicing amet. Aliqua officia irure nostrud duis ex.\r\n",
- "Eiusmod ipsum aliqua reprehenderit esse est non aute id veniam eiusmod. Elit consequat ad sit tempor elit eu incididunt quis irure ad. Eu incididunt veniam consequat Lorem nostrud cillum officia ea consequat ad cillum. Non nisi irure cupidatat incididunt pariatur incididunt. Duis velit officia ad cillum qui. Aliquip consequat sint aute nisi cillum. Officia commodo nisi incididunt laborum nisi voluptate aliquip Lorem cupidatat anim consequat sit laboris.\r\n",
- "Veniam cupidatat et incididunt mollit do ex voluptate veniam nostrud labore esse. Eiusmod irure sint fugiat esse. Aute irure consectetur ut mollit nulla sint esse. Lorem ut quis ex proident nostrud mollit nostrud ea duis duis in magna anim consectetur.\r\n",
- "Irure culpa esse qui do dolor fugiat veniam ad. Elit commodo aute elit magna incididunt tempor pariatur velit irure pariatur cillum et ea ad. Ad consequat ea et ad minim ut sunt qui commodo voluptate. Laboris est aliquip anim reprehenderit eu officia et exercitation. Occaecat laboris cupidatat Lorem ullamco in nostrud commodo ipsum in quis esse ex.\r\n",
- "Incididunt officia quis voluptate eiusmod esse nisi ipsum quis commodo. Eiusmod dolore tempor occaecat sit exercitation aliqua minim consequat minim mollit qui ad nisi. Aute quis irure adipisicing veniam nisi nisi velit deserunt incididunt anim nostrud.\r\n",
- "Voluptate exercitation exercitation id minim excepteur excepteur mollit. Fugiat aute proident nulla ullamco ea. Nisi ea culpa duis dolore veniam anim tempor officia in dolore exercitation exercitation. Dolore quis cillum adipisicing sunt do nulla esse proident ad sint.\r\n",
- "Laborum ut mollit sint commodo nulla laborum deserunt Lorem magna commodo mollit tempor deserunt ut. Qui aliquip commodo ea id. Consectetur dolor fugiat dolor excepteur eiusmod. Eu excepteur ex aute ex ex elit ex esse officia cillum exercitation. Duis ut labore ea nostrud excepteur. Reprehenderit labore aute sunt nisi quis Lorem officia. Ad aliquip cupidatat voluptate exercitation voluptate ad irure magna quis.\r\n",
- "Tempor velit veniam sit labore elit minim do elit cillum eiusmod sunt excepteur nisi. Aliquip est deserunt excepteur duis fugiat incididunt veniam fugiat. Pariatur sit irure labore et minim non. Cillum quis aute anim sint laboris laboris ullamco exercitation nostrud. Nulla pariatur id laborum minim nisi est adipisicing irure.\r\n",
- "Irure exercitation laboris nostrud in do consectetur ad. Magna aliqua Lorem culpa exercitation sint do culpa incididunt mollit eu exercitation. Elit tempor Lorem dolore enim deserunt. Anim et ullamco sint ullamco mollit cillum officia et. Proident incididunt laboris aliquip laborum sint veniam deserunt eu consequat deserunt voluptate laboris. Anim Lorem non laborum exercitation voluptate. Cupidatat reprehenderit culpa Lorem fugiat enim minim consectetur tempor quis ad reprehenderit laboris irure.\r\n",
- "Deserunt elit mollit nostrud occaecat labore reprehenderit laboris ex. Esse reprehenderit adipisicing cillum minim in esse aliquip excepteur ex et nisi cillum quis. Cillum labore ut ex sunt. Occaecat proident et mollit magna consequat irure esse. Dolor do enim esse nisi ad.\r\n",
- "Pariatur est anim cillum minim elit magna adipisicing quis tempor proident nisi laboris incididunt cupidatat. Nulla est adipisicing sit adipisicing id nostrud amet qui consequat eiusmod tempor voluptate ad. Adipisicing non magna sit occaecat magna mollit ad ex nulla velit ea pariatur. Irure labore ad ea exercitation ex cillum.\r\n",
- "Lorem fugiat eu eu cillum nulla tempor sint. Lorem id officia nulla velit labore ut duis ad tempor non. Excepteur quis aute adipisicing nisi nisi consectetur aliquip enim Lorem id ullamco cillum sint voluptate. Qui aliquip incididunt tempor aliqua voluptate labore reprehenderit. Veniam eiusmod elit occaecat voluptate tempor culpa consectetur ea ut exercitation eiusmod exercitation qui.\r\n",
- "Aliqua esse pariatur nulla veniam velit ea. Aliquip consectetur tempor ex magna sit aliquip exercitation veniam. Dolor ullamco minim commodo pariatur. Et amet reprehenderit dolore proident elit tempor eiusmod eu incididunt enim ullamco. Adipisicing id officia incididunt esse dolor sunt cupidatat do deserunt mollit do non. Magna ut officia fugiat adipisicing quis ea cillum laborum dolore ad nostrud magna minim est. Dolor voluptate officia proident enim ea deserunt eu voluptate dolore proident laborum officia ea.\r\n",
- "Culpa aute consequat esse fugiat cupidatat minim voluptate voluptate eiusmod irure anim elit. Do eiusmod culpa laboris consequat incididunt minim nostrud eiusmod commodo velit ea ullamco proident. Culpa pariatur magna ut mollit nisi. Ea officia do magna deserunt minim nisi tempor ea deserunt veniam cillum exercitation esse.\r\n",
- "Anim ullamco nostrud commodo Lorem. Do sunt laborum exercitation proident proident magna. Lorem officia laborum laborum dolor sunt duis commodo Lorem. Officia aute adipisicing ea cupidatat ea dolore. Aliquip adipisicing pariatur consectetur aliqua sit amet officia reprehenderit laborum culpa. Occaecat Lorem eu nisi do Lorem occaecat enim eiusmod laboris id quis. Ad mollit adipisicing sunt adipisicing esse.\r\n",
- "Laborum quis sit adipisicing cupidatat. Veniam Lorem eiusmod esse esse sint nisi labore elit et. Deserunt aliqua mollit ut commodo aliqua non incididunt ipsum reprehenderit consectetur. Eiusmod nulla minim laboris Lorem ea Lorem aute tempor pariatur in sit. Incididunt culpa ut do irure amet irure cupidatat est anim anim culpa occaecat. Est velit consectetur eiusmod veniam reprehenderit officia sunt occaecat eiusmod ut sunt occaecat amet.\r\n",
- "Elit minim aute fugiat nulla ex quis. Labore fugiat sint nostrud amet quis culpa excepteur in. Consectetur exercitation cupidatat laborum sit. Aute nisi eu aliqua est deserunt eiusmod commodo dolor id. Mollit laborum esse sint ipsum voluptate reprehenderit velit et. Veniam aliquip enim in veniam Lorem voluptate quis deserunt consequat qui commodo ut excepteur aute.\r\n",
- "Dolore deserunt veniam aute nisi labore sunt et voluptate irure nisi anim ea. Magna nisi quis anim mollit nisi est dolor do ex aliquip elit aliquip ipsum minim. Dolore est officia nostrud eiusmod ex laborum ea amet est. Officia culpa non est et tempor consectetur exercitation tempor eiusmod enim. Ea tempor laboris qui amet ex nisi culpa dolore consectetur incididunt sunt sunt. Lorem aliquip incididunt magna do et ullamco ex elit aliqua eiusmod qui. Commodo amet dolor sint incididunt ex veniam non Lorem fugiat.\r\n",
- "Officia culpa enim voluptate dolore commodo. Minim commodo aliqua minim ex sint excepteur cupidatat adipisicing eu irure. Anim magna deserunt anim Lorem non.\r\n",
- "Cupidatat aliquip nulla excepteur sunt cupidatat cupidatat laborum cupidatat exercitation. Laboris minim ex cupidatat culpa elit. Amet enim reprehenderit aliqua laborum est tempor exercitation cupidatat ex dolore do. Do incididunt labore fugiat commodo consectetur nisi incididunt irure sit culpa sit. Elit aute occaecat qui excepteur velit proident cillum qui aliqua ex do ex. Dolore irure ex excepteur veniam id proident mollit Lorem.\r\n",
- "Ad commodo cillum duis deserunt elit officia consectetur veniam eiusmod. Reprehenderit et veniam ad commodo reprehenderit magna elit laboris sunt non quis. Adipisicing dolor aute proident ea magna sunt et proident in consectetur.\r\n",
- "Veniam exercitation esse esse veniam est nisi. Minim velit incididunt sint aute dolor anim. Fugiat cupidatat id ad nisi in voluptate dolor culpa eiusmod magna eiusmod amet id. Duis aliquip labore et ex amet amet aliquip laborum eiusmod ipsum. Quis qui ut duis duis. Minim in voluptate reprehenderit aliqua.\r\n",
- "Elit ut pariatur dolor veniam ipsum consequat. Voluptate Lorem mollit et esse dolore mollit Lorem ad. Elit nostrud eu Lorem labore mollit minim cupidatat officia quis minim dolore incididunt. In cillum aute cillum ut.\r\n",
- "Commodo laborum deserunt ut cupidatat pariatur ullamco in esse anim exercitation cillum duis. Consectetur incididunt sit esse Lorem in aute. Eiusmod mollit Lorem consequat minim reprehenderit laborum enim excepteur irure nisi elit. Laborum esse proident aute aute proident adipisicing laborum. Pariatur tempor duis incididunt qui velit pariatur ut officia ea mollit labore dolore. Cillum pariatur minim ullamco sunt incididunt culpa id ullamco exercitation consectetur. Ea exercitation consequat reprehenderit ut ullamco velit eu ad velit magna excepteur eiusmod.\r\n",
- "Eu deserunt magna laboris laborum laborum in consequat dolore. Officia proident consectetur proident do occaecat minim pariatur officia ipsum sit non velit officia cillum. Laborum excepteur labore eu minim eiusmod. Sit anim dolore cillum ad do minim culpa sit est ad.\r\n",
- "Cupidatat dolor nostrud Lorem sint consequat quis. Quis labore sint incididunt officia tempor. Fugiat nostrud in elit reprehenderit dolor. Nisi sit enim officia minim est adipisicing nulla aute labore nulla nostrud cupidatat est. Deserunt dolore qui irure Lorem esse voluptate velit qui nostrud.\r\n",
- "Fugiat Lorem amet nulla nisi qui amet laboris enim cillum. Dolore occaecat exercitation id labore velit do commodo ut cupidatat laborum velit fugiat mollit. Ut et aliqua pariatur occaecat. Lorem occaecat dolore quis esse enim cupidatat exercitation ut tempor sit laboris fugiat adipisicing. Est tempor ex irure consectetur ipsum magna labore. Lorem non quis qui minim nisi magna amet aliquip ex cillum fugiat tempor.\r\n",
- "Aliquip eiusmod laborum ipsum deserunt velit esse do magna excepteur consectetur exercitation sit. Minim ullamco reprehenderit commodo nostrud exercitation id irure ex qui ullamco sit esse laboris. Nulla cillum non minim qui cillum nisi aute proident. Dolor anim culpa elit quis excepteur aliqua eiusmod. Elit ea est excepteur consectetur sunt eiusmod enim id commodo irure amet et pariatur laboris. Voluptate magna ad magna dolore cillum cillum irure laboris ipsum officia id Lorem veniam.\r\n",
- "Esse sunt elit est aliquip cupidatat commodo deserunt. Deserunt pariatur ipsum qui ad esse esse magna qui cillum laborum. Exercitation veniam pariatur elit amet enim.\r\n",
- "Esse quis in id elit nulla occaecat incididunt. Et amet Lorem mollit in veniam do. Velit mollit Lorem consequat commodo Lorem aliquip cupidatat. Minim consequat nostrud nulla in nostrud.\r\n",
- "Cillum nulla et eu est nostrud quis elit cupidatat dolor enim excepteur exercitation nisi voluptate. Nulla dolore non ex velit et qui tempor proident id deserunt nisi eu. Tempor ad Lorem ipsum reprehenderit in anim. Anim dolore ullamco enim deserunt quis ex id exercitation velit. Magna exercitation fugiat mollit pariatur ipsum ex consectetur nostrud. Id dolore officia nostrud excepteur laborum. Magna incididunt elit ipsum pariatur adipisicing enim duis est qui commodo velit aute.\r\n",
- "Quis esse ex qui nisi dolor. Ullamco laborum dolor esse laboris eiusmod ea magna laboris ea esse ut. Dolore ipsum pariatur veniam sint mollit. Lorem ea proident fugiat ullamco ut nisi culpa eu exercitation exercitation aliquip veniam laborum consectetur.\r\n",
- "Pariatur veniam laboris sit aliquip pariatur tempor aute sunt id et ut. Laboris excepteur eiusmod nisi qui quis elit enim ut cupidatat. Et et laborum in fugiat veniam consectetur ipsum laboris duis excepteur ullamco aliqua dolor Lorem. Aliqua ex amet sint anim cupidatat nisi ipsum anim et sunt deserunt. Occaecat culpa ut tempor cillum pariatur ex tempor.\r\n",
- "Dolor deserunt eiusmod magna do officia voluptate excepteur est cupidatat. Veniam qui cupidatat amet anim est qui consectetur sit commodo commodo ea ad. Enim ad adipisicing qui nostrud. Non nulla esse ullamco nulla et ex.\r\n",
- "Id ullamco ea consectetur est incididunt deserunt et esse. Elit nostrud voluptate eiusmod ut. Excepteur adipisicing qui cupidatat consequat labore id. Qui dolor aliqua do dolore do cupidatat labore ex consectetur ea sit cillum. Sint veniam eiusmod in consectetur consequat fugiat et mollit ut fugiat esse dolor adipisicing.\r\n",
- "Ea magna proident labore duis pariatur. Esse cillum aliquip dolor duis fugiat ea ex officia ea irure. Sint elit nisi pariatur sunt nostrud exercitation ullamco culpa magna do.\r\n",
- "Minim aliqua voluptate dolor consequat sint tempor deserunt amet magna excepteur. Irure do voluptate magna velit. Nostrud in reprehenderit magna officia nostrud. Cupidatat nulla irure laboris non fugiat ex ex est cupidatat excepteur officia aute velit duis. Sit voluptate id ea exercitation deserunt culpa voluptate nostrud est adipisicing incididunt. Amet proident laborum commodo magna ipsum quis.\r\n",
- "Ipsum consectetur consectetur excepteur tempor eiusmod ea fugiat aute velit magna in officia sunt. Sit ut sunt dolore cupidatat dolor adipisicing. Veniam nisi adipisicing esse reprehenderit amet aliqua voluptate ex commodo occaecat est voluptate mollit sunt. Pariatur aliqua qui qui in dolor. Fugiat reprehenderit sit nostrud do sint esse. Tempor sit irure adipisicing ea pariatur duis est sit est incididunt laboris quis do. Et voluptate anim minim aliquip excepteur consequat nisi anim pariatur aliquip ut ipsum dolor magna.\r\n",
- "Cillum sit labore excepteur magna id aliqua exercitation consequat laborum Lorem id pariatur nostrud. Lorem qui est labore sint cupidatat sint excepteur nulla in eu aliqua et. Adipisicing velit do enim occaecat laboris quis excepteur ipsum dolor occaecat Lorem dolore id exercitation.\r\n",
- "Incididunt in laborum reprehenderit eiusmod irure ex. Elit duis consequat minim magna. Esse consectetur aliquip cillum excepteur excepteur fugiat. Sint tempor consequat minim reprehenderit consectetur adipisicing dolor id Lorem elit non. Occaecat esse quis mollit ea et sint aute fugiat qui tempor. Adipisicing tempor duis non dolore irure elit deserunt qui do.\r\n",
- "Labore fugiat eiusmod sint laborum sit duis occaecat. Magna in laborum non cillum excepteur nostrud sit proident pariatur voluptate voluptate adipisicing exercitation occaecat. Ad non dolor aute ex sint do do minim exercitation veniam laborum irure magna ea. Magna do non quis sit consequat Lorem aliquip.\r\n",
- "Velit anim do laborum laboris laborum Lorem. Sunt do Lorem amet ipsum est sint velit sit do voluptate mollit veniam enim. Commodo do deserunt in pariatur ut elit sint elit deserunt ea. Ad dolor anim consequat aliquip ut mollit nostrud tempor sunt mollit elit. Reprehenderit laboris labore excepteur occaecat veniam adipisicing cupidatat esse. Ad enim aliquip ea minim excepteur magna. Sint velit veniam pariatur qui dolor est adipisicing ex laboris.\r\n",
- "Ea cupidatat ex nulla in sunt est sit dolor enim ad. Eu tempor consequat cupidatat consequat ex incididunt sint culpa. Est Lorem Lorem non cupidatat sunt ut aliqua non nostrud do ullamco. Reprehenderit ad ad nulla nostrud do nulla in. Ipsum adipisicing commodo mollit ipsum exercitation. Aliqua ea anim anim est elit. Ea incididunt consequat minim ad sunt eu cillum.\r\n",
- "Tempor quis excepteur eiusmod cupidatat ipsum occaecat id et occaecat. Eiusmod magna aliquip excepteur id amet elit. Ullamco dolore amet anim dolor enim ea magna magna elit. Occaecat magna pariatur in deserunt consectetur officia aliquip ullamco ex aute anim. Minim laborum eu sit elit officia esse do irure pariatur tempor et reprehenderit ullamco labore.\r\n",
- "Sit tempor eu minim dolore velit pariatur magna duis reprehenderit ea nulla in. Amet est do consectetur commodo do adipisicing adipisicing in amet. Cillum id ut commodo do pariatur duis aliqua nisi sint ad irure officia reprehenderit. Mollit labore id enim fugiat ullamco irure mollit cupidatat. Quis nisi amet labore eu dolor occaecat commodo aliqua laboris deserunt excepteur deserunt officia. Aliqua non ut sit ad. Laborum veniam ad velit minim dolore ea id magna dolor qui in.\r\n",
- "Dolore nostrud ipsum aliqua pariatur id reprehenderit enim ad eiusmod qui. Deserunt anim commodo pariatur excepteur velit eu irure nulla ex labore ipsum aliqua minim aute. Id consequat amet tempor aliquip ex elit adipisicing est do. Eu enim Lorem consectetur minim id irure nulla culpa. Consectetur do consequat aute tempor anim. Qui ad non elit dolor est adipisicing nisi amet cillum sunt quis anim laboris incididunt. Incididunt proident adipisicing labore Lorem.\r\n",
- "Et reprehenderit ea officia veniam. Aliquip ullamco consequat elit nisi magna mollit id elit. Amet amet sint velit labore ad nisi. Consectetur tempor id dolor aliqua esse deserunt amet. Qui laborum enim proident voluptate aute eu aute aute sit sit incididunt eu. Sunt ullamco nisi nostrud labore commodo non consectetur quis do duis minim irure. Tempor sint dolor sint aliquip dolore nostrud fugiat.\r\n",
- "Aute ullamco quis nisi ut excepteur nostrud duis elit. Veniam ex ad incididunt veniam voluptate. Commodo dolore ullamco sit sint adipisicing proident amet aute duis deserunt.\r\n",
- "Labore velit eu cillum nisi. Laboris do cupidatat et non duis cillum. Ullamco dolor tempor cupidatat voluptate laborum ullamco ea duis.\r\n",
- "Deserunt consequat aliqua duis aliquip nostrud nostrud dolore nisi. Culpa do sint laborum consectetur ipsum quis laborum laborum pariatur eiusmod. Consectetur laboris ad ad ut quis. Ullamco laboris qui velit id laborum voluptate qui aute nostrud aliquip ea.\r\n",
- "Ad cillum anim ex est consectetur mollit id in. Non enim aliquip consequat qui deserunt commodo cillum ad laborum fugiat. Dolor deserunt amet laborum tempor adipisicing voluptate dolor pariatur dolor cillum. Eu mollit ex sunt officia veniam qui est sunt proident. Non aliqua qui elit eu cupidatat ex enim ex proident. Lorem sit minim ullamco officia cupidatat duis minim. Exercitation laborum deserunt voluptate culpa tempor quis nulla id pariatur.\r\n",
- "Nostrud quis consectetur ut aliqua excepteur elit consectetur occaecat. Occaecat voluptate Lorem pariatur consequat ullamco fugiat minim. Anim voluptate eu eu cillum tempor dolore aliquip aliqua. Fugiat incididunt ut tempor amet minim. Voluptate nostrud minim pariatur non excepteur ullamco.\r\n",
- "Dolore nulla velit officia exercitation irure laboris incididunt anim in laborum in fugiat ut proident. Fugiat aute id consequat fugiat officia ut. Labore sint amet proident amet sint nisi laboris amet id ullamco culpa quis consequat proident. Magna do fugiat veniam dolore elit irure minim. Esse ullamco excepteur labore tempor labore fugiat dolore nisi cupidatat irure dolor pariatur. Magna excepteur laboris nisi eiusmod sit pariatur mollit.\r\n",
- "In enim aliquip officia ea ad exercitation cillum culpa occaecat dolore Lorem. Irure cillum commodo adipisicing sunt pariatur ea duis fugiat exercitation laboris culpa ullamco aute. Ut voluptate exercitation qui dolor. Irure et duis elit consequat deserunt proident.\r\n",
- "Officia ea Lorem sunt culpa id et tempor excepteur enim deserunt proident. Dolore aliquip dolor laboris cillum proident velit. Et culpa occaecat exercitation cupidatat irure sint adipisicing excepteur pariatur incididunt ad occaecat. Qui proident ipsum cillum minim. Quis ut culpa irure aliqua minim fugiat. In voluptate cupidatat fugiat est laborum dolor esse in pariatur voluptate.\r\n",
- "Voluptate enim ipsum officia aute ea adipisicing nisi ut ex do aliquip amet. Reprehenderit enim voluptate tempor ex adipisicing culpa. Culpa occaecat voluptate dolor mollit ipsum exercitation labore et tempor sit ea consectetur aliqua. Elit elit sit minim ea ea commodo do tempor cupidatat irure dolore. Occaecat esse adipisicing anim eiusmod commodo fugiat mollit amet. Incididunt tempor tempor qui occaecat cupidatat in.\r\n",
- "Ut qui anim velit enim aliquip do ut nulla labore. Mollit ut commodo ut eiusmod consectetur laboris aliqua qui voluptate culpa fugiat incididunt elit. Lorem ullamco esse elit elit. Labore amet incididunt ea nulla aliquip eiusmod. Sit nulla est voluptate officia ipsum aute aute cillum tempor deserunt. Laboris commodo eiusmod labore sunt aute excepteur ea consectetur reprehenderit veniam nisi. Culpa nisi sint sunt sint tempor laboris dolore cupidatat.\r\n",
- "Duis cillum qui nisi duis amet velit ad cillum ut elit aute sint ad. Amet laboris pariatur excepteur ipsum Lorem aliqua veniam Lorem quis mollit cupidatat aliqua exercitation. Pariatur ex ullamco sit commodo cillum eiusmod ut proident elit cillum. Commodo ut ipsum excepteur occaecat sint elit consequat ex dolor adipisicing consectetur id ut ad. Velit sit eiusmod est esse tempor incididunt consectetur eiusmod duis commodo veniam.\r\n",
- "Ut sunt qui officia anim laboris exercitation Lorem quis laborum do eiusmod officia. Enim consectetur occaecat fugiat cillum cillum. Dolore dolore nostrud in commodo fugiat mollit consequat occaecat non et et elit ullamco. Sit voluptate minim ut est culpa velit nulla fugiat reprehenderit eu aliquip adipisicing labore. Sit minim minim do dolor dolor. Lorem Lorem labore exercitation magna veniam eiusmod do.\r\n",
- "Fugiat dolor adipisicing quis aliquip aute dolore. Qui proident anim elit veniam ex aliquip eiusmod ipsum sunt pariatur est. Non fugiat duis do est officia adipisicing.\r\n",
- "Nulla deserunt do laboris cupidatat veniam do consectetur ipsum elit veniam in mollit eu. Ea in consequat cupidatat laboris sint fugiat irure. In commodo esse reprehenderit deserunt minim velit ullamco enim eu cupidatat tempor ex. Ullamco in non id culpa amet occaecat culpa nostrud id. Non occaecat culpa magna incididunt.\r\n",
- "Enim laboris ex mollit reprehenderit eiusmod exercitation magna. Exercitation Lorem ex mollit non non culpa labore enim. Adipisicing labore dolore incididunt do amet aliquip excepteur ad et nostrud officia aute veniam voluptate. Fugiat enim eiusmod Lorem esse. Minim ullamco commodo consequat ex commodo aliqua eu nulla eu. Veniam non enim nulla ut Lorem nostrud minim sint duis.\r\n",
- "Enim duis consectetur in ullamco cillum veniam nulla amet. Exercitation nisi sunt sunt duis in culpa nisi magna ex id ipsum laboris reprehenderit qui. Officia pariatur qui ex fugiat veniam et sunt sit nostrud. Veniam ullamco tempor fugiat minim Lorem proident velit in eiusmod elit. Enim minim excepteur aute aliquip ex magna commodo dolore qui et labore. Proident eu aliquip cillum dolor. Nostrud ipsum ut irure consequat fugiat nulla proident occaecat laborum.\r\n",
- "Amet duis eiusmod sunt adipisicing esse ex nostrud consectetur voluptate cillum. Ipsum occaecat sit et anim velit irure ea incididunt cupidatat ullamco in nisi quis. Esse officia ipsum commodo qui quis qui do. Commodo aliquip amet aute sit sit ut cupidatat elit nostrud.\r\n",
- "Laboris laboris sit mollit cillum nulla deserunt commodo culpa est commodo anim id anim sit. Officia id consectetur velit incididunt est dolor sunt ipsum magna aliqua consectetur. Eiusmod pariatur minim deserunt cupidatat veniam Lorem aliquip sunt proident eu Lorem sit dolor fugiat. Proident qui ut ex in incididunt nulla nulla dolor ex laboris ea ad.\r\n",
- "Ex incididunt enim labore nulla cupidatat elit. Quis ut incididunt incididunt non irure commodo do mollit cillum anim excepteur. Qui consequat laborum dolore elit tempor aute ut nulla pariatur eu ullamco veniam. Nisi non velit labore in commodo excepteur culpa nulla tempor cillum. Ipsum qui sit sint reprehenderit ut labore incididunt dolor aliquip sunt. Reprehenderit occaecat tempor nisi laborum.\r\n",
- "Lorem officia ullamco eu occaecat in magna eiusmod consectetur nisi aliqua mollit esse. Ullamco ex aute nostrud pariatur do enim cillum sint do fugiat nostrud culpa tempor. Do aliquip excepteur nostrud culpa eu pariatur eiusmod cillum excepteur do. Est sunt non quis cillum voluptate ex.\r\n",
- "Deserunt consectetur tempor irure mollit qui tempor et. Labore enim eu irure laboris in. Nisi in tempor ex occaecat amet cupidatat laboris occaecat amet minim ut magna incididunt id. Consequat cillum laborum commodo mollit. Et magna culpa sunt dolore consequat laboris et sit. Deserunt qui voluptate excepteur dolor. Eu qui amet est proident.\r\n",
- "Eu elit minim eiusmod occaecat eu nostrud dolor qui ut elit. Sunt dolore proident ea eu do eiusmod fugiat incididunt pariatur duis amet Lorem nisi ut. Adipisicing quis veniam cupidatat Lorem sint culpa sunt veniam sint. Excepteur eu exercitation est magna pariatur veniam dolore qui fugiat labore proident eiusmod cillum. Commodo reprehenderit elit proident duis sint magna.\r\n",
- "Ut aliquip pariatur deserunt nostrud commodo ad proident est exercitation. Sit minim do ea enim sint officia nisi incididunt laborum. Ex amet duis commodo fugiat. Ut aute tempor deserunt irure occaecat aliquip voluptate cillum aute elit qui nostrud.\r\n",
- "Irure et quis consectetur sit est do sunt aliquip eu. Cupidatat pariatur consequat dolore consectetur. Adipisicing magna velit mollit occaecat do id. Nisi pariatur cupidatat cillum incididunt excepteur consectetur excepteur do laborum deserunt irure pariatur cillum.\r\n",
- "Adipisicing esse incididunt cillum est irure consequat irure ad aute voluptate. Incididunt do occaecat nostrud do ipsum pariatur Lorem qui laboris et pariatur. Est exercitation dolor culpa ad velit ut et.\r\n",
- "Sit eiusmod id enim ad ex dolor pariatur do. Ullamco occaecat quis dolor minim non elit labore amet est. Commodo velit eu nulla eiusmod ullamco. Incididunt anim pariatur aute eiusmod veniam tempor enim officia elit id. Elit Lorem est commodo dolore nostrud. Labore et consectetur do exercitation veniam laboris incididunt aliqua proident dolore ea officia cupidatat. Velit laboris aliquip deserunt labore commodo.\r\n",
- "Proident nostrud labore eu nostrud. Excepteur ut in velit labore ea proident labore ea sint cillum. Incididunt ipsum consectetur officia irure sit pariatur veniam id velit officia mollit. Adipisicing magna voluptate velit excepteur enim consectetur incididunt voluptate tempor occaecat fugiat velit excepteur labore. Do do incididunt qui nisi voluptate enim. Laboris aute sit voluptate cillum pariatur minim excepteur ullamco mollit deserunt.\r\n",
- "Excepteur laborum adipisicing nisi elit fugiat tempor. Elit laboris qui enim labore duis. Proident tempor in consectetur proident excepteur do ex laboris sit.\r\n",
- "Dolore do ea incididunt do duis dolore eu labore nisi cupidatat voluptate amet incididunt minim. Nulla pariatur mollit cupidatat adipisicing nulla et. Dolor aliquip in ex magna excepteur. Nulla consequat minim consequat ullamco dolor laboris ullamco eu reprehenderit duis nostrud pariatur.\r\n",
- "Id nisi labore duis qui. Incididunt laboris tempor aute do sit. Occaecat excepteur est mollit ea in mollit ullamco est amet reprehenderit.\r\n",
- "Aute labore ipsum velit non voluptate eiusmod et reprehenderit cupidatat occaecat. Lorem tempor tempor consectetur exercitation qui nostrud sunt cillum quis ut non dolore. Reprehenderit consequat reprehenderit laborum qui pariatur anim et officia est cupidatat enim velit velit.\r\n",
- "Commodo ex et fugiat cupidatat non adipisicing commodo. Minim ad dolore fugiat mollit cupidatat aliqua sunt dolor sit. Labore esse labore velit aute enim. Nulla duis incididunt est aliquip consectetur elit qui incididunt minim minim labore amet sit cillum.\r\n"
+[
+ "Commodo ullamco cupidatat nisi sit proident ex. Cillum pariatur occaecat in officia do commodo nisi cillum tempor minim. Ad dolor ut et aliquip fugiat eu officia cupidatat occaecat consectetur eiusmod veniam enim officia.\r\n",
+ "Adipisicing cillum laborum nisi irure. Cillum dolor proident duis nulla qui mollit dolore reprehenderit mollit. Irure nulla dolor ipsum irure nulla quis laboris do.\r\n",
+ "Est adipisicing consectetur incididunt in. Occaecat ea magna ex consequat irure sit laborum cillum officia magna sunt do exercitation aliquip. Laboris id aute in dolore reprehenderit voluptate non deserunt laborum.\r\n",
+ "Consectetur eu aute est est occaecat adipisicing sint enim dolor eu. Tempor amet id non mollit eu consectetur cillum duis. Eu labore velit nulla ipsum commodo consequat aliquip. Cupidatat commodo dolore mollit enim sit excepteur nisi duis laboris deserunt esse.\r\n",
+ "Incididunt ullamco est fugiat enim fugiat. Do sit mollit anim ad excepteur eu laboris exercitation officia labore nulla ut. Voluptate non voluptate cillum sit et voluptate anim duis velit consequat aliquip dolor. Elit et et esse laboris consectetur officia eiusmod aliquip nisi est. Qui labore dolore ad dolor.\r\n",
+ "Anim adipisicing est irure proident sit officia ullamco voluptate sunt consectetur duis mollit excepteur veniam. Nostrud ut duis aute exercitation officia et quis elit commodo elit tempor aute aliquip enim. Est officia non cillum consequat voluptate ipsum sit voluptate nulla id.\r\n",
+ "Ipsum enim consectetur aliquip nulla commodo ut ex aliqua elit duis do. Officia et sunt aliqua dolor minim voluptate veniam esse elit enim. Adipisicing reprehenderit duis ex magna non in fugiat sunt ipsum nostrud fugiat aliquip. Labore voluptate id officia voluptate eu. Magna do nostrud excepteur sunt aliqua adipisicing qui.\r\n",
+ "Est occaecat non non cupidatat laborum qui. Veniam sit est voluptate labore sit irure consectetur fugiat. Anim enim enim fugiat exercitation anim ad proident esse in aliqua. Laboris ut aute culpa ullamco.\r\n",
+ "Sit et aliquip cupidatat deserunt eiusmod sint aliquip occaecat nostrud aliqua elit commodo ut magna. Amet sit est deserunt id duis in officia pariatur cupidatat ex. Mollit duis est consequat nulla aute velit ipsum sit consectetur pariatur ut non ex ipsum. Tempor esse velit pariatur reprehenderit et nostrud commodo laborum mollit labore.\r\n",
+ "Aliquip irure quis esse aliquip. Ex non deserunt culpa aliqua ad anim occaecat ad. Lorem consectetur mollit eu consectetur est non nisi non ipsum. Qui veniam ullamco officia est ut excepteur. Nulla elit dolore cupidatat aliqua enim Lorem elit consequat eiusmod non aliqua eu in. Pariatur in culpa labore sint ipsum consectetur occaecat ad ex ipsum laboris aliquip officia. Non officia eiusmod nisi officia id id laboris deserunt sunt enim magna mollit sit.\r\n",
+ "Mollit velit laboris laborum nulla aliquip consequat Lorem non incididunt irure. Eu voluptate sint do consectetur tempor sit Lorem in. Laborum eiusmod nisi Lorem ipsum dolore do aute laborum occaecat aute sunt. Sit laborum in ea do ipsum officia irure cillum irure nisi laboris. Ad anim deserunt excepteur ea veniam eiusmod culpa velit veniam. Commodo incididunt ea Lorem eu enim esse nisi incididunt mollit.\r\n",
+ "Velit proident sunt aute dolore reprehenderit culpa. Pariatur reprehenderit commodo ad ea voluptate anim nulla ipsum eu irure fugiat aliqua et. Adipisicing incididunt anim excepteur voluptate minim qui culpa. Sunt veniam enim reprehenderit magna magna. Sit ad amet deserunt ut aute dolore ad minim.\r\n",
+ "Esse ullamco sunt mollit mollit. Eu enim dolore laboris cupidatat. Cupidatat adipisicing non aute exercitation fugiat. Non ut cillum labore fugiat aliquip ex duis quis consectetur ut nisi Lorem amet qui. Proident veniam amet qui reprehenderit duis qui. Nisi culpa sit occaecat ullamco occaecat laborum fugiat ut. Non duis deserunt culpa duis.\r\n",
+ "Id ipsum eiusmod laboris non est ipsum deserunt labore duis reprehenderit deserunt. Sint tempor fugiat eiusmod nostrud in ut laborum esse in nostrud sit deserunt nostrud reprehenderit. Cupidatat aliqua qui anim consequat eu quis consequat consequat elit ipsum pariatur. Cupidatat in dolore velit quis. Exercitation cillum ullamco ex consectetur commodo tempor incididunt exercitation labore ad dolore. Minim incididunt consequat adipisicing esse eu eu voluptate.\r\n",
+ "Anim sint eiusmod nisi anim do deserunt voluptate ut cillum eiusmod esse ex reprehenderit laborum. Dolore nulla excepteur duis excepteur. Magna nisi nostrud duis non commodo velit esse ipsum Lorem incididunt. Nulla enim consequat ad aliqua. Incididunt irure culpa nostrud ea aute ex sit non ad esse.\r\n",
+ "Ullamco nostrud cupidatat adipisicing anim fugiat mollit eu. Et ut eu in nulla consequat. Sunt do pariatur culpa non est.\r\n",
+ "Pariatur incididunt reprehenderit non qui excepteur cillum exercitation nisi occaecat ad. Lorem aliquip laborum commodo reprehenderit sint. Laboris qui ut veniam magna quis et et ullamco voluptate. Tempor reprehenderit deserunt consequat nisi. Esse duis sint in tempor. Amet aute cupidatat in sint et.\r\n",
+ "Est officia nisi dolore consequat irure et excepteur. Sit qui elit tempor magna qui cillum anim amet proident exercitation proident. Eu cupidatat laborum consectetur duis ullamco irure nulla. Adipisicing culpa non reprehenderit anim aute.\r\n",
+ "Eu est laborum culpa velit dolore non sunt. Tempor magna veniam ea sit non qui Lorem qui exercitation aliqua aliqua et excepteur eiusmod. Culpa aute anim proident culpa adipisicing duis tempor elit aliquip elit nulla laboris esse dolore. Sit adipisicing non dolor eiusmod occaecat cupidatat.\r\n",
+ "Culpa velit eu esse sunt. Laborum irure aliqua reprehenderit velit ipsum fugiat officia dolor ut aute officia deserunt. Ipsum sit quis fugiat nostrud aliqua cupidatat ex pariatur et. Cillum proident est irure nisi dolor aliqua deserunt esse occaecat velit dolor.\r\n",
+ "Exercitation nulla officia sit eiusmod cillum eu incididunt officia exercitation qui Lorem deserunt. Voluptate Lorem minim commodo laborum esse in duis excepteur do duis aliquip nisi voluptate consectetur. Amet tempor officia enim ex esse minim reprehenderit.\r\n",
+ "Laboris sint deserunt ad aute incididunt. Anim officia sunt elit qui laborum labore commodo irure non. Mollit adipisicing ullamco do aute nulla eu laborum et quis sint aute adipisicing amet. Aliqua officia irure nostrud duis ex.\r\n",
+ "Eiusmod ipsum aliqua reprehenderit esse est non aute id veniam eiusmod. Elit consequat ad sit tempor elit eu incididunt quis irure ad. Eu incididunt veniam consequat Lorem nostrud cillum officia ea consequat ad cillum. Non nisi irure cupidatat incididunt pariatur incididunt. Duis velit officia ad cillum qui. Aliquip consequat sint aute nisi cillum. Officia commodo nisi incididunt laborum nisi voluptate aliquip Lorem cupidatat anim consequat sit laboris.\r\n",
+ "Veniam cupidatat et incididunt mollit do ex voluptate veniam nostrud labore esse. Eiusmod irure sint fugiat esse. Aute irure consectetur ut mollit nulla sint esse. Lorem ut quis ex proident nostrud mollit nostrud ea duis duis in magna anim consectetur.\r\n",
+ "Irure culpa esse qui do dolor fugiat veniam ad. Elit commodo aute elit magna incididunt tempor pariatur velit irure pariatur cillum et ea ad. Ad consequat ea et ad minim ut sunt qui commodo voluptate. Laboris est aliquip anim reprehenderit eu officia et exercitation. Occaecat laboris cupidatat Lorem ullamco in nostrud commodo ipsum in quis esse ex.\r\n",
+ "Incididunt officia quis voluptate eiusmod esse nisi ipsum quis commodo. Eiusmod dolore tempor occaecat sit exercitation aliqua minim consequat minim mollit qui ad nisi. Aute quis irure adipisicing veniam nisi nisi velit deserunt incididunt anim nostrud.\r\n",
+ "Voluptate exercitation exercitation id minim excepteur excepteur mollit. Fugiat aute proident nulla ullamco ea. Nisi ea culpa duis dolore veniam anim tempor officia in dolore exercitation exercitation. Dolore quis cillum adipisicing sunt do nulla esse proident ad sint.\r\n",
+ "Laborum ut mollit sint commodo nulla laborum deserunt Lorem magna commodo mollit tempor deserunt ut. Qui aliquip commodo ea id. Consectetur dolor fugiat dolor excepteur eiusmod. Eu excepteur ex aute ex ex elit ex esse officia cillum exercitation. Duis ut labore ea nostrud excepteur. Reprehenderit labore aute sunt nisi quis Lorem officia. Ad aliquip cupidatat voluptate exercitation voluptate ad irure magna quis.\r\n",
+ "Tempor velit veniam sit labore elit minim do elit cillum eiusmod sunt excepteur nisi. Aliquip est deserunt excepteur duis fugiat incididunt veniam fugiat. Pariatur sit irure labore et minim non. Cillum quis aute anim sint laboris laboris ullamco exercitation nostrud. Nulla pariatur id laborum minim nisi est adipisicing irure.\r\n",
+ "Irure exercitation laboris nostrud in do consectetur ad. Magna aliqua Lorem culpa exercitation sint do culpa incididunt mollit eu exercitation. Elit tempor Lorem dolore enim deserunt. Anim et ullamco sint ullamco mollit cillum officia et. Proident incididunt laboris aliquip laborum sint veniam deserunt eu consequat deserunt voluptate laboris. Anim Lorem non laborum exercitation voluptate. Cupidatat reprehenderit culpa Lorem fugiat enim minim consectetur tempor quis ad reprehenderit laboris irure.\r\n",
+ "Deserunt elit mollit nostrud occaecat labore reprehenderit laboris ex. Esse reprehenderit adipisicing cillum minim in esse aliquip excepteur ex et nisi cillum quis. Cillum labore ut ex sunt. Occaecat proident et mollit magna consequat irure esse. Dolor do enim esse nisi ad.\r\n",
+ "Pariatur est anim cillum minim elit magna adipisicing quis tempor proident nisi laboris incididunt cupidatat. Nulla est adipisicing sit adipisicing id nostrud amet qui consequat eiusmod tempor voluptate ad. Adipisicing non magna sit occaecat magna mollit ad ex nulla velit ea pariatur. Irure labore ad ea exercitation ex cillum.\r\n",
+ "Lorem fugiat eu eu cillum nulla tempor sint. Lorem id officia nulla velit labore ut duis ad tempor non. Excepteur quis aute adipisicing nisi nisi consectetur aliquip enim Lorem id ullamco cillum sint voluptate. Qui aliquip incididunt tempor aliqua voluptate labore reprehenderit. Veniam eiusmod elit occaecat voluptate tempor culpa consectetur ea ut exercitation eiusmod exercitation qui.\r\n",
+ "Aliqua esse pariatur nulla veniam velit ea. Aliquip consectetur tempor ex magna sit aliquip exercitation veniam. Dolor ullamco minim commodo pariatur. Et amet reprehenderit dolore proident elit tempor eiusmod eu incididunt enim ullamco. Adipisicing id officia incididunt esse dolor sunt cupidatat do deserunt mollit do non. Magna ut officia fugiat adipisicing quis ea cillum laborum dolore ad nostrud magna minim est. Dolor voluptate officia proident enim ea deserunt eu voluptate dolore proident laborum officia ea.\r\n",
+ "Culpa aute consequat esse fugiat cupidatat minim voluptate voluptate eiusmod irure anim elit. Do eiusmod culpa laboris consequat incididunt minim nostrud eiusmod commodo velit ea ullamco proident. Culpa pariatur magna ut mollit nisi. Ea officia do magna deserunt minim nisi tempor ea deserunt veniam cillum exercitation esse.\r\n",
+ "Anim ullamco nostrud commodo Lorem. Do sunt laborum exercitation proident proident magna. Lorem officia laborum laborum dolor sunt duis commodo Lorem. Officia aute adipisicing ea cupidatat ea dolore. Aliquip adipisicing pariatur consectetur aliqua sit amet officia reprehenderit laborum culpa. Occaecat Lorem eu nisi do Lorem occaecat enim eiusmod laboris id quis. Ad mollit adipisicing sunt adipisicing esse.\r\n",
+ "Laborum quis sit adipisicing cupidatat. Veniam Lorem eiusmod esse esse sint nisi labore elit et. Deserunt aliqua mollit ut commodo aliqua non incididunt ipsum reprehenderit consectetur. Eiusmod nulla minim laboris Lorem ea Lorem aute tempor pariatur in sit. Incididunt culpa ut do irure amet irure cupidatat est anim anim culpa occaecat. Est velit consectetur eiusmod veniam reprehenderit officia sunt occaecat eiusmod ut sunt occaecat amet.\r\n",
+ "Elit minim aute fugiat nulla ex quis. Labore fugiat sint nostrud amet quis culpa excepteur in. Consectetur exercitation cupidatat laborum sit. Aute nisi eu aliqua est deserunt eiusmod commodo dolor id. Mollit laborum esse sint ipsum voluptate reprehenderit velit et. Veniam aliquip enim in veniam Lorem voluptate quis deserunt consequat qui commodo ut excepteur aute.\r\n",
+ "Dolore deserunt veniam aute nisi labore sunt et voluptate irure nisi anim ea. Magna nisi quis anim mollit nisi est dolor do ex aliquip elit aliquip ipsum minim. Dolore est officia nostrud eiusmod ex laborum ea amet est. Officia culpa non est et tempor consectetur exercitation tempor eiusmod enim. Ea tempor laboris qui amet ex nisi culpa dolore consectetur incididunt sunt sunt. Lorem aliquip incididunt magna do et ullamco ex elit aliqua eiusmod qui. Commodo amet dolor sint incididunt ex veniam non Lorem fugiat.\r\n",
+ "Officia culpa enim voluptate dolore commodo. Minim commodo aliqua minim ex sint excepteur cupidatat adipisicing eu irure. Anim magna deserunt anim Lorem non.\r\n",
+ "Cupidatat aliquip nulla excepteur sunt cupidatat cupidatat laborum cupidatat exercitation. Laboris minim ex cupidatat culpa elit. Amet enim reprehenderit aliqua laborum est tempor exercitation cupidatat ex dolore do. Do incididunt labore fugiat commodo consectetur nisi incididunt irure sit culpa sit. Elit aute occaecat qui excepteur velit proident cillum qui aliqua ex do ex. Dolore irure ex excepteur veniam id proident mollit Lorem.\r\n",
+ "Ad commodo cillum duis deserunt elit officia consectetur veniam eiusmod. Reprehenderit et veniam ad commodo reprehenderit magna elit laboris sunt non quis. Adipisicing dolor aute proident ea magna sunt et proident in consectetur.\r\n",
+ "Veniam exercitation esse esse veniam est nisi. Minim velit incididunt sint aute dolor anim. Fugiat cupidatat id ad nisi in voluptate dolor culpa eiusmod magna eiusmod amet id. Duis aliquip labore et ex amet amet aliquip laborum eiusmod ipsum. Quis qui ut duis duis. Minim in voluptate reprehenderit aliqua.\r\n",
+ "Elit ut pariatur dolor veniam ipsum consequat. Voluptate Lorem mollit et esse dolore mollit Lorem ad. Elit nostrud eu Lorem labore mollit minim cupidatat officia quis minim dolore incididunt. In cillum aute cillum ut.\r\n",
+ "Commodo laborum deserunt ut cupidatat pariatur ullamco in esse anim exercitation cillum duis. Consectetur incididunt sit esse Lorem in aute. Eiusmod mollit Lorem consequat minim reprehenderit laborum enim excepteur irure nisi elit. Laborum esse proident aute aute proident adipisicing laborum. Pariatur tempor duis incididunt qui velit pariatur ut officia ea mollit labore dolore. Cillum pariatur minim ullamco sunt incididunt culpa id ullamco exercitation consectetur. Ea exercitation consequat reprehenderit ut ullamco velit eu ad velit magna excepteur eiusmod.\r\n",
+ "Eu deserunt magna laboris laborum laborum in consequat dolore. Officia proident consectetur proident do occaecat minim pariatur officia ipsum sit non velit officia cillum. Laborum excepteur labore eu minim eiusmod. Sit anim dolore cillum ad do minim culpa sit est ad.\r\n",
+ "Cupidatat dolor nostrud Lorem sint consequat quis. Quis labore sint incididunt officia tempor. Fugiat nostrud in elit reprehenderit dolor. Nisi sit enim officia minim est adipisicing nulla aute labore nulla nostrud cupidatat est. Deserunt dolore qui irure Lorem esse voluptate velit qui nostrud.\r\n",
+ "Fugiat Lorem amet nulla nisi qui amet laboris enim cillum. Dolore occaecat exercitation id labore velit do commodo ut cupidatat laborum velit fugiat mollit. Ut et aliqua pariatur occaecat. Lorem occaecat dolore quis esse enim cupidatat exercitation ut tempor sit laboris fugiat adipisicing. Est tempor ex irure consectetur ipsum magna labore. Lorem non quis qui minim nisi magna amet aliquip ex cillum fugiat tempor.\r\n",
+ "Aliquip eiusmod laborum ipsum deserunt velit esse do magna excepteur consectetur exercitation sit. Minim ullamco reprehenderit commodo nostrud exercitation id irure ex qui ullamco sit esse laboris. Nulla cillum non minim qui cillum nisi aute proident. Dolor anim culpa elit quis excepteur aliqua eiusmod. Elit ea est excepteur consectetur sunt eiusmod enim id commodo irure amet et pariatur laboris. Voluptate magna ad magna dolore cillum cillum irure laboris ipsum officia id Lorem veniam.\r\n",
+ "Esse sunt elit est aliquip cupidatat commodo deserunt. Deserunt pariatur ipsum qui ad esse esse magna qui cillum laborum. Exercitation veniam pariatur elit amet enim.\r\n",
+ "Esse quis in id elit nulla occaecat incididunt. Et amet Lorem mollit in veniam do. Velit mollit Lorem consequat commodo Lorem aliquip cupidatat. Minim consequat nostrud nulla in nostrud.\r\n",
+ "Cillum nulla et eu est nostrud quis elit cupidatat dolor enim excepteur exercitation nisi voluptate. Nulla dolore non ex velit et qui tempor proident id deserunt nisi eu. Tempor ad Lorem ipsum reprehenderit in anim. Anim dolore ullamco enim deserunt quis ex id exercitation velit. Magna exercitation fugiat mollit pariatur ipsum ex consectetur nostrud. Id dolore officia nostrud excepteur laborum. Magna incididunt elit ipsum pariatur adipisicing enim duis est qui commodo velit aute.\r\n",
+ "Quis esse ex qui nisi dolor. Ullamco laborum dolor esse laboris eiusmod ea magna laboris ea esse ut. Dolore ipsum pariatur veniam sint mollit. Lorem ea proident fugiat ullamco ut nisi culpa eu exercitation exercitation aliquip veniam laborum consectetur.\r\n",
+ "Pariatur veniam laboris sit aliquip pariatur tempor aute sunt id et ut. Laboris excepteur eiusmod nisi qui quis elit enim ut cupidatat. Et et laborum in fugiat veniam consectetur ipsum laboris duis excepteur ullamco aliqua dolor Lorem. Aliqua ex amet sint anim cupidatat nisi ipsum anim et sunt deserunt. Occaecat culpa ut tempor cillum pariatur ex tempor.\r\n",
+ "Dolor deserunt eiusmod magna do officia voluptate excepteur est cupidatat. Veniam qui cupidatat amet anim est qui consectetur sit commodo commodo ea ad. Enim ad adipisicing qui nostrud. Non nulla esse ullamco nulla et ex.\r\n",
+ "Id ullamco ea consectetur est incididunt deserunt et esse. Elit nostrud voluptate eiusmod ut. Excepteur adipisicing qui cupidatat consequat labore id. Qui dolor aliqua do dolore do cupidatat labore ex consectetur ea sit cillum. Sint veniam eiusmod in consectetur consequat fugiat et mollit ut fugiat esse dolor adipisicing.\r\n",
+ "Ea magna proident labore duis pariatur. Esse cillum aliquip dolor duis fugiat ea ex officia ea irure. Sint elit nisi pariatur sunt nostrud exercitation ullamco culpa magna do.\r\n",
+ "Minim aliqua voluptate dolor consequat sint tempor deserunt amet magna excepteur. Irure do voluptate magna velit. Nostrud in reprehenderit magna officia nostrud. Cupidatat nulla irure laboris non fugiat ex ex est cupidatat excepteur officia aute velit duis. Sit voluptate id ea exercitation deserunt culpa voluptate nostrud est adipisicing incididunt. Amet proident laborum commodo magna ipsum quis.\r\n",
+ "Ipsum consectetur consectetur excepteur tempor eiusmod ea fugiat aute velit magna in officia sunt. Sit ut sunt dolore cupidatat dolor adipisicing. Veniam nisi adipisicing esse reprehenderit amet aliqua voluptate ex commodo occaecat est voluptate mollit sunt. Pariatur aliqua qui qui in dolor. Fugiat reprehenderit sit nostrud do sint esse. Tempor sit irure adipisicing ea pariatur duis est sit est incididunt laboris quis do. Et voluptate anim minim aliquip excepteur consequat nisi anim pariatur aliquip ut ipsum dolor magna.\r\n",
+ "Cillum sit labore excepteur magna id aliqua exercitation consequat laborum Lorem id pariatur nostrud. Lorem qui est labore sint cupidatat sint excepteur nulla in eu aliqua et. Adipisicing velit do enim occaecat laboris quis excepteur ipsum dolor occaecat Lorem dolore id exercitation.\r\n",
+ "Incididunt in laborum reprehenderit eiusmod irure ex. Elit duis consequat minim magna. Esse consectetur aliquip cillum excepteur excepteur fugiat. Sint tempor consequat minim reprehenderit consectetur adipisicing dolor id Lorem elit non. Occaecat esse quis mollit ea et sint aute fugiat qui tempor. Adipisicing tempor duis non dolore irure elit deserunt qui do.\r\n",
+ "Labore fugiat eiusmod sint laborum sit duis occaecat. Magna in laborum non cillum excepteur nostrud sit proident pariatur voluptate voluptate adipisicing exercitation occaecat. Ad non dolor aute ex sint do do minim exercitation veniam laborum irure magna ea. Magna do non quis sit consequat Lorem aliquip.\r\n",
+ "Velit anim do laborum laboris laborum Lorem. Sunt do Lorem amet ipsum est sint velit sit do voluptate mollit veniam enim. Commodo do deserunt in pariatur ut elit sint elit deserunt ea. Ad dolor anim consequat aliquip ut mollit nostrud tempor sunt mollit elit. Reprehenderit laboris labore excepteur occaecat veniam adipisicing cupidatat esse. Ad enim aliquip ea minim excepteur magna. Sint velit veniam pariatur qui dolor est adipisicing ex laboris.\r\n",
+ "Ea cupidatat ex nulla in sunt est sit dolor enim ad. Eu tempor consequat cupidatat consequat ex incididunt sint culpa. Est Lorem Lorem non cupidatat sunt ut aliqua non nostrud do ullamco. Reprehenderit ad ad nulla nostrud do nulla in. Ipsum adipisicing commodo mollit ipsum exercitation. Aliqua ea anim anim est elit. Ea incididunt consequat minim ad sunt eu cillum.\r\n",
+ "Tempor quis excepteur eiusmod cupidatat ipsum occaecat id et occaecat. Eiusmod magna aliquip excepteur id amet elit. Ullamco dolore amet anim dolor enim ea magna magna elit. Occaecat magna pariatur in deserunt consectetur officia aliquip ullamco ex aute anim. Minim laborum eu sit elit officia esse do irure pariatur tempor et reprehenderit ullamco labore.\r\n",
+ "Sit tempor eu minim dolore velit pariatur magna duis reprehenderit ea nulla in. Amet est do consectetur commodo do adipisicing adipisicing in amet. Cillum id ut commodo do pariatur duis aliqua nisi sint ad irure officia reprehenderit. Mollit labore id enim fugiat ullamco irure mollit cupidatat. Quis nisi amet labore eu dolor occaecat commodo aliqua laboris deserunt excepteur deserunt officia. Aliqua non ut sit ad. Laborum veniam ad velit minim dolore ea id magna dolor qui in.\r\n",
+ "Dolore nostrud ipsum aliqua pariatur id reprehenderit enim ad eiusmod qui. Deserunt anim commodo pariatur excepteur velit eu irure nulla ex labore ipsum aliqua minim aute. Id consequat amet tempor aliquip ex elit adipisicing est do. Eu enim Lorem consectetur minim id irure nulla culpa. Consectetur do consequat aute tempor anim. Qui ad non elit dolor est adipisicing nisi amet cillum sunt quis anim laboris incididunt. Incididunt proident adipisicing labore Lorem.\r\n",
+ "Et reprehenderit ea officia veniam. Aliquip ullamco consequat elit nisi magna mollit id elit. Amet amet sint velit labore ad nisi. Consectetur tempor id dolor aliqua esse deserunt amet. Qui laborum enim proident voluptate aute eu aute aute sit sit incididunt eu. Sunt ullamco nisi nostrud labore commodo non consectetur quis do duis minim irure. Tempor sint dolor sint aliquip dolore nostrud fugiat.\r\n",
+ "Aute ullamco quis nisi ut excepteur nostrud duis elit. Veniam ex ad incididunt veniam voluptate. Commodo dolore ullamco sit sint adipisicing proident amet aute duis deserunt.\r\n",
+ "Labore velit eu cillum nisi. Laboris do cupidatat et non duis cillum. Ullamco dolor tempor cupidatat voluptate laborum ullamco ea duis.\r\n",
+ "Deserunt consequat aliqua duis aliquip nostrud nostrud dolore nisi. Culpa do sint laborum consectetur ipsum quis laborum laborum pariatur eiusmod. Consectetur laboris ad ad ut quis. Ullamco laboris qui velit id laborum voluptate qui aute nostrud aliquip ea.\r\n",
+ "Ad cillum anim ex est consectetur mollit id in. Non enim aliquip consequat qui deserunt commodo cillum ad laborum fugiat. Dolor deserunt amet laborum tempor adipisicing voluptate dolor pariatur dolor cillum. Eu mollit ex sunt officia veniam qui est sunt proident. Non aliqua qui elit eu cupidatat ex enim ex proident. Lorem sit minim ullamco officia cupidatat duis minim. Exercitation laborum deserunt voluptate culpa tempor quis nulla id pariatur.\r\n",
+ "Nostrud quis consectetur ut aliqua excepteur elit consectetur occaecat. Occaecat voluptate Lorem pariatur consequat ullamco fugiat minim. Anim voluptate eu eu cillum tempor dolore aliquip aliqua. Fugiat incididunt ut tempor amet minim. Voluptate nostrud minim pariatur non excepteur ullamco.\r\n",
+ "Dolore nulla velit officia exercitation irure laboris incididunt anim in laborum in fugiat ut proident. Fugiat aute id consequat fugiat officia ut. Labore sint amet proident amet sint nisi laboris amet id ullamco culpa quis consequat proident. Magna do fugiat veniam dolore elit irure minim. Esse ullamco excepteur labore tempor labore fugiat dolore nisi cupidatat irure dolor pariatur. Magna excepteur laboris nisi eiusmod sit pariatur mollit.\r\n",
+ "In enim aliquip officia ea ad exercitation cillum culpa occaecat dolore Lorem. Irure cillum commodo adipisicing sunt pariatur ea duis fugiat exercitation laboris culpa ullamco aute. Ut voluptate exercitation qui dolor. Irure et duis elit consequat deserunt proident.\r\n",
+ "Officia ea Lorem sunt culpa id et tempor excepteur enim deserunt proident. Dolore aliquip dolor laboris cillum proident velit. Et culpa occaecat exercitation cupidatat irure sint adipisicing excepteur pariatur incididunt ad occaecat. Qui proident ipsum cillum minim. Quis ut culpa irure aliqua minim fugiat. In voluptate cupidatat fugiat est laborum dolor esse in pariatur voluptate.\r\n",
+ "Voluptate enim ipsum officia aute ea adipisicing nisi ut ex do aliquip amet. Reprehenderit enim voluptate tempor ex adipisicing culpa. Culpa occaecat voluptate dolor mollit ipsum exercitation labore et tempor sit ea consectetur aliqua. Elit elit sit minim ea ea commodo do tempor cupidatat irure dolore. Occaecat esse adipisicing anim eiusmod commodo fugiat mollit amet. Incididunt tempor tempor qui occaecat cupidatat in.\r\n",
+ "Ut qui anim velit enim aliquip do ut nulla labore. Mollit ut commodo ut eiusmod consectetur laboris aliqua qui voluptate culpa fugiat incididunt elit. Lorem ullamco esse elit elit. Labore amet incididunt ea nulla aliquip eiusmod. Sit nulla est voluptate officia ipsum aute aute cillum tempor deserunt. Laboris commodo eiusmod labore sunt aute excepteur ea consectetur reprehenderit veniam nisi. Culpa nisi sint sunt sint tempor laboris dolore cupidatat.\r\n",
+ "Duis cillum qui nisi duis amet velit ad cillum ut elit aute sint ad. Amet laboris pariatur excepteur ipsum Lorem aliqua veniam Lorem quis mollit cupidatat aliqua exercitation. Pariatur ex ullamco sit commodo cillum eiusmod ut proident elit cillum. Commodo ut ipsum excepteur occaecat sint elit consequat ex dolor adipisicing consectetur id ut ad. Velit sit eiusmod est esse tempor incididunt consectetur eiusmod duis commodo veniam.\r\n",
+ "Ut sunt qui officia anim laboris exercitation Lorem quis laborum do eiusmod officia. Enim consectetur occaecat fugiat cillum cillum. Dolore dolore nostrud in commodo fugiat mollit consequat occaecat non et et elit ullamco. Sit voluptate minim ut est culpa velit nulla fugiat reprehenderit eu aliquip adipisicing labore. Sit minim minim do dolor dolor. Lorem Lorem labore exercitation magna veniam eiusmod do.\r\n",
+ "Fugiat dolor adipisicing quis aliquip aute dolore. Qui proident anim elit veniam ex aliquip eiusmod ipsum sunt pariatur est. Non fugiat duis do est officia adipisicing.\r\n",
+ "Nulla deserunt do laboris cupidatat veniam do consectetur ipsum elit veniam in mollit eu. Ea in consequat cupidatat laboris sint fugiat irure. In commodo esse reprehenderit deserunt minim velit ullamco enim eu cupidatat tempor ex. Ullamco in non id culpa amet occaecat culpa nostrud id. Non occaecat culpa magna incididunt.\r\n",
+ "Enim laboris ex mollit reprehenderit eiusmod exercitation magna. Exercitation Lorem ex mollit non non culpa labore enim. Adipisicing labore dolore incididunt do amet aliquip excepteur ad et nostrud officia aute veniam voluptate. Fugiat enim eiusmod Lorem esse. Minim ullamco commodo consequat ex commodo aliqua eu nulla eu. Veniam non enim nulla ut Lorem nostrud minim sint duis.\r\n",
+ "Enim duis consectetur in ullamco cillum veniam nulla amet. Exercitation nisi sunt sunt duis in culpa nisi magna ex id ipsum laboris reprehenderit qui. Officia pariatur qui ex fugiat veniam et sunt sit nostrud. Veniam ullamco tempor fugiat minim Lorem proident velit in eiusmod elit. Enim minim excepteur aute aliquip ex magna commodo dolore qui et labore. Proident eu aliquip cillum dolor. Nostrud ipsum ut irure consequat fugiat nulla proident occaecat laborum.\r\n",
+ "Amet duis eiusmod sunt adipisicing esse ex nostrud consectetur voluptate cillum. Ipsum occaecat sit et anim velit irure ea incididunt cupidatat ullamco in nisi quis. Esse officia ipsum commodo qui quis qui do. Commodo aliquip amet aute sit sit ut cupidatat elit nostrud.\r\n",
+ "Laboris laboris sit mollit cillum nulla deserunt commodo culpa est commodo anim id anim sit. Officia id consectetur velit incididunt est dolor sunt ipsum magna aliqua consectetur. Eiusmod pariatur minim deserunt cupidatat veniam Lorem aliquip sunt proident eu Lorem sit dolor fugiat. Proident qui ut ex in incididunt nulla nulla dolor ex laboris ea ad.\r\n",
+ "Ex incididunt enim labore nulla cupidatat elit. Quis ut incididunt incididunt non irure commodo do mollit cillum anim excepteur. Qui consequat laborum dolore elit tempor aute ut nulla pariatur eu ullamco veniam. Nisi non velit labore in commodo excepteur culpa nulla tempor cillum. Ipsum qui sit sint reprehenderit ut labore incididunt dolor aliquip sunt. Reprehenderit occaecat tempor nisi laborum.\r\n",
+ "Lorem officia ullamco eu occaecat in magna eiusmod consectetur nisi aliqua mollit esse. Ullamco ex aute nostrud pariatur do enim cillum sint do fugiat nostrud culpa tempor. Do aliquip excepteur nostrud culpa eu pariatur eiusmod cillum excepteur do. Est sunt non quis cillum voluptate ex.\r\n",
+ "Deserunt consectetur tempor irure mollit qui tempor et. Labore enim eu irure laboris in. Nisi in tempor ex occaecat amet cupidatat laboris occaecat amet minim ut magna incididunt id. Consequat cillum laborum commodo mollit. Et magna culpa sunt dolore consequat laboris et sit. Deserunt qui voluptate excepteur dolor. Eu qui amet est proident.\r\n",
+ "Eu elit minim eiusmod occaecat eu nostrud dolor qui ut elit. Sunt dolore proident ea eu do eiusmod fugiat incididunt pariatur duis amet Lorem nisi ut. Adipisicing quis veniam cupidatat Lorem sint culpa sunt veniam sint. Excepteur eu exercitation est magna pariatur veniam dolore qui fugiat labore proident eiusmod cillum. Commodo reprehenderit elit proident duis sint magna.\r\n",
+ "Ut aliquip pariatur deserunt nostrud commodo ad proident est exercitation. Sit minim do ea enim sint officia nisi incididunt laborum. Ex amet duis commodo fugiat. Ut aute tempor deserunt irure occaecat aliquip voluptate cillum aute elit qui nostrud.\r\n",
+ "Irure et quis consectetur sit est do sunt aliquip eu. Cupidatat pariatur consequat dolore consectetur. Adipisicing magna velit mollit occaecat do id. Nisi pariatur cupidatat cillum incididunt excepteur consectetur excepteur do laborum deserunt irure pariatur cillum.\r\n",
+ "Adipisicing esse incididunt cillum est irure consequat irure ad aute voluptate. Incididunt do occaecat nostrud do ipsum pariatur Lorem qui laboris et pariatur. Est exercitation dolor culpa ad velit ut et.\r\n",
+ "Sit eiusmod id enim ad ex dolor pariatur do. Ullamco occaecat quis dolor minim non elit labore amet est. Commodo velit eu nulla eiusmod ullamco. Incididunt anim pariatur aute eiusmod veniam tempor enim officia elit id. Elit Lorem est commodo dolore nostrud. Labore et consectetur do exercitation veniam laboris incididunt aliqua proident dolore ea officia cupidatat. Velit laboris aliquip deserunt labore commodo.\r\n",
+ "Proident nostrud labore eu nostrud. Excepteur ut in velit labore ea proident labore ea sint cillum. Incididunt ipsum consectetur officia irure sit pariatur veniam id velit officia mollit. Adipisicing magna voluptate velit excepteur enim consectetur incididunt voluptate tempor occaecat fugiat velit excepteur labore. Do do incididunt qui nisi voluptate enim. Laboris aute sit voluptate cillum pariatur minim excepteur ullamco mollit deserunt.\r\n",
+ "Excepteur laborum adipisicing nisi elit fugiat tempor. Elit laboris qui enim labore duis. Proident tempor in consectetur proident excepteur do ex laboris sit.\r\n",
+ "Dolore do ea incididunt do duis dolore eu labore nisi cupidatat voluptate amet incididunt minim. Nulla pariatur mollit cupidatat adipisicing nulla et. Dolor aliquip in ex magna excepteur. Nulla consequat minim consequat ullamco dolor laboris ullamco eu reprehenderit duis nostrud pariatur.\r\n",
+ "Id nisi labore duis qui. Incididunt laboris tempor aute do sit. Occaecat excepteur est mollit ea in mollit ullamco est amet reprehenderit.\r\n",
+ "Aute labore ipsum velit non voluptate eiusmod et reprehenderit cupidatat occaecat. Lorem tempor tempor consectetur exercitation qui nostrud sunt cillum quis ut non dolore. Reprehenderit consequat reprehenderit laborum qui pariatur anim et officia est cupidatat enim velit velit.\r\n",
+ "Commodo ex et fugiat cupidatat non adipisicing commodo. Minim ad dolore fugiat mollit cupidatat aliqua sunt dolor sit. Labore esse labore velit aute enim. Nulla duis incididunt est aliquip consectetur elit qui incididunt minim minim labore amet sit cillum.\r\n"
] \ No newline at end of file
diff --git a/3rdparty/rapidjson/doc/schema.md b/3rdparty/rapidjson/doc/schema.md
index 4e07e9f0eee..053fc23672a 100644
--- a/3rdparty/rapidjson/doc/schema.md
+++ b/3rdparty/rapidjson/doc/schema.md
@@ -2,17 +2,17 @@
## Status: experimental, shall be included in v1.1
-JSON Schema is a draft standard for describing format of JSON. The schema itself is also a JSON. By validating a JSON with JSON Schema, your code can safely access the DOM without manually checking types, or whether a key exists, etc. It can also ensure that the serialized JSON conform to a specified schema.
+JSON Schema is a draft standard for describing the format of JSON data. The schema itself is also JSON data. By validating a JSON structure with JSON Schema, your code can safely access the DOM without manually checking types, or whether a key exists, etc. It can also ensure that the serialized JSON conform to a specified schema.
-RapidJSON implemented a JSON Schema validator for [JSON Schema Draft v4](http://json-schema.org/documentation.html). If you do not familiar with JSON Schema, you may refer to [Understanding JSON Schema](http://spacetelescope.github.io/understanding-json-schema/).
+RapidJSON implemented a JSON Schema validator for [JSON Schema Draft v4](http://json-schema.org/documentation.html). If you are not familiar with JSON Schema, you may refer to [Understanding JSON Schema](http://spacetelescope.github.io/understanding-json-schema/).
[TOC]
## Basic Usage
-First of all, you need to parse a JSON Schema into `Document`, and then compile the `Document` into `SchemaDocument`.
+First of all, you need to parse a JSON Schema into `Document`, and then compile the `Document` into a `SchemaDocument`.
-Secondly, construct a `SchemaValidator` with the `SchedmaDocument`. It is similar to a `Writer` in the sense of handling SAX events. So, you can use `document.Accept(validator)` to validate a document, and then check the validity.
+Secondly, construct a `SchemaValidator` with the `SchemaDocument`. It is similar to a `Writer` in the sense of handling SAX events. So, you can use `document.Accept(validator)` to validate a document, and then check the validity.
~~~cpp
#include "rapidjson/schema.h"
@@ -54,7 +54,7 @@ Some notes:
## Validation during parsing/serialization
-Differ to most JSON Schema validator implementations, RapidJSON provides a SAX-based schema validator. Therefore, you can parse a JSON from a stream while validating it on the fly. If the validator encounters a JSON value that invalidates the supplied schema, the parsing will be terminated immediately. This design is especially useful for parsing large JSON files.
+Unlike most JSON Schema validator implementations, RapidJSON provides a SAX-based schema validator. Therefore, you can parse a JSON from a stream while validating it on the fly. If the validator encounters a JSON value that invalidates the supplied schema, the parsing will be terminated immediately. This design is especially useful for parsing large JSON files.
### DOM parsing
@@ -111,7 +111,7 @@ if (!reader.Parse(stream, validator)) {
}
~~~
-This is exactly the method used in [schemavalidator](example/schemavalidator/schemavalidator.cpp) example. The distinct advantage is low memory usage, no matter how big the JSON was (the memory usage depends on the complexity of the schema).
+This is exactly the method used in the [schemavalidator](example/schemavalidator/schemavalidator.cpp) example. The distinct advantage is low memory usage, no matter how big the JSON was (the memory usage depends on the complexity of the schema).
If you need to handle the SAX events further, then you need to use the template class `GenericSchemaValidator` to set the output handler of the validator:
@@ -213,7 +213,7 @@ For C++11 compiler, it is also possible to use the `std::regex` by defining `RAP
## Performance
-Most C++ JSON libraries have not yet supporting JSON Schema. So we tried to evaluate the performance of RapidJSON's JSON Schema validator according to [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark), which tests 11 JavaScript libraries running on Node.js.
+Most C++ JSON libraries do not yet support JSON Schema. So we tried to evaluate the performance of RapidJSON's JSON Schema validator according to [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark), which tests 11 JavaScript libraries running on Node.js.
That benchmark runs validations on [JSON Schema Test Suite](https://github.com/json-schema/JSON-Schema-Test-Suite), in which some test suites and tests are excluded. We made the same benchmarking procedure in [`schematest.cpp`](test/perftest/schematest.cpp).
diff --git a/3rdparty/rapidjson/docker/debian/Dockerfile b/3rdparty/rapidjson/docker/debian/Dockerfile
new file mode 100644
index 00000000000..76f0235e5bc
--- /dev/null
+++ b/3rdparty/rapidjson/docker/debian/Dockerfile
@@ -0,0 +1,8 @@
+# BUILD: docker build -t rapidjson-debian .
+# RUN: docker run -it -v "$PWD"/../..:/rapidjson rapidjson-debian
+
+FROM debian:jessie
+
+RUN apt-get update && apt-get install -y g++ cmake doxygen valgrind
+
+ENTRYPOINT ["/bin/bash"]
diff --git a/3rdparty/rapidjson/example/CMakeLists.txt b/3rdparty/rapidjson/example/CMakeLists.txt
index c6b8449ffb1..8c546cf7911 100644
--- a/3rdparty/rapidjson/example/CMakeLists.txt
+++ b/3rdparty/rapidjson/example/CMakeLists.txt
@@ -1,6 +1,3 @@
-# Copyright (c) 2011 Milo Yip (miloyip@gmail.com)
-# Copyright (c) 2013 Rafal Jeczalik (rjeczalik@gmail.com)
-# Distributed under the MIT License (see license.txt file)
cmake_minimum_required(VERSION 2.8)
set(EXAMPLES
@@ -8,6 +5,7 @@ set(EXAMPLES
condense
jsonx
messagereader
+ parsebyparts
pretty
prettyauto
schemavalidator
@@ -22,7 +20,7 @@ include_directories("../include/")
add_definitions(-D__STDC_FORMAT_MACROS)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -Werror -Wall -Wextra -Weffc++ -Wswitch-default")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
@@ -33,4 +31,8 @@ foreach (example ${EXAMPLES})
add_executable(${example} ${example}/${example}.cpp)
endforeach()
+if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ target_link_libraries(parsebyparts pthread)
+endif()
+
add_custom_target(examples ALL DEPENDS ${EXAMPLES})
diff --git a/3rdparty/rapidjson/example/capitalize/capitalize.cpp b/3rdparty/rapidjson/example/capitalize/capitalize.cpp
index adc32b52da1..7da37e9c504 100644
--- a/3rdparty/rapidjson/example/capitalize/capitalize.cpp
+++ b/3rdparty/rapidjson/example/capitalize/capitalize.cpp
@@ -24,7 +24,8 @@ struct CapitalizeFilter {
bool Int64(int64_t i) { return out_.Int64(i); }
bool Uint64(uint64_t u) { return out_.Uint64(u); }
bool Double(double d) { return out_.Double(d); }
- bool String(const char* str, SizeType length, bool) {
+ bool RawNumber(const char* str, SizeType length, bool copy) { return out_.RawNumber(str, length, copy); }
+ bool String(const char* str, SizeType length, bool) {
buffer_.clear();
for (SizeType i = 0; i < length; i++)
buffer_.push_back(static_cast<char>(std::toupper(str[i])));
diff --git a/3rdparty/rapidjson/example/jsonx/jsonx.cpp b/3rdparty/rapidjson/example/jsonx/jsonx.cpp
index c253ac096df..1346b578c39 100644
--- a/3rdparty/rapidjson/example/jsonx/jsonx.cpp
+++ b/3rdparty/rapidjson/example/jsonx/jsonx.cpp
@@ -57,6 +57,13 @@ public:
return WriteNumberElement(buffer, sprintf(buffer, "%.17g", d));
}
+ bool RawNumber(const char* str, SizeType length, bool) {
+ return
+ WriteStartElement("number") &&
+ WriteEscapedText(str, length) &&
+ WriteEndElement("number");
+ }
+
bool String(const char* str, SizeType length, bool) {
return
WriteStartElement("string") &&
diff --git a/3rdparty/rapidjson/example/parsebyparts/parsebyparts.cpp b/3rdparty/rapidjson/example/parsebyparts/parsebyparts.cpp
new file mode 100644
index 00000000000..919d9083458
--- /dev/null
+++ b/3rdparty/rapidjson/example/parsebyparts/parsebyparts.cpp
@@ -0,0 +1,172 @@
+// Example of parsing JSON to document by parts.
+
+// Using C++11 threads
+#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1700)
+
+#include "rapidjson/document.h"
+#include "rapidjson/error/en.h"
+#include "rapidjson/writer.h"
+#include "rapidjson/ostreamwrapper.h"
+#include <condition_variable>
+#include <iostream>
+#include <mutex>
+#include <thread>
+
+using namespace rapidjson;
+
+template<unsigned parseFlags = kParseDefaultFlags>
+class AsyncDocumentParser {
+public:
+ AsyncDocumentParser(Document& d)
+ : stream_(*this)
+ , d_(d)
+ , parseThread_(&AsyncDocumentParser::Parse, this)
+ , mutex_()
+ , notEmpty_()
+ , finish_()
+ , completed_()
+ {}
+
+ ~AsyncDocumentParser() {
+ if (!parseThread_.joinable())
+ return;
+
+ {
+ std::unique_lock<std::mutex> lock(mutex_);
+
+ // Wait until the buffer is read up (or parsing is completed)
+ while (!stream_.Empty() && !completed_)
+ finish_.wait(lock);
+
+ // Automatically append '\0' as the terminator in the stream.
+ static const char terminator[] = "";
+ stream_.src_ = terminator;
+ stream_.end_ = terminator + 1;
+ notEmpty_.notify_one(); // unblock the AsyncStringStream
+ }
+
+ parseThread_.join();
+ }
+
+ void ParsePart(const char* buffer, size_t length) {
+ std::unique_lock<std::mutex> lock(mutex_);
+
+ // Wait until the buffer is read up (or parsing is completed)
+ while (!stream_.Empty() && !completed_)
+ finish_.wait(lock);
+
+ // Stop further parsing if the parsing process is completed.
+ if (completed_)
+ return;
+
+ // Set the buffer to stream and unblock the AsyncStringStream
+ stream_.src_ = buffer;
+ stream_.end_ = buffer + length;
+ notEmpty_.notify_one();
+ }
+
+private:
+ void Parse() {
+ d_.ParseStream<parseFlags>(stream_);
+
+ // The stream may not be fully read, notify finish anyway to unblock ParsePart()
+ std::unique_lock<std::mutex> lock(mutex_);
+ completed_ = true; // Parsing process is completed
+ finish_.notify_one(); // Unblock ParsePart() or destructor if they are waiting.
+ }
+
+ struct AsyncStringStream {
+ typedef char Ch;
+
+ AsyncStringStream(AsyncDocumentParser& parser) : parser_(parser), src_(), end_(), count_() {}
+
+ char Peek() const {
+ std::unique_lock<std::mutex> lock(parser_.mutex_);
+
+ // If nothing in stream, block to wait.
+ while (Empty())
+ parser_.notEmpty_.wait(lock);
+
+ return *src_;
+ }
+
+ char Take() {
+ std::unique_lock<std::mutex> lock(parser_.mutex_);
+
+ // If nothing in stream, block to wait.
+ while (Empty())
+ parser_.notEmpty_.wait(lock);
+
+ count_++;
+ char c = *src_++;
+
+ // If all stream is read up, notify that the stream is finish.
+ if (Empty())
+ parser_.finish_.notify_one();
+
+ return c;
+ }
+
+ size_t Tell() const { return count_; }
+
+ // Not implemented
+ char* PutBegin() { return 0; }
+ void Put(char) {}
+ void Flush() {}
+ size_t PutEnd(char*) { return 0; }
+
+ bool Empty() const { return src_ == end_; }
+
+ AsyncDocumentParser& parser_;
+ const char* src_; //!< Current read position.
+ const char* end_; //!< End of buffer
+ size_t count_; //!< Number of characters taken so far.
+ };
+
+ AsyncStringStream stream_;
+ Document& d_;
+ std::thread parseThread_;
+ std::mutex mutex_;
+ std::condition_variable notEmpty_;
+ std::condition_variable finish_;
+ bool completed_;
+};
+
+int main() {
+ Document d;
+
+ {
+ AsyncDocumentParser<> parser(d);
+
+ const char json1[] = " { \"hello\" : \"world\", \"t\" : tr";
+ //const char json1[] = " { \"hello\" : \"world\", \"t\" : trX"; // Fot test parsing error
+ const char json2[] = "ue, \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.14";
+ const char json3[] = "16, \"a\":[1, 2, 3, 4] } ";
+
+ parser.ParsePart(json1, sizeof(json1) - 1);
+ parser.ParsePart(json2, sizeof(json2) - 1);
+ parser.ParsePart(json3, sizeof(json3) - 1);
+ }
+
+ if (d.HasParseError()) {
+ std::cout << "Error at offset " << d.GetErrorOffset() << ": " << GetParseError_En(d.GetParseError()) << std::endl;
+ return EXIT_FAILURE;
+ }
+
+ // Stringify the JSON to cout
+ OStreamWrapper os(std::cout);
+ Writer<OStreamWrapper> writer(os);
+ d.Accept(writer);
+ std::cout << std::endl;
+
+ return EXIT_SUCCESS;
+}
+
+#else // Not supporting C++11
+
+#include <iostream>
+int main() {
+ std::cout << "This example requires C++11 compiler" << std::endl;
+}
+
+#endif
diff --git a/3rdparty/rapidjson/example/simplereader/simplereader.cpp b/3rdparty/rapidjson/example/simplereader/simplereader.cpp
index edbdb6352c5..5aae8a1c0ac 100644
--- a/3rdparty/rapidjson/example/simplereader/simplereader.cpp
+++ b/3rdparty/rapidjson/example/simplereader/simplereader.cpp
@@ -12,6 +12,10 @@ struct MyHandler {
bool Int64(int64_t i) { cout << "Int64(" << i << ")" << endl; return true; }
bool Uint64(uint64_t u) { cout << "Uint64(" << u << ")" << endl; return true; }
bool Double(double d) { cout << "Double(" << d << ")" << endl; return true; }
+ bool RawNumber(const char* str, SizeType length, bool copy) {
+ cout << "Number(" << str << ", " << length << ", " << boolalpha << copy << ")" << endl;
+ return true;
+ }
bool String(const char* str, SizeType length, bool copy) {
cout << "String(" << str << ", " << length << ", " << boolalpha << copy << ")" << endl;
return true;
diff --git a/3rdparty/rapidjson/example/simplewriter/simplewriter.cpp b/3rdparty/rapidjson/example/simplewriter/simplewriter.cpp
index f8891504bc8..8d1275c2923 100644
--- a/3rdparty/rapidjson/example/simplewriter/simplewriter.cpp
+++ b/3rdparty/rapidjson/example/simplewriter/simplewriter.cpp
@@ -9,26 +9,27 @@ int main() {
StringBuffer s;
Writer<StringBuffer> writer(s);
- writer.StartObject();
- writer.String("hello");
- writer.String("world");
- writer.String("t");
+ writer.StartObject(); // Between StartObject()/EndObject(),
+ writer.Key("hello"); // output a key,
+ writer.String("world"); // follow by a value.
+ writer.Key("t");
writer.Bool(true);
- writer.String("f");
+ writer.Key("f");
writer.Bool(false);
- writer.String("n");
+ writer.Key("n");
writer.Null();
- writer.String("i");
+ writer.Key("i");
writer.Uint(123);
- writer.String("pi");
+ writer.Key("pi");
writer.Double(3.1416);
- writer.String("a");
- writer.StartArray();
+ writer.Key("a");
+ writer.StartArray(); // Between StartArray()/EndArray(),
for (unsigned i = 0; i < 4; i++)
- writer.Uint(i);
+ writer.Uint(i); // all values are elements of the array.
writer.EndArray();
writer.EndObject();
+ // {"hello":"world","t":true,"f":false,"n":null,"i":123,"pi":3.1416,"a":[0,1,2,3]}
cout << s.GetString() << endl;
return 0;
diff --git a/3rdparty/rapidjson/include/rapidjson/document.h b/3rdparty/rapidjson/include/rapidjson/document.h
index b3c9e0667e6..855543effe6 100644
--- a/3rdparty/rapidjson/include/rapidjson/document.h
+++ b/3rdparty/rapidjson/include/rapidjson/document.h
@@ -20,6 +20,8 @@
#include "reader.h"
#include "internal/meta.h"
#include "internal/strfunc.h"
+#include "memorystream.h"
+#include "encodedstream.h"
#include <new> // placement new
#ifdef _MSC_VER
@@ -295,7 +297,7 @@ struct GenericStringRef {
*/
#endif
explicit GenericStringRef(const CharType* str)
- : s(str), length(internal::StrLen(str)){ RAPIDJSON_ASSERT(s != NULL); }
+ : s(str), length(internal::StrLen(str)){ RAPIDJSON_ASSERT(s != 0); }
//! Create constant string reference from pointer and length
#ifndef __clang__ // -Wdocumentation
@@ -307,7 +309,7 @@ struct GenericStringRef {
*/
#endif
GenericStringRef(const CharType* str, SizeType len)
- : s(str), length(len) { RAPIDJSON_ASSERT(s != NULL); }
+ : s(str), length(len) { RAPIDJSON_ASSERT(s != 0); }
//! implicit conversion to plain CharType pointer
operator const Ch *() const { return s; }
@@ -394,6 +396,127 @@ template <typename T> struct IsGenericValue : IsGenericValueImpl<T>::Type {};
} // namespace internal
///////////////////////////////////////////////////////////////////////////////
+// TypeHelper
+
+namespace internal {
+
+template <typename ValueType, typename T>
+struct TypeHelper {};
+
+template<typename ValueType>
+struct TypeHelper<ValueType, bool> {
+ static bool Is(const ValueType& v) { return v.IsBool(); }
+ static bool Get(const ValueType& v) { return v.GetBool(); }
+ static ValueType& Set(ValueType& v, bool data) { return v.SetBool(data); }
+ static ValueType& Set(ValueType& v, bool data, typename ValueType::AllocatorType&) { return v.SetBool(data); }
+};
+
+template<typename ValueType>
+struct TypeHelper<ValueType, int> {
+ static bool Is(const ValueType& v) { return v.IsInt(); }
+ static int Get(const ValueType& v) { return v.GetInt(); }
+ static ValueType& Set(ValueType& v, int data) { return v.SetInt(data); }
+ static ValueType& Set(ValueType& v, int data, typename ValueType::AllocatorType&) { return v.SetInt(data); }
+};
+
+template<typename ValueType>
+struct TypeHelper<ValueType, unsigned> {
+ static bool Is(const ValueType& v) { return v.IsUint(); }
+ static unsigned Get(const ValueType& v) { return v.GetUint(); }
+ static ValueType& Set(ValueType& v, unsigned data) { return v.SetUint(data); }
+ static ValueType& Set(ValueType& v, unsigned data, typename ValueType::AllocatorType&) { return v.SetUint(data); }
+};
+
+template<typename ValueType>
+struct TypeHelper<ValueType, int64_t> {
+ static bool Is(const ValueType& v) { return v.IsInt64(); }
+ static int64_t Get(const ValueType& v) { return v.GetInt64(); }
+ static ValueType& Set(ValueType& v, int64_t data) { return v.SetInt64(data); }
+ static ValueType& Set(ValueType& v, int64_t data, typename ValueType::AllocatorType&) { return v.SetInt64(data); }
+};
+
+template<typename ValueType>
+struct TypeHelper<ValueType, uint64_t> {
+ static bool Is(const ValueType& v) { return v.IsUint64(); }
+ static uint64_t Get(const ValueType& v) { return v.GetUint64(); }
+ static ValueType& Set(ValueType& v, uint64_t data) { return v.SetUint64(data); }
+ static ValueType& Set(ValueType& v, uint64_t data, typename ValueType::AllocatorType&) { return v.SetUint64(data); }
+};
+
+template<typename ValueType>
+struct TypeHelper<ValueType, double> {
+ static bool Is(const ValueType& v) { return v.IsDouble(); }
+ static double Get(const ValueType& v) { return v.GetDouble(); }
+ static ValueType& Set(ValueType& v, double data) { return v.SetDouble(data); }
+ static ValueType& Set(ValueType& v, double data, typename ValueType::AllocatorType&) { return v.SetDouble(data); }
+};
+
+template<typename ValueType>
+struct TypeHelper<ValueType, float> {
+ static bool Is(const ValueType& v) { return v.IsFloat(); }
+ static float Get(const ValueType& v) { return v.GetFloat(); }
+ static ValueType& Set(ValueType& v, float data) { return v.SetFloat(data); }
+ static ValueType& Set(ValueType& v, float data, typename ValueType::AllocatorType&) { return v.SetFloat(data); }
+};
+
+template<typename ValueType>
+struct TypeHelper<ValueType, const typename ValueType::Ch*> {
+ typedef const typename ValueType::Ch* StringType;
+ static bool Is(const ValueType& v) { return v.IsString(); }
+ static StringType Get(const ValueType& v) { return v.GetString(); }
+ static ValueType& Set(ValueType& v, const StringType data) { return v.SetString(typename ValueType::StringRefType(data)); }
+ static ValueType& Set(ValueType& v, const StringType data, typename ValueType::AllocatorType& a) { return v.SetString(data, a); }
+};
+
+#if RAPIDJSON_HAS_STDSTRING
+template<typename ValueType>
+struct TypeHelper<ValueType, std::basic_string<typename ValueType::Ch> > {
+ typedef std::basic_string<typename ValueType::Ch> StringType;
+ static bool Is(const ValueType& v) { return v.IsString(); }
+ static StringType Get(const ValueType& v) { return v.GetString(); }
+ static ValueType& Set(ValueType& v, const StringType& data, typename ValueType::AllocatorType& a) { return v.SetString(data, a); }
+};
+#endif
+
+template<typename ValueType>
+struct TypeHelper<ValueType, typename ValueType::Array> {
+ typedef typename ValueType::Array ArrayType;
+ static bool Is(const ValueType& v) { return v.IsArray(); }
+ static ArrayType Get(ValueType& v) { return v.GetArray(); }
+ static ValueType& Set(ValueType& v, ArrayType data) { return v = data; }
+ static ValueType& Set(ValueType& v, ArrayType data, typename ValueType::AllocatorType&) { return v = data; }
+};
+
+template<typename ValueType>
+struct TypeHelper<ValueType, typename ValueType::ConstArray> {
+ typedef typename ValueType::ConstArray ArrayType;
+ static bool Is(const ValueType& v) { return v.IsArray(); }
+ static ArrayType Get(const ValueType& v) { return v.GetArray(); }
+};
+
+template<typename ValueType>
+struct TypeHelper<ValueType, typename ValueType::Object> {
+ typedef typename ValueType::Object ObjectType;
+ static bool Is(const ValueType& v) { return v.IsObject(); }
+ static ObjectType Get(ValueType& v) { return v.GetObject(); }
+ static ValueType& Set(ValueType& v, ObjectType data) { return v = data; }
+ static ValueType& Set(ValueType& v, ObjectType data, typename ValueType::AllocatorType&) { v = data; }
+};
+
+template<typename ValueType>
+struct TypeHelper<ValueType, typename ValueType::ConstObject> {
+ typedef typename ValueType::ConstObject ObjectType;
+ static bool Is(const ValueType& v) { return v.IsObject(); }
+ static ObjectType Get(const ValueType& v) { return v.GetObject(); }
+};
+
+} // namespace internal
+
+// Forward declarations
+template <bool, typename> class GenericArray;
+template <bool, typename> class GenericObject;
+
+///////////////////////////////////////////////////////////////////////////////
// GenericValue
//! Represents a JSON value. Use Value for UTF8 encoding and default allocator.
@@ -420,17 +543,21 @@ public:
typedef GenericValue* ValueIterator; //!< Value iterator for iterating in array.
typedef const GenericValue* ConstValueIterator; //!< Constant value iterator for iterating in array.
typedef GenericValue<Encoding, Allocator> ValueType; //!< Value type of itself.
+ typedef GenericArray<false, ValueType> Array;
+ typedef GenericArray<true, ValueType> ConstArray;
+ typedef GenericObject<false, ValueType> Object;
+ typedef GenericObject<true, ValueType> ConstObject;
//!@name Constructors and destructor.
//@{
//! Default constructor creates a null value.
- GenericValue() RAPIDJSON_NOEXCEPT : data_(), flags_(kNullFlag) {}
+ GenericValue() RAPIDJSON_NOEXCEPT : data_() { data_.f.flags = kNullFlag; }
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
//! Move constructor in C++11
- GenericValue(GenericValue&& rhs) RAPIDJSON_NOEXCEPT : data_(rhs.data_), flags_(rhs.flags_) {
- rhs.flags_ = kNullFlag; // give up contents
+ GenericValue(GenericValue&& rhs) RAPIDJSON_NOEXCEPT : data_(rhs.data_) {
+ rhs.data_.f.flags = kNullFlag; // give up contents
}
#endif
@@ -455,13 +582,13 @@ public:
\param type Type of the value.
\note Default content for number is zero.
*/
- explicit GenericValue(Type type) RAPIDJSON_NOEXCEPT : data_(), flags_() {
- static const unsigned defaultFlags[7] = {
+ explicit GenericValue(Type type) RAPIDJSON_NOEXCEPT : data_() {
+ static const uint16_t defaultFlags[7] = {
kNullFlag, kFalseFlag, kTrueFlag, kObjectFlag, kArrayFlag, kShortStringFlag,
kNumberAnyFlag
};
RAPIDJSON_ASSERT(type <= kNumberType);
- flags_ = defaultFlags[type];
+ data_.f.flags = defaultFlags[type];
// Use ShortString to store empty string.
if (type == kStringType)
@@ -490,92 +617,118 @@ public:
#else
explicit GenericValue(bool b) RAPIDJSON_NOEXCEPT
#endif
- : data_(), flags_(b ? kTrueFlag : kFalseFlag) {
+ : data_() {
// safe-guard against failing SFINAE
RAPIDJSON_STATIC_ASSERT((internal::IsSame<bool,T>::Value));
+ data_.f.flags = b ? kTrueFlag : kFalseFlag;
}
//! Constructor for int value.
- explicit GenericValue(int i) RAPIDJSON_NOEXCEPT : data_(), flags_(kNumberIntFlag) {
+ explicit GenericValue(int i) RAPIDJSON_NOEXCEPT : data_() {
data_.n.i64 = i;
- if (i >= 0)
- flags_ |= kUintFlag | kUint64Flag;
+ data_.f.flags = (i >= 0) ? (kNumberIntFlag | kUintFlag | kUint64Flag) : kNumberIntFlag;
}
//! Constructor for unsigned value.
- explicit GenericValue(unsigned u) RAPIDJSON_NOEXCEPT : data_(), flags_(kNumberUintFlag) {
+ explicit GenericValue(unsigned u) RAPIDJSON_NOEXCEPT : data_() {
data_.n.u64 = u;
- if (!(u & 0x80000000))
- flags_ |= kIntFlag | kInt64Flag;
+ data_.f.flags = (u & 0x80000000) ? kNumberUintFlag : (kNumberUintFlag | kIntFlag | kInt64Flag);
}
//! Constructor for int64_t value.
- explicit GenericValue(int64_t i64) RAPIDJSON_NOEXCEPT : data_(), flags_(kNumberInt64Flag) {
+ explicit GenericValue(int64_t i64) RAPIDJSON_NOEXCEPT : data_() {
data_.n.i64 = i64;
+ data_.f.flags = kNumberInt64Flag;
if (i64 >= 0) {
- flags_ |= kNumberUint64Flag;
+ data_.f.flags |= kNumberUint64Flag;
if (!(static_cast<uint64_t>(i64) & RAPIDJSON_UINT64_C2(0xFFFFFFFF, 0x00000000)))
- flags_ |= kUintFlag;
+ data_.f.flags |= kUintFlag;
if (!(static_cast<uint64_t>(i64) & RAPIDJSON_UINT64_C2(0xFFFFFFFF, 0x80000000)))
- flags_ |= kIntFlag;
+ data_.f.flags |= kIntFlag;
}
else if (i64 >= static_cast<int64_t>(RAPIDJSON_UINT64_C2(0xFFFFFFFF, 0x80000000)))
- flags_ |= kIntFlag;
+ data_.f.flags |= kIntFlag;
}
//! Constructor for uint64_t value.
- explicit GenericValue(uint64_t u64) RAPIDJSON_NOEXCEPT : data_(), flags_(kNumberUint64Flag) {
+ explicit GenericValue(uint64_t u64) RAPIDJSON_NOEXCEPT : data_() {
data_.n.u64 = u64;
+ data_.f.flags = kNumberUint64Flag;
if (!(u64 & RAPIDJSON_UINT64_C2(0x80000000, 0x00000000)))
- flags_ |= kInt64Flag;
+ data_.f.flags |= kInt64Flag;
if (!(u64 & RAPIDJSON_UINT64_C2(0xFFFFFFFF, 0x00000000)))
- flags_ |= kUintFlag;
+ data_.f.flags |= kUintFlag;
if (!(u64 & RAPIDJSON_UINT64_C2(0xFFFFFFFF, 0x80000000)))
- flags_ |= kIntFlag;
+ data_.f.flags |= kIntFlag;
}
//! Constructor for double value.
- explicit GenericValue(double d) RAPIDJSON_NOEXCEPT : data_(), flags_(kNumberDoubleFlag) { data_.n.d = d; }
+ explicit GenericValue(double d) RAPIDJSON_NOEXCEPT : data_() { data_.n.d = d; data_.f.flags = kNumberDoubleFlag; }
//! Constructor for constant string (i.e. do not make a copy of string)
- GenericValue(const Ch* s, SizeType length) RAPIDJSON_NOEXCEPT : data_(), flags_() { SetStringRaw(StringRef(s, length)); }
+ GenericValue(const Ch* s, SizeType length) RAPIDJSON_NOEXCEPT : data_() { SetStringRaw(StringRef(s, length)); }
//! Constructor for constant string (i.e. do not make a copy of string)
- explicit GenericValue(StringRefType s) RAPIDJSON_NOEXCEPT : data_(), flags_() { SetStringRaw(s); }
+ explicit GenericValue(StringRefType s) RAPIDJSON_NOEXCEPT : data_() { SetStringRaw(s); }
//! Constructor for copy-string (i.e. do make a copy of string)
- GenericValue(const Ch* s, SizeType length, Allocator& allocator) : data_(), flags_() { SetStringRaw(StringRef(s, length), allocator); }
+ GenericValue(const Ch* s, SizeType length, Allocator& allocator) : data_() { SetStringRaw(StringRef(s, length), allocator); }
//! Constructor for copy-string (i.e. do make a copy of string)
- GenericValue(const Ch*s, Allocator& allocator) : data_(), flags_() { SetStringRaw(StringRef(s), allocator); }
+ GenericValue(const Ch*s, Allocator& allocator) : data_() { SetStringRaw(StringRef(s), allocator); }
#if RAPIDJSON_HAS_STDSTRING
//! Constructor for copy-string from a string object (i.e. do make a copy of string)
/*! \note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.
*/
- GenericValue(const std::basic_string<Ch>& s, Allocator& allocator) : data_(), flags_() { SetStringRaw(StringRef(s), allocator); }
+ GenericValue(const std::basic_string<Ch>& s, Allocator& allocator) : data_() { SetStringRaw(StringRef(s), allocator); }
#endif
+ //! Constructor for Array.
+ /*!
+ \param a An array obtained by \c GetArray().
+ \note \c Array is always pass-by-value.
+ \note the source array is moved into this value and the sourec array becomes empty.
+ */
+ GenericValue(Array a) RAPIDJSON_NOEXCEPT : data_(a.value_.data_) {
+ a.value_.data_ = Data();
+ a.value_.data_.f.flags = kArrayFlag;
+ }
+
+ //! Constructor for Object.
+ /*!
+ \param o An object obtained by \c GetObject().
+ \note \c Object is always pass-by-value.
+ \note the source object is moved into this value and the sourec object becomes empty.
+ */
+ GenericValue(Object o) RAPIDJSON_NOEXCEPT : data_(o.value_.data_) {
+ o.value_.data_ = Data();
+ o.value_.data_.f.flags = kObjectFlag;
+ }
+
//! Destructor.
/*! Need to destruct elements of array, members of object, or copy-string.
*/
~GenericValue() {
if (Allocator::kNeedFree) { // Shortcut by Allocator's trait
- switch(flags_) {
+ switch(data_.f.flags) {
case kArrayFlag:
- for (GenericValue* v = data_.a.elements; v != data_.a.elements + data_.a.size; ++v)
- v->~GenericValue();
- Allocator::Free(data_.a.elements);
+ {
+ GenericValue* e = GetElementsPointer();
+ for (GenericValue* v = e; v != e + data_.a.size; ++v)
+ v->~GenericValue();
+ Allocator::Free(e);
+ }
break;
case kObjectFlag:
for (MemberIterator m = MemberBegin(); m != MemberEnd(); ++m)
m->~Member();
- Allocator::Free(data_.o.members);
+ Allocator::Free(GetMembersPointer());
break;
case kCopyStringFlag:
- Allocator::Free(const_cast<Ch*>(data_.s.str));
+ Allocator::Free(const_cast<Ch*>(GetStringPointer()));
break;
default:
@@ -773,20 +926,20 @@ public:
//!@name Type
//@{
- Type GetType() const { return static_cast<Type>(flags_ & kTypeMask); }
- bool IsNull() const { return flags_ == kNullFlag; }
- bool IsFalse() const { return flags_ == kFalseFlag; }
- bool IsTrue() const { return flags_ == kTrueFlag; }
- bool IsBool() const { return (flags_ & kBoolFlag) != 0; }
- bool IsObject() const { return flags_ == kObjectFlag; }
- bool IsArray() const { return flags_ == kArrayFlag; }
- bool IsNumber() const { return (flags_ & kNumberFlag) != 0; }
- bool IsInt() const { return (flags_ & kIntFlag) != 0; }
- bool IsUint() const { return (flags_ & kUintFlag) != 0; }
- bool IsInt64() const { return (flags_ & kInt64Flag) != 0; }
- bool IsUint64() const { return (flags_ & kUint64Flag) != 0; }
- bool IsDouble() const { return (flags_ & kDoubleFlag) != 0; }
- bool IsString() const { return (flags_ & kStringFlag) != 0; }
+ Type GetType() const { return static_cast<Type>(data_.f.flags & kTypeMask); }
+ bool IsNull() const { return data_.f.flags == kNullFlag; }
+ bool IsFalse() const { return data_.f.flags == kFalseFlag; }
+ bool IsTrue() const { return data_.f.flags == kTrueFlag; }
+ bool IsBool() const { return (data_.f.flags & kBoolFlag) != 0; }
+ bool IsObject() const { return data_.f.flags == kObjectFlag; }
+ bool IsArray() const { return data_.f.flags == kArrayFlag; }
+ bool IsNumber() const { return (data_.f.flags & kNumberFlag) != 0; }
+ bool IsInt() const { return (data_.f.flags & kIntFlag) != 0; }
+ bool IsUint() const { return (data_.f.flags & kUintFlag) != 0; }
+ bool IsInt64() const { return (data_.f.flags & kInt64Flag) != 0; }
+ bool IsUint64() const { return (data_.f.flags & kUint64Flag) != 0; }
+ bool IsDouble() const { return (data_.f.flags & kDoubleFlag) != 0; }
+ bool IsString() const { return (data_.f.flags & kStringFlag) != 0; }
// Checks whether a number can be losslessly converted to a double.
bool IsLosslessDouble() const {
@@ -806,7 +959,7 @@ public:
// Checks whether a number is a float (possible lossy).
bool IsFloat() const {
- if ((flags_ & kDoubleFlag) == 0)
+ if ((data_.f.flags & kDoubleFlag) == 0)
return false;
double d = GetDouble();
return d >= -3.4028234e38 && d <= 3.4028234e38;
@@ -831,7 +984,7 @@ public:
//!@name Bool
//@{
- bool GetBool() const { RAPIDJSON_ASSERT(IsBool()); return flags_ == kTrueFlag; }
+ bool GetBool() const { RAPIDJSON_ASSERT(IsBool()); return data_.f.flags == kTrueFlag; }
//!< Set boolean value
/*! \post IsBool() == true */
GenericValue& SetBool(bool b) { this->~GenericValue(); new (this) GenericValue(b); return *this; }
@@ -905,16 +1058,16 @@ public:
//! Const member iterator
/*! \pre IsObject() == true */
- ConstMemberIterator MemberBegin() const { RAPIDJSON_ASSERT(IsObject()); return ConstMemberIterator(data_.o.members); }
+ ConstMemberIterator MemberBegin() const { RAPIDJSON_ASSERT(IsObject()); return ConstMemberIterator(GetMembersPointer()); }
//! Const \em past-the-end member iterator
/*! \pre IsObject() == true */
- ConstMemberIterator MemberEnd() const { RAPIDJSON_ASSERT(IsObject()); return ConstMemberIterator(data_.o.members + data_.o.size); }
+ ConstMemberIterator MemberEnd() const { RAPIDJSON_ASSERT(IsObject()); return ConstMemberIterator(GetMembersPointer() + data_.o.size); }
//! Member iterator
/*! \pre IsObject() == true */
- MemberIterator MemberBegin() { RAPIDJSON_ASSERT(IsObject()); return MemberIterator(data_.o.members); }
+ MemberIterator MemberBegin() { RAPIDJSON_ASSERT(IsObject()); return MemberIterator(GetMembersPointer()); }
//! \em Past-the-end member iterator
/*! \pre IsObject() == true */
- MemberIterator MemberEnd() { RAPIDJSON_ASSERT(IsObject()); return MemberIterator(data_.o.members + data_.o.size); }
+ MemberIterator MemberEnd() { RAPIDJSON_ASSERT(IsObject()); return MemberIterator(GetMembersPointer() + data_.o.size); }
//! Check whether a member exists in the object.
/*!
@@ -1020,20 +1173,21 @@ public:
RAPIDJSON_ASSERT(IsObject());
RAPIDJSON_ASSERT(name.IsString());
- Object& o = data_.o;
+ ObjectData& o = data_.o;
if (o.size >= o.capacity) {
if (o.capacity == 0) {
o.capacity = kDefaultObjectCapacity;
- o.members = reinterpret_cast<Member*>(allocator.Malloc(o.capacity * sizeof(Member)));
+ SetMembersPointer(reinterpret_cast<Member*>(allocator.Malloc(o.capacity * sizeof(Member))));
}
else {
SizeType oldCapacity = o.capacity;
o.capacity += (oldCapacity + 1) / 2; // grow by factor 1.5
- o.members = reinterpret_cast<Member*>(allocator.Realloc(o.members, oldCapacity * sizeof(Member), o.capacity * sizeof(Member)));
+ SetMembersPointer(reinterpret_cast<Member*>(allocator.Realloc(GetMembersPointer(), oldCapacity * sizeof(Member), o.capacity * sizeof(Member))));
}
}
- o.members[o.size].name.RawAssign(name);
- o.members[o.size].value.RawAssign(value);
+ Member* members = GetMembersPointer();
+ members[o.size].name.RawAssign(name);
+ members[o.size].value.RawAssign(value);
o.size++;
return *this;
}
@@ -1212,18 +1366,14 @@ public:
MemberIterator RemoveMember(MemberIterator m) {
RAPIDJSON_ASSERT(IsObject());
RAPIDJSON_ASSERT(data_.o.size > 0);
- RAPIDJSON_ASSERT(data_.o.members != 0);
+ RAPIDJSON_ASSERT(GetMembersPointer() != 0);
RAPIDJSON_ASSERT(m >= MemberBegin() && m < MemberEnd());
- MemberIterator last(data_.o.members + (data_.o.size - 1));
- if (data_.o.size > 1 && m != last) {
- // Move the last one to this place
- *m = *last;
- }
- else {
- // Only one left, just destroy
- m->~Member();
- }
+ MemberIterator last(GetMembersPointer() + (data_.o.size - 1));
+ if (data_.o.size > 1 && m != last)
+ *m = *last; // Move the last one to this place
+ else
+ m->~Member(); // Only one left, just destroy
--data_.o.size;
return m;
}
@@ -1253,7 +1403,7 @@ public:
MemberIterator EraseMember(ConstMemberIterator first, ConstMemberIterator last) {
RAPIDJSON_ASSERT(IsObject());
RAPIDJSON_ASSERT(data_.o.size > 0);
- RAPIDJSON_ASSERT(data_.o.members != 0);
+ RAPIDJSON_ASSERT(GetMembersPointer() != 0);
RAPIDJSON_ASSERT(first >= MemberBegin());
RAPIDJSON_ASSERT(first <= last);
RAPIDJSON_ASSERT(last <= MemberEnd());
@@ -1291,6 +1441,9 @@ public:
return false;
}
+ Object GetObject() { RAPIDJSON_ASSERT(IsObject()); return Object(*this); }
+ ConstObject GetObject() const { RAPIDJSON_ASSERT(IsObject()); return ConstObject(*this); }
+
//@}
//!@name Array
@@ -1298,7 +1451,7 @@ public:
//! Set this value as an empty array.
/*! \post IsArray == true */
- GenericValue& SetArray() { this->~GenericValue(); new (this) GenericValue(kArrayType); return *this; }
+ GenericValue& SetArray() { this->~GenericValue(); new (this) GenericValue(kArrayType); return *this; }
//! Get the number of elements in array.
SizeType Size() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.size; }
@@ -1315,8 +1468,9 @@ public:
*/
void Clear() {
RAPIDJSON_ASSERT(IsArray());
- for (SizeType i = 0; i < data_.a.size; ++i)
- data_.a.elements[i].~GenericValue();
+ GenericValue* e = GetElementsPointer();
+ for (GenericValue* v = e; v != e + data_.a.size; ++v)
+ v->~GenericValue();
data_.a.size = 0;
}
@@ -1328,16 +1482,16 @@ public:
GenericValue& operator[](SizeType index) {
RAPIDJSON_ASSERT(IsArray());
RAPIDJSON_ASSERT(index < data_.a.size);
- return data_.a.elements[index];
+ return GetElementsPointer()[index];
}
const GenericValue& operator[](SizeType index) const { return const_cast<GenericValue&>(*this)[index]; }
//! Element iterator
/*! \pre IsArray() == true */
- ValueIterator Begin() { RAPIDJSON_ASSERT(IsArray()); return data_.a.elements; }
+ ValueIterator Begin() { RAPIDJSON_ASSERT(IsArray()); return GetElementsPointer(); }
//! \em Past-the-end element iterator
/*! \pre IsArray() == true */
- ValueIterator End() { RAPIDJSON_ASSERT(IsArray()); return data_.a.elements + data_.a.size; }
+ ValueIterator End() { RAPIDJSON_ASSERT(IsArray()); return GetElementsPointer() + data_.a.size; }
//! Constant element iterator
/*! \pre IsArray() == true */
ConstValueIterator Begin() const { return const_cast<GenericValue&>(*this).Begin(); }
@@ -1354,7 +1508,7 @@ public:
GenericValue& Reserve(SizeType newCapacity, Allocator &allocator) {
RAPIDJSON_ASSERT(IsArray());
if (newCapacity > data_.a.capacity) {
- data_.a.elements = static_cast<GenericValue*>(allocator.Realloc(data_.a.elements, data_.a.capacity * sizeof(GenericValue), newCapacity * sizeof(GenericValue)));
+ SetElementsPointer(reinterpret_cast<GenericValue*>(allocator.Realloc(GetElementsPointer(), data_.a.capacity * sizeof(GenericValue), newCapacity * sizeof(GenericValue))));
data_.a.capacity = newCapacity;
}
return *this;
@@ -1374,7 +1528,7 @@ public:
RAPIDJSON_ASSERT(IsArray());
if (data_.a.size >= data_.a.capacity)
Reserve(data_.a.capacity == 0 ? kDefaultArrayCapacity : (data_.a.capacity + (data_.a.capacity + 1) / 2), allocator);
- data_.a.elements[data_.a.size++].RawAssign(value);
+ GetElementsPointer()[data_.a.size++].RawAssign(value);
return *this;
}
@@ -1428,7 +1582,7 @@ public:
GenericValue& PopBack() {
RAPIDJSON_ASSERT(IsArray());
RAPIDJSON_ASSERT(!Empty());
- data_.a.elements[--data_.a.size].~GenericValue();
+ GetElementsPointer()[--data_.a.size].~GenericValue();
return *this;
}
@@ -1454,7 +1608,7 @@ public:
ValueIterator Erase(ConstValueIterator first, ConstValueIterator last) {
RAPIDJSON_ASSERT(IsArray());
RAPIDJSON_ASSERT(data_.a.size > 0);
- RAPIDJSON_ASSERT(data_.a.elements != 0);
+ RAPIDJSON_ASSERT(GetElementsPointer() != 0);
RAPIDJSON_ASSERT(first >= Begin());
RAPIDJSON_ASSERT(first <= last);
RAPIDJSON_ASSERT(last <= End());
@@ -1466,33 +1620,35 @@ public:
return pos;
}
+ Array GetArray() { RAPIDJSON_ASSERT(IsArray()); return Array(*this); }
+ ConstArray GetArray() const { RAPIDJSON_ASSERT(IsArray()); return ConstArray(*this); }
+
//@}
//!@name Number
//@{
- int GetInt() const { RAPIDJSON_ASSERT(flags_ & kIntFlag); return data_.n.i.i; }
- unsigned GetUint() const { RAPIDJSON_ASSERT(flags_ & kUintFlag); return data_.n.u.u; }
- int64_t GetInt64() const { RAPIDJSON_ASSERT(flags_ & kInt64Flag); return data_.n.i64; }
- uint64_t GetUint64() const { RAPIDJSON_ASSERT(flags_ & kUint64Flag); return data_.n.u64; }
+ int GetInt() const { RAPIDJSON_ASSERT(data_.f.flags & kIntFlag); return data_.n.i.i; }
+ unsigned GetUint() const { RAPIDJSON_ASSERT(data_.f.flags & kUintFlag); return data_.n.u.u; }
+ int64_t GetInt64() const { RAPIDJSON_ASSERT(data_.f.flags & kInt64Flag); return data_.n.i64; }
+ uint64_t GetUint64() const { RAPIDJSON_ASSERT(data_.f.flags & kUint64Flag); return data_.n.u64; }
//! Get the value as double type.
/*! \note If the value is 64-bit integer type, it may lose precision. Use \c IsLosslessDouble() to check whether the converison is lossless.
*/
double GetDouble() const {
RAPIDJSON_ASSERT(IsNumber());
- if ((flags_ & kDoubleFlag) != 0) return data_.n.d; // exact type, no conversion.
- if ((flags_ & kIntFlag) != 0) return data_.n.i.i; // int -> double
- if ((flags_ & kUintFlag) != 0) return data_.n.u.u; // unsigned -> double
- if ((flags_ & kInt64Flag) != 0) return static_cast<double>(data_.n.i64); // int64_t -> double (may lose precision)
- RAPIDJSON_ASSERT((flags_ & kUint64Flag) != 0); return static_cast<double>(data_.n.u64); // uint64_t -> double (may lose precision)
+ if ((data_.f.flags & kDoubleFlag) != 0) return data_.n.d; // exact type, no conversion.
+ if ((data_.f.flags & kIntFlag) != 0) return data_.n.i.i; // int -> double
+ if ((data_.f.flags & kUintFlag) != 0) return data_.n.u.u; // unsigned -> double
+ if ((data_.f.flags & kInt64Flag) != 0) return static_cast<double>(data_.n.i64); // int64_t -> double (may lose precision)
+ RAPIDJSON_ASSERT((data_.f.flags & kUint64Flag) != 0); return static_cast<double>(data_.n.u64); // uint64_t -> double (may lose precision)
}
//! Get the value as float type.
/*! \note If the value is 64-bit integer type, it may lose precision. Use \c IsLosslessFloat() to check whether the converison is lossless.
*/
float GetFloat() const {
- RAPIDJSON_ASSERT(IsFloat());
return static_cast<float>(GetDouble());
}
@@ -1508,12 +1664,12 @@ public:
//!@name String
//@{
- const Ch* GetString() const { RAPIDJSON_ASSERT(IsString()); return ((flags_ & kInlineStrFlag) ? data_.ss.str : data_.s.str); }
+ const Ch* GetString() const { RAPIDJSON_ASSERT(IsString()); return (data_.f.flags & kInlineStrFlag) ? data_.ss.str : GetStringPointer(); }
//! Get the length of string.
/*! Since rapidjson permits "\\u0000" in the json string, strlen(v.GetString()) may not equal to v.GetStringLength().
*/
- SizeType GetStringLength() const { RAPIDJSON_ASSERT(IsString()); return ((flags_ & kInlineStrFlag) ? (data_.ss.GetLength()) : data_.s.length); }
+ SizeType GetStringLength() const { RAPIDJSON_ASSERT(IsString()); return ((data_.f.flags & kInlineStrFlag) ? (data_.ss.GetLength()) : data_.s.length); }
//! Set this value as a string without copying source string.
/*! This version has better performance with supplied length, and also support string containing null character.
@@ -1563,6 +1719,30 @@ public:
//@}
+ //!@name Array
+ //@{
+
+ //! Templated version for checking whether this value is type T.
+ /*!
+ \tparam T Either \c bool, \c int, \c unsigned, \c int64_t, \c uint64_t, \c double, \c float, \c const \c char*, \c std::basic_string<Ch>
+ */
+ template <typename T>
+ bool Is() const { return internal::TypeHelper<ValueType, T>::Is(*this); }
+
+ template <typename T>
+ T Get() const { return internal::TypeHelper<ValueType, T>::Get(*this); }
+
+ template <typename T>
+ T Get() { return internal::TypeHelper<ValueType, T>::Get(*this); }
+
+ template<typename T>
+ ValueType& Set(const T& data) { return internal::TypeHelper<ValueType, T>::Set(*this, data); }
+
+ template<typename T>
+ ValueType& Set(const T& data, AllocatorType& allocator) { return internal::TypeHelper<ValueType, T>::Set(*this, data, allocator); }
+
+ //@}
+
//! Generate events of this value to a Handler.
/*! This function adopts the GoF visitor pattern.
Typical usage is to output this JSON value as JSON text via Writer, which is a Handler.
@@ -1582,7 +1762,7 @@ public:
return false;
for (ConstMemberIterator m = MemberBegin(); m != MemberEnd(); ++m) {
RAPIDJSON_ASSERT(m->name.IsString()); // User may change the type of name by MemberIterator.
- if (RAPIDJSON_UNLIKELY(!handler.Key(m->name.GetString(), m->name.GetStringLength(), (m->name.flags_ & kCopyFlag) != 0)))
+ if (RAPIDJSON_UNLIKELY(!handler.Key(m->name.GetString(), m->name.GetStringLength(), (m->name.data_.f.flags & kCopyFlag) != 0)))
return false;
if (RAPIDJSON_UNLIKELY(!m->value.Accept(handler)))
return false;
@@ -1592,13 +1772,13 @@ public:
case kArrayType:
if (RAPIDJSON_UNLIKELY(!handler.StartArray()))
return false;
- for (const GenericValue* v = data_.a.elements; v != data_.a.elements + data_.a.size; ++v)
+ for (const GenericValue* v = Begin(); v != End(); ++v)
if (RAPIDJSON_UNLIKELY(!v->Accept(handler)))
return false;
return handler.EndArray(data_.a.size);
case kStringType:
- return handler.String(GetString(), GetStringLength(), (flags_ & kCopyFlag) != 0);
+ return handler.String(GetString(), GetStringLength(), (data_.f.flags & kCopyFlag) != 0);
default:
RAPIDJSON_ASSERT(GetType() == kNumberType);
@@ -1615,16 +1795,16 @@ private:
template <typename, typename, typename> friend class GenericDocument;
enum {
- kBoolFlag = 0x100,
- kNumberFlag = 0x200,
- kIntFlag = 0x400,
- kUintFlag = 0x800,
- kInt64Flag = 0x1000,
- kUint64Flag = 0x2000,
- kDoubleFlag = 0x4000,
- kStringFlag = 0x100000,
- kCopyFlag = 0x200000,
- kInlineStrFlag = 0x400000,
+ kBoolFlag = 0x0008,
+ kNumberFlag = 0x0010,
+ kIntFlag = 0x0020,
+ kUintFlag = 0x0040,
+ kInt64Flag = 0x0080,
+ kUint64Flag = 0x0100,
+ kDoubleFlag = 0x0200,
+ kStringFlag = 0x0400,
+ kCopyFlag = 0x0800,
+ kInlineStrFlag = 0x1000,
// Initial flags of different types.
kNullFlag = kNullType,
@@ -1642,16 +1822,27 @@ private:
kObjectFlag = kObjectType,
kArrayFlag = kArrayType,
- kTypeMask = 0xFF // bitwise-and with mask of 0xFF can be optimized by compiler
+ kTypeMask = 0x07
};
static const SizeType kDefaultArrayCapacity = 16;
static const SizeType kDefaultObjectCapacity = 16;
+ struct Flag {
+#if RAPIDJSON_48BITPOINTER_OPTIMIZATION
+ char payload[sizeof(SizeType) * 2 + 6]; // 2 x SizeType + lower 48-bit pointer
+#elif RAPIDJSON_64BIT
+ char payload[sizeof(SizeType) * 2 + sizeof(void*) + 6]; // 6 padding bytes
+#else
+ char payload[sizeof(SizeType) * 2 + sizeof(void*) + 2]; // 2 padding bytes
+#endif
+ uint16_t flags;
+ };
+
struct String {
- const Ch* str;
SizeType length;
- unsigned hashcode; //!< reserved
+ SizeType hashcode; //!< reserved
+ const Ch* str;
}; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode
// implementation detail: ShortString can represent zero-terminated strings up to MaxSize chars
@@ -1660,10 +1851,10 @@ private:
// to store has the maximal length of MaxSize then str[LenPos] will be 0 and therefore act as
// the string terminator as well. For getting the string length back from that value just use
// "MaxSize - str[LenPos]".
- // This allows to store 11-chars strings in 32-bit mode and 15-chars strings in 64-bit mode
- // inline (for `UTF8`-encoded strings).
+ // This allows to store 13-chars strings in 32-bit mode, 21-chars strings in 64-bit mode,
+ // 13-chars strings for RAPIDJSON_48BITPOINTER_OPTIMIZATION=1 inline (for `UTF8`-encoded strings).
struct ShortString {
- enum { MaxChars = sizeof(String) / sizeof(Ch), MaxSize = MaxChars - 1, LenPos = MaxSize };
+ enum { MaxChars = sizeof(static_cast<Flag*>(0)->payload) / sizeof(Ch), MaxSize = MaxChars - 1, LenPos = MaxSize };
Ch str[MaxChars];
inline static bool Usable(SizeType len) { return (MaxSize >= len); }
@@ -1697,69 +1888,79 @@ private:
double d;
}; // 8 bytes
- struct Object {
- Member* members;
+ struct ObjectData {
SizeType size;
SizeType capacity;
+ Member* members;
}; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode
- struct Array {
- GenericValue* elements;
+ struct ArrayData {
SizeType size;
SizeType capacity;
+ GenericValue* elements;
}; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode
union Data {
String s;
ShortString ss;
Number n;
- Object o;
- Array a;
- }; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode
+ ObjectData o;
+ ArrayData a;
+ Flag f;
+ }; // 16 bytes in 32-bit mode, 24 bytes in 64-bit mode, 16 bytes in 64-bit with RAPIDJSON_48BITPOINTER_OPTIMIZATION
+
+ RAPIDJSON_FORCEINLINE const Ch* GetStringPointer() const { return RAPIDJSON_GETPOINTER(Ch, data_.s.str); }
+ RAPIDJSON_FORCEINLINE const Ch* SetStringPointer(const Ch* str) { return RAPIDJSON_SETPOINTER(Ch, data_.s.str, str); }
+ RAPIDJSON_FORCEINLINE GenericValue* GetElementsPointer() const { return RAPIDJSON_GETPOINTER(GenericValue, data_.a.elements); }
+ RAPIDJSON_FORCEINLINE GenericValue* SetElementsPointer(GenericValue* elements) { return RAPIDJSON_SETPOINTER(GenericValue, data_.a.elements, elements); }
+ RAPIDJSON_FORCEINLINE Member* GetMembersPointer() const { return RAPIDJSON_GETPOINTER(Member, data_.o.members); }
+ RAPIDJSON_FORCEINLINE Member* SetMembersPointer(Member* members) { return RAPIDJSON_SETPOINTER(Member, data_.o.members, members); }
// Initialize this value as array with initial data, without calling destructor.
void SetArrayRaw(GenericValue* values, SizeType count, Allocator& allocator) {
- flags_ = kArrayFlag;
+ data_.f.flags = kArrayFlag;
if (count) {
- data_.a.elements = static_cast<GenericValue*>(allocator.Malloc(count * sizeof(GenericValue)));
- std::memcpy(data_.a.elements, values, count * sizeof(GenericValue));
+ GenericValue* e = static_cast<GenericValue*>(allocator.Malloc(count * sizeof(GenericValue)));
+ SetElementsPointer(e);
+ std::memcpy(e, values, count * sizeof(GenericValue));
}
else
- data_.a.elements = NULL;
+ SetElementsPointer(0);
data_.a.size = data_.a.capacity = count;
}
//! Initialize this value as object with initial data, without calling destructor.
void SetObjectRaw(Member* members, SizeType count, Allocator& allocator) {
- flags_ = kObjectFlag;
+ data_.f.flags = kObjectFlag;
if (count) {
- data_.o.members = static_cast<Member*>(allocator.Malloc(count * sizeof(Member)));
- std::memcpy(data_.o.members, members, count * sizeof(Member));
+ Member* m = static_cast<Member*>(allocator.Malloc(count * sizeof(Member)));
+ SetMembersPointer(m);
+ std::memcpy(m, members, count * sizeof(Member));
}
else
- data_.o.members = NULL;
+ SetMembersPointer(0);
data_.o.size = data_.o.capacity = count;
}
//! Initialize this value as constant string, without calling destructor.
void SetStringRaw(StringRefType s) RAPIDJSON_NOEXCEPT {
- flags_ = kConstStringFlag;
- data_.s.str = s;
+ data_.f.flags = kConstStringFlag;
+ SetStringPointer(s);
data_.s.length = s.length;
}
//! Initialize this value as copy string with initial data, without calling destructor.
void SetStringRaw(StringRefType s, Allocator& allocator) {
- Ch* str = NULL;
- if(ShortString::Usable(s.length)) {
- flags_ = kShortStringFlag;
+ Ch* str = 0;
+ if (ShortString::Usable(s.length)) {
+ data_.f.flags = kShortStringFlag;
data_.ss.SetLength(s.length);
str = data_.ss.str;
} else {
- flags_ = kCopyStringFlag;
+ data_.f.flags = kCopyStringFlag;
data_.s.length = s.length;
str = static_cast<Ch *>(allocator.Malloc((s.length + 1) * sizeof(Ch)));
- data_.s.str = str;
+ SetStringPointer(str);
}
std::memcpy(str, s, s.length * sizeof(Ch));
str[s.length] = '\0';
@@ -1768,8 +1969,8 @@ private:
//! Assignment without calling destructor
void RawAssign(GenericValue& rhs) RAPIDJSON_NOEXCEPT {
data_ = rhs.data_;
- flags_ = rhs.flags_;
- rhs.flags_ = kNullFlag;
+ // data_.f.flags = rhs.data_.f.flags;
+ rhs.data_.f.flags = kNullFlag;
}
template <typename SourceAllocator>
@@ -1789,7 +1990,6 @@ private:
}
Data data_;
- unsigned flags_;
};
//! GenericValue with UTF8 encoding
@@ -2025,6 +2225,42 @@ public:
GenericDocument& Parse(const Ch* str) {
return Parse<kParseDefaultFlags>(str);
}
+
+ template <unsigned parseFlags, typename SourceEncoding>
+ GenericDocument& Parse(const typename SourceEncoding::Ch* str, size_t length) {
+ RAPIDJSON_ASSERT(!(parseFlags & kParseInsituFlag));
+ MemoryStream ms(static_cast<const char*>(str), length * sizeof(typename SourceEncoding::Ch));
+ EncodedInputStream<SourceEncoding, MemoryStream> is(ms);
+ ParseStream<parseFlags, SourceEncoding>(is);
+ return *this;
+ }
+
+ template <unsigned parseFlags>
+ GenericDocument& Parse(const Ch* str, size_t length) {
+ return Parse<parseFlags, Encoding>(str, length);
+ }
+
+ GenericDocument& Parse(const Ch* str, size_t length) {
+ return Parse<kParseDefaultFlags>(str, length);
+ }
+
+#if RAPIDJSON_HAS_STDSTRING
+ template <unsigned parseFlags, typename SourceEncoding>
+ GenericDocument& Parse(const std::basic_string<typename SourceEncoding::Ch>& str) {
+ // c_str() is constant complexity according to standard. Should be faster than Parse(const char*, size_t)
+ return Parse<parseFlags, SourceEncoding>(str.c_str());
+ }
+
+ template <unsigned parseFlags>
+ GenericDocument& Parse(const std::basic_string<Ch>& str) {
+ return Parse<parseFlags, Encoding>(str.c_str());
+ }
+
+ GenericDocument& Parse(const std::basic_string<Ch>& str) {
+ return Parse<kParseDefaultFlags>(str);
+ }
+#endif // RAPIDJSON_HAS_STDSTRING
+
//!@}
//!@name Handling parse errors
@@ -2088,6 +2324,14 @@ public:
bool Uint64(uint64_t i) { new (stack_.template Push<ValueType>()) ValueType(i); return true; }
bool Double(double d) { new (stack_.template Push<ValueType>()) ValueType(d); return true; }
+ bool RawNumber(const Ch* str, SizeType length, bool copy) {
+ if (copy)
+ new (stack_.template Push<ValueType>()) ValueType(str, length, GetAllocator());
+ else
+ new (stack_.template Push<ValueType>()) ValueType(str, length);
+ return true;
+ }
+
bool String(const Ch* str, SizeType length, bool copy) {
if (copy)
new (stack_.template Push<ValueType>()) ValueType(str, length, GetAllocator());
@@ -2158,20 +2402,159 @@ GenericValue<Encoding,Allocator>::GenericValue(const GenericValue<Encoding,Sourc
}
break;
case kStringType:
- if (rhs.flags_ == kConstStringFlag) {
- flags_ = rhs.flags_;
+ if (rhs.data_.f.flags == kConstStringFlag) {
+ data_.f.flags = rhs.data_.f.flags;
data_ = *reinterpret_cast<const Data*>(&rhs.data_);
} else {
SetStringRaw(StringRef(rhs.GetString(), rhs.GetStringLength()), allocator);
}
break;
default:
- flags_ = rhs.flags_;
+ data_.f.flags = rhs.data_.f.flags;
data_ = *reinterpret_cast<const Data*>(&rhs.data_);
break;
}
}
+//! Helper class for accessing Value of array type.
+/*!
+ Instance of this helper class is obtained by \c GenericValue::GetArray().
+ In addition to all APIs for array type, it provides range-based for loop if \c RAPIDJSON_HAS_CXX11_RANGE_FOR=1.
+*/
+template <bool Const, typename ValueT>
+class GenericArray {
+public:
+ typedef GenericArray<true, ValueT> ConstArray;
+ typedef GenericArray<false, ValueT> Array;
+ typedef ValueT PlainType;
+ typedef typename internal::MaybeAddConst<Const,PlainType>::Type ValueType;
+ typedef ValueType* ValueIterator; // This may be const or non-const iterator
+ typedef const ValueT* ConstValueIterator;
+ typedef typename ValueType::AllocatorType AllocatorType;
+ typedef typename ValueType::StringRefType StringRefType;
+
+ template <typename, typename>
+ friend class GenericValue;
+
+ GenericArray(const GenericArray& rhs) : value_(rhs.value_) {}
+ GenericArray& operator=(const GenericArray& rhs) { value_ = rhs.value_; return *this; }
+ ~GenericArray() {}
+
+ SizeType Size() const { return value_.Size(); }
+ SizeType Capacity() const { return value_.Capacity(); }
+ bool Empty() const { return value_.Empty(); }
+ void Clear() const { value_.Clear(); }
+ ValueType& operator[](SizeType index) const { return value_[index]; }
+ ValueIterator Begin() const { return value_.Begin(); }
+ ValueIterator End() const { return value_.End(); }
+ GenericArray Reserve(SizeType newCapacity, AllocatorType &allocator) const { value_.Reserve(newCapacity, allocator); return *this; }
+ GenericArray PushBack(ValueType& value, AllocatorType& allocator) const { value_.PushBack(value, allocator); return *this; }
+#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
+ GenericArray PushBack(ValueType&& value, AllocatorType& allocator) const { value_.PushBack(value, allocator); return *this; }
+#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS
+ GenericArray PushBack(StringRefType value, AllocatorType& allocator) const { value_.PushBack(value, allocator); return *this; }
+ template <typename T> RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (const GenericArray&)) PushBack(T value, AllocatorType& allocator) const { value_.PushBack(value, allocator); return *this; }
+ GenericArray PopBack() const { value_.PopBack(); return *this; }
+ ValueIterator Erase(ConstValueIterator pos) const { return value_.Erase(pos); }
+ ValueIterator Erase(ConstValueIterator first, ConstValueIterator last) const { return value_.Erase(first, last); }
+
+#if RAPIDJSON_HAS_CXX11_RANGE_FOR
+ ValueIterator begin() const { return value_.Begin(); }
+ ValueIterator end() const { return value_.End(); }
+#endif
+
+private:
+ GenericArray();
+ GenericArray(ValueType& value) : value_(value) {}
+ ValueType& value_;
+};
+
+//! Helper class for accessing Value of object type.
+/*!
+ Instance of this helper class is obtained by \c GenericValue::GetObject().
+ In addition to all APIs for array type, it provides range-based for loop if \c RAPIDJSON_HAS_CXX11_RANGE_FOR=1.
+*/
+template <bool Const, typename ValueT>
+class GenericObject {
+public:
+ typedef GenericObject<true, ValueT> ConstObject;
+ typedef GenericObject<false, ValueT> Object;
+ typedef ValueT PlainType;
+ typedef typename internal::MaybeAddConst<Const,PlainType>::Type ValueType;
+ typedef GenericMemberIterator<Const, typename ValueT::EncodingType, typename ValueT::AllocatorType> MemberIterator; // This may be const or non-const iterator
+ typedef GenericMemberIterator<true, typename ValueT::EncodingType, typename ValueT::AllocatorType> ConstMemberIterator;
+ typedef typename ValueType::AllocatorType AllocatorType;
+ typedef typename ValueType::StringRefType StringRefType;
+ typedef typename ValueType::EncodingType EncodingType;
+ typedef typename ValueType::Ch Ch;
+
+ template <typename, typename>
+ friend class GenericValue;
+
+ GenericObject(const GenericObject& rhs) : value_(rhs.value_) {}
+ GenericObject& operator=(const GenericObject& rhs) { value_ = rhs.value_; return *this; }
+ ~GenericObject() {}
+
+ SizeType MemberCount() const { return value_.MemberCount(); }
+ bool ObjectEmpty() const { return value_.ObjectEmpty(); }
+ template <typename T> ValueType& operator[](T* name) const { return value_[name]; }
+ template <typename SourceAllocator> ValueType& operator[](const GenericValue<EncodingType, SourceAllocator>& name) const { return value_[name]; }
+#if RAPIDJSON_HAS_STDSTRING
+ ValueType& operator[](const std::basic_string<Ch>& name) const { return value_[name]; }
+#endif
+ MemberIterator MemberBegin() const { return value_.MemberBegin(); }
+ MemberIterator MemberEnd() const { return value_.MemberEnd(); }
+ bool HasMember(const Ch* name) const { return value_.HasMember(name); }
+#if RAPIDJSON_HAS_STDSTRING
+ bool HasMember(const std::basic_string<Ch>& name) const { return value_.HasMember(name); }
+#endif
+ template <typename SourceAllocator> bool HasMember(const GenericValue<EncodingType, SourceAllocator>& name) const { return value_.HasMember(name); }
+ MemberIterator FindMember(const Ch* name) const { value_.FindMember(name); }
+ template <typename SourceAllocator> MemberIterator FindMember(const GenericValue<EncodingType, SourceAllocator>& name) const { value_.FindMember(name); }
+#if RAPIDJSON_HAS_STDSTRING
+ MemberIterator FindMember(const std::basic_string<Ch>& name) const { return value_.FindMember(name); }
+#endif
+ GenericObject AddMember(ValueType& name, ValueType& value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
+ GenericObject AddMember(ValueType& name, StringRefType value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
+#if RAPIDJSON_HAS_STDSTRING
+ GenericObject AddMember(ValueType& name, std::basic_string<Ch>& value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
+#endif
+ template <typename T> RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (ValueType&)) AddMember(ValueType& name, T value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
+#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
+ GenericObject AddMember(ValueType&& name, ValueType&& value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
+ GenericObject AddMember(ValueType&& name, ValueType& value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
+ GenericObject AddMember(ValueType& name, ValueType&& value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
+ GenericObject AddMember(StringRefType name, ValueType&& value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
+#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS
+ GenericObject AddMember(StringRefType name, ValueType& value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
+ GenericObject AddMember(StringRefType name, StringRefType value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
+ template <typename T> RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (GenericObject)) AddMember(StringRefType name, T value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
+ void RemoveAllMembers() { return value_.RemoveAllMembers(); }
+ bool RemoveMember(const Ch* name) const { return value_.RemoveMember(name); }
+#if RAPIDJSON_HAS_STDSTRING
+ bool RemoveMember(const std::basic_string<Ch>& name) const { return value_.RemoveMember(name); }
+#endif
+ template <typename SourceAllocator> bool RemoveMember(const GenericValue<EncodingType, SourceAllocator>& name) const { return value_.RemoveMember(name); }
+ MemberIterator RemoveMember(MemberIterator m) const { return value_.RemoveMember(m); }
+ MemberIterator EraseMember(ConstMemberIterator pos) const { return value_.EraseMember(pos); }
+ MemberIterator EraseMember(ConstMemberIterator first, ConstMemberIterator last) const { return value_.EraseMember(first, last); }
+ bool EraseMember(const Ch* name) const { return value_.EraseMember(name); }
+#if RAPIDJSON_HAS_STDSTRING
+ bool EraseMember(const std::basic_string<Ch>& name) const { return EraseMember(ValueType(StringRef(name))); }
+#endif
+ template <typename SourceAllocator> bool EraseMember(const GenericValue<EncodingType, SourceAllocator>& name) const { return value_.EraseMember(name); }
+
+#if RAPIDJSON_HAS_CXX11_RANGE_FOR
+ MemberIterator begin() const { return value_.MemberBegin(); }
+ MemberIterator end() const { return value_.MemberEnd(); }
+#endif
+
+private:
+ GenericObject();
+ GenericObject(ValueType& value) : value_(value) {}
+ ValueType& value_;
+};
+
RAPIDJSON_NAMESPACE_END
#ifdef _MSC_VER
diff --git a/3rdparty/rapidjson/include/rapidjson/encodedstream.h b/3rdparty/rapidjson/include/rapidjson/encodedstream.h
index 87d09bbb150..c402e5c3f0e 100644
--- a/3rdparty/rapidjson/include/rapidjson/encodedstream.h
+++ b/3rdparty/rapidjson/include/rapidjson/encodedstream.h
@@ -16,6 +16,7 @@
#define RAPIDJSON_ENCODEDSTREAM_H_
#include "stream.h"
+#include "memorystream.h"
#ifdef __GNUC__
RAPIDJSON_DIAG_PUSH
@@ -62,6 +63,30 @@ private:
Ch current_;
};
+//! Specialized for UTF8 MemoryStream.
+template <>
+class EncodedInputStream<UTF8<>, MemoryStream> {
+public:
+ typedef UTF8<>::Ch Ch;
+
+ EncodedInputStream(MemoryStream& is) : is_(is) {
+ if (static_cast<unsigned char>(is_.Peek()) == 0xEFu) is_.Take();
+ if (static_cast<unsigned char>(is_.Peek()) == 0xBBu) is_.Take();
+ if (static_cast<unsigned char>(is_.Peek()) == 0xBFu) is_.Take();
+ }
+ Ch Peek() const { return is_.Peek(); }
+ Ch Take() { return is_.Take(); }
+ size_t Tell() const { return is_.Tell(); }
+
+ // Not implemented
+ void Put(Ch) {}
+ void Flush() {}
+ Ch* PutBegin() { return 0; }
+ size_t PutEnd(Ch*) { return 0; }
+
+ MemoryStream& is_;
+};
+
//! Output byte stream wrapper with statically bound encoding.
/*!
\tparam Encoding The interpretation of encoding of the stream. Either UTF8, UTF16LE, UTF16BE, UTF32LE, UTF32BE.
diff --git a/3rdparty/rapidjson/include/rapidjson/internal/dtoa.h b/3rdparty/rapidjson/include/rapidjson/internal/dtoa.h
index 940d61a0548..bc454960f11 100644
--- a/3rdparty/rapidjson/include/rapidjson/internal/dtoa.h
+++ b/3rdparty/rapidjson/include/rapidjson/internal/dtoa.h
@@ -29,6 +29,7 @@ namespace internal {
#ifdef __GNUC__
RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(effc++)
+RAPIDJSON_DIAG_OFF(array-bounds) // some gcc versions generate wrong warnings https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59124
#endif
inline void GrisuRound(char* buffer, int len, uint64_t delta, uint64_t rest, uint64_t ten_kappa, uint64_t wp_w) {
@@ -148,7 +149,7 @@ inline char* WriteExponent(int K, char* buffer) {
inline char* Prettify(char* buffer, int length, int k, int maxDecimalPlaces) {
const int kk = length + k; // 10^(kk-1) <= v < 10^kk
- if (length <= kk && kk <= 21) {
+ if (0 <= k && kk <= 21) {
// 1234e7 -> 12340000000
for (int i = length; i < kk; i++)
buffer[i] = '0';
@@ -160,7 +161,7 @@ inline char* Prettify(char* buffer, int length, int k, int maxDecimalPlaces) {
// 1234e-2 -> 12.34
std::memmove(&buffer[kk + 1], &buffer[kk], static_cast<size_t>(length - kk));
buffer[kk] = '.';
- if (length > kk + maxDecimalPlaces) {
+ if (0 > k + maxDecimalPlaces) {
// When maxDecimalPlaces = 2, 1.2345 -> 1.23, 1.102 -> 1.1
// Remove extra trailing zeros (at least one) after truncation.
for (int i = kk + maxDecimalPlaces; i > kk + 1; i--)
@@ -179,7 +180,7 @@ inline char* Prettify(char* buffer, int length, int k, int maxDecimalPlaces) {
buffer[1] = '.';
for (int i = 2; i < offset; i++)
buffer[i] = '0';
- if (length + offset > maxDecimalPlaces) {
+ if (length - kk > maxDecimalPlaces) {
// When maxDecimalPlaces = 2, 0.123 -> 0.12, 0.102 -> 0.1
// Remove extra trailing zeros (at least one) after truncation.
for (int i = maxDecimalPlaces + 1; i > 2; i--)
diff --git a/3rdparty/rapidjson/include/rapidjson/istreamwrapper.h b/3rdparty/rapidjson/include/rapidjson/istreamwrapper.h
index 9efeea24f46..c73586e6005 100644
--- a/3rdparty/rapidjson/include/rapidjson/istreamwrapper.h
+++ b/3rdparty/rapidjson/include/rapidjson/istreamwrapper.h
@@ -20,6 +20,11 @@ RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(padded)
#endif
+#ifdef _MSC_VER
+RAPIDJSON_DIAG_PUSH
+RAPIDJSON_DIAG_OFF(4351) // new behavior: elements of array 'array' will be default initialized
+#endif
+
RAPIDJSON_NAMESPACE_BEGIN
//! Wrapper of \c std::basic_istream into RapidJSON's Stream concept.
@@ -98,7 +103,7 @@ private:
typedef BasicIStreamWrapper<std::istream> IStreamWrapper;
typedef BasicIStreamWrapper<std::wistream> WIStreamWrapper;
-#ifdef __clang__
+#if defined(__clang__) || defined(_MSC_VER)
RAPIDJSON_DIAG_POP
#endif
diff --git a/3rdparty/rapidjson/include/rapidjson/memorystream.h b/3rdparty/rapidjson/include/rapidjson/memorystream.h
index 7381e0b7dd2..1d71d8a4f0e 100644
--- a/3rdparty/rapidjson/include/rapidjson/memorystream.h
+++ b/3rdparty/rapidjson/include/rapidjson/memorystream.h
@@ -42,8 +42,8 @@ struct MemoryStream {
MemoryStream(const Ch *src, size_t size) : src_(src), begin_(src), end_(src + size), size_(size) {}
- Ch Peek() const { return (src_ == end_) ? '\0' : *src_; }
- Ch Take() { return (src_ == end_) ? '\0' : *src_++; }
+ Ch Peek() const { return RAPIDJSON_UNLIKELY(src_ == end_) ? '\0' : *src_; }
+ Ch Take() { return RAPIDJSON_UNLIKELY(src_ == end_) ? '\0' : *src_++; }
size_t Tell() const { return static_cast<size_t>(src_ - begin_); }
Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
diff --git a/3rdparty/rapidjson/include/rapidjson/prettywriter.h b/3rdparty/rapidjson/include/rapidjson/prettywriter.h
index c74e1f10b01..5ec4ccc3f75 100644
--- a/3rdparty/rapidjson/include/rapidjson/prettywriter.h
+++ b/3rdparty/rapidjson/include/rapidjson/prettywriter.h
@@ -74,6 +74,12 @@ public:
bool Uint64(uint64_t u64) { PrettyPrefix(kNumberType); return Base::WriteUint64(u64); }
bool Double(double d) { PrettyPrefix(kNumberType); return Base::WriteDouble(d); }
+ bool RawNumber(const Ch* str, SizeType length, bool copy = false) {
+ (void)copy;
+ PrettyPrefix(kNumberType);
+ return Base::WriteString(str, length);
+ }
+
bool String(const Ch* str, SizeType length, bool copy = false) {
(void)copy;
PrettyPrefix(kStringType);
diff --git a/3rdparty/rapidjson/include/rapidjson/rapidjson.h b/3rdparty/rapidjson/include/rapidjson/rapidjson.h
index 7a5db71bd0a..c4410640ff1 100644
--- a/3rdparty/rapidjson/include/rapidjson/rapidjson.h
+++ b/3rdparty/rapidjson/include/rapidjson/rapidjson.h
@@ -159,7 +159,7 @@
*/
#ifndef RAPIDJSON_NO_INT64DEFINE
//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN
-#ifdef _MSC_VER
+#if defined(_MSC_VER) && (_MSC_VER < 1800) // Visual Studio 2013
#include "msinttypes/stdint.h"
#include "msinttypes/inttypes.h"
#else
@@ -265,7 +265,8 @@
\param x pointer to align
Some machines require strict data alignment. Currently the default uses 4 bytes
- alignment. User can customize by defining the RAPIDJSON_ALIGN function macro.
+ alignment on 32-bit platforms and 8 bytes alignment for 64-bit platforms.
+ User can customize by defining the RAPIDJSON_ALIGN function macro.
*/
#ifndef RAPIDJSON_ALIGN
#if RAPIDJSON_64BIT == 1
@@ -289,6 +290,36 @@
#endif
///////////////////////////////////////////////////////////////////////////////
+// RAPIDJSON_48BITPOINTER_OPTIMIZATION
+
+//! Use only lower 48-bit address for some pointers.
+/*!
+ \ingroup RAPIDJSON_CONFIG
+
+ This optimization uses the fact that current X86-64 architecture only implement lower 48-bit virtual address.
+ The higher 16-bit can be used for storing other data.
+ \c GenericValue uses this optimization to reduce its size form 24 bytes to 16 bytes in 64-bit architecture.
+*/
+#ifndef RAPIDJSON_48BITPOINTER_OPTIMIZATION
+#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)
+#define RAPIDJSON_48BITPOINTER_OPTIMIZATION 1
+#else
+#define RAPIDJSON_48BITPOINTER_OPTIMIZATION 0
+#endif
+#endif // RAPIDJSON_48BITPOINTER_OPTIMIZATION
+
+#if RAPIDJSON_48BITPOINTER_OPTIMIZATION == 1
+#if RAPIDJSON_64BIT != 1
+#error RAPIDJSON_48BITPOINTER_OPTIMIZATION can only be set to 1 when RAPIDJSON_64BIT=1
+#endif
+#define RAPIDJSON_SETPOINTER(type, p, x) (p = reinterpret_cast<type *>((reinterpret_cast<uintptr_t>(p) & static_cast<uintptr_t>(RAPIDJSON_UINT64_C2(0xFFFF0000, 0x00000000))) | reinterpret_cast<uintptr_t>(reinterpret_cast<const void*>(x))))
+#define RAPIDJSON_GETPOINTER(type, p) (reinterpret_cast<type *>(reinterpret_cast<uintptr_t>(p) & static_cast<uintptr_t>(RAPIDJSON_UINT64_C2(0x0000FFFF, 0xFFFFFFFF))))
+#else
+#define RAPIDJSON_SETPOINTER(type, p, x) (p = (x))
+#define RAPIDJSON_GETPOINTER(type, p) (p)
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
// RAPIDJSON_SSE2/RAPIDJSON_SSE42/RAPIDJSON_SIMD
/*! \def RAPIDJSON_SIMD
@@ -421,7 +452,7 @@ RAPIDJSON_NAMESPACE_END
#if defined(__GNUC__) || defined(__clang__)
#define RAPIDJSON_LIKELY(x) __builtin_expect(!!(x), 1)
#else
-#define RAPIDJSON_LIKELY(x) x
+#define RAPIDJSON_LIKELY(x) (x)
#endif
#endif
@@ -434,7 +465,7 @@ RAPIDJSON_NAMESPACE_END
#if defined(__GNUC__) || defined(__clang__)
#define RAPIDJSON_UNLIKELY(x) __builtin_expect(!!(x), 0)
#else
-#define RAPIDJSON_UNLIKELY(x) x
+#define RAPIDJSON_UNLIKELY(x) (x)
#endif
#endif
@@ -530,6 +561,17 @@ RAPIDJSON_NAMESPACE_END
#define RAPIDJSON_HAS_CXX11_TYPETRAITS 0
#endif
+#ifndef RAPIDJSON_HAS_CXX11_RANGE_FOR
+#if defined(__clang__)
+#define RAPIDJSON_HAS_CXX11_RANGE_FOR __has_feature(cxx_range_for)
+#elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,3,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \
+ (defined(_MSC_VER) && _MSC_VER >= 1700)
+#define RAPIDJSON_HAS_CXX11_RANGE_FOR 1
+#else
+#define RAPIDJSON_HAS_CXX11_RANGE_FOR 0
+#endif
+#endif // RAPIDJSON_HAS_CXX11_RANGE_FOR
+
//!@endcond
///////////////////////////////////////////////////////////////////////////////
diff --git a/3rdparty/rapidjson/include/rapidjson/reader.h b/3rdparty/rapidjson/include/rapidjson/reader.h
index ed6a1e77cc4..3d7bb634743 100644
--- a/3rdparty/rapidjson/include/rapidjson/reader.h
+++ b/3rdparty/rapidjson/include/rapidjson/reader.h
@@ -19,6 +19,7 @@
#include "allocators.h"
#include "stream.h"
+#include "encodedstream.h"
#include "internal/meta.h"
#include "internal/stack.h"
#include "internal/strtod.h"
@@ -147,6 +148,7 @@ enum ParseFlag {
kParseStopWhenDoneFlag = 8, //!< After parsing a complete JSON root from stream, stop further processing the rest of stream. When this flag is used, parser will not generate kParseErrorDocumentRootNotSingular error.
kParseFullPrecisionFlag = 16, //!< Parse number in full precision (but slower).
kParseCommentsFlag = 32, //!< Allow one-line (//) and multi-line (/**/) comments.
+ kParseNumbersAsStringsFlag = 64, //!< Parse all numbers (ints/doubles) as strings.
kParseDefaultFlags = RAPIDJSON_PARSE_DEFAULT_FLAGS //!< Default parse flags. Can be customized by defining RAPIDJSON_PARSE_DEFAULT_FLAGS
};
@@ -168,6 +170,8 @@ concept Handler {
bool Int64(int64_t i);
bool Uint64(uint64_t i);
bool Double(double d);
+ /// enabled via kParseNumbersAsStringsFlag, string is not null-terminated (use length)
+ bool RawNumber(const Ch* str, SizeType length, bool copy);
bool String(const Ch* str, SizeType length, bool copy);
bool StartObject();
bool Key(const Ch* str, SizeType length, bool copy);
@@ -198,6 +202,8 @@ struct BaseReaderHandler {
bool Int64(int64_t) { return static_cast<Override&>(*this).Default(); }
bool Uint64(uint64_t) { return static_cast<Override&>(*this).Default(); }
bool Double(double) { return static_cast<Override&>(*this).Default(); }
+ /// enabled via kParseNumbersAsStringsFlag, string is not null-terminated (use length)
+ bool RawNumber(const Ch* str, SizeType len, bool copy) { return static_cast<Override&>(*this).String(str, len, copy); }
bool String(const Ch*, SizeType, bool) { return static_cast<Override&>(*this).Default(); }
bool StartObject() { return static_cast<Override&>(*this).Default(); }
bool Key(const Ch* str, SizeType len, bool copy) { return static_cast<Override&>(*this).String(str, len, copy); }
@@ -259,6 +265,12 @@ void SkipWhitespace(InputStream& is) {
s.Take();
}
+inline const char* SkipWhitespace(const char* p, const char* end) {
+ while (p != end && (*p == ' ' || *p == '\n' || *p == '\r' || *p == '\t'))
+ ++p;
+ return p;
+}
+
#ifdef RAPIDJSON_SSE42
//! Skip whitespace with SSE 4.2 pcmpistrm instruction, testing 16 8-byte characters at once.
inline const char *SkipWhitespace_SIMD(const char* p) {
@@ -295,6 +307,34 @@ inline const char *SkipWhitespace_SIMD(const char* p) {
}
}
+inline const char *SkipWhitespace_SIMD(const char* p, const char* end) {
+ // Fast return for single non-whitespace
+ if (p != end && (*p == ' ' || *p == '\n' || *p == '\r' || *p == '\t'))
+ ++p;
+ else
+ return p;
+
+ // The middle of string using SIMD
+ static const char whitespace[16] = " \n\r\t";
+ const __m128i w = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&whitespace[0]));
+
+ for (; p <= end - 16; p += 16) {
+ const __m128i s = _mm_loadu_si128(reinterpret_cast<const __m128i *>(p));
+ const int r = _mm_cvtsi128_si32(_mm_cmpistrm(w, s, _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_BIT_MASK | _SIDD_NEGATIVE_POLARITY));
+ if (r != 0) { // some of characters is non-whitespace
+#ifdef _MSC_VER // Find the index of first non-whitespace
+ unsigned long offset;
+ _BitScanForward(&offset, r);
+ return p + offset;
+#else
+ return p + __builtin_ffs(r) - 1;
+#endif
+ }
+ }
+
+ return SkipWhitespace(p, end);
+}
+
#elif defined(RAPIDJSON_SSE2)
//! Skip whitespace with SSE2 instructions, testing 16 8-byte characters at once.
@@ -342,6 +382,44 @@ inline const char *SkipWhitespace_SIMD(const char* p) {
}
}
+inline const char *SkipWhitespace_SIMD(const char* p, const char* end) {
+ // Fast return for single non-whitespace
+ if (p != end && (*p == ' ' || *p == '\n' || *p == '\r' || *p == '\t'))
+ ++p;
+ else
+ return p;
+
+ // The rest of string
+ #define C16(c) { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }
+ static const char whitespaces[4][16] = { C16(' '), C16('\n'), C16('\r'), C16('\t') };
+ #undef C16
+
+ const __m128i w0 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&whitespaces[0][0]));
+ const __m128i w1 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&whitespaces[1][0]));
+ const __m128i w2 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&whitespaces[2][0]));
+ const __m128i w3 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&whitespaces[3][0]));
+
+ for (; p <= end - 16; p += 16) {
+ const __m128i s = _mm_loadu_si128(reinterpret_cast<const __m128i *>(p));
+ __m128i x = _mm_cmpeq_epi8(s, w0);
+ x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w1));
+ x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w2));
+ x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w3));
+ unsigned short r = static_cast<unsigned short>(~_mm_movemask_epi8(x));
+ if (r != 0) { // some of characters may be non-whitespace
+#ifdef _MSC_VER // Find the index of first non-whitespace
+ unsigned long offset;
+ _BitScanForward(&offset, r);
+ return p + offset;
+#else
+ return p + __builtin_ffs(r) - 1;
+#endif
+ }
+ }
+
+ return SkipWhitespace(p, end);
+}
+
#endif // RAPIDJSON_SSE2
#ifdef RAPIDJSON_SIMD
@@ -354,6 +432,10 @@ template<> inline void SkipWhitespace(InsituStringStream& is) {
template<> inline void SkipWhitespace(StringStream& is) {
is.src_ = SkipWhitespace_SIMD(is.src_);
}
+
+template<> inline void SkipWhitespace(EncodedInputStream<UTF8<>, MemoryStream>& is) {
+ is.is_.src_ = SkipWhitespace_SIMD(is.is_.src_, is.is_.end_);
+}
#endif // RAPIDJSON_SIMD
///////////////////////////////////////////////////////////////////////////////
@@ -976,6 +1058,8 @@ private:
RAPIDJSON_FORCEINLINE Ch Peek() const { return is.Peek(); }
RAPIDJSON_FORCEINLINE Ch TakePush() { return is.Take(); }
RAPIDJSON_FORCEINLINE Ch Take() { return is.Take(); }
+ RAPIDJSON_FORCEINLINE void Push(char) {}
+
size_t Tell() { return is.Tell(); }
size_t Length() { return 0; }
const char* Pop() { return 0; }
@@ -998,6 +1082,10 @@ private:
return Base::is.Take();
}
+ RAPIDJSON_FORCEINLINE void Push(char c) {
+ stackStream.Put(c);
+ }
+
size_t Length() { return stackStream.Length(); }
const char* Pop() {
@@ -1012,7 +1100,11 @@ private:
template<unsigned parseFlags, typename InputStream, typename Handler>
void ParseNumber(InputStream& is, Handler& handler) {
internal::StreamLocalCopy<InputStream> copy(is);
- NumberStream<InputStream, (parseFlags & kParseFullPrecisionFlag) != 0> s(*this, copy.s);
+ NumberStream<InputStream,
+ ((parseFlags & kParseNumbersAsStringsFlag) != 0) ?
+ ((parseFlags & kParseInsituFlag) == 0) :
+ ((parseFlags & kParseFullPrecisionFlag) != 0)> s(*this, copy.s);
+
size_t startOffset = s.Tell();
// Parse minus
@@ -1099,6 +1191,9 @@ private:
int expFrac = 0;
size_t decimalPosition;
if (Consume(s, '.')) {
+ if (((parseFlags & kParseNumbersAsStringsFlag) != 0) && ((parseFlags & kParseInsituFlag) == 0)) {
+ s.Push('.');
+ }
decimalPosition = s.Length();
if (RAPIDJSON_UNLIKELY(!(s.Peek() >= '0' && s.Peek() <= '9')))
@@ -1146,7 +1241,11 @@ private:
// Parse exp = e [ minus / plus ] 1*DIGIT
int exp = 0;
if (Consume(s, 'e') || Consume(s, 'E')) {
- if (!useDouble) {
+ if ( ((parseFlags & kParseNumbersAsStringsFlag) != 0) && ((parseFlags & kParseInsituFlag) == 0) ) {
+ s.Push( 'e' );
+ }
+
+ if (!useDouble) {
d = static_cast<double>(use64bit ? i64 : i);
useDouble = true;
}
@@ -1186,32 +1285,57 @@ private:
// Finish parsing, call event according to the type of number.
bool cont = true;
- size_t length = s.Length();
- const char* decimal = s.Pop(); // Pop stack no matter if it will be used or not.
- if (useDouble) {
- int p = exp + expFrac;
- if (parseFlags & kParseFullPrecisionFlag)
- d = internal::StrtodFullPrecision(d, p, decimal, length, decimalPosition, exp);
- else
- d = internal::StrtodNormalPrecision(d, p);
-
- cont = handler.Double(minus ? -d : d);
- }
- else {
- if (use64bit) {
- if (minus)
- cont = handler.Int64(static_cast<int64_t>(~i64 + 1));
- else
- cont = handler.Uint64(i64);
+ if (parseFlags & kParseNumbersAsStringsFlag) {
+ if (parseFlags & kParseInsituFlag) {
+ s.Pop(); // Pop stack no matter if it will be used or not.
+ typename InputStream::Ch* head = is.PutBegin();
+ const size_t length = s.Tell() - startOffset;
+ RAPIDJSON_ASSERT(length <= 0xFFFFFFFF);
+ // unable to insert the \0 character here, it will erase the comma after this number
+ const typename TargetEncoding::Ch* const str = reinterpret_cast<typename TargetEncoding::Ch*>(head);
+ cont = handler.RawNumber(str, SizeType(length), false);
}
else {
- if (minus)
- cont = handler.Int(static_cast<int32_t>(~i + 1));
- else
- cont = handler.Uint(i);
+ StackStream<typename TargetEncoding::Ch> stackStream(stack_);
+ SizeType numCharsToCopy = static_cast<SizeType>(s.Length());
+ while (numCharsToCopy--) {
+ Transcoder<SourceEncoding, TargetEncoding>::Transcode(is, stackStream);
+ }
+ stackStream.Put('\0');
+ const typename TargetEncoding::Ch* str = stackStream.Pop();
+ const SizeType length = static_cast<SizeType>(stackStream.Length()) - 1;
+ cont = handler.RawNumber(str, SizeType(length), true);
}
}
+ else {
+ size_t length = s.Length();
+ const char* decimal = s.Pop(); // Pop stack no matter if it will be used or not.
+
+ if (useDouble) {
+ int p = exp + expFrac;
+ if (parseFlags & kParseFullPrecisionFlag)
+ d = internal::StrtodFullPrecision(d, p, decimal, length, decimalPosition, exp);
+ else
+ d = internal::StrtodNormalPrecision(d, p);
+
+ cont = handler.Double(minus ? -d : d);
+ }
+ else {
+ if (use64bit) {
+ if (minus)
+ cont = handler.Int64(static_cast<int64_t>(~i64 + 1));
+ else
+ cont = handler.Uint64(i64);
+ }
+ else {
+ if (minus)
+ cont = handler.Int(static_cast<int32_t>(~i + 1));
+ else
+ cont = handler.Uint(i);
+ }
+ }
+ }
if (RAPIDJSON_UNLIKELY(!cont))
RAPIDJSON_PARSE_ERROR(kParseErrorTermination, startOffset);
}
diff --git a/3rdparty/rapidjson/include/rapidjson/schema.h b/3rdparty/rapidjson/include/rapidjson/schema.h
index e47f89aa3ba..26da8a6b085 100644
--- a/3rdparty/rapidjson/include/rapidjson/schema.h
+++ b/3rdparty/rapidjson/include/rapidjson/schema.h
@@ -183,6 +183,11 @@ public:
return WriteNumber(n);
}
+ bool RawNumber(const Ch* str, SizeType len, bool) {
+ WriteBuffer(kNumberType, str, len * sizeof(Ch));
+ return true;
+ }
+
bool String(const Ch* str, SizeType len, bool) {
WriteBuffer(kStringType, str, len * sizeof(Ch));
return true;
@@ -1322,7 +1327,7 @@ public:
\param remoteProvider An optional remote schema document provider for resolving remote reference. Can be null.
\param allocator An optional allocator instance for allocating memory. Can be null.
*/
- GenericSchemaDocument(const ValueType& document, IRemoteSchemaDocumentProviderType* remoteProvider = 0, Allocator* allocator = 0) :
+ GenericSchemaDocument(const ValueType& document, IRemoteSchemaDocumentProviderType* remoteProvider = 0, Allocator* allocator = 0) RAPIDJSON_NOEXCEPT :
remoteProvider_(remoteProvider),
allocator_(allocator),
ownAllocator_(),
@@ -1357,6 +1362,22 @@ public:
schemaRef_.ShrinkToFit(); // Deallocate all memory for ref
}
+#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
+ //! Move constructor in C++11
+ GenericSchemaDocument(GenericSchemaDocument&& rhs) RAPIDJSON_NOEXCEPT :
+ remoteProvider_(rhs.remoteProvider_),
+ allocator_(rhs.allocator_),
+ ownAllocator_(rhs.ownAllocator_),
+ root_(rhs.root_),
+ schemaMap_(std::move(rhs.schemaMap_)),
+ schemaRef_(std::move(rhs.schemaRef_))
+ {
+ rhs.remoteProvider_ = 0;
+ rhs.allocator_ = 0;
+ rhs.ownAllocator_ = 0;
+ }
+#endif
+
//! Destructor
~GenericSchemaDocument() {
while (!schemaMap_.Empty())
@@ -1369,6 +1390,11 @@ public:
const SchemaType& GetRoot() const { return *root_; }
private:
+ //! Prohibit copying
+ GenericSchemaDocument(const GenericSchemaDocument&);
+ //! Prohibit assignment
+ GenericSchemaDocument& operator=(const GenericSchemaDocument&);
+
struct SchemaRefEntry {
SchemaRefEntry(const PointerType& s, const PointerType& t, const SchemaType** outSchema, Allocator *allocator) : source(s, allocator), target(t, allocator), schema(outSchema) {}
PointerType source;
@@ -1658,6 +1684,8 @@ RAPIDJSON_MULTILINEMACRO_END
bool Int64(int64_t i) { RAPIDJSON_SCHEMA_HANDLE_VALUE_(Int64, (CurrentContext(), i), (i)); }
bool Uint64(uint64_t u) { RAPIDJSON_SCHEMA_HANDLE_VALUE_(Uint64, (CurrentContext(), u), (u)); }
bool Double(double d) { RAPIDJSON_SCHEMA_HANDLE_VALUE_(Double, (CurrentContext(), d), (d)); }
+ bool RawNumber(const Ch* str, SizeType length, bool copy)
+ { RAPIDJSON_SCHEMA_HANDLE_VALUE_(String, (CurrentContext(), str, length, copy), (str, length, copy)); }
bool String(const Ch* str, SizeType length, bool copy)
{ RAPIDJSON_SCHEMA_HANDLE_VALUE_(String, (CurrentContext(), str, length, copy), (str, length, copy)); }
diff --git a/3rdparty/rapidjson/include/rapidjson/writer.h b/3rdparty/rapidjson/include/rapidjson/writer.h
index a64c79fe245..2809f705841 100644
--- a/3rdparty/rapidjson/include/rapidjson/writer.h
+++ b/3rdparty/rapidjson/include/rapidjson/writer.h
@@ -23,6 +23,16 @@
#include "stringbuffer.h"
#include <new> // placement new
+#if defined(RAPIDJSON_SIMD) && defined(_MSC_VER)
+#include <intrin.h>
+#pragma intrinsic(_BitScanForward)
+#endif
+#ifdef RAPIDJSON_SSE42
+#include <nmmintrin.h>
+#elif defined(RAPIDJSON_SSE2)
+#include <emmintrin.h>
+#endif
+
#ifdef _MSC_VER
RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant
@@ -171,6 +181,12 @@ public:
*/
bool Double(double d) { Prefix(kNumberType); return WriteDouble(d); }
+ bool RawNumber(const Ch* str, SizeType length, bool copy = false) {
+ (void)copy;
+ Prefix(kNumberType);
+ return WriteString(str, length);
+ }
+
bool String(const Ch* str, SizeType length, bool copy = false) {
(void)copy;
Prefix(kStringType);
diff --git a/3rdparty/rapidjson/library.json b/3rdparty/rapidjson/library.json
index 47fd352ac7e..b59dabbc3d8 100644
--- a/3rdparty/rapidjson/library.json
+++ b/3rdparty/rapidjson/library.json
@@ -1,12 +1,12 @@
-{
- "name": "RapidJSON",
- "keywords": "json, sax, dom, parser, generator",
- "description": "A fast JSON parser/generator for C++ with both SAX/DOM style API",
- "include": "include",
- "examples": "example/*/*.cpp",
- "repository":
- {
- "type": "git",
- "url": "https://github.com/miloyip/rapidjson"
- }
-}
+{
+ "name": "RapidJSON",
+ "keywords": "json, sax, dom, parser, generator",
+ "description": "A fast JSON parser/generator for C++ with both SAX/DOM style API",
+ "include": "include",
+ "examples": "example/*/*.cpp",
+ "repository":
+ {
+ "type": "git",
+ "url": "https://github.com/miloyip/rapidjson"
+ }
+}
diff --git a/3rdparty/rapidjson/test/perftest/CMakeLists.txt b/3rdparty/rapidjson/test/perftest/CMakeLists.txt
index c88cf707451..c33aae469a3 100644
--- a/3rdparty/rapidjson/test/perftest/CMakeLists.txt
+++ b/3rdparty/rapidjson/test/perftest/CMakeLists.txt
@@ -10,6 +10,15 @@ target_link_libraries(perftest ${TEST_LIBRARIES})
add_dependencies(tests perftest)
+find_program(CCACHE_FOUND ccache)
+if(CCACHE_FOUND)
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
+ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments -fcolor-diagnostics")
+ endif()
+endif(CCACHE_FOUND)
+
IF(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug"))
add_test(NAME perftest
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/perftest
diff --git a/3rdparty/rapidjson/test/perftest/perftest.h b/3rdparty/rapidjson/test/perftest/perftest.h
index 029940934c7..b098e414720 100644
--- a/3rdparty/rapidjson/test/perftest/perftest.h
+++ b/3rdparty/rapidjson/test/perftest/perftest.h
@@ -30,6 +30,8 @@
# define RAPIDJSON_SSE2
#endif
+#define RAPIDJSON_HAS_STDSTRING 1
+
////////////////////////////////////////////////////////////////////////////////
// Google Test
diff --git a/3rdparty/rapidjson/test/perftest/rapidjsontest.cpp b/3rdparty/rapidjson/test/perftest/rapidjsontest.cpp
index 74424ac332b..675db3182a5 100644
--- a/3rdparty/rapidjson/test/perftest/rapidjsontest.cpp
+++ b/3rdparty/rapidjson/test/perftest/rapidjsontest.cpp
@@ -187,6 +187,25 @@ TEST_F(RapidJson, SIMD_SUFFIX(DocumentParse_MemoryPoolAllocator)) {
}
}
+TEST_F(RapidJson, SIMD_SUFFIX(DocumentParseLength_MemoryPoolAllocator)) {
+ for (size_t i = 0; i < kTrialCount; i++) {
+ Document doc;
+ doc.Parse(json_, length_);
+ ASSERT_TRUE(doc.IsObject());
+ }
+}
+
+#if RAPIDJSON_HAS_STDSTRING
+TEST_F(RapidJson, SIMD_SUFFIX(DocumentParseStdString_MemoryPoolAllocator)) {
+ const std::string s(json_, length_);
+ for (size_t i = 0; i < kTrialCount; i++) {
+ Document doc;
+ doc.Parse(s);
+ ASSERT_TRUE(doc.IsObject());
+ }
+}
+#endif
+
TEST_F(RapidJson, SIMD_SUFFIX(DocumentParseIterative_MemoryPoolAllocator)) {
for (size_t i = 0; i < kTrialCount; i++) {
Document doc;
diff --git a/3rdparty/rapidjson/test/unittest/CMakeLists.txt b/3rdparty/rapidjson/test/unittest/CMakeLists.txt
index 0ae166282e5..02c15327e6b 100644
--- a/3rdparty/rapidjson/test/unittest/CMakeLists.txt
+++ b/3rdparty/rapidjson/test/unittest/CMakeLists.txt
@@ -25,6 +25,15 @@ set(UNITTEST_SOURCES
valuetest.cpp
writertest.cpp)
+find_program(CCACHE_FOUND ccache)
+if(CCACHE_FOUND)
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
+ set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
+ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments -fcolor-diagnostics")
+ endif()
+endif(CCACHE_FOUND)
+
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
diff --git a/3rdparty/rapidjson/test/unittest/documenttest.cpp b/3rdparty/rapidjson/test/unittest/documenttest.cpp
index afe696a1e21..0c9ffaba442 100644
--- a/3rdparty/rapidjson/test/unittest/documenttest.cpp
+++ b/3rdparty/rapidjson/test/unittest/documenttest.cpp
@@ -34,6 +34,8 @@ void ParseCheck(DocumentType& doc) {
typedef typename DocumentType::ValueType ValueType;
EXPECT_FALSE(doc.HasParseError());
+ if (doc.HasParseError())
+ printf("Error: %d at %zu\n", static_cast<int>(doc.GetParseError()), doc.GetErrorOffset());
EXPECT_TRUE(static_cast<ParseResult>(doc));
EXPECT_TRUE(doc.IsObject());
@@ -93,6 +95,26 @@ void ParseTest() {
doc.ParseInsitu(buffer);
ParseCheck(doc);
free(buffer);
+
+ // Parse(const Ch*, size_t)
+ size_t length = strlen(json);
+ buffer = reinterpret_cast<char*>(malloc(length * 2));
+ memcpy(buffer, json, length);
+ memset(buffer + length, 'X', length);
+#if RAPIDJSON_HAS_STDSTRING
+ std::string s2(buffer, length); // backup buffer
+#endif
+ doc.SetNull();
+ doc.Parse(buffer, length);
+ free(buffer);
+ ParseCheck(doc);
+
+#if RAPIDJSON_HAS_STDSTRING
+ // Parse(std::string)
+ doc.SetNull();
+ doc.Parse(s2);
+ ParseCheck(doc);
+#endif
}
TEST(Document, Parse) {
@@ -140,6 +162,47 @@ static FILE* OpenEncodedFile(const char* filename) {
return 0;
}
+TEST(Document, Parse_Encoding) {
+ const char* json = " { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } ";
+
+ typedef GenericDocument<UTF16<> > DocumentType;
+ DocumentType doc;
+
+ // Parse<unsigned, SourceEncoding>(const SourceEncoding::Ch*)
+ // doc.Parse<kParseDefaultFlags, UTF8<> >(json);
+ // EXPECT_FALSE(doc.HasParseError());
+ // EXPECT_EQ(0, StrCmp(doc[L"hello"].GetString(), L"world"));
+
+ // Parse<unsigned, SourceEncoding>(const SourceEncoding::Ch*, size_t)
+ size_t length = strlen(json);
+ char* buffer = reinterpret_cast<char*>(malloc(length * 2));
+ memcpy(buffer, json, length);
+ memset(buffer + length, 'X', length);
+#if RAPIDJSON_HAS_STDSTRING
+ std::string s2(buffer, length); // backup buffer
+#endif
+ doc.SetNull();
+ doc.Parse<kParseDefaultFlags, UTF8<> >(buffer, length);
+ free(buffer);
+ EXPECT_FALSE(doc.HasParseError());
+ if (doc.HasParseError())
+ printf("Error: %d at %zu\n", static_cast<int>(doc.GetParseError()), doc.GetErrorOffset());
+ EXPECT_EQ(0, StrCmp(doc[L"hello"].GetString(), L"world"));
+
+#if RAPIDJSON_HAS_STDSTRING
+ // Parse<unsigned, SourceEncoding>(std::string)
+ doc.SetNull();
+
+#if defined(_MSC_VER) && _MSC_VER < 1800
+ doc.Parse<kParseDefaultFlags, UTF8<> >(s2.c_str()); // VS2010 or below cannot handle templated function overloading. Use const char* instead.
+#else
+ doc.Parse<kParseDefaultFlags, UTF8<> >(s2);
+#endif
+ EXPECT_FALSE(doc.HasParseError());
+ EXPECT_EQ(0, StrCmp(doc[L"hello"].GetString(), L"world"));
+#endif
+}
+
TEST(Document, ParseStream_EncodedInputStream) {
// UTF8 -> UTF16
FILE* fp = OpenEncodedFile("utf8.json");
diff --git a/3rdparty/rapidjson/test/unittest/dtoatest.cpp b/3rdparty/rapidjson/test/unittest/dtoatest.cpp
index da020957211..fe28271f976 100644
--- a/3rdparty/rapidjson/test/unittest/dtoatest.cpp
+++ b/3rdparty/rapidjson/test/unittest/dtoatest.cpp
@@ -81,6 +81,12 @@ TEST(dtoa, maxDecimalPlaces) {
TEST_DTOA(3, 2.225073858507201e-308, "0.0"); // Max subnormal positive double
TEST_DTOA(3, 2.2250738585072014e-308, "0.0"); // Min normal positive double
TEST_DTOA(3, 1.7976931348623157e308, "1.7976931348623157e308"); // Max double
+ TEST_DTOA(5, -0.14000000000000001, "-0.14");
+ TEST_DTOA(4, -0.14000000000000001, "-0.14");
+ TEST_DTOA(3, -0.14000000000000001, "-0.14");
+ TEST_DTOA(3, -0.10000000000000001, "-0.1");
+ TEST_DTOA(2, -0.10000000000000001, "-0.1");
+ TEST_DTOA(1, -0.10000000000000001, "-0.1");
#undef TEST_DTOA
}
diff --git a/3rdparty/rapidjson/test/unittest/readertest.cpp b/3rdparty/rapidjson/test/unittest/readertest.cpp
index a07e59a6c9f..32af8a86eec 100644
--- a/3rdparty/rapidjson/test/unittest/readertest.cpp
+++ b/3rdparty/rapidjson/test/unittest/readertest.cpp
@@ -1170,6 +1170,8 @@ struct IterativeParsingReaderHandler {
bool Double(double) { RAPIDJSON_ASSERT(LogCount < LogCapacity); Logs[LogCount++] = LOG_DOUBLE; return true; }
+ bool RawNumber(const Ch*, SizeType, bool) { RAPIDJSON_ASSERT(LogCount < LogCapacity); Logs[LogCount++] = LOG_STRING; return true; }
+
bool String(const Ch*, SizeType, bool) { RAPIDJSON_ASSERT(LogCount < LogCapacity); Logs[LogCount++] = LOG_STRING; return true; }
bool StartObject() { RAPIDJSON_ASSERT(LogCount < LogCapacity); Logs[LogCount++] = LOG_STARTOBJECT; return true; }
@@ -1349,12 +1351,13 @@ struct TerminateHandler {
bool Int64(int64_t) { return e != 4; }
bool Uint64(uint64_t) { return e != 5; }
bool Double(double) { return e != 6; }
- bool String(const char*, SizeType, bool) { return e != 7; }
- bool StartObject() { return e != 8; }
- bool Key(const char*, SizeType, bool) { return e != 9; }
- bool EndObject(SizeType) { return e != 10; }
- bool StartArray() { return e != 11; }
- bool EndArray(SizeType) { return e != 12; }
+ bool RawNumber(const char*, SizeType, bool) { return e != 7; }
+ bool String(const char*, SizeType, bool) { return e != 8; }
+ bool StartObject() { return e != 9; }
+ bool Key(const char*, SizeType, bool) { return e != 10; }
+ bool EndObject(SizeType) { return e != 11; }
+ bool StartArray() { return e != 12; }
+ bool EndArray(SizeType) { return e != 13; }
};
#define TEST_TERMINATION(e, json)\
@@ -1375,14 +1378,15 @@ TEST(Reader, ParseTerminationByHandler) {
TEST_TERMINATION(4, "[-1234567890123456789");
TEST_TERMINATION(5, "[1234567890123456789");
TEST_TERMINATION(6, "[0.5]");
- TEST_TERMINATION(7, "[\"a\"");
- TEST_TERMINATION(8, "[{");
- TEST_TERMINATION(9, "[{\"a\"");
- TEST_TERMINATION(10, "[{}");
- TEST_TERMINATION(10, "[{\"a\":1}"); // non-empty object
- TEST_TERMINATION(11, "{\"a\":[");
- TEST_TERMINATION(12, "{\"a\":[]");
- TEST_TERMINATION(12, "{\"a\":[1]"); // non-empty array
+ // RawNumber() is never called
+ TEST_TERMINATION(8, "[\"a\"");
+ TEST_TERMINATION(9, "[{");
+ TEST_TERMINATION(10, "[{\"a\"");
+ TEST_TERMINATION(11, "[{}");
+ TEST_TERMINATION(11, "[{\"a\":1}"); // non-empty object
+ TEST_TERMINATION(12, "{\"a\":[");
+ TEST_TERMINATION(13, "{\"a\":[]");
+ TEST_TERMINATION(13, "{\"a\":[1]"); // non-empty array
}
TEST(Reader, ParseComments) {
@@ -1508,6 +1512,46 @@ TEST(Reader, UnrecognizedComment) {
EXPECT_EQ(kParseErrorUnspecificSyntaxError, reader.GetParseErrorCode());
}
+struct NumbersAsStringsHandler {
+ bool Null() { return true; }
+ bool Bool(bool) { return true; }
+ bool Int(int) { return true; }
+ bool Uint(unsigned) { return true; }
+ bool Int64(int64_t) { return true; }
+ bool Uint64(uint64_t) { return true; }
+ bool Double(double) { return true; }
+ // 'str' is not null-terminated
+ bool RawNumber(const char* str, SizeType length, bool) {
+ EXPECT_TRUE(str != 0);
+ EXPECT_TRUE(strncmp(str, "3.1416", length) == 0);
+ return true;
+ }
+ bool String(const char*, SizeType, bool) { return true; }
+ bool StartObject() { return true; }
+ bool Key(const char*, SizeType, bool) { return true; }
+ bool EndObject(SizeType) { return true; }
+ bool StartArray() { return true; }
+ bool EndArray(SizeType) { return true; }
+};
+
+TEST(Reader, NumbersAsStrings) {
+ {
+ const char* json = "{ \"pi\": 3.1416 } ";
+ StringStream s(json);
+ NumbersAsStringsHandler h;
+ Reader reader;
+ EXPECT_TRUE(reader.Parse<kParseNumbersAsStringsFlag>(s, h));
+ }
+ {
+ char* json = StrDup("{ \"pi\": 3.1416 } ");
+ InsituStringStream s(json);
+ NumbersAsStringsHandler h;
+ Reader reader;
+ EXPECT_TRUE(reader.Parse<kParseInsituFlag|kParseNumbersAsStringsFlag>(s, h));
+ free(json);
+ }
+}
+
#ifdef __GNUC__
RAPIDJSON_DIAG_POP
#endif
diff --git a/3rdparty/rapidjson/test/unittest/schematest.cpp b/3rdparty/rapidjson/test/unittest/schematest.cpp
index 623c65ac61e..7182ad29426 100644
--- a/3rdparty/rapidjson/test/unittest/schematest.cpp
+++ b/3rdparty/rapidjson/test/unittest/schematest.cpp
@@ -1152,6 +1152,24 @@ TEST(SchemaValidatingWriter, Simple) {
EXPECT_TRUE(validator.GetInvalidDocumentPointer() == SchemaDocument::PointerType(""));
}
+#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
+
+static SchemaDocument ReturnSchemaDocument() {
+ Document sd;
+ sd.Parse("{ \"type\": [\"number\", \"string\"] }");
+ SchemaDocument s(sd);
+ return s;
+}
+
+TEST(Schema, Issue552) {
+ SchemaDocument s = ReturnSchemaDocument();
+ VALIDATE(s, "42", true);
+ VALIDATE(s, "\"Life, the universe, and everything\"", true);
+ INVALIDATE(s, "[\"Life\", \"the universe\", \"and everything\"]", "", "type", "");
+}
+
+#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS
+
#ifdef __clang__
RAPIDJSON_DIAG_POP
#endif
diff --git a/3rdparty/rapidjson/test/unittest/simdtest.cpp b/3rdparty/rapidjson/test/unittest/simdtest.cpp
index 6ded7402fbf..1b6fcef3a48 100644
--- a/3rdparty/rapidjson/test/unittest/simdtest.cpp
+++ b/3rdparty/rapidjson/test/unittest/simdtest.cpp
@@ -73,6 +73,28 @@ TEST(SIMD, SIMD_SUFFIX(SkipWhitespace)) {
TestSkipWhitespace<InsituStringStream>();
}
+TEST(SIMD, SIMD_SUFFIX(SkipWhitespace_EncodedMemoryStream)) {
+ for (size_t step = 1; step < 32; step++) {
+ char buffer[1024];
+ for (size_t i = 0; i < 1024; i++)
+ buffer[i] = " \t\r\n"[i % 4];
+ for (size_t i = 0; i < 1024; i += step)
+ buffer[i] = 'X';
+
+ MemoryStream ms(buffer, 1024);
+ EncodedInputStream<UTF8<>, MemoryStream> s(ms);
+ size_t i = 0;
+ for (;;) {
+ SkipWhitespace(s);
+ if (s.Peek() == '\0')
+ break;
+ //EXPECT_EQ(i, s.Tell());
+ EXPECT_EQ('X', s.Take());
+ i += step;
+ }
+ }
+}
+
struct ScanCopyUnescapedStringHandler : BaseReaderHandler<UTF8<>, ScanCopyUnescapedStringHandler> {
bool String(const char* str, size_t length, bool) {
memcpy(buffer, str, length + 1);
diff --git a/3rdparty/rapidjson/test/unittest/valuetest.cpp b/3rdparty/rapidjson/test/unittest/valuetest.cpp
index 5e88a77e3a3..d6c7492deae 100644
--- a/3rdparty/rapidjson/test/unittest/valuetest.cpp
+++ b/3rdparty/rapidjson/test/unittest/valuetest.cpp
@@ -23,6 +23,18 @@ RAPIDJSON_DIAG_OFF(c++98-compat)
using namespace rapidjson;
+TEST(Value, Size) {
+ if (sizeof(SizeType) == 4) {
+#if RAPIDJSON_48BITPOINTER_OPTIMIZATION
+ EXPECT_EQ(16, sizeof(Value));
+#elif RAPIDJSON_64BIT
+ EXPECT_EQ(24, sizeof(Value));
+#else
+ EXPECT_EQ(16, sizeof(Value));
+#endif
+ }
+}
+
TEST(Value, DefaultConstructor) {
Value x;
EXPECT_EQ(kNullType, x.GetType());
@@ -335,6 +347,12 @@ TEST(Value, True) {
Value z;
z.SetBool(true);
EXPECT_TRUE(z.IsTrue());
+
+ // Templated functions
+ EXPECT_TRUE(z.Is<bool>());
+ EXPECT_TRUE(z.Get<bool>());
+ EXPECT_FALSE(z.Set<bool>(false).Get<bool>());
+ EXPECT_TRUE(z.Set(true).Get<bool>());
}
TEST(Value, False) {
@@ -414,6 +432,12 @@ TEST(Value, Int) {
// operator=(int)
z = 5678;
EXPECT_EQ(5678, z.GetInt());
+
+ // Templated functions
+ EXPECT_TRUE(z.Is<int>());
+ EXPECT_EQ(5678, z.Get<int>());
+ EXPECT_EQ(5679, z.Set(5679).Get<int>());
+ EXPECT_EQ(5680, z.Set<int>(5680).Get<int>());
}
TEST(Value, Uint) {
@@ -453,6 +477,12 @@ TEST(Value, Uint) {
EXPECT_EQ(2147483648u, z.GetUint());
EXPECT_FALSE(z.IsInt());
EXPECT_TRUE(z.IsInt64()); // Issue 41: Incorrect parsing of unsigned int number types
+
+ // Templated functions
+ EXPECT_TRUE(z.Is<unsigned>());
+ EXPECT_EQ(2147483648u, z.Get<unsigned>());
+ EXPECT_EQ(2147483649u, z.Set(2147483649u).Get<unsigned>());
+ EXPECT_EQ(2147483650u, z.Set<unsigned>(2147483650u).Get<unsigned>());
}
TEST(Value, Int64) {
@@ -505,8 +535,15 @@ TEST(Value, Int64) {
EXPECT_FALSE(z.IsInt());
EXPECT_NEAR(-2147483649.0, z.GetDouble(), 0.0);
- z.SetInt64(static_cast<int64_t>(RAPIDJSON_UINT64_C2(0x80000000, 00000000)));
+ int64_t i = static_cast<int64_t>(RAPIDJSON_UINT64_C2(0x80000000, 00000000));
+ z.SetInt64(i);
EXPECT_DOUBLE_EQ(-9223372036854775808.0, z.GetDouble());
+
+ // Templated functions
+ EXPECT_TRUE(z.Is<int64_t>());
+ EXPECT_EQ(i, z.Get<int64_t>());
+ EXPECT_EQ(i - 1, z.Set(i - 1).Get<int64_t>());
+ EXPECT_EQ(i - 2, z.Set<int64_t>(i - 2).Get<int64_t>());
}
TEST(Value, Uint64) {
@@ -547,10 +584,17 @@ TEST(Value, Uint64) {
EXPECT_FALSE(z.IsUint());
EXPECT_TRUE(z.IsInt64());
- z.SetUint64(RAPIDJSON_UINT64_C2(0x80000000, 0x00000000)); // 2^63 cannot cast as int64
+ uint64_t u = RAPIDJSON_UINT64_C2(0x80000000, 0x00000000);
+ z.SetUint64(u); // 2^63 cannot cast as int64
EXPECT_FALSE(z.IsInt64());
- EXPECT_EQ(RAPIDJSON_UINT64_C2(0x80000000, 0x00000000), z.GetUint64()); // Issue 48
+ EXPECT_EQ(u, z.GetUint64()); // Issue 48
EXPECT_DOUBLE_EQ(9223372036854775808.0, z.GetDouble());
+
+ // Templated functions
+ EXPECT_TRUE(z.Is<uint64_t>());
+ EXPECT_EQ(u, z.Get<uint64_t>());
+ EXPECT_EQ(u + 1, z.Set(u + 1).Get<uint64_t>());
+ EXPECT_EQ(u + 2, z.Set<uint64_t>(u + 2).Get<uint64_t>());
}
TEST(Value, Double) {
@@ -577,6 +621,12 @@ TEST(Value, Double) {
z = 56.78;
EXPECT_NEAR(56.78, z.GetDouble(), 0.0);
+
+ // Templated functions
+ EXPECT_TRUE(z.Is<double>());
+ EXPECT_EQ(56.78, z.Get<double>());
+ EXPECT_EQ(57.78, z.Set(57.78).Get<double>());
+ EXPECT_EQ(58.78, z.Set<double>(58.78).Get<double>());
}
TEST(Value, Float) {
@@ -602,18 +652,30 @@ TEST(Value, Float) {
z.SetFloat(12.34f);
EXPECT_NEAR(12.34f, z.GetFloat(), 0.0f);
+ // Issue 573
+ z.SetInt(0);
+ EXPECT_EQ(0.0f, z.GetFloat());
+
z = 56.78f;
EXPECT_NEAR(56.78f, z.GetFloat(), 0.0f);
+
+ // Templated functions
+ EXPECT_TRUE(z.Is<float>());
+ EXPECT_EQ(56.78f, z.Get<float>());
+ EXPECT_EQ(57.78f, z.Set(57.78f).Get<float>());
+ EXPECT_EQ(58.78f, z.Set<float>(58.78f).Get<float>());
}
TEST(Value, IsLosslessDouble) {
EXPECT_TRUE(Value(12.34).IsLosslessDouble());
EXPECT_TRUE(Value(-123).IsLosslessDouble());
EXPECT_TRUE(Value(2147483648u).IsLosslessDouble());
- EXPECT_TRUE(Value(static_cast<int64_t>(-RAPIDJSON_UINT64_C2(0x40000000, 0x00000000))).IsLosslessDouble());
+ EXPECT_TRUE(Value(-static_cast<int64_t>(RAPIDJSON_UINT64_C2(0x40000000, 0x00000000))).IsLosslessDouble());
+#if !(defined(_MSC_VER) && _MSC_VER < 1800) // VC2010 has problem
EXPECT_TRUE(Value(RAPIDJSON_UINT64_C2(0xA0000000, 0x00000000)).IsLosslessDouble());
+#endif
- EXPECT_FALSE(Value(static_cast<int64_t>(-RAPIDJSON_UINT64_C2(0x7FFFFFFF, 0xFFFFFFFF))).IsLosslessDouble());
+ EXPECT_FALSE(Value(-static_cast<int64_t>(RAPIDJSON_UINT64_C2(0x7FFFFFFF, 0xFFFFFFFF))).IsLosslessDouble());
EXPECT_FALSE(Value(RAPIDJSON_UINT64_C2(0xFFFFFFFF, 0xFFFFFFFF)).IsLosslessDouble());
}
@@ -724,6 +786,11 @@ TEST(Value, String) {
EXPECT_STREQ("World", w.GetString());
EXPECT_EQ(5u, w.GetStringLength());
+ // templated functions
+ EXPECT_TRUE(z.Is<const char*>());
+ EXPECT_STREQ(cstr, z.Get<const char*>());
+ EXPECT_STREQ("Apple", z.Set<const char*>("Apple").Get<const char*>());
+
#if RAPIDJSON_HAS_STDSTRING
{
std::string str = "Hello World";
@@ -759,6 +826,14 @@ TEST(Value, String) {
vs1 = StringRef(str);
TestEqual(str, vs1);
TestEqual(vs0, vs1);
+
+ // Templated function.
+ EXPECT_TRUE(vs0.Is<std::string>());
+ EXPECT_EQ(str, vs0.Get<std::string>());
+ vs0.Set<std::string>(std::string("Apple"), allocator);
+ EXPECT_EQ(std::string("Apple"), vs0.Get<std::string>());
+ vs0.Set(std::string("Orange"), allocator);
+ EXPECT_EQ(std::string("Orange"), vs0.Get<std::string>());
}
#endif // RAPIDJSON_HAS_STDSTRING
}
@@ -769,25 +844,9 @@ TEST(Value, SetStringNullException) {
EXPECT_THROW(v.SetString(0, 0), AssertException);
}
-TEST(Value, Array) {
- Value x(kArrayType);
- const Value& y = x;
- Value::AllocatorType allocator;
-
- EXPECT_EQ(kArrayType, x.GetType());
- EXPECT_TRUE(x.IsArray());
- EXPECT_TRUE(x.Empty());
- EXPECT_EQ(0u, x.Size());
- EXPECT_TRUE(y.IsArray());
- EXPECT_TRUE(y.Empty());
- EXPECT_EQ(0u, y.Size());
-
- EXPECT_FALSE(x.IsNull());
- EXPECT_FALSE(x.IsBool());
- EXPECT_FALSE(x.IsFalse());
- EXPECT_FALSE(x.IsTrue());
- EXPECT_FALSE(x.IsString());
- EXPECT_FALSE(x.IsObject());
+template <typename T, typename Allocator>
+static void TestArray(T& x, Allocator& allocator) {
+ const T& y = x;
// PushBack()
Value v;
@@ -834,7 +893,7 @@ TEST(Value, Array) {
#endif
// iterator
- Value::ValueIterator itr = x.Begin();
+ typename T::ValueIterator itr = x.Begin();
EXPECT_TRUE(itr != x.End());
EXPECT_TRUE(itr->IsNull());
++itr;
@@ -853,7 +912,7 @@ TEST(Value, Array) {
EXPECT_STREQ("foo", itr->GetString());
// const iterator
- Value::ConstValueIterator citr = y.Begin();
+ typename T::ConstValueIterator citr = y.Begin();
EXPECT_TRUE(citr != y.End());
EXPECT_TRUE(citr->IsNull());
++citr;
@@ -939,6 +998,29 @@ TEST(Value, Array) {
EXPECT_EQ(i + removeCount, x[static_cast<SizeType>(i)][0].GetUint());
}
}
+}
+
+TEST(Value, Array) {
+ Value x(kArrayType);
+ const Value& y = x;
+ Value::AllocatorType allocator;
+
+ EXPECT_EQ(kArrayType, x.GetType());
+ EXPECT_TRUE(x.IsArray());
+ EXPECT_TRUE(x.Empty());
+ EXPECT_EQ(0u, x.Size());
+ EXPECT_TRUE(y.IsArray());
+ EXPECT_TRUE(y.Empty());
+ EXPECT_EQ(0u, y.Size());
+
+ EXPECT_FALSE(x.IsNull());
+ EXPECT_FALSE(x.IsBool());
+ EXPECT_FALSE(x.IsFalse());
+ EXPECT_FALSE(x.IsTrue());
+ EXPECT_FALSE(x.IsString());
+ EXPECT_FALSE(x.IsObject());
+
+ TestArray(x, allocator);
// Working in gcc without C++11, but VS2013 cannot compile. To be diagnosed.
// http://en.wikipedia.org/wiki/Erase-remove_idiom
@@ -962,19 +1044,96 @@ TEST(Value, Array) {
EXPECT_TRUE(z.Empty());
}
-TEST(Value, Object) {
- Value x(kObjectType);
- const Value& y = x; // const version
+TEST(Value, ArrayHelper) {
Value::AllocatorType allocator;
+ {
+ Value x(kArrayType);
+ Value::Array a = x.GetArray();
+ TestArray(a, allocator);
+ }
- EXPECT_EQ(kObjectType, x.GetType());
- EXPECT_TRUE(x.IsObject());
- EXPECT_TRUE(x.ObjectEmpty());
- EXPECT_EQ(0u, x.MemberCount());
- EXPECT_EQ(kObjectType, y.GetType());
- EXPECT_TRUE(y.IsObject());
- EXPECT_TRUE(y.ObjectEmpty());
- EXPECT_EQ(0u, y.MemberCount());
+ {
+ Value x(kArrayType);
+ Value::Array a = x.GetArray();
+ a.PushBack(1, allocator);
+
+ Value::Array a2(a); // copy constructor
+ EXPECT_EQ(1, a2.Size());
+
+ Value::Array a3 = a;
+ EXPECT_EQ(1, a3.Size());
+
+ Value::ConstArray y = static_cast<const Value&>(x).GetArray();
+ (void)y;
+ // y.PushBack(1, allocator); // should not compile
+
+ // Templated functions
+ x.Clear();
+ EXPECT_TRUE(x.Is<Value::Array>());
+ EXPECT_TRUE(x.Is<Value::ConstArray>());
+ a.PushBack(1, allocator);
+ EXPECT_EQ(1, x.Get<Value::Array>()[0].GetInt());
+ EXPECT_EQ(1, x.Get<Value::ConstArray>()[0].GetInt());
+
+ Value x2;
+ x2.Set<Value::Array>(a);
+ EXPECT_TRUE(x.IsArray()); // IsArray() is invariant after moving.
+ EXPECT_EQ(1, x2.Get<Value::Array>()[0].GetInt());
+ }
+
+ {
+ Value y(kArrayType);
+ y.PushBack(123, allocator);
+
+ Value x(y.GetArray()); // Construct value form array.
+ EXPECT_TRUE(x.IsArray());
+ EXPECT_EQ(123, x[0].GetInt());
+ EXPECT_TRUE(y.IsArray()); // Invariant
+ EXPECT_TRUE(y.Empty());
+ }
+
+ {
+ Value x(kArrayType);
+ Value y(kArrayType);
+ y.PushBack(123, allocator);
+ x.PushBack(y.GetArray(), allocator); // Implicit constructor to convert Array to GenericValue
+
+ EXPECT_EQ(1, x.Size());
+ EXPECT_EQ(123, x[0][0].GetInt());
+ EXPECT_TRUE(y.IsArray());
+ EXPECT_TRUE(y.Empty());
+ }
+}
+
+#if RAPIDJSON_HAS_CXX11_RANGE_FOR
+TEST(Value, ArrayHelperRangeFor) {
+ Value::AllocatorType allocator;
+ Value x(kArrayType);
+
+ for (int i = 0; i < 10; i++)
+ x.PushBack(i, allocator);
+
+ {
+ int i = 0;
+ for (auto& v : x.GetArray())
+ EXPECT_EQ(i++, v.GetInt());
+ EXPECT_EQ(i, 10);
+ }
+ {
+ int i = 0;
+ for (const auto& v : const_cast<const Value&>(x).GetArray())
+ EXPECT_EQ(i++, v.GetInt());
+ EXPECT_EQ(i, 10);
+ }
+
+ // Array a = x.GetArray();
+ // Array ca = const_cast<const Value&>(x).GetArray();
+}
+#endif
+
+template <typename T, typename Allocator>
+static void TestObject(T& x, Allocator& allocator) {
+ const T& y = x; // const version
// AddMember()
x.AddMember("A", "Apple", allocator);
@@ -1215,7 +1374,7 @@ TEST(Value, Object) {
const unsigned n = 10;
for (unsigned first = 0; first < n; first++) {
for (unsigned last = first; last <= n; last++) {
- Value(kObjectType).Swap(x);
+ x.RemoveAllMembers();
for (unsigned i = 0; i < n; i++)
x.AddMember(keys[i], Value(kArrayType).PushBack(i, allocator), allocator);
@@ -1238,6 +1397,23 @@ TEST(Value, Object) {
x.RemoveAllMembers();
EXPECT_TRUE(x.ObjectEmpty());
EXPECT_EQ(0u, x.MemberCount());
+}
+
+TEST(Value, Object) {
+ Value x(kObjectType);
+ const Value& y = x; // const version
+ Value::AllocatorType allocator;
+
+ EXPECT_EQ(kObjectType, x.GetType());
+ EXPECT_TRUE(x.IsObject());
+ EXPECT_TRUE(x.ObjectEmpty());
+ EXPECT_EQ(0u, x.MemberCount());
+ EXPECT_EQ(kObjectType, y.GetType());
+ EXPECT_TRUE(y.IsObject());
+ EXPECT_TRUE(y.ObjectEmpty());
+ EXPECT_EQ(0u, y.MemberCount());
+
+ TestObject(x, allocator);
// SetObject()
Value z;
@@ -1245,6 +1421,100 @@ TEST(Value, Object) {
EXPECT_TRUE(z.IsObject());
}
+TEST(Value, ObjectHelper) {
+ Value::AllocatorType allocator;
+ {
+ Value x(kObjectType);
+ Value::Object o = x.GetObject();
+ TestObject(o, allocator);
+ }
+
+ {
+ Value x(kObjectType);
+ Value::Object o = x.GetObject();
+ o.AddMember("1", 1, allocator);
+
+ Value::Object o2(o); // copy constructor
+ EXPECT_EQ(1, o2.MemberCount());
+
+ Value::Object o3 = o;
+ EXPECT_EQ(1, o3.MemberCount());
+
+ Value::ConstObject y = static_cast<const Value&>(x).GetObject();
+ (void)y;
+ // y.AddMember("1", 1, allocator); // should not compile
+
+ // Templated functions
+ x.RemoveAllMembers();
+ EXPECT_TRUE(x.Is<Value::Object>());
+ EXPECT_TRUE(x.Is<Value::ConstObject>());
+ o.AddMember("1", 1, allocator);
+ EXPECT_EQ(1, x.Get<Value::Object>()["1"].GetInt());
+ EXPECT_EQ(1, x.Get<Value::ConstObject>()["1"].GetInt());
+
+ Value x2;
+ x2.Set<Value::Object>(o);
+ EXPECT_TRUE(x.IsObject()); // IsObject() is invariant after moving
+ EXPECT_EQ(1, x2.Get<Value::Object>()["1"].GetInt());
+ }
+
+ {
+ Value x(kObjectType);
+ x.AddMember("a", "apple", allocator);
+ Value y(x.GetObject());
+ EXPECT_STREQ("apple", y["a"].GetString());
+ EXPECT_TRUE(x.IsObject()); // Invariant
+ }
+
+ {
+ Value x(kObjectType);
+ x.AddMember("a", "apple", allocator);
+ Value y(kObjectType);
+ y.AddMember("fruits", x.GetObject(), allocator);
+ EXPECT_STREQ("apple", y["fruits"]["a"].GetString());
+ EXPECT_TRUE(x.IsObject()); // Invariant
+ }
+}
+
+#if RAPIDJSON_HAS_CXX11_RANGE_FOR
+TEST(Value, ObjectHelperRangeFor) {
+ Value::AllocatorType allocator;
+ Value x(kObjectType);
+
+ for (int i = 0; i < 10; i++) {
+ char name[10];
+ Value n(name, static_cast<SizeType>(sprintf(name, "%d", i)), allocator);
+ x.AddMember(n, i, allocator);
+ }
+
+ {
+ int i = 0;
+ for (auto& m : x.GetObject()) {
+ char name[10];
+ sprintf(name, "%d", i);
+ EXPECT_STREQ(name, m.name.GetString());
+ EXPECT_EQ(i, m.value.GetInt());
+ i++;
+ }
+ EXPECT_EQ(i, 10);
+ }
+ {
+ int i = 0;
+ for (const auto& m : const_cast<const Value&>(x).GetObject()) {
+ char name[10];
+ sprintf(name, "%d", i);
+ EXPECT_STREQ(name, m.name.GetString());
+ EXPECT_EQ(i, m.value.GetInt());
+ i++;
+ }
+ EXPECT_EQ(i, 10);
+ }
+
+ // Object a = x.GetObject();
+ // Object ca = const_cast<const Value&>(x).GetObject();
+}
+#endif
+
TEST(Value, EraseMember_String) {
Value::AllocatorType allocator;
Value x(kObjectType);
@@ -1378,12 +1648,13 @@ struct TerminateHandler {
bool Int64(int64_t) { return e != 4; }
bool Uint64(uint64_t) { return e != 5; }
bool Double(double) { return e != 6; }
- bool String(const char*, SizeType, bool) { return e != 7; }
- bool StartObject() { return e != 8; }
- bool Key(const char*, SizeType, bool) { return e != 9; }
- bool EndObject(SizeType) { return e != 10; }
- bool StartArray() { return e != 11; }
- bool EndArray(SizeType) { return e != 12; }
+ bool RawNumber(const char*, SizeType, bool) { return e != 7; }
+ bool String(const char*, SizeType, bool) { return e != 8; }
+ bool StartObject() { return e != 9; }
+ bool Key(const char*, SizeType, bool) { return e != 10; }
+ bool EndObject(SizeType) { return e != 11; }
+ bool StartArray() { return e != 12; }
+ bool EndArray(SizeType) { return e != 13; }
};
#define TEST_TERMINATION(e, json)\
@@ -1404,12 +1675,13 @@ TEST(Value, AcceptTerminationByHandler) {
TEST_TERMINATION(4, "[-1234567890123456789]");
TEST_TERMINATION(5, "[9223372036854775808]");
TEST_TERMINATION(6, "[0.5]");
- TEST_TERMINATION(7, "[\"a\"]");
- TEST_TERMINATION(8, "[{}]");
- TEST_TERMINATION(9, "[{\"a\":1}]");
- TEST_TERMINATION(10, "[{}]");
- TEST_TERMINATION(11, "{\"a\":[]}");
+ // RawNumber() is never called
+ TEST_TERMINATION(8, "[\"a\"]");
+ TEST_TERMINATION(9, "[{}]");
+ TEST_TERMINATION(10, "[{\"a\":1}]");
+ TEST_TERMINATION(11, "[{}]");
TEST_TERMINATION(12, "{\"a\":[]}");
+ TEST_TERMINATION(13, "{\"a\":[]}");
}
struct ValueIntComparer {
diff --git a/3rdparty/win81sdk/Include/um/xaudio2.h b/3rdparty/win81sdk/Include/um/xaudio2.h
deleted file mode 100644
index e44c6a0f163..00000000000
--- a/3rdparty/win81sdk/Include/um/xaudio2.h
+++ /dev/null
@@ -1,1196 +0,0 @@
-/**************************************************************************
- *
- * Copyright (c) Microsoft Corporation. All rights reserved.
- *
- * File: xaudio2.h
- * Content: Declarations for the XAudio2 game audio API.
- *
- **************************************************************************/
-
-#ifdef _MSC_VER
-#pragma once
-#endif
-
-#ifndef __XAUDIO2_INCLUDED__
-#define __XAUDIO2_INCLUDED__
-
-#include <sdkddkver.h>
-
-#if(_WIN32_WINNT < _WIN32_WINNT_WIN8)
-#error "This version of XAudio2 is available only in Windows 8 or later. Use the XAudio2 headers and libraries from the DirectX SDK with applications that target Windows 7 and earlier versions."
-#endif // (_WIN32_WINNT < _WIN32_WINNT_WIN8)
-
-#include <winapifamily.h>
-
-#pragma region Application Family
-#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
-
-// Current name of the DLL shipped in the same SDK as this header.
-// The name reflects the current version
-#define XAUDIO2_DLL_A "xaudio2_8.dll"
-#define XAUDIO2_DLL_W L"xaudio2_8.dll"
-
-#ifdef UNICODE
- #define XAUDIO2_DLL XAUDIO2_DLL_W
-#else
- #define XAUDIO2_DLL XAUDIO2_DLL_A
-#endif
-
-
-/**************************************************************************
- *
- * XAudio2 COM object class and interface IDs.
- *
- **************************************************************************/
-
-#include <basetyps.h>
-
-// XAudio 2.8
-interface __declspec(uuid("60d8dac8-5aa1-4e8e-b597-2f5e2883d484")) IXAudio2;
-
-// Ignore the rest of this header if only the GUID definitions were requested
-#ifndef GUID_DEFS_ONLY
-
-#include <objbase.h> // Windows COM declarations
-
-#include <sal.h> // Markers for documenting API semantics
-#include <mmreg.h> // Basic data types and constants for audio work
-#include <audiosessiontypes.h> // For AUDIO_STREAM_CATEGORY
-
-// All structures defined in this file use tight field packing
-#pragma pack(push, 1)
-
-
-/**************************************************************************
- *
- * XAudio2 constants, flags and error codes.
- *
- **************************************************************************/
-
-// Numeric boundary values
-#define XAUDIO2_MAX_BUFFER_BYTES 0x80000000 // Maximum bytes allowed in a source buffer
-#define XAUDIO2_MAX_QUEUED_BUFFERS 64 // Maximum buffers allowed in a voice queue
-#define XAUDIO2_MAX_BUFFERS_SYSTEM 2 // Maximum buffers allowed for system threads (Xbox 360 only)
-#define XAUDIO2_MAX_AUDIO_CHANNELS 64 // Maximum channels in an audio stream
-#define XAUDIO2_MIN_SAMPLE_RATE 1000 // Minimum audio sample rate supported
-#define XAUDIO2_MAX_SAMPLE_RATE 200000 // Maximum audio sample rate supported
-#define XAUDIO2_MAX_VOLUME_LEVEL 16777216.0f // Maximum acceptable volume level (2^24)
-#define XAUDIO2_MIN_FREQ_RATIO (1/1024.0f) // Minimum SetFrequencyRatio argument
-#define XAUDIO2_MAX_FREQ_RATIO 1024.0f // Maximum MaxFrequencyRatio argument
-#define XAUDIO2_DEFAULT_FREQ_RATIO 2.0f // Default MaxFrequencyRatio argument
-#define XAUDIO2_MAX_FILTER_ONEOVERQ 1.5f // Maximum XAUDIO2_FILTER_PARAMETERS.OneOverQ
-#define XAUDIO2_MAX_FILTER_FREQUENCY 1.0f // Maximum XAUDIO2_FILTER_PARAMETERS.Frequency
-#define XAUDIO2_MAX_LOOP_COUNT 254 // Maximum non-infinite XAUDIO2_BUFFER.LoopCount
-#define XAUDIO2_MAX_INSTANCES 8 // Maximum simultaneous XAudio2 objects on Xbox 360
-
-// For XMA voices on Xbox 360 there is an additional restriction on the MaxFrequencyRatio
-// argument and the voice's sample rate: the product of these numbers cannot exceed 600000
-// for one-channel voices or 300000 for voices with more than one channel.
-#define XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MONO 600000
-#define XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MULTICHANNEL 300000
-
-// Numeric values with special meanings
-#define XAUDIO2_COMMIT_NOW 0 // Used as an OperationSet argument
-#define XAUDIO2_COMMIT_ALL 0 // Used in IXAudio2::CommitChanges
-#define XAUDIO2_INVALID_OPSET (UINT32)(-1) // Not allowed for OperationSet arguments
-#define XAUDIO2_NO_LOOP_REGION 0 // Used in XAUDIO2_BUFFER.LoopCount
-#define XAUDIO2_LOOP_INFINITE 255 // Used in XAUDIO2_BUFFER.LoopCount
-#define XAUDIO2_DEFAULT_CHANNELS 0 // Used in CreateMasteringVoice
-#define XAUDIO2_DEFAULT_SAMPLERATE 0 // Used in CreateMasteringVoice
-
-// Flags
-#define XAUDIO2_VOICE_NOPITCH 0x0002 // Used in IXAudio2::CreateSourceVoice
-#define XAUDIO2_VOICE_NOSRC 0x0004 // Used in IXAudio2::CreateSourceVoice
-#define XAUDIO2_VOICE_USEFILTER 0x0008 // Used in IXAudio2::CreateSource/SubmixVoice
-#define XAUDIO2_PLAY_TAILS 0x0020 // Used in IXAudio2SourceVoice::Stop
-#define XAUDIO2_END_OF_STREAM 0x0040 // Used in XAUDIO2_BUFFER.Flags
-#define XAUDIO2_SEND_USEFILTER 0x0080 // Used in XAUDIO2_SEND_DESCRIPTOR.Flags
-#define XAUDIO2_VOICE_NOSAMPLESPLAYED 0x0100 // Used in IXAudio2SourceVoice::GetState
-
-// Default parameters for the built-in filter
-#define XAUDIO2_DEFAULT_FILTER_TYPE LowPassFilter
-#define XAUDIO2_DEFAULT_FILTER_FREQUENCY XAUDIO2_MAX_FILTER_FREQUENCY
-#define XAUDIO2_DEFAULT_FILTER_ONEOVERQ 1.0f
-
-// Internal XAudio2 constants
-#define XAUDIO2_QUANTUM_NUMERATOR 1 // On Windows, XAudio2 processes audio
-#define XAUDIO2_QUANTUM_DENOMINATOR 100 // in 10ms chunks (= 1/100 seconds)
-#define XAUDIO2_QUANTUM_MS (1000.0f * XAUDIO2_QUANTUM_NUMERATOR / XAUDIO2_QUANTUM_DENOMINATOR)
-
-// XAudio2 error codes
-#define FACILITY_XAUDIO2 0x896
-#define XAUDIO2_E_INVALID_CALL 0x88960001 // An API call or one of its arguments was illegal
-#define XAUDIO2_E_XMA_DECODER_ERROR 0x88960002 // The XMA hardware suffered an unrecoverable error
-#define XAUDIO2_E_XAPO_CREATION_FAILED 0x88960003 // XAudio2 failed to initialize an XAPO effect
-#define XAUDIO2_E_DEVICE_INVALIDATED 0x88960004 // An audio device became unusable (unplugged, etc)
-
-
-/**************************************************************************
- *
- * Forward declarations for the XAudio2 interfaces.
- *
- **************************************************************************/
-
-#ifdef __cplusplus
- #define FWD_DECLARE(x) interface x
-#else
- #define FWD_DECLARE(x) typedef interface x x
-#endif
-
-FWD_DECLARE(IXAudio2);
-FWD_DECLARE(IXAudio2Voice);
-FWD_DECLARE(IXAudio2SourceVoice);
-FWD_DECLARE(IXAudio2SubmixVoice);
-FWD_DECLARE(IXAudio2MasteringVoice);
-FWD_DECLARE(IXAudio2EngineCallback);
-FWD_DECLARE(IXAudio2VoiceCallback);
-
-
-/**************************************************************************
- *
- * XAudio2 structures and enumerations.
- *
- **************************************************************************/
-
-// Used in XAudio2Create, specifies which CPU(s) to use.
-typedef UINT32 XAUDIO2_PROCESSOR;
-#define Processor1 0x00000001
-#define Processor2 0x00000002
-#define Processor3 0x00000004
-#define Processor4 0x00000008
-#define Processor5 0x00000010
-#define Processor6 0x00000020
-#define Processor7 0x00000040
-#define Processor8 0x00000080
-#define Processor9 0x00000100
-#define Processor10 0x00000200
-#define Processor11 0x00000400
-#define Processor12 0x00000800
-#define Processor13 0x00001000
-#define Processor14 0x00002000
-#define Processor15 0x00004000
-#define Processor16 0x00008000
-#define Processor17 0x00010000
-#define Processor18 0x00020000
-#define Processor19 0x00040000
-#define Processor20 0x00080000
-#define Processor21 0x00100000
-#define Processor22 0x00200000
-#define Processor23 0x00400000
-#define Processor24 0x00800000
-#define Processor25 0x01000000
-#define Processor26 0x02000000
-#define Processor27 0x04000000
-#define Processor28 0x08000000
-#define Processor29 0x10000000
-#define Processor30 0x20000000
-#define Processor31 0x40000000
-#define Processor32 0x80000000
-#define XAUDIO2_ANY_PROCESSOR 0xffffffff
-#define XAUDIO2_DEFAULT_PROCESSOR Processor1
-
-// Returned by IXAudio2Voice::GetVoiceDetails
-typedef struct XAUDIO2_VOICE_DETAILS
-{
- UINT32 CreationFlags; // Flags the voice was created with.
- UINT32 ActiveFlags; // Flags currently active.
- UINT32 InputChannels; // Channels in the voice's input audio.
- UINT32 InputSampleRate; // Sample rate of the voice's input audio.
-} XAUDIO2_VOICE_DETAILS;
-
-// Used in XAUDIO2_VOICE_SENDS below
-typedef struct XAUDIO2_SEND_DESCRIPTOR
-{
- UINT32 Flags; // Either 0 or XAUDIO2_SEND_USEFILTER.
- IXAudio2Voice* pOutputVoice; // This send's destination voice.
-} XAUDIO2_SEND_DESCRIPTOR;
-
-// Used in the voice creation functions and in IXAudio2Voice::SetOutputVoices
-typedef struct XAUDIO2_VOICE_SENDS
-{
- UINT32 SendCount; // Number of sends from this voice.
- XAUDIO2_SEND_DESCRIPTOR* pSends; // Array of SendCount send descriptors.
-} XAUDIO2_VOICE_SENDS;
-
-// Used in XAUDIO2_EFFECT_CHAIN below
-typedef struct XAUDIO2_EFFECT_DESCRIPTOR
-{
- IUnknown* pEffect; // Pointer to the effect object's IUnknown interface.
- BOOL InitialState; // TRUE if the effect should begin in the enabled state.
- UINT32 OutputChannels; // How many output channels the effect should produce.
-} XAUDIO2_EFFECT_DESCRIPTOR;
-
-// Used in the voice creation functions and in IXAudio2Voice::SetEffectChain
-typedef struct XAUDIO2_EFFECT_CHAIN
-{
- UINT32 EffectCount; // Number of effects in this voice's effect chain.
- XAUDIO2_EFFECT_DESCRIPTOR* pEffectDescriptors; // Array of effect descriptors.
-} XAUDIO2_EFFECT_CHAIN;
-
-// Used in XAUDIO2_FILTER_PARAMETERS below
-typedef enum XAUDIO2_FILTER_TYPE
-{
- LowPassFilter, // Attenuates frequencies above the cutoff frequency (state-variable filter).
- BandPassFilter, // Attenuates frequencies outside a given range (state-variable filter).
- HighPassFilter, // Attenuates frequencies below the cutoff frequency (state-variable filter).
- NotchFilter, // Attenuates frequencies inside a given range (state-variable filter).
- LowPassOnePoleFilter, // Attenuates frequencies above the cutoff frequency (one-pole filter, XAUDIO2_FILTER_PARAMETERS.OneOverQ has no effect)
- HighPassOnePoleFilter // Attenuates frequencies below the cutoff frequency (one-pole filter, XAUDIO2_FILTER_PARAMETERS.OneOverQ has no effect)
-} XAUDIO2_FILTER_TYPE;
-
-// Used in IXAudio2Voice::Set/GetFilterParameters and Set/GetOutputFilterParameters
-typedef struct XAUDIO2_FILTER_PARAMETERS
-{
- XAUDIO2_FILTER_TYPE Type; // Filter type.
- float Frequency; // Filter coefficient.
- // must be >= 0 and <= XAUDIO2_MAX_FILTER_FREQUENCY
- // See XAudio2CutoffFrequencyToRadians() for state-variable filter types and
- // XAudio2CutoffFrequencyToOnePoleCoefficient() for one-pole filter types.
- float OneOverQ; // Reciprocal of the filter's quality factor Q;
- // must be > 0 and <= XAUDIO2_MAX_FILTER_ONEOVERQ.
- // Has no effect for one-pole filters.
-} XAUDIO2_FILTER_PARAMETERS;
-
-// Used in IXAudio2SourceVoice::SubmitSourceBuffer
-typedef struct XAUDIO2_BUFFER
-{
- UINT32 Flags; // Either 0 or XAUDIO2_END_OF_STREAM.
- UINT32 AudioBytes; // Size of the audio data buffer in bytes.
- const BYTE* pAudioData; // Pointer to the audio data buffer.
- UINT32 PlayBegin; // First sample in this buffer to be played.
- UINT32 PlayLength; // Length of the region to be played in samples,
- // or 0 to play the whole buffer.
- UINT32 LoopBegin; // First sample of the region to be looped.
- UINT32 LoopLength; // Length of the desired loop region in samples,
- // or 0 to loop the entire buffer.
- UINT32 LoopCount; // Number of times to repeat the loop region,
- // or XAUDIO2_LOOP_INFINITE to loop forever.
- void* pContext; // Context value to be passed back in callbacks.
-} XAUDIO2_BUFFER;
-
-// Used in IXAudio2SourceVoice::SubmitSourceBuffer when submitting XWMA data.
-// NOTE: If an XWMA sound is submitted in more than one buffer, each buffer's
-// pDecodedPacketCumulativeBytes[PacketCount-1] value must be subtracted from
-// all the entries in the next buffer's pDecodedPacketCumulativeBytes array.
-// And whether a sound is submitted in more than one buffer or not, the final
-// buffer of the sound should use the XAUDIO2_END_OF_STREAM flag, or else the
-// client must call IXAudio2SourceVoice::Discontinuity after submitting it.
-typedef struct XAUDIO2_BUFFER_WMA
-{
- const UINT32* pDecodedPacketCumulativeBytes; // Decoded packet's cumulative size array.
- // Each element is the number of bytes accumulated
- // when the corresponding XWMA packet is decoded in
- // order. The array must have PacketCount elements.
- UINT32 PacketCount; // Number of XWMA packets submitted. Must be >= 1 and
- // divide evenly into XAUDIO2_BUFFER.AudioBytes.
-} XAUDIO2_BUFFER_WMA;
-
-// Returned by IXAudio2SourceVoice::GetState
-typedef struct XAUDIO2_VOICE_STATE
-{
- void* pCurrentBufferContext; // The pContext value provided in the XAUDIO2_BUFFER
- // that is currently being processed, or NULL if
- // there are no buffers in the queue.
- UINT32 BuffersQueued; // Number of buffers currently queued on the voice
- // (including the one that is being processed).
- UINT64 SamplesPlayed; // Total number of samples produced by the voice since
- // it began processing the current audio stream.
- // If XAUDIO2_VOICE_NOSAMPLESPLAYED is specified
- // in the call to IXAudio2SourceVoice::GetState,
- // this member will not be calculated, saving CPU.
-} XAUDIO2_VOICE_STATE;
-
-// Returned by IXAudio2::GetPerformanceData
-typedef struct XAUDIO2_PERFORMANCE_DATA
-{
- // CPU usage information
- UINT64 AudioCyclesSinceLastQuery; // CPU cycles spent on audio processing since the
- // last call to StartEngine or GetPerformanceData.
- UINT64 TotalCyclesSinceLastQuery; // Total CPU cycles elapsed since the last call
- // (only counts the CPU XAudio2 is running on).
- UINT32 MinimumCyclesPerQuantum; // Fewest CPU cycles spent processing any one
- // audio quantum since the last call.
- UINT32 MaximumCyclesPerQuantum; // Most CPU cycles spent processing any one
- // audio quantum since the last call.
-
- // Memory usage information
- UINT32 MemoryUsageInBytes; // Total heap space currently in use.
-
- // Audio latency and glitching information
- UINT32 CurrentLatencyInSamples; // Minimum delay from when a sample is read from a
- // source buffer to when it reaches the speakers.
- UINT32 GlitchesSinceEngineStarted; // Audio dropouts since the engine was started.
-
- // Data about XAudio2's current workload
- UINT32 ActiveSourceVoiceCount; // Source voices currently playing.
- UINT32 TotalSourceVoiceCount; // Source voices currently existing.
- UINT32 ActiveSubmixVoiceCount; // Submix voices currently playing/existing.
-
- UINT32 ActiveResamplerCount; // Resample xAPOs currently active.
- UINT32 ActiveMatrixMixCount; // MatrixMix xAPOs currently active.
-
- // Usage of the hardware XMA decoder (Xbox 360 only)
- UINT32 ActiveXmaSourceVoices; // Number of source voices decoding XMA data.
- UINT32 ActiveXmaStreams; // A voice can use more than one XMA stream.
-} XAUDIO2_PERFORMANCE_DATA;
-
-// Used in IXAudio2::SetDebugConfiguration
-typedef struct XAUDIO2_DEBUG_CONFIGURATION
-{
- UINT32 TraceMask; // Bitmap of enabled debug message types.
- UINT32 BreakMask; // Message types that will break into the debugger.
- BOOL LogThreadID; // Whether to log the thread ID with each message.
- BOOL LogFileline; // Whether to log the source file and line number.
- BOOL LogFunctionName; // Whether to log the function name.
- BOOL LogTiming; // Whether to log message timestamps.
-} XAUDIO2_DEBUG_CONFIGURATION;
-
-// Values for the TraceMask and BreakMask bitmaps. Only ERRORS and WARNINGS
-// are valid in BreakMask. WARNINGS implies ERRORS, DETAIL implies INFO, and
-// FUNC_CALLS implies API_CALLS. By default, TraceMask is ERRORS and WARNINGS
-// and all the other settings are zero.
-#define XAUDIO2_LOG_ERRORS 0x0001 // For handled errors with serious effects.
-#define XAUDIO2_LOG_WARNINGS 0x0002 // For handled errors that may be recoverable.
-#define XAUDIO2_LOG_INFO 0x0004 // Informational chit-chat (e.g. state changes).
-#define XAUDIO2_LOG_DETAIL 0x0008 // More detailed chit-chat.
-#define XAUDIO2_LOG_API_CALLS 0x0010 // Public API function entries and exits.
-#define XAUDIO2_LOG_FUNC_CALLS 0x0020 // Internal function entries and exits.
-#define XAUDIO2_LOG_TIMING 0x0040 // Delays detected and other timing data.
-#define XAUDIO2_LOG_LOCKS 0x0080 // Usage of critical sections and mutexes.
-#define XAUDIO2_LOG_MEMORY 0x0100 // Memory heap usage information.
-#define XAUDIO2_LOG_STREAMING 0x1000 // Audio streaming information.
-
-
-/**************************************************************************
- *
- * IXAudio2: Top-level XAudio2 COM interface.
- *
- **************************************************************************/
-
-// Use default arguments if compiling as C++
-#ifdef __cplusplus
- #define X2DEFAULT(x) =x
-#else
- #define X2DEFAULT(x)
-#endif
-
-#undef INTERFACE
-#define INTERFACE IXAudio2
-DECLARE_INTERFACE_(IXAudio2, IUnknown)
-{
- // NAME: IXAudio2::QueryInterface
- // DESCRIPTION: Queries for a given COM interface on the XAudio2 object.
- // Only IID_IUnknown and IID_IXAudio2 are supported.
- //
- // ARGUMENTS:
- // riid - IID of the interface to be obtained.
- // ppvInterface - Returns a pointer to the requested interface.
- //
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, _Outptr_ void** ppvInterface) PURE;
-
- // NAME: IXAudio2::AddRef
- // DESCRIPTION: Adds a reference to the XAudio2 object.
- //
- STDMETHOD_(ULONG, AddRef) (THIS) PURE;
-
- // NAME: IXAudio2::Release
- // DESCRIPTION: Releases a reference to the XAudio2 object.
- //
- STDMETHOD_(ULONG, Release) (THIS) PURE;
-
- // NAME: IXAudio2::RegisterForCallbacks
- // DESCRIPTION: Adds a new client to receive XAudio2's engine callbacks.
- //
- // ARGUMENTS:
- // pCallback - Callback interface to be called during each processing pass.
- //
- STDMETHOD(RegisterForCallbacks) (_In_ IXAudio2EngineCallback* pCallback) PURE;
-
- // NAME: IXAudio2::UnregisterForCallbacks
- // DESCRIPTION: Removes an existing receiver of XAudio2 engine callbacks.
- //
- // ARGUMENTS:
- // pCallback - Previously registered callback interface to be removed.
- //
- STDMETHOD_(void, UnregisterForCallbacks) (_In_ IXAudio2EngineCallback* pCallback) PURE;
-
- // NAME: IXAudio2::CreateSourceVoice
- // DESCRIPTION: Creates and configures a source voice.
- //
- // ARGUMENTS:
- // ppSourceVoice - Returns the new object's IXAudio2SourceVoice interface.
- // pSourceFormat - Format of the audio that will be fed to the voice.
- // Flags - XAUDIO2_VOICE flags specifying the source voice's behavior.
- // MaxFrequencyRatio - Maximum SetFrequencyRatio argument to be allowed.
- // pCallback - Optional pointer to a client-provided callback interface.
- // pSendList - Optional list of voices this voice should send audio to.
- // pEffectChain - Optional list of effects to apply to the audio data.
- //
- STDMETHOD(CreateSourceVoice) (THIS_ _Outptr_ IXAudio2SourceVoice** ppSourceVoice,
- _In_ const WAVEFORMATEX* pSourceFormat,
- UINT32 Flags X2DEFAULT(0),
- float MaxFrequencyRatio X2DEFAULT(XAUDIO2_DEFAULT_FREQ_RATIO),
- _In_opt_ IXAudio2VoiceCallback* pCallback X2DEFAULT(NULL),
- _In_opt_ const XAUDIO2_VOICE_SENDS* pSendList X2DEFAULT(NULL),
- _In_opt_ const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE;
-
- // NAME: IXAudio2::CreateSubmixVoice
- // DESCRIPTION: Creates and configures a submix voice.
- //
- // ARGUMENTS:
- // ppSubmixVoice - Returns the new object's IXAudio2SubmixVoice interface.
- // InputChannels - Number of channels in this voice's input audio data.
- // InputSampleRate - Sample rate of this voice's input audio data.
- // Flags - XAUDIO2_VOICE flags specifying the submix voice's behavior.
- // ProcessingStage - Arbitrary number that determines the processing order.
- // pSendList - Optional list of voices this voice should send audio to.
- // pEffectChain - Optional list of effects to apply to the audio data.
- //
- STDMETHOD(CreateSubmixVoice) (THIS_ _Outptr_ IXAudio2SubmixVoice** ppSubmixVoice,
- UINT32 InputChannels, UINT32 InputSampleRate,
- UINT32 Flags X2DEFAULT(0), UINT32 ProcessingStage X2DEFAULT(0),
- _In_opt_ const XAUDIO2_VOICE_SENDS* pSendList X2DEFAULT(NULL),
- _In_opt_ const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE;
-
-
- // NAME: IXAudio2::CreateMasteringVoice
- // DESCRIPTION: Creates and configures a mastering voice.
- //
- // ARGUMENTS:
- // ppMasteringVoice - Returns the new object's IXAudio2MasteringVoice interface.
- // InputChannels - Number of channels in this voice's input audio data.
- // InputSampleRate - Sample rate of this voice's input audio data.
- // Flags - XAUDIO2_VOICE flags specifying the mastering voice's behavior.
- // szDeviceId - Identifier of the device to receive the output audio.
- // pEffectChain - Optional list of effects to apply to the audio data.
- // StreamCategory - The audio stream category to use for this mastering voice
- //
- STDMETHOD(CreateMasteringVoice) (THIS_ _Outptr_ IXAudio2MasteringVoice** ppMasteringVoice,
- UINT32 InputChannels X2DEFAULT(XAUDIO2_DEFAULT_CHANNELS),
- UINT32 InputSampleRate X2DEFAULT(XAUDIO2_DEFAULT_SAMPLERATE),
- UINT32 Flags X2DEFAULT(0), _In_opt_z_ LPCWSTR szDeviceId X2DEFAULT(NULL),
- _In_opt_ const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL),
- _In_ AUDIO_STREAM_CATEGORY StreamCategory X2DEFAULT(AudioCategory_GameEffects)) PURE;
-
- // NAME: IXAudio2::StartEngine
- // DESCRIPTION: Creates and starts the audio processing thread.
- //
- STDMETHOD(StartEngine) (THIS) PURE;
-
- // NAME: IXAudio2::StopEngine
- // DESCRIPTION: Stops and destroys the audio processing thread.
- //
- STDMETHOD_(void, StopEngine) (THIS) PURE;
-
- // NAME: IXAudio2::CommitChanges
- // DESCRIPTION: Atomically applies a set of operations previously tagged
- // with a given identifier.
- //
- // ARGUMENTS:
- // OperationSet - Identifier of the set of operations to be applied.
- //
- STDMETHOD(CommitChanges) (THIS_ UINT32 OperationSet) PURE;
-
- // NAME: IXAudio2::GetPerformanceData
- // DESCRIPTION: Returns current resource usage details: memory, CPU, etc.
- //
- // ARGUMENTS:
- // pPerfData - Returns the performance data structure.
- //
- STDMETHOD_(void, GetPerformanceData) (THIS_ _Out_ XAUDIO2_PERFORMANCE_DATA* pPerfData) PURE;
-
- // NAME: IXAudio2::SetDebugConfiguration
- // DESCRIPTION: Configures XAudio2's debug output (in debug builds only).
- //
- // ARGUMENTS:
- // pDebugConfiguration - Structure describing the debug output behavior.
- // pReserved - Optional parameter; must be NULL.
- //
- STDMETHOD_(void, SetDebugConfiguration) (THIS_ _In_opt_ const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration,
- _Reserved_ void* pReserved X2DEFAULT(NULL)) PURE;
-};
-
-
-/**************************************************************************
- *
- * IXAudio2Voice: Base voice management interface.
- *
- **************************************************************************/
-
-#undef INTERFACE
-#define INTERFACE IXAudio2Voice
-DECLARE_INTERFACE(IXAudio2Voice)
-{
- // These methods are declared in a macro so that the same declarations
- // can be used in the derived voice types (IXAudio2SourceVoice, etc).
-
- #define Declare_IXAudio2Voice_Methods() \
- \
- /* NAME: IXAudio2Voice::GetVoiceDetails
- // DESCRIPTION: Returns the basic characteristics of this voice.
- //
- // ARGUMENTS:
- // pVoiceDetails - Returns the voice's details.
- */\
- STDMETHOD_(void, GetVoiceDetails) (THIS_ _Out_ XAUDIO2_VOICE_DETAILS* pVoiceDetails) PURE; \
- \
- /* NAME: IXAudio2Voice::SetOutputVoices
- // DESCRIPTION: Replaces the set of submix/mastering voices that receive
- // this voice's output.
- //
- // ARGUMENTS:
- // pSendList - Optional list of voices this voice should send audio to.
- */\
- STDMETHOD(SetOutputVoices) (THIS_ _In_opt_ const XAUDIO2_VOICE_SENDS* pSendList) PURE; \
- \
- /* NAME: IXAudio2Voice::SetEffectChain
- // DESCRIPTION: Replaces this voice's current effect chain with a new one.
- //
- // ARGUMENTS:
- // pEffectChain - Structure describing the new effect chain to be used.
- */\
- STDMETHOD(SetEffectChain) (THIS_ _In_opt_ const XAUDIO2_EFFECT_CHAIN* pEffectChain) PURE; \
- \
- /* NAME: IXAudio2Voice::EnableEffect
- // DESCRIPTION: Enables an effect in this voice's effect chain.
- //
- // ARGUMENTS:
- // EffectIndex - Index of an effect within this voice's effect chain.
- // OperationSet - Used to identify this call as part of a deferred batch.
- */\
- STDMETHOD(EnableEffect) (THIS_ UINT32 EffectIndex, \
- UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \
- \
- /* NAME: IXAudio2Voice::DisableEffect
- // DESCRIPTION: Disables an effect in this voice's effect chain.
- //
- // ARGUMENTS:
- // EffectIndex - Index of an effect within this voice's effect chain.
- // OperationSet - Used to identify this call as part of a deferred batch.
- */\
- STDMETHOD(DisableEffect) (THIS_ UINT32 EffectIndex, \
- UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \
- \
- /* NAME: IXAudio2Voice::GetEffectState
- // DESCRIPTION: Returns the running state of an effect.
- //
- // ARGUMENTS:
- // EffectIndex - Index of an effect within this voice's effect chain.
- // pEnabled - Returns the enabled/disabled state of the given effect.
- */\
- STDMETHOD_(void, GetEffectState) (THIS_ UINT32 EffectIndex, _Out_ BOOL* pEnabled) PURE; \
- \
- /* NAME: IXAudio2Voice::SetEffectParameters
- // DESCRIPTION: Sets effect-specific parameters.
- //
- // REMARKS: Unlike IXAPOParameters::SetParameters, this method may
- // be called from any thread. XAudio2 implements
- // appropriate synchronization to copy the parameters to the
- // realtime audio processing thread.
- //
- // ARGUMENTS:
- // EffectIndex - Index of an effect within this voice's effect chain.
- // pParameters - Pointer to an effect-specific parameters block.
- // ParametersByteSize - Size of the pParameters array in bytes.
- // OperationSet - Used to identify this call as part of a deferred batch.
- */\
- STDMETHOD(SetEffectParameters) (THIS_ UINT32 EffectIndex, \
- _In_reads_bytes_(ParametersByteSize) const void* pParameters, \
- UINT32 ParametersByteSize, \
- UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \
- \
- /* NAME: IXAudio2Voice::GetEffectParameters
- // DESCRIPTION: Obtains the current effect-specific parameters.
- //
- // ARGUMENTS:
- // EffectIndex - Index of an effect within this voice's effect chain.
- // pParameters - Returns the current values of the effect-specific parameters.
- // ParametersByteSize - Size of the pParameters array in bytes.
- */\
- STDMETHOD(GetEffectParameters) (THIS_ UINT32 EffectIndex, \
- _Out_writes_bytes_(ParametersByteSize) void* pParameters, \
- UINT32 ParametersByteSize) PURE; \
- \
- /* NAME: IXAudio2Voice::SetFilterParameters
- // DESCRIPTION: Sets this voice's filter parameters.
- //
- // ARGUMENTS:
- // pParameters - Pointer to the filter's parameter structure.
- // OperationSet - Used to identify this call as part of a deferred batch.
- */\
- STDMETHOD(SetFilterParameters) (THIS_ _In_ const XAUDIO2_FILTER_PARAMETERS* pParameters, \
- UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \
- \
- /* NAME: IXAudio2Voice::GetFilterParameters
- // DESCRIPTION: Returns this voice's current filter parameters.
- //
- // ARGUMENTS:
- // pParameters - Returns the filter parameters.
- */\
- STDMETHOD_(void, GetFilterParameters) (THIS_ _Out_ XAUDIO2_FILTER_PARAMETERS* pParameters) PURE; \
- \
- /* NAME: IXAudio2Voice::SetOutputFilterParameters
- // DESCRIPTION: Sets the filter parameters on one of this voice's sends.
- //
- // ARGUMENTS:
- // pDestinationVoice - Destination voice of the send whose filter parameters will be set.
- // pParameters - Pointer to the filter's parameter structure.
- // OperationSet - Used to identify this call as part of a deferred batch.
- */\
- STDMETHOD(SetOutputFilterParameters) (THIS_ _In_opt_ IXAudio2Voice* pDestinationVoice, \
- _In_ const XAUDIO2_FILTER_PARAMETERS* pParameters, \
- UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \
- \
- /* NAME: IXAudio2Voice::GetOutputFilterParameters
- // DESCRIPTION: Returns the filter parameters from one of this voice's sends.
- //
- // ARGUMENTS:
- // pDestinationVoice - Destination voice of the send whose filter parameters will be read.
- // pParameters - Returns the filter parameters.
- */\
- STDMETHOD_(void, GetOutputFilterParameters) (THIS_ _In_opt_ IXAudio2Voice* pDestinationVoice, \
- _Out_ XAUDIO2_FILTER_PARAMETERS* pParameters) PURE; \
- \
- /* NAME: IXAudio2Voice::SetVolume
- // DESCRIPTION: Sets this voice's overall volume level.
- //
- // ARGUMENTS:
- // Volume - New overall volume level to be used, as an amplitude factor.
- // OperationSet - Used to identify this call as part of a deferred batch.
- */\
- STDMETHOD(SetVolume) (THIS_ float Volume, \
- UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \
- \
- /* NAME: IXAudio2Voice::GetVolume
- // DESCRIPTION: Obtains this voice's current overall volume level.
- //
- // ARGUMENTS:
- // pVolume: Returns the voice's current overall volume level.
- */\
- STDMETHOD_(void, GetVolume) (THIS_ _Out_ float* pVolume) PURE; \
- \
- /* NAME: IXAudio2Voice::SetChannelVolumes
- // DESCRIPTION: Sets this voice's per-channel volume levels.
- //
- // ARGUMENTS:
- // Channels - Used to confirm the voice's channel count.
- // pVolumes - Array of per-channel volume levels to be used.
- // OperationSet - Used to identify this call as part of a deferred batch.
- */\
- STDMETHOD(SetChannelVolumes) (THIS_ UINT32 Channels, _In_reads_(Channels) const float* pVolumes, \
- UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \
- \
- /* NAME: IXAudio2Voice::GetChannelVolumes
- // DESCRIPTION: Returns this voice's current per-channel volume levels.
- //
- // ARGUMENTS:
- // Channels - Used to confirm the voice's channel count.
- // pVolumes - Returns an array of the current per-channel volume levels.
- */\
- STDMETHOD_(void, GetChannelVolumes) (THIS_ UINT32 Channels, _Out_writes_(Channels) float* pVolumes) PURE; \
- \
- /* NAME: IXAudio2Voice::SetOutputMatrix
- // DESCRIPTION: Sets the volume levels used to mix from each channel of this
- // voice's output audio to each channel of a given destination
- // voice's input audio.
- //
- // ARGUMENTS:
- // pDestinationVoice - The destination voice whose mix matrix to change.
- // SourceChannels - Used to confirm this voice's output channel count
- // (the number of channels produced by the last effect in the chain).
- // DestinationChannels - Confirms the destination voice's input channels.
- // pLevelMatrix - Array of [SourceChannels * DestinationChannels] send
- // levels. The level used to send from source channel S to destination
- // channel D should be in pLevelMatrix[S + SourceChannels * D].
- // OperationSet - Used to identify this call as part of a deferred batch.
- */\
- STDMETHOD(SetOutputMatrix) (THIS_ _In_opt_ IXAudio2Voice* pDestinationVoice, \
- UINT32 SourceChannels, UINT32 DestinationChannels, \
- _In_reads_(SourceChannels * DestinationChannels) const float* pLevelMatrix, \
- UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \
- \
- /* NAME: IXAudio2Voice::GetOutputMatrix
- // DESCRIPTION: Obtains the volume levels used to send each channel of this
- // voice's output audio to each channel of a given destination
- // voice's input audio.
- //
- // ARGUMENTS:
- // pDestinationVoice - The destination voice whose mix matrix to obtain.
- // SourceChannels - Used to confirm this voice's output channel count
- // (the number of channels produced by the last effect in the chain).
- // DestinationChannels - Confirms the destination voice's input channels.
- // pLevelMatrix - Array of send levels, as above.
- */\
- STDMETHOD_(void, GetOutputMatrix) (THIS_ _In_opt_ IXAudio2Voice* pDestinationVoice, \
- UINT32 SourceChannels, UINT32 DestinationChannels, \
- _Out_writes_(SourceChannels * DestinationChannels) float* pLevelMatrix) PURE; \
- \
- /* NAME: IXAudio2Voice::DestroyVoice
- // DESCRIPTION: Destroys this voice, stopping it if necessary and removing
- // it from the XAudio2 graph.
- */\
- STDMETHOD_(void, DestroyVoice) (THIS) PURE
-
- Declare_IXAudio2Voice_Methods();
-};
-
-
-/**************************************************************************
- *
- * IXAudio2SourceVoice: Source voice management interface.
- *
- **************************************************************************/
-
-#undef INTERFACE
-#define INTERFACE IXAudio2SourceVoice
-DECLARE_INTERFACE_(IXAudio2SourceVoice, IXAudio2Voice)
-{
- // Methods from IXAudio2Voice base interface
- Declare_IXAudio2Voice_Methods();
-
- // NAME: IXAudio2SourceVoice::Start
- // DESCRIPTION: Makes this voice start consuming and processing audio.
- //
- // ARGUMENTS:
- // Flags - Flags controlling how the voice should be started.
- // OperationSet - Used to identify this call as part of a deferred batch.
- //
- STDMETHOD(Start) (THIS_ UINT32 Flags X2DEFAULT(0), UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE;
-
- // NAME: IXAudio2SourceVoice::Stop
- // DESCRIPTION: Makes this voice stop consuming audio.
- //
- // ARGUMENTS:
- // Flags - Flags controlling how the voice should be stopped.
- // OperationSet - Used to identify this call as part of a deferred batch.
- //
- STDMETHOD(Stop) (THIS_ UINT32 Flags X2DEFAULT(0), UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE;
-
- // NAME: IXAudio2SourceVoice::SubmitSourceBuffer
- // DESCRIPTION: Adds a new audio buffer to this voice's input queue.
- //
- // ARGUMENTS:
- // pBuffer - Pointer to the buffer structure to be queued.
- // pBufferWMA - Additional structure used only when submitting XWMA data.
- //
- STDMETHOD(SubmitSourceBuffer) (THIS_ _In_ const XAUDIO2_BUFFER* pBuffer, _In_opt_ const XAUDIO2_BUFFER_WMA* pBufferWMA X2DEFAULT(NULL)) PURE;
-
- // NAME: IXAudio2SourceVoice::FlushSourceBuffers
- // DESCRIPTION: Removes all pending audio buffers from this voice's queue.
- //
- STDMETHOD(FlushSourceBuffers) (THIS) PURE;
-
- // NAME: IXAudio2SourceVoice::Discontinuity
- // DESCRIPTION: Notifies the voice of an intentional break in the stream of
- // audio buffers (e.g. the end of a sound), to prevent XAudio2
- // from interpreting an empty buffer queue as a glitch.
- //
- STDMETHOD(Discontinuity) (THIS) PURE;
-
- // NAME: IXAudio2SourceVoice::ExitLoop
- // DESCRIPTION: Breaks out of the current loop when its end is reached.
- //
- // ARGUMENTS:
- // OperationSet - Used to identify this call as part of a deferred batch.
- //
- STDMETHOD(ExitLoop) (THIS_ UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE;
-
- // NAME: IXAudio2SourceVoice::GetState
- // DESCRIPTION: Returns the number of buffers currently queued on this voice,
- // the pContext value associated with the currently processing
- // buffer (if any), and other voice state information.
- //
- // ARGUMENTS:
- // pVoiceState - Returns the state information.
- // Flags - Flags controlling what voice state is returned.
- //
- STDMETHOD_(void, GetState) (THIS_ _Out_ XAUDIO2_VOICE_STATE* pVoiceState, UINT32 Flags X2DEFAULT(0)) PURE;
-
- // NAME: IXAudio2SourceVoice::SetFrequencyRatio
- // DESCRIPTION: Sets this voice's frequency adjustment, i.e. its pitch.
- //
- // ARGUMENTS:
- // Ratio - Frequency change, expressed as source frequency / target frequency.
- // OperationSet - Used to identify this call as part of a deferred batch.
- //
- STDMETHOD(SetFrequencyRatio) (THIS_ float Ratio,
- UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE;
-
- // NAME: IXAudio2SourceVoice::GetFrequencyRatio
- // DESCRIPTION: Returns this voice's current frequency adjustment ratio.
- //
- // ARGUMENTS:
- // pRatio - Returns the frequency adjustment.
- //
- STDMETHOD_(void, GetFrequencyRatio) (THIS_ _Out_ float* pRatio) PURE;
-
- // NAME: IXAudio2SourceVoice::SetSourceSampleRate
- // DESCRIPTION: Reconfigures this voice to treat its source data as being
- // at a different sample rate than the original one specified
- // in CreateSourceVoice's pSourceFormat argument.
- //
- // ARGUMENTS:
- // UINT32 - The intended sample rate of further submitted source data.
- //
- STDMETHOD(SetSourceSampleRate) (THIS_ UINT32 NewSourceSampleRate) PURE;
-};
-
-
-/**************************************************************************
- *
- * IXAudio2SubmixVoice: Submixing voice management interface.
- *
- **************************************************************************/
-
-#undef INTERFACE
-#define INTERFACE IXAudio2SubmixVoice
-DECLARE_INTERFACE_(IXAudio2SubmixVoice, IXAudio2Voice)
-{
- // Methods from IXAudio2Voice base interface
- Declare_IXAudio2Voice_Methods();
-
- // There are currently no methods specific to submix voices.
-};
-
-
-/**************************************************************************
- *
- * IXAudio2MasteringVoice: Mastering voice management interface.
- *
- **************************************************************************/
-
-#undef INTERFACE
-#define INTERFACE IXAudio2MasteringVoice
-DECLARE_INTERFACE_(IXAudio2MasteringVoice, IXAudio2Voice)
-{
- // Methods from IXAudio2Voice base interface
- Declare_IXAudio2Voice_Methods();
-
- // NAME: IXAudio2MasteringVoice::GetChannelMask
- // DESCRIPTION: Returns the channel mask for this voice
- //
- // ARGUMENTS:
- // pChannelMask - returns the channel mask for this voice. This corresponds
- // to the dwChannelMask member of WAVEFORMATEXTENSIBLE.
- //
- STDMETHOD(GetChannelMask) (THIS_ _Out_ DWORD* pChannelmask) PURE;
-};
-
-
-/**************************************************************************
- *
- * IXAudio2EngineCallback: Client notification interface for engine events.
- *
- * REMARKS: Contains methods to notify the client when certain events happen
- * in the XAudio2 engine. This interface should be implemented by
- * the client. XAudio2 will call these methods via the interface
- * pointer provided by the client when it calls
- * IXAudio2::RegisterForCallbacks.
- *
- **************************************************************************/
-
-#undef INTERFACE
-#define INTERFACE IXAudio2EngineCallback
-DECLARE_INTERFACE(IXAudio2EngineCallback)
-{
- // Called by XAudio2 just before an audio processing pass begins.
- STDMETHOD_(void, OnProcessingPassStart) (THIS) PURE;
-
- // Called just after an audio processing pass ends.
- STDMETHOD_(void, OnProcessingPassEnd) (THIS) PURE;
-
- // Called in the event of a critical system error which requires XAudio2
- // to be closed down and restarted. The error code is given in Error.
- STDMETHOD_(void, OnCriticalError) (THIS_ HRESULT Error) PURE;
-};
-
-
-/**************************************************************************
- *
- * IXAudio2VoiceCallback: Client notification interface for voice events.
- *
- * REMARKS: Contains methods to notify the client when certain events happen
- * in an XAudio2 voice. This interface should be implemented by the
- * client. XAudio2 will call these methods via an interface pointer
- * provided by the client in the IXAudio2::CreateSourceVoice call.
- *
- **************************************************************************/
-
-#undef INTERFACE
-#define INTERFACE IXAudio2VoiceCallback
-DECLARE_INTERFACE(IXAudio2VoiceCallback)
-{
- // Called just before this voice's processing pass begins.
- STDMETHOD_(void, OnVoiceProcessingPassStart) (THIS_ UINT32 BytesRequired) PURE;
-
- // Called just after this voice's processing pass ends.
- STDMETHOD_(void, OnVoiceProcessingPassEnd) (THIS) PURE;
-
- // Called when this voice has just finished playing a buffer stream
- // (as marked with the XAUDIO2_END_OF_STREAM flag on the last buffer).
- STDMETHOD_(void, OnStreamEnd) (THIS) PURE;
-
- // Called when this voice is about to start processing a new buffer.
- STDMETHOD_(void, OnBufferStart) (THIS_ void* pBufferContext) PURE;
-
- // Called when this voice has just finished processing a buffer.
- // The buffer can now be reused or destroyed.
- STDMETHOD_(void, OnBufferEnd) (THIS_ void* pBufferContext) PURE;
-
- // Called when this voice has just reached the end position of a loop.
- STDMETHOD_(void, OnLoopEnd) (THIS_ void* pBufferContext) PURE;
-
- // Called in the event of a critical error during voice processing,
- // such as a failing xAPO or an error from the hardware XMA decoder.
- // The voice may have to be destroyed and re-created to recover from
- // the error. The callback arguments report which buffer was being
- // processed when the error occurred, and its HRESULT code.
- STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) PURE;
-};
-
-
-/**************************************************************************
- *
- * Macros to make it easier to use the XAudio2 COM interfaces in C code.
- *
- **************************************************************************/
-
-#ifndef __cplusplus
-
-// IXAudio2
-#define IXAudio2_QueryInterface(This,riid,ppvInterface) ((This)->lpVtbl->QueryInterface(This,riid,ppvInterface))
-#define IXAudio2_AddRef(This) ((This)->lpVtbl->AddRef(This))
-#define IXAudio2_Release(This) ((This)->lpVtbl->Release(This))
-#define IXAudio2_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) ((This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain))
-#define IXAudio2_CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain) ((This)->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain))
-#define IXAudio2_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceId,pEffectChain,StreamCategory) ((This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceId,pEffectChain,StreamCategory))
-#define IXAudio2_StartEngine(This) ((This)->lpVtbl->StartEngine(This))
-#define IXAudio2_StopEngine(This) ((This)->lpVtbl->StopEngine(This))
-#define IXAudio2_CommitChanges(This,OperationSet) ((This)->lpVtbl->CommitChanges(This,OperationSet))
-#define IXAudio2_GetPerformanceData(This,pPerfData) ((This)->lpVtbl->GetPerformanceData(This,pPerfData))
-#define IXAudio2_SetDebugConfiguration(This,pDebugConfiguration,pReserved) ((This)->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved))
-
-// IXAudio2Voice
-#define IXAudio2Voice_GetVoiceDetails(This,pVoiceDetails) ((This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails))
-#define IXAudio2Voice_SetOutputVoices(This,pSendList) ((This)->lpVtbl->SetOutputVoices(This,pSendList))
-#define IXAudio2Voice_SetEffectChain(This,pEffectChain) ((This)->lpVtbl->SetEffectChain(This,pEffectChain))
-#define IXAudio2Voice_EnableEffect(This,EffectIndex,OperationSet) ((This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet))
-#define IXAudio2Voice_DisableEffect(This,EffectIndex,OperationSet) ((This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet))
-#define IXAudio2Voice_GetEffectState(This,EffectIndex,pEnabled) ((This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled))
-#define IXAudio2Voice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize, OperationSet) ((This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet))
-#define IXAudio2Voice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) ((This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize))
-#define IXAudio2Voice_SetFilterParameters(This,pParameters,OperationSet) ((This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet))
-#define IXAudio2Voice_GetFilterParameters(This,pParameters) ((This)->lpVtbl->GetFilterParameters(This,pParameters))
-#define IXAudio2Voice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) ((This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet))
-#define IXAudio2Voice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) ((This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters))
-#define IXAudio2Voice_SetVolume(This,Volume,OperationSet) ((This)->lpVtbl->SetVolume(This,Volume,OperationSet))
-#define IXAudio2Voice_GetVolume(This,pVolume) ((This)->lpVtbl->GetVolume(This,pVolume))
-#define IXAudio2Voice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) ((This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet))
-#define IXAudio2Voice_GetChannelVolumes(This,Channels,pVolumes) ((This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes))
-#define IXAudio2Voice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) ((This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet))
-#define IXAudio2Voice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) ((This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix))
-#define IXAudio2Voice_DestroyVoice(This) ((This)->lpVtbl->DestroyVoice(This))
-
-// IXAudio2SourceVoice
-#define IXAudio2SourceVoice_GetVoiceDetails IXAudio2Voice_GetVoiceDetails
-#define IXAudio2SourceVoice_SetOutputVoices IXAudio2Voice_SetOutputVoices
-#define IXAudio2SourceVoice_SetEffectChain IXAudio2Voice_SetEffectChain
-#define IXAudio2SourceVoice_EnableEffect IXAudio2Voice_EnableEffect
-#define IXAudio2SourceVoice_DisableEffect IXAudio2Voice_DisableEffect
-#define IXAudio2SourceVoice_GetEffectState IXAudio2Voice_GetEffectState
-#define IXAudio2SourceVoice_SetEffectParameters IXAudio2Voice_SetEffectParameters
-#define IXAudio2SourceVoice_GetEffectParameters IXAudio2Voice_GetEffectParameters
-#define IXAudio2SourceVoice_SetFilterParameters IXAudio2Voice_SetFilterParameters
-#define IXAudio2SourceVoice_GetFilterParameters IXAudio2Voice_GetFilterParameters
-#define IXAudio2SourceVoice_SetOutputFilterParameters IXAudio2Voice_SetOutputFilterParameters
-#define IXAudio2SourceVoice_GetOutputFilterParameters IXAudio2Voice_GetOutputFilterParameters
-#define IXAudio2SourceVoice_SetVolume IXAudio2Voice_SetVolume
-#define IXAudio2SourceVoice_GetVolume IXAudio2Voice_GetVolume
-#define IXAudio2SourceVoice_SetChannelVolumes IXAudio2Voice_SetChannelVolumes
-#define IXAudio2SourceVoice_GetChannelVolumes IXAudio2Voice_GetChannelVolumes
-#define IXAudio2SourceVoice_SetOutputMatrix IXAudio2Voice_SetOutputMatrix
-#define IXAudio2SourceVoice_GetOutputMatrix IXAudio2Voice_GetOutputMatrix
-#define IXAudio2SourceVoice_DestroyVoice IXAudio2Voice_DestroyVoice
-#define IXAudio2SourceVoice_Start(This,Flags,OperationSet) ((This)->lpVtbl->Start(This,Flags,OperationSet))
-#define IXAudio2SourceVoice_Stop(This,Flags,OperationSet) ((This)->lpVtbl->Stop(This,Flags,OperationSet))
-#define IXAudio2SourceVoice_SubmitSourceBuffer(This,pBuffer,pBufferWMA) ((This)->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA))
-#define IXAudio2SourceVoice_FlushSourceBuffers(This) ((This)->lpVtbl->FlushSourceBuffers(This))
-#define IXAudio2SourceVoice_Discontinuity(This) ((This)->lpVtbl->Discontinuity(This))
-#define IXAudio2SourceVoice_ExitLoop(This,OperationSet) ((This)->lpVtbl->ExitLoop(This,OperationSet))
-#define IXAudio2SourceVoice_GetState(This,pVoiceState,Flags) ((This)->lpVtbl->GetState(This,pVoiceState,Flags))
-#define IXAudio2SourceVoice_SetFrequencyRatio(This,Ratio,OperationSet) ((This)->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet))
-#define IXAudio2SourceVoice_GetFrequencyRatio(This,pRatio) ((This)->lpVtbl->GetFrequencyRatio(This,pRatio))
-#define IXAudio2SourceVoice_SetSourceSampleRate(This,NewSourceSampleRate) ((This)->lpVtbl->SetSourceSampleRate(This,NewSourceSampleRate))
-
-// IXAudio2SubmixVoice
-#define IXAudio2SubmixVoice_GetVoiceDetails IXAudio2Voice_GetVoiceDetails
-#define IXAudio2SubmixVoice_SetOutputVoices IXAudio2Voice_SetOutputVoices
-#define IXAudio2SubmixVoice_SetEffectChain IXAudio2Voice_SetEffectChain
-#define IXAudio2SubmixVoice_EnableEffect IXAudio2Voice_EnableEffect
-#define IXAudio2SubmixVoice_DisableEffect IXAudio2Voice_DisableEffect
-#define IXAudio2SubmixVoice_GetEffectState IXAudio2Voice_GetEffectState
-#define IXAudio2SubmixVoice_SetEffectParameters IXAudio2Voice_SetEffectParameters
-#define IXAudio2SubmixVoice_GetEffectParameters IXAudio2Voice_GetEffectParameters
-#define IXAudio2SubmixVoice_SetFilterParameters IXAudio2Voice_SetFilterParameters
-#define IXAudio2SubmixVoice_GetFilterParameters IXAudio2Voice_GetFilterParameters
-#define IXAudio2SubmixVoice_SetOutputFilterParameters IXAudio2Voice_SetOutputFilterParameters
-#define IXAudio2SubmixVoice_GetOutputFilterParameters IXAudio2Voice_GetOutputFilterParameters
-#define IXAudio2SubmixVoice_SetVolume IXAudio2Voice_SetVolume
-#define IXAudio2SubmixVoice_GetVolume IXAudio2Voice_GetVolume
-#define IXAudio2SubmixVoice_SetChannelVolumes IXAudio2Voice_SetChannelVolumes
-#define IXAudio2SubmixVoice_GetChannelVolumes IXAudio2Voice_GetChannelVolumes
-#define IXAudio2SubmixVoice_SetOutputMatrix IXAudio2Voice_SetOutputMatrix
-#define IXAudio2SubmixVoice_GetOutputMatrix IXAudio2Voice_GetOutputMatrix
-#define IXAudio2SubmixVoice_DestroyVoice IXAudio2Voice_DestroyVoice
-
-// IXAudio2MasteringVoice
-#define IXAudio2MasteringVoice_GetVoiceDetails IXAudio2Voice_GetVoiceDetails
-#define IXAudio2MasteringVoice_SetOutputVoices IXAudio2Voice_SetOutputVoices
-#define IXAudio2MasteringVoice_SetEffectChain IXAudio2Voice_SetEffectChain
-#define IXAudio2MasteringVoice_EnableEffect IXAudio2Voice_EnableEffect
-#define IXAudio2MasteringVoice_DisableEffect IXAudio2Voice_DisableEffect
-#define IXAudio2MasteringVoice_GetEffectState IXAudio2Voice_GetEffectState
-#define IXAudio2MasteringVoice_SetEffectParameters IXAudio2Voice_SetEffectParameters
-#define IXAudio2MasteringVoice_GetEffectParameters IXAudio2Voice_GetEffectParameters
-#define IXAudio2MasteringVoice_SetFilterParameters IXAudio2Voice_SetFilterParameters
-#define IXAudio2MasteringVoice_GetFilterParameters IXAudio2Voice_GetFilterParameters
-#define IXAudio2MasteringVoice_SetOutputFilterParameters IXAudio2Voice_SetOutputFilterParameters
-#define IXAudio2MasteringVoice_GetOutputFilterParameters IXAudio2Voice_GetOutputFilterParameters
-#define IXAudio2MasteringVoice_SetVolume IXAudio2Voice_SetVolume
-#define IXAudio2MasteringVoice_GetVolume IXAudio2Voice_GetVolume
-#define IXAudio2MasteringVoice_SetChannelVolumes IXAudio2Voice_SetChannelVolumes
-#define IXAudio2MasteringVoice_GetChannelVolumes IXAudio2Voice_GetChannelVolumes
-#define IXAudio2MasteringVoice_SetOutputMatrix IXAudio2Voice_SetOutputMatrix
-#define IXAudio2MasteringVoice_GetOutputMatrix IXAudio2Voice_GetOutputMatrix
-#define IXAudio2MasteringVoice_DestroyVoice IXAudio2Voice_DestroyVoice
-#define IXAudio2MasteringVoice_GetChannelMask(This,pChannelMask) ((This)->lpVtbl->GetChannelMask(This,pChannelMask))
-
-#endif // #ifndef __cplusplus
-
-
-/**************************************************************************
- *
- * Utility functions used to convert from pitch in semitones and volume
- * in decibels to the frequency and amplitude ratio units used by XAudio2.
- * These are only defined if the client #defines XAUDIO2_HELPER_FUNCTIONS
- * prior to #including xaudio2.h.
- *
- **************************************************************************/
-
-#ifdef XAUDIO2_HELPER_FUNCTIONS
-
-#define _USE_MATH_DEFINES // Make math.h define M_PI
-#include <math.h> // For powf, log10f, sinf and asinf
-
-// Calculate the argument to SetVolume from a decibel value
-__inline float XAudio2DecibelsToAmplitudeRatio(float Decibels)
-{
- return powf(10.0f, Decibels / 20.0f);
-}
-
-// Recover a volume in decibels from an amplitude factor
-__inline float XAudio2AmplitudeRatioToDecibels(float Volume)
-{
- if (Volume == 0)
- {
- return -3.402823466e+38f; // Smallest float value (-FLT_MAX)
- }
- return 20.0f * log10f(Volume);
-}
-
-// Calculate the argument to SetFrequencyRatio from a semitone value
-__inline float XAudio2SemitonesToFrequencyRatio(float Semitones)
-{
- // FrequencyRatio = 2 ^ Octaves
- // = 2 ^ (Semitones / 12)
- return powf(2.0f, Semitones / 12.0f);
-}
-
-// Recover a pitch in semitones from a frequency ratio
-__inline float XAudio2FrequencyRatioToSemitones(float FrequencyRatio)
-{
- // Semitones = 12 * log2(FrequencyRatio)
- // = 12 * log2(10) * log10(FrequencyRatio)
- return 39.86313713864835f * log10f(FrequencyRatio);
-}
-
-// Convert from filter cutoff frequencies expressed in Hertz to the radian
-// frequency values used in XAUDIO2_FILTER_PARAMETERS.Frequency, state-variable
-// filter types only. Use XAudio2CutoffFrequencyToOnePoleCoefficient() for one-pole filter types.
-// Note that the highest CutoffFrequency supported is SampleRate/6.
-// Higher values of CutoffFrequency will return XAUDIO2_MAX_FILTER_FREQUENCY.
-__inline float XAudio2CutoffFrequencyToRadians(float CutoffFrequency, UINT32 SampleRate)
-{
- if ((UINT32)(CutoffFrequency * 6.0f) >= SampleRate)
- {
- return XAUDIO2_MAX_FILTER_FREQUENCY;
- }
- return 2.0f * sinf((float)M_PI * CutoffFrequency / SampleRate);
-}
-
-// Convert from radian frequencies back to absolute frequencies in Hertz
-__inline float XAudio2RadiansToCutoffFrequency(float Radians, float SampleRate)
-{
- return SampleRate * asinf(Radians / 2.0f) / (float)M_PI;
-}
-
-// Convert from filter cutoff frequencies expressed in Hertz to the filter
-// coefficients used with XAUDIO2_FILTER_PARAMETERS.Frequency,
-// LowPassOnePoleFilter and HighPassOnePoleFilter filter types only.
-// Use XAudio2CutoffFrequencyToRadians() for state-variable filter types.
-__inline float XAudio2CutoffFrequencyToOnePoleCoefficient(float CutoffFrequency, UINT32 SampleRate)
-{
- if ((UINT32)CutoffFrequency >= SampleRate)
- {
- return XAUDIO2_MAX_FILTER_FREQUENCY;
- }
- return ( 1.0f - powf(1.0f - 2.0f * CutoffFrequency / SampleRate, 2.0f) );
-}
-
-
-#endif // #ifdef XAUDIO2_HELPER_FUNCTIONS
-
-
-/**************************************************************************
- *
- * XAudio2Create: Top-level function that creates an XAudio2 instance.
- *
- * ARGUMENTS:
- *
- * Flags - Flags specifying the XAudio2 object's behavior. Currently
- * unused, must be set to 0.
- *
- * XAudio2Processor - An XAUDIO2_PROCESSOR value that specifies the
- * hardware threads (Xbox) or processors (Windows) that XAudio2
- * will use. Note that XAudio2 supports concurrent processing on
- * multiple threads, using any combination of XAUDIO2_PROCESSOR
- * flags. The values are platform-specific; platform-independent
- * code can use XAUDIO2_DEFAULT_PROCESSOR to use the default on
- * each platform.
- *
- **************************************************************************/
-
-#if (defined XAUDIO2_EXPORT)
- // We're building xaudio2.dll
- #define XAUDIO2_STDAPI extern "C" __declspec(dllexport) HRESULT __stdcall
-#elif (defined DX_BUILD)
- // We're building xaudio2 as a static library
- #define XAUDIO2_STDAPI STDAPI
-#else
- // We're an xaudio2 client
- #define XAUDIO2_STDAPI extern "C" __declspec(dllimport) HRESULT __stdcall
-#endif
-
-XAUDIO2_STDAPI XAudio2Create(_Outptr_ IXAudio2** ppXAudio2, UINT32 Flags X2DEFAULT(0),
- XAUDIO2_PROCESSOR XAudio2Processor X2DEFAULT(XAUDIO2_DEFAULT_PROCESSOR));
-
-// Undo the #pragma pack(push, 1) directive at the top of this file
-#pragma pack(pop)
-
-#endif // #ifndef GUID_DEFS_ONLY
-
-#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
-#pragma endregion
-
-#endif // #ifndef __XAUDIO2_INCLUDED__
-
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 00000000000..96249671a2c
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,365 @@
+The source code to MAME is provided under the GNU General Public License version 2 or later as of Git revision 35ccf865aa366845b574e1fdbc71c4866b3d6a0f and the upcoming release of MAME 0.172. Source files may also be licensed as specified in the file header. This license does not apply to prior versions of MAME.
+<br />MAME is a registered trademark of Nicola Salmoria.
+
+The text of version 2 of the GNU General Public License follows.
+
+ Copyright (C) 1997-2016 MAMEDev and contributors
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+GNU GENERAL PUBLIC LICENSE
+==========================
+Version 2, June 1991
+
+> Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+# Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+
+# GNU GENERAL PUBLIC LICENSE #
+## TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ##
+
+- *0\.* This License applies to any program or other work which contains
+ a notice placed by the copyright holder saying it may be distributed
+ under the terms of this General Public License. The "Program", below,
+ refers to any such program or work, and a "work based on the Program"
+ means either the Program or any derivative work under copyright law:
+ that is to say, a work containing the Program or a portion of it,
+ either verbatim or with modifications and/or translated into another
+ language. (Hereinafter, translation is included without limitation in
+ the term "modification".) Each licensee is addressed as "you".
+
+ Activities other than copying, distribution and modification are not
+ covered by this License; they are outside its scope. The act of
+ running the Program is not restricted, and the output from the Program
+ is covered only if its contents constitute a work based on the
+ Program (independent of having been made by running the Program).
+ Whether that is true depends on what the Program does.
+
+- 1\. You may copy and distribute verbatim copies of the Program's
+ source code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the
+ notices that refer to this License and to the absence of any warranty;
+ and give any other recipients of the Program a copy of this License
+ along with the Program.
+
+ You may charge a fee for the physical act of transferring a copy, and
+ you may at your option offer warranty protection in exchange for a fee.
+
+- 2\. You may modify your copy or copies of the Program or any portion
+ of it, thus forming a work based on the Program, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+ These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the Program,
+ and can be reasonably considered independent and separate works in
+ themselves, then this License, and its terms, do not apply to those
+ sections when you distribute them as separate works. But when you
+ distribute the same sections as part of a whole which is a work based
+ on the Program, the distribution of the whole must be on the terms of
+ this License, whose permissions for other licensees extend to the
+ entire whole, and thus to each and every part regardless of who wrote it.
+
+ Thus, it is not the intent of this section to claim rights or contest
+ your rights to work written entirely by you; rather, the intent is to
+ exercise the right to control the distribution of derivative or
+ collective works based on the Program.
+
+ In addition, mere aggregation of another work not based on the Program
+ with the Program (or with a work based on the Program) on a volume of
+ a storage or distribution medium does not bring the other work under
+ the scope of this License.
+
+- 3\. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms of
+ Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+ The source code for a work means the preferred form of the work for
+ making modifications to it. For an executable work, complete source
+ code means all the source code for all modules it contains, plus any
+ associated interface definition files, plus the scripts used to
+ control compilation and installation of the executable. However, as a
+ special exception, the source code distributed need not include
+ anything that is normally distributed (in either source or binary
+ form) with the major components (compiler, kernel, and so on) of the
+ operating system on which the executable runs, unless that component
+ itself accompanies the executable.
+
+ If distribution of executable or object code is made by offering
+ access to copy from a designated place, then offering equivalent
+ access to copy the source code from the same place counts as
+ distribution of the source code, even though third parties are not
+ compelled to copy the source along with the object code.
+
+- 4\. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense or distribute the Program is
+ void, and will automatically terminate your rights under this License.
+ However, parties who have received copies, or rights, from you under
+ this License will not have their licenses terminated so long as such
+ parties remain in full compliance.
+
+- 5\. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify or
+ distribute the Program or its derivative works. These actions are
+ prohibited by law if you do not accept this License. Therefore, by
+ modifying or distributing the Program (or any work based on the
+ Program), you indicate your acceptance of this License to do so, and
+ all its terms and conditions for copying, distributing or modifying
+ the Program or works based on it.
+
+- 6\. Each time you redistribute the Program (or any work based on the
+ Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program subject to
+ these terms and conditions. You may not impose any further
+ restrictions on the recipients' exercise of the rights granted herein.
+ You are not responsible for enforcing compliance by third parties to
+ this License.
+
+- 7\. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent issues),
+ conditions are imposed on you (whether by court order, agreement or
+ otherwise) that contradict the conditions of this License, they do not
+ excuse you from the conditions of this License. If you cannot
+ distribute so as to satisfy simultaneously your obligations under this
+ License and any other pertinent obligations, then as a consequence you
+ may not distribute the Program at all. For example, if a patent
+ license would not permit royalty-free redistribution of the Program by
+ all those who receive copies directly or indirectly through you, then
+ the only way you could satisfy both it and this License would be to
+ refrain entirely from distribution of the Program.
+
+ If any portion of this section is held invalid or unenforceable under
+ any particular circumstance, the balance of the section is intended to
+ apply and the section as a whole is intended to apply in other
+ circumstances.
+
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of any
+ such claims; this section has the sole purpose of protecting the
+ integrity of the free software distribution system, which is
+ implemented by public license practices. Many people have made
+ generous contributions to the wide range of software distributed
+ through that system in reliance on consistent application of that
+ system; it is up to the author/donor to decide if he or she is willing
+ to distribute software through any other system and a licensee cannot
+ impose that choice.
+
+ This section is intended to make thoroughly clear what is believed to
+ be a consequence of the rest of this License.
+
+- 8\. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces, the
+ original copyright holder who places the Program under this License
+ may add an explicit geographical distribution limitation excluding
+ those countries, so that distribution is permitted only in or among
+ countries not thus excluded. In such case, this License incorporates
+ the limitation as if written in the body of this License.
+
+- 9\. The Free Software Foundation may publish revised and/or new versions
+ of the General Public License from time to time. Such new versions will
+ be similar in spirit to the present version, but may differ in detail to
+ address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the Program
+ specifies a version number of this License which applies to it and "any
+ later version", you have the option of following the terms and conditions
+ either of that version or of any later version published by the Free
+ Software Foundation. If the Program does not specify a version number of
+ this License, you may choose any version ever published by the Free Software
+ Foundation.
+
+- 10\. If you wish to incorporate parts of the Program into other free
+ programs whose distribution conditions are different, write to the author
+ to ask for permission. For software which is copyrighted by the Free
+ Software Foundation, write to the Free Software Foundation; we sometimes
+ make exceptions for this. Our decision will be guided by the two goals
+ of preserving the free status of all derivatives of our free software and
+ of promoting the sharing and reuse of software generally.
+
+
+## NO WARRANTY
+
+- 11\. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+ REPAIR OR CORRECTION.
+
+- 12\. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGES.
+
+## END OF TERMS AND CONDITIONS ##
+
+---------------------------------------------------------------------------
+
+### How to Apply These Terms to Your New Programs ###
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Also add information on how to contact you by electronic and paper mail.
+
+ If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+ The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+ You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/README.md b/README.md
index a83e4a627fe..4cdcd8e7d03 100644
--- a/README.md
+++ b/README.md
@@ -1,36 +1,19 @@
# **MAME** #
-[![Build Status](https://travis-ci.org/mamedev/mame.svg)](https://travis-ci.org/mamedev/mame) [![Build status](https://ci.appveyor.com/api/projects/status/te0qy56b72tp5kmo?svg=true)](https://ci.appveyor.com/project/startaq/mame) [![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)
+[![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?
=============
-MAME stands for Multiple Arcade Machine Emulator.
+MAME originally stood 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?
-=============
-
-MESS (Multi Emulator Super System) is the sister project of MAME. MESS documents the hardware for a wide variety of (mostly vintage) computers, video game consoles, and calculators, as MAME does for arcade games.
-
-The MESS and MAME projects live in the same source repository and share much of the same code, but are different build targets.
-
-
-License
-=======
-
-MAME is in the process of becoming a Free and Open Source project. We are still in the process of contacting all developers who have contributed in the past. We have received approval for the vast majority of contributions.
-
-Going forward, we will be using the 3-Clause BSD license for the core, and the LGPL version 2.1 or later, and the GPL version 2.0 or later, for certain drivers. As a whole, MAME will be delivered under the GPL version 2.0 or later.
-As we are still contacting developers, MAME is still distributed under the [MAME license](docs/mamelicense.txt) as of this time. If you have not been contacted yet, and believe you have contributed code to MAME in the past, please [contact us](mailto:mamedev@mamedev.org).
+MAME's purpose is to preserve decades of software history. As electronic technology continues to rush forward, MAME prevents this important "vintage" software 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 software is usable serves primarily to validate the accuracy of the documentation (how else can you prove that you have recreated the hardware faithfully?). Over time, MAME absorbed the sister-project MESS (Multi Emulator Super System), so MAME now documents a wide variety of (mostly vintage) computers, video game consoles and calculators, in addition to the arcade video games that were its initial focus.
How to compile?
-=============
+===============
-If you're on a *nix system, it could be as easy as typing
+If you're on a *NIX or OSX system, it could be as easy as typing
```
make
@@ -48,11 +31,25 @@ 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 MESS build.
-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.
+For Linux users we have provided you with all the [prerequisites](http://forums.bannister.org/ubbthreads.php?ubb=showflat&Number=35138).
+For recent versions of OSX you need to install [Xcode](https://developer.apple.com/xcode/) including command-line tools and [SDL 2.0](https://www.libsdl.org/download-2.0.php).
+For Windows users, we provide a ready-made [build environment](http://mamedev.org/tools/) based on MinGW-w64.
+
+Visual Studio builds are also possible, but you still need [build environment](http://mamedev.org/tools/) based on MinGW-w64.
+In order to generate solution and project files just run:
+
+```
+make vs2015
+```
+or use this command to build it directly using msbuild
+
+```
+make vs2015 MSBUILD=1
+```
Where can I find out more?
@@ -72,5 +69,28 @@ MAME source code should be viewed and edited with your editor set to use four sp
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.
-All contributors need to either add standard header for license info (on new files) or send us their wish under which of licenses they would like their code to be published under :[BSD-3-Clause](http://spdx.org/licenses/BSD-3-Clause), or for new files in mame/ or mess/, either the [BSD-3-Clause](http://spdx.org/licenses/BSD-3-Clause) license, the [LGPL-2.1+](http://spdx.org/licenses/LGPL-2.1+), or the [GPL-2.0+](http://spdx.org/licenses/GPL-2.0+).
+All contributors need to either add a standard header for license info (on new files) or inform us of their wishes regarding which of the following licenses they would like their code to be made available under: the [BSD-3-Clause](http://opensource.org/licenses/BSD-3-Clause) license, the [LGPL-2.1](http://opensource.org/licenses/LGPL-2.1), or the [GPL-2.0](http://opensource.org/licenses/GPL-2.0).
+
+License
+=======
+The MAME project as a whole is distributed under the terms of the [GNU General Public License, version 2 or later](http://opensource.org/licenses/GPL-2.0) (GPL-2.0+), since it contains code made available under multiple GPL-compatible licenses. A great majority of files (over 90% including core files) are under the [BSD-3-Clause License](http://opensource.org/licenses/BSD-3-Clause) and we would encourage new contributors to distribute files under this license.
+
+Please note that MAME is a registered trademark of Nicola Salmoria, and permission is required to use the "MAME" name, logo, or wordmark.
+
+ Copyright (C) 1997-2016 MAMEDev and contributors
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+Please see [LICENSE.md](LICENSE.md) for further details.
diff --git a/artwork/LICENSE b/artwork/LICENSE
new file mode 100644
index 00000000000..670154e3538
--- /dev/null
+++ b/artwork/LICENSE
@@ -0,0 +1,116 @@
+CC0 1.0 Universal
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later
+claims of infringement build upon, modify, incorporate in other works, reuse
+and redistribute as freely as possible in any form whatsoever and for any
+purposes, including without limitation commercial purposes. These owners may
+contribute to the Commons to promote the ideal of a free culture and the
+further production of creative, cultural and scientific works, or to gain
+reputation or greater distribution for their Work in part through the use and
+efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with a
+Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not limited
+to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display, communicate,
+ and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or performer(s);
+
+ iii. publicity and privacy rights pertaining to a person's image or likeness
+ depicted in a Work;
+
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+
+ v. rights protecting the extraction, dissemination, use and reuse of data in
+ a Work;
+
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation thereof,
+ including any amended or successor version of such directive); and
+
+ vii. other similar, equivalent or corresponding rights throughout the world
+ based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time
+extensions), (iii) in any current or future medium and for any number of
+copies, and (iv) for any purpose whatsoever, including without limitation
+commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
+the Waiver for the benefit of each member of the public at large and to the
+detriment of Affirmer's heirs and successors, fully intending that such Waiver
+shall not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of the Work
+by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account
+Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
+is so judged Affirmer hereby grants to each affected person a royalty-free,
+non transferable, non sublicensable, non exclusive, irrevocable and
+unconditional license to exercise Affirmer's Copyright and Related Rights in
+the Work (i) in all territories worldwide, (ii) for the maximum duration
+provided by applicable law or treaty (including future time extensions), (iii)
+in any current or future medium and for any number of copies, and (iv) for any
+purpose whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed effective as
+of the date CC0 was applied by Affirmer to the Work. Should any part of the
+License for any reason be judged legally invalid or ineffective under
+applicable law, such partial invalidity or ineffectiveness shall not
+invalidate the remainder of the License, and in such case Affirmer hereby
+affirms that he or she will not (i) exercise any of his or her remaining
+Copyright and Related Rights in the Work or (ii) assert any associated claims
+and causes of action with respect to the Work, in either case contrary to
+Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+
+ b. Affirmer offers the Work as-is and makes no representations or warranties
+ of any kind concerning the Work, express, implied, statutory or otherwise,
+ including without limitation warranties of title, merchantability, fitness
+ for a particular purpose, non infringement, or the absence of latent or
+ other defects, accuracy, or the present or absence of errors, whether or not
+ discoverable, all to the greatest extent permissible under applicable law.
+
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without limitation
+ any person's Copyright and Related Rights in the Work. Further, Affirmer
+ disclaims responsibility for obtaining any necessary consents, permissions
+ or other rights required for any use of the Work.
+
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to this
+ CC0 or use of the Work.
+
+For more information, please see
+<http://creativecommons.org/publicdomain/zero/1.0/>
diff --git a/artwork/README.md b/artwork/README.md
new file mode 100644
index 00000000000..4505ae5c1e5
--- /dev/null
+++ b/artwork/README.md
@@ -0,0 +1,5 @@
+# **Artwork** #
+
+Artwork files are representing work of multiple people and are used by layout manager and shaders.
+
+Licensed under [CC0 1.0 Universal (CC0 1.0)](https://creativecommons.org/publicdomain/zero/1.0/) \ No newline at end of file
diff --git a/benchmarks/LICENSE b/benchmarks/LICENSE
new file mode 100644
index 00000000000..4d9210d10e1
--- /dev/null
+++ b/benchmarks/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2016, MAME Development Team
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of bsd3 nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/benchmarks/README.md b/benchmarks/README.md
new file mode 100644
index 00000000000..00f5aa9922e
--- /dev/null
+++ b/benchmarks/README.md
@@ -0,0 +1,5 @@
+# **Benchmarks** #
+
+Cointains code by various developers and it is used to benchmark MAME code
+
+Licensed under [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause)
diff --git a/benchmarks/eminline_native.cpp b/benchmarks/eminline_native.cpp
index 07bfa02bb1d..9402532fddb 100644
--- a/benchmarks/eminline_native.cpp
+++ b/benchmarks/eminline_native.cpp
@@ -1,8 +1,6 @@
-// license:BSD-3-Clause
-// copyright-holders:Miodrag Milanovic
-
#include "benchmark/benchmark_api.h"
#include "osdcomm.h"
+#include "osdcore.h"
#include "eminline.h"
static void BM_count_leading_zeros_native(benchmark::State& state) {
UINT32 cnt = 0x332533;
diff --git a/benchmarks/eminline_noasm.cpp b/benchmarks/eminline_noasm.cpp
index 43c9e36b020..0344f074c01 100644
--- a/benchmarks/eminline_noasm.cpp
+++ b/benchmarks/eminline_noasm.cpp
@@ -1,6 +1,3 @@
-// license:BSD-3-Clause
-// copyright-holders:Miodrag Milanovic
-
#include "benchmark/benchmark_api.h"
#include <time.h>
#include "osdcore.h"
diff --git a/benchmarks/main.cpp b/benchmarks/main.cpp
index c859b918976..065222a39ff 100644
--- a/benchmarks/main.cpp
+++ b/benchmarks/main.cpp
@@ -1,6 +1,3 @@
-// license:BSD-3-Clause
-// copyright-holders:Miodrag Milanovic
-
#include "benchmark/benchmark_api.h"
BENCHMARK_MAIN(); \ No newline at end of file
diff --git a/bgfx/LICENSE b/bgfx/LICENSE
new file mode 100644
index 00000000000..e1a4f1f53d6
--- /dev/null
+++ b/bgfx/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2016, Ryan Holtz and MAME Development Team
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of bsd3 nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/bgfx/README.md b/bgfx/README.md
new file mode 100644
index 00000000000..2b165723286
--- /dev/null
+++ b/bgfx/README.md
@@ -0,0 +1,5 @@
+# **Tests** #
+
+Cointains definitions for BGFX shader chains
+
+Licensed under [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause) by Ryan Holtz and MAME Development Team
diff --git a/docs/LICENSE b/docs/LICENSE
new file mode 100644
index 00000000000..670154e3538
--- /dev/null
+++ b/docs/LICENSE
@@ -0,0 +1,116 @@
+CC0 1.0 Universal
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later
+claims of infringement build upon, modify, incorporate in other works, reuse
+and redistribute as freely as possible in any form whatsoever and for any
+purposes, including without limitation commercial purposes. These owners may
+contribute to the Commons to promote the ideal of a free culture and the
+further production of creative, cultural and scientific works, or to gain
+reputation or greater distribution for their Work in part through the use and
+efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with a
+Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not limited
+to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display, communicate,
+ and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or performer(s);
+
+ iii. publicity and privacy rights pertaining to a person's image or likeness
+ depicted in a Work;
+
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+
+ v. rights protecting the extraction, dissemination, use and reuse of data in
+ a Work;
+
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation thereof,
+ including any amended or successor version of such directive); and
+
+ vii. other similar, equivalent or corresponding rights throughout the world
+ based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time
+extensions), (iii) in any current or future medium and for any number of
+copies, and (iv) for any purpose whatsoever, including without limitation
+commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
+the Waiver for the benefit of each member of the public at large and to the
+detriment of Affirmer's heirs and successors, fully intending that such Waiver
+shall not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of the Work
+by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account
+Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
+is so judged Affirmer hereby grants to each affected person a royalty-free,
+non transferable, non sublicensable, non exclusive, irrevocable and
+unconditional license to exercise Affirmer's Copyright and Related Rights in
+the Work (i) in all territories worldwide, (ii) for the maximum duration
+provided by applicable law or treaty (including future time extensions), (iii)
+in any current or future medium and for any number of copies, and (iv) for any
+purpose whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed effective as
+of the date CC0 was applied by Affirmer to the Work. Should any part of the
+License for any reason be judged legally invalid or ineffective under
+applicable law, such partial invalidity or ineffectiveness shall not
+invalidate the remainder of the License, and in such case Affirmer hereby
+affirms that he or she will not (i) exercise any of his or her remaining
+Copyright and Related Rights in the Work or (ii) assert any associated claims
+and causes of action with respect to the Work, in either case contrary to
+Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+
+ b. Affirmer offers the Work as-is and makes no representations or warranties
+ of any kind concerning the Work, express, implied, statutory or otherwise,
+ including without limitation warranties of title, merchantability, fitness
+ for a particular purpose, non infringement, or the absence of latent or
+ other defects, accuracy, or the present or absence of errors, whether or not
+ discoverable, all to the greatest extent permissible under applicable law.
+
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without limitation
+ any person's Copyright and Related Rights in the Work. Further, Affirmer
+ disclaims responsibility for obtaining any necessary consents, permissions
+ or other rights required for any use of the Work.
+
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to this
+ CC0 or use of the Work.
+
+For more information, please see
+<http://creativecommons.org/publicdomain/zero/1.0/>
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 00000000000..669c251a923
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,5 @@
+# **Docs** #
+
+Documentation of MAME is work of many different contributors, and contain information about usage and internals of MAME.
+
+Licensed under [CC0 1.0 Universal (CC0 1.0)](https://creativecommons.org/publicdomain/zero/1.0/) \ No newline at end of file
diff --git a/docs/mame.txt b/docs/mame.txt
index b675d2145a3..154ebcbc2db 100644
--- a/docs/mame.txt
+++ b/docs/mame.txt
@@ -1,77 +1,61 @@
-MAME(tm), the Multiple Arcade Machine Emulator
-Copyright (c) 1997-2013 by Nicola Salmoria and the MAME team
-MAME is a trademark owned by Nicola Salmoria
+MAME(r)
+Copyright (c) 1997-2016 by MAMEdev and contributors
+MAME is a registered trademark of Nicola Salmoria
----------
I. Purpose
----------
-MAME is strictly a non-profit project. Its main purpose is to be a
-reference to the inner workings of the emulated arcade machines. This is
-done both for educational purposes and for preservation purposes, in
-order to prevent many historical games from disappearing forever once the
-hardware they run on stops working. Of course, in order to preserve the
-games and demonstrate that the emulated behavior matches the original,
-you must also be able to actually play the games. This is considered a
-nice side effect, and is not MAME's primary focus.
+MAME main purpose is to be a reference to the inner workings of the
+emulated machines. This is done both for educational purposes and for
+preservation purposes, in order to prevent historical software from
+disappearing forever once the hardware it runs on stops working. Of
+course, in order to preserve the software and demonstrate that the
+emulated behavior matches the original, one must also be able to
+actually use the software. This is considered a nice side effect, and is
+not MAME's primary focus.
It is not our intention to infringe on any copyrights or patents on the
original games. All of MAME's source code is either our own or freely
-available. To operate, the emulator requires images of the original ROMs,
-CDs, or hard disks from the arcade machines, which must be provided by
-the user. No portions of the original game code are included in the
-executable.
+available. To operate, the emulator requires images of the original
+ROMs, CDs, hard disks or other media from the machines, which must be
+provided by the user. No portions of the original game code are included
+in the executable.
--------
II. Cost
--------
-MAME is free. Its source code is free. Selling either is not allowed.
+MAME is free. Its source code is free. The project as whole is
+distributed under the GNU General Public License, version 2 or later
+(GPL-2.0+), but most of code (including core functionality) is also
+available under the 3-clause BSD license (BSD-3-clause).
-----------------
-III. Image Files
-----------------
-ROM, CD, and hard disk images are all copyrighted material. They cannot
-be distributed without the explicit permission of the copyright owner.
-They are not "abandonware", nor have any of the games supported by MAME
-passed out of copyright.
+-------------------------
+III. Software Image Files
+-------------------------
+ROM, CD, hard disk and other media images are all copyrighted material.
+They cannot be distributed without the explicit permission of the
+copyright holder(s). They are not "abandonware", nor has any of the
+software supported by MAME passed out of copyright.
MAME is not intended to be used as a tool for mass copyright
infringement. Therefore, it is strongly against the authors' wishes to
-sell, advertise, or link to resources that provide illegal copies of ROM,
-CD, or hard disk images.
+sell, advertise, or link to resources that provide illegal copies of
+ROM, CD, hard disk or other media images.
--------------------
IV. Derivative Works
--------------------
-Derivative works are allowed under the MAME license. However, you are
-discouraged from providing specific functionality that goes against the
-philosophy of the MAME team. Specifically:
-
-* Do not add games which are more recent than 3 years old, or which are
-still being sold new by the company that produced them. MAME is not
-intended to be a platform that competes with arcade games that are still
-being actively sold.
-
-* Do not provide a means of generating a list of games that specifically
-identifies those games for which the user does not have image files. This
-only encourages users to seek out sources for illegal ROM, CD, and hard
-disk images in order to "complete" their collection.
-
-* Do not remove the startup screen that contains information about why
-certain non-working games don't work. This only serves to generate a
-bunch of useless email traffic to the developers asking why the games
-don't work.
-
-Because the name MAME is trademarked, you must abide by the rules of the
-trademark usage if you wish to use "MAME" as part of the name your
-derivative work. In general, this means you must request permission,
-which requires that you follow the guidelines above.
+Because the name MAME is trademarked, you must abide by the rules set
+out for trademark usage if you wish to use "MAME" as part of the name
+your derivative work. In general, this means you must request
+permission, which requires that you follow the guidelines above.
The version number of any derivative work should reflect the version
-number of the MAME release it was derived from.
+number of the MAME release from which it was was derived.
-------------------------------
diff --git a/docs/mamelicense.txt b/docs/mamelicense.txt
deleted file mode 100644
index 31f5d897dd3..00000000000
--- a/docs/mamelicense.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-The MAME project, as a whole, is currently released under the following
-license, known as the MAME License.
-
-Most code in MAME is under a more permissive license, or dual-licensed.
-This is noted in per-file headers which specify the alternate license.
-
-The text of the MAME License follows.
-
-Copyright Nicola Salmoria and the MAME team
-All rights reserved.
-
-Redistribution and use of this code or any derivative works are permitted
-provided that the following conditions are met:
-
-* Redistributions may not be sold, nor may they be used in a commercial
-product or activity.
-
-* Redistributions that are modified from the original source must include the
-complete source code, including the source code for all components used by a
-binary built from the modified sources. However, as a special exception, the
-source code distributed need not include anything that is normally distributed
-(in either source or binary form) with the major components (compiler, kernel,
-and so on) of the operating system on which the executable runs, unless that
-component itself accompanies the executable.
-
-* Redistributions must reproduce the above copyright notice, this list of
-conditions and the following disclaimer in the documentation and/or other
-materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/doxygen/LICENSE b/doxygen/LICENSE
new file mode 100644
index 00000000000..670154e3538
--- /dev/null
+++ b/doxygen/LICENSE
@@ -0,0 +1,116 @@
+CC0 1.0 Universal
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later
+claims of infringement build upon, modify, incorporate in other works, reuse
+and redistribute as freely as possible in any form whatsoever and for any
+purposes, including without limitation commercial purposes. These owners may
+contribute to the Commons to promote the ideal of a free culture and the
+further production of creative, cultural and scientific works, or to gain
+reputation or greater distribution for their Work in part through the use and
+efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with a
+Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not limited
+to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display, communicate,
+ and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or performer(s);
+
+ iii. publicity and privacy rights pertaining to a person's image or likeness
+ depicted in a Work;
+
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+
+ v. rights protecting the extraction, dissemination, use and reuse of data in
+ a Work;
+
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation thereof,
+ including any amended or successor version of such directive); and
+
+ vii. other similar, equivalent or corresponding rights throughout the world
+ based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time
+extensions), (iii) in any current or future medium and for any number of
+copies, and (iv) for any purpose whatsoever, including without limitation
+commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
+the Waiver for the benefit of each member of the public at large and to the
+detriment of Affirmer's heirs and successors, fully intending that such Waiver
+shall not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of the Work
+by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account
+Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
+is so judged Affirmer hereby grants to each affected person a royalty-free,
+non transferable, non sublicensable, non exclusive, irrevocable and
+unconditional license to exercise Affirmer's Copyright and Related Rights in
+the Work (i) in all territories worldwide, (ii) for the maximum duration
+provided by applicable law or treaty (including future time extensions), (iii)
+in any current or future medium and for any number of copies, and (iv) for any
+purpose whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed effective as
+of the date CC0 was applied by Affirmer to the Work. Should any part of the
+License for any reason be judged legally invalid or ineffective under
+applicable law, such partial invalidity or ineffectiveness shall not
+invalidate the remainder of the License, and in such case Affirmer hereby
+affirms that he or she will not (i) exercise any of his or her remaining
+Copyright and Related Rights in the Work or (ii) assert any associated claims
+and causes of action with respect to the Work, in either case contrary to
+Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+
+ b. Affirmer offers the Work as-is and makes no representations or warranties
+ of any kind concerning the Work, express, implied, statutory or otherwise,
+ including without limitation warranties of title, merchantability, fitness
+ for a particular purpose, non infringement, or the absence of latent or
+ other defects, accuracy, or the present or absence of errors, whether or not
+ discoverable, all to the greatest extent permissible under applicable law.
+
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without limitation
+ any person's Copyright and Related Rights in the Work. Further, Affirmer
+ disclaims responsibility for obtaining any necessary consents, permissions
+ or other rights required for any use of the Work.
+
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to this
+ CC0 or use of the Work.
+
+For more information, please see
+<http://creativecommons.org/publicdomain/zero/1.0/>
diff --git a/hash/LICENSE b/hash/LICENSE
new file mode 100644
index 00000000000..670154e3538
--- /dev/null
+++ b/hash/LICENSE
@@ -0,0 +1,116 @@
+CC0 1.0 Universal
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later
+claims of infringement build upon, modify, incorporate in other works, reuse
+and redistribute as freely as possible in any form whatsoever and for any
+purposes, including without limitation commercial purposes. These owners may
+contribute to the Commons to promote the ideal of a free culture and the
+further production of creative, cultural and scientific works, or to gain
+reputation or greater distribution for their Work in part through the use and
+efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with a
+Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not limited
+to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display, communicate,
+ and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or performer(s);
+
+ iii. publicity and privacy rights pertaining to a person's image or likeness
+ depicted in a Work;
+
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+
+ v. rights protecting the extraction, dissemination, use and reuse of data in
+ a Work;
+
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation thereof,
+ including any amended or successor version of such directive); and
+
+ vii. other similar, equivalent or corresponding rights throughout the world
+ based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time
+extensions), (iii) in any current or future medium and for any number of
+copies, and (iv) for any purpose whatsoever, including without limitation
+commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
+the Waiver for the benefit of each member of the public at large and to the
+detriment of Affirmer's heirs and successors, fully intending that such Waiver
+shall not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of the Work
+by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account
+Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
+is so judged Affirmer hereby grants to each affected person a royalty-free,
+non transferable, non sublicensable, non exclusive, irrevocable and
+unconditional license to exercise Affirmer's Copyright and Related Rights in
+the Work (i) in all territories worldwide, (ii) for the maximum duration
+provided by applicable law or treaty (including future time extensions), (iii)
+in any current or future medium and for any number of copies, and (iv) for any
+purpose whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed effective as
+of the date CC0 was applied by Affirmer to the Work. Should any part of the
+License for any reason be judged legally invalid or ineffective under
+applicable law, such partial invalidity or ineffectiveness shall not
+invalidate the remainder of the License, and in such case Affirmer hereby
+affirms that he or she will not (i) exercise any of his or her remaining
+Copyright and Related Rights in the Work or (ii) assert any associated claims
+and causes of action with respect to the Work, in either case contrary to
+Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+
+ b. Affirmer offers the Work as-is and makes no representations or warranties
+ of any kind concerning the Work, express, implied, statutory or otherwise,
+ including without limitation warranties of title, merchantability, fitness
+ for a particular purpose, non infringement, or the absence of latent or
+ other defects, accuracy, or the present or absence of errors, whether or not
+ discoverable, all to the greatest extent permissible under applicable law.
+
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without limitation
+ any person's Copyright and Related Rights in the Work. Further, Affirmer
+ disclaims responsibility for obtaining any necessary consents, permissions
+ or other rights required for any use of the Work.
+
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to this
+ CC0 or use of the Work.
+
+For more information, please see
+<http://creativecommons.org/publicdomain/zero/1.0/>
diff --git a/hash/README.md b/hash/README.md
new file mode 100644
index 00000000000..85b1e7d400c
--- /dev/null
+++ b/hash/README.md
@@ -0,0 +1,6 @@
+# **Software Lists** #
+
+Software lists are containing meta-data of software for computers and consoles and are comming from various sources,
+they are not compiled in code but use as valuable source of information in order to preserve and document software.
+
+Licensed under [CC0 1.0 Universal (CC0 1.0)](https://creativecommons.org/publicdomain/zero/1.0/) \ No newline at end of file
diff --git a/hash/ibm5170.xml b/hash/ibm5170.xml
index f285356df25..97514572d73 100644
--- a/hash/ibm5170.xml
+++ b/hash/ibm5170.xml
@@ -3092,6 +3092,26 @@ Missing files come here
</part>
</software>
+ <software name="sicmouse">
+ <description>SICOS Mouse</description>
+ <year>1990</year>
+ <publisher>SICOS</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="SICOS\nMOUSE DRIVER\nMOUSE TESTER\nMENU MAKER"/>
+ <dataarea name="flop" size="368640">
+ <rom name="sicos_mouse.img" size="368640" crc="3f927fd3" sha1="f1372c69d5d497ca6f3ce85ec144b714dfb2ab94" offset="0" />
+ </dataarea>
+ </part>
+
+ <part name="flop2" interface="floppy_5_25">
+ <feature name="part_id" value="SICOS PAINT\nThe SICOS mouse - paint program"/>
+ <dataarea name="flop" size="368640">
+ <rom name="sicos_paint.img" size="368640" crc="b93dd558" sha1="3e78a30acf4adddbabb04babdc469b5c4ff4af4a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="3c90xed">
<description>3Com 3c90x Etherlink Drivers</description>
<year>1999</year>
diff --git a/hash/tutor.xml b/hash/tutor.xml
index cdaffee7264..50b741e91a8 100644
--- a/hash/tutor.xml
+++ b/hash/tutor.xml
@@ -93,7 +93,7 @@ Battlefighter (Original) (Unreleased - Prototype Stage)
</part>
</software>
- <software name="4ninmja" cloneof="4ninmj">
+ <software name="4ninmja" cloneof="4ninmj">
<description>4-nin Mahjan (Jpn, set 2)</description>
<year>1984</year>
<publisher>Tomy</publisher>
@@ -101,7 +101,7 @@ Battlefighter (Original) (Unreleased - Prototype Stage)
<info name="serial" value="021E"/>
<part name="cart" interface="tutor_cart">
<dataarea name="rom" size="0x4000">
- <rom name="MahJongg(JP).BIN" size="0x4000" crc="127241ec" sha1="8b9ea7fc592e673e93cfae1bfc458bfab4a52600" offset="0" />
+ <rom name="MahJongg(JP).BIN" size="0x4000" crc="127241ec" sha1="8b9ea7fc592e673e93cfae1bfc458bfab4a52600" offset="0" />
</dataarea>
</part>
</software>
@@ -119,10 +119,10 @@ Battlefighter (Original) (Unreleased - Prototype Stage)
</part>
</software>
- <software name="batlfght">
+ <software name="batlfght">
<description>Battle Fighter [3D] (Jpn)</description>
<year>1985</year>
- <publisher>Tomy</publisher>
+ <publisher>Tomy</publisher>
<info name="alt_title" value="ãƒãƒˆãƒ«ãƒ•ァイター"/>
<info name="serial" value="026E"/>
<part name="cart" interface="tutor_cart">
@@ -412,10 +412,10 @@ Battlefighter (Original) (Unreleased - Prototype Stage)
</part>
</software>
- <software name="superbik">
+ <software name="superbik">
<description>Super Bike (Jpn)</description>
<year>1984</year>
- <publisher>Tomy</publisher>
+ <publisher>Tomy</publisher>
<info name="alt_title" value="スーパーãƒã‚¤ã‚¯"/>
<info name="serial" value="023E"/>
<part name="cart" interface="tutor_cart">
diff --git a/keymaps/LICENSE b/keymaps/LICENSE
new file mode 100644
index 00000000000..670154e3538
--- /dev/null
+++ b/keymaps/LICENSE
@@ -0,0 +1,116 @@
+CC0 1.0 Universal
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later
+claims of infringement build upon, modify, incorporate in other works, reuse
+and redistribute as freely as possible in any form whatsoever and for any
+purposes, including without limitation commercial purposes. These owners may
+contribute to the Commons to promote the ideal of a free culture and the
+further production of creative, cultural and scientific works, or to gain
+reputation or greater distribution for their Work in part through the use and
+efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with a
+Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not limited
+to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display, communicate,
+ and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or performer(s);
+
+ iii. publicity and privacy rights pertaining to a person's image or likeness
+ depicted in a Work;
+
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+
+ v. rights protecting the extraction, dissemination, use and reuse of data in
+ a Work;
+
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation thereof,
+ including any amended or successor version of such directive); and
+
+ vii. other similar, equivalent or corresponding rights throughout the world
+ based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time
+extensions), (iii) in any current or future medium and for any number of
+copies, and (iv) for any purpose whatsoever, including without limitation
+commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
+the Waiver for the benefit of each member of the public at large and to the
+detriment of Affirmer's heirs and successors, fully intending that such Waiver
+shall not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of the Work
+by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account
+Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
+is so judged Affirmer hereby grants to each affected person a royalty-free,
+non transferable, non sublicensable, non exclusive, irrevocable and
+unconditional license to exercise Affirmer's Copyright and Related Rights in
+the Work (i) in all territories worldwide, (ii) for the maximum duration
+provided by applicable law or treaty (including future time extensions), (iii)
+in any current or future medium and for any number of copies, and (iv) for any
+purpose whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed effective as
+of the date CC0 was applied by Affirmer to the Work. Should any part of the
+License for any reason be judged legally invalid or ineffective under
+applicable law, such partial invalidity or ineffectiveness shall not
+invalidate the remainder of the License, and in such case Affirmer hereby
+affirms that he or she will not (i) exercise any of his or her remaining
+Copyright and Related Rights in the Work or (ii) assert any associated claims
+and causes of action with respect to the Work, in either case contrary to
+Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+
+ b. Affirmer offers the Work as-is and makes no representations or warranties
+ of any kind concerning the Work, express, implied, statutory or otherwise,
+ including without limitation warranties of title, merchantability, fitness
+ for a particular purpose, non infringement, or the absence of latent or
+ other defects, accuracy, or the present or absence of errors, whether or not
+ discoverable, all to the greatest extent permissible under applicable law.
+
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without limitation
+ any person's Copyright and Related Rights in the Work. Further, Affirmer
+ disclaims responsibility for obtaining any necessary consents, permissions
+ or other rights required for any use of the Work.
+
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to this
+ CC0 or use of the Work.
+
+For more information, please see
+<http://creativecommons.org/publicdomain/zero/1.0/>
diff --git a/keymaps/README.md b/keymaps/README.md
new file mode 100644
index 00000000000..f38fc2492d4
--- /dev/null
+++ b/keymaps/README.md
@@ -0,0 +1,6 @@
+# **Keymaps** #
+
+Keymap files are definiton files for mapping different keyboard layouts to MAME input system, and are
+product of work of many different contributors.
+
+Licensed under [CC0 1.0 Universal (CC0 1.0)](https://creativecommons.org/publicdomain/zero/1.0/) \ No newline at end of file
diff --git a/language/Afrikaans/strings.po b/language/Afrikaans/strings.po
index 3b960ab206f..adca63856b1 100644
--- a/language/Afrikaans/strings.po
+++ b/language/Afrikaans/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -316,12 +316,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -411,34 +408,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -551,11 +548,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -570,28 +564,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -655,19 +644,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -898,11 +887,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -996,38 +985,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1073,17 +1062,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1098,29 +1082,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1128,271 +1113,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1400,7 +1385,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1408,57 +1393,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Albanian/strings.po b/language/Albanian/strings.po
index fbae192b797..52316cf9c3b 100644
--- a/language/Albanian/strings.po
+++ b/language/Albanian/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -316,12 +316,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -411,34 +408,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -551,11 +548,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -570,28 +564,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -655,19 +644,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -898,11 +887,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -996,38 +985,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1073,17 +1062,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1098,29 +1082,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1128,271 +1113,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1400,7 +1385,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1408,57 +1393,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Arabic/strings.po b/language/Arabic/strings.po
index 53c0e7e074b..9e4679b733f 100644
--- a/language/Arabic/strings.po
+++ b/language/Arabic/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -316,12 +316,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -411,34 +408,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -551,11 +548,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -570,28 +564,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -655,19 +644,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -898,11 +887,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -996,38 +985,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1073,17 +1062,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1098,29 +1082,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1128,271 +1113,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1400,7 +1385,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1408,57 +1393,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Basque/strings.po b/language/Basque/strings.po
index 7cb23d090a1..e2e77f76411 100644
--- a/language/Basque/strings.po
+++ b/language/Basque/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -317,12 +317,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -412,34 +409,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -552,11 +549,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -571,28 +565,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -656,19 +645,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -899,11 +888,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -997,38 +986,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1074,17 +1063,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1099,29 +1083,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1129,271 +1114,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1401,7 +1386,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1409,57 +1394,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Belarusian/strings.po b/language/Belarusian/strings.po
index dc8e0a8cb1f..ed847bb4750 100644
--- a/language/Belarusian/strings.po
+++ b/language/Belarusian/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -319,12 +319,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -414,34 +411,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -554,11 +551,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -573,28 +567,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -658,19 +647,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -901,11 +890,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -999,38 +988,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1076,17 +1065,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1101,29 +1085,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1131,271 +1116,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1403,7 +1388,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1411,57 +1396,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Bosnian/strings.po b/language/Bosnian/strings.po
index 2428dd20c38..67b215fdcad 100644
--- a/language/Bosnian/strings.po
+++ b/language/Bosnian/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -316,12 +316,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -411,34 +408,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -551,11 +548,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -570,28 +564,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -655,19 +644,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -898,11 +887,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -996,38 +985,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1073,17 +1062,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1098,29 +1082,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1128,271 +1113,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1400,7 +1385,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1408,57 +1393,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Bulgarian/strings.po b/language/Bulgarian/strings.po
index f84ae8b55f5..248f697906d 100644
--- a/language/Bulgarian/strings.po
+++ b/language/Bulgarian/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -318,12 +318,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -413,34 +410,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -553,11 +550,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -572,28 +566,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -657,19 +646,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -900,11 +889,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -998,38 +987,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1075,17 +1064,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1100,29 +1084,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1130,271 +1115,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1402,7 +1387,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1410,57 +1395,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Burmese/strings.po b/language/Burmese/strings.po
index 46e7745886c..8ae4e38295d 100644
--- a/language/Burmese/strings.po
+++ b/language/Burmese/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -316,12 +316,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -411,34 +408,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -551,11 +548,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -570,28 +564,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -655,19 +644,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -898,11 +887,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -996,38 +985,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1073,17 +1062,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1098,29 +1082,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1128,271 +1113,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1400,7 +1385,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1408,57 +1393,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Catalan/strings.po b/language/Catalan/strings.po
index b12a2d43477..2017bc9bf0d 100644
--- a/language/Catalan/strings.po
+++ b/language/Catalan/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -317,12 +317,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -412,34 +409,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -552,11 +549,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -571,28 +565,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -656,19 +645,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -899,11 +888,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -997,38 +986,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1074,17 +1063,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1099,29 +1083,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1129,271 +1114,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1401,7 +1386,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1409,57 +1394,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Chinese_Simplified/strings.po b/language/Chinese_Simplified/strings.po
index e0b6054fb49..e90d8f9f849 100644
--- a/language/Chinese_Simplified/strings.po
+++ b/language/Chinese_Simplified/strings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
-"PO-Revision-Date: 2016-02-29 10:10+0800\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
+"PO-Revision-Date: 2016-03-06 22:30+0800\n"
"Last-Translator: YuiFAN\n"
"Language-Team: MAME Language Team\n"
"Language: zh\n"
@@ -169,7 +169,7 @@ msgstr "^!出版商"
#: src/emu/ui/custmenu.cpp:477
msgid "^!Software List"
-msgstr "^!软体清å•"
+msgstr "^!软件清å•"
#: src/emu/ui/custmenu.cpp:486
msgid "^!Device type"
@@ -319,13 +319,10 @@ msgstr "还原至原本颜色"
msgid "UI Colors Settings"
msgstr "UI 色彩设定"
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr "åŒå‡»æˆ–按下 "
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
-msgstr " 以改å˜é¢œè‰²å€¼"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
+msgstr "åŒå‡»æˆ–按下 %1$s 以改å˜é¢œè‰²å€¼"
#: src/emu/ui/custui.cpp:617
msgid "Menu Preview"
@@ -414,34 +411,34 @@ msgstr "软件历å²"
msgid "Software Usage"
msgstr "软件用法"
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr "版本: "
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr "历å²"
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr "Mameinfo"
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr "Messinfo"
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr "Sysinfo"
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr "Mamescore"
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr "出招表"
@@ -554,12 +551,9 @@ msgid "Folders Setup"
msgstr "文件夹设定"
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr "现有 "
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
-msgstr " 文件夹"
+#, c-format
+msgid "Current %1$s Folders"
+msgstr "当下 %1$s 文件夹"
#: src/emu/ui/dirmenu.cpp:195
msgid "Change Folder"
@@ -573,29 +567,24 @@ msgstr "新增文件夹"
msgid "Remove Folder"
msgstr "移除文件夹"
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr " å˜æ›´)"
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
-msgstr "新增"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
+msgstr "å˜æ›´ %1$s 文件夹 - æœå¯»ï¼š %2$s_"
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
-msgstr " 文件夹 - æœå¯»: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
+msgstr "新增 %1$s 文件夹 - æœå¯»ï¼š %2$s_"
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr "按下 TAB 键设定"
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr "移除 "
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
-msgstr " 文件夹"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
+msgstr "移除 %1$s 文件夹"
#: src/emu/ui/dsplmenu.cpp:38
msgid "Video Mode"
@@ -658,19 +647,19 @@ msgstr "视讯选项"
msgid "File Already Exists - Override?"
msgstr "档案已存在 — 是å¦è¦†å†™ï¼Ÿ"
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr "å¦"
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr "是"
@@ -734,7 +723,7 @@ msgstr "无法跨目录储存"
msgid ""
"The software selected is missing one or more required ROM or CHD images. "
"Please select a different one."
-msgstr "选定的软体缺少一个至多个必è¦çš„ ROM 或 CHD æ˜ åƒæ¡£ï¼Œè¯·é€‰æ‹©å…¶ä»–软体。"
+msgstr "选定的软件缺少一个至多个必è¦çš„ ROM 或 CHD æ˜ åƒæ¡£ï¼Œè¯·é€‰æ‹©å…¶ä»–软件。"
#: src/emu/ui/info.cpp:98
msgid "Not supported"
@@ -901,11 +890,11 @@ msgstr "回上一层èœå•"
msgid "Auto"
msgstr "自动"
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
-msgstr "æ˜ åƒæ¡£"
+msgstr "图åƒ"
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr "ä¿¡æ¯"
@@ -991,7 +980,7 @@ msgstr "略过å¯åŠ¨æ—¶çš„æ˜¾ç¤ºèµ„è®¯ç”»é¢"
#: src/emu/ui/miscmenu.cpp:564
msgid "Force 4:3 appearance for software snapshot"
-msgstr "强制 4:3 外观供软体撷图"
+msgstr "强制 4:3 外观供软件撷图"
#: src/emu/ui/miscmenu.cpp:565
msgid "Use image as background"
@@ -1005,38 +994,38 @@ msgstr "略过 BIOS 选择èœå•"
msgid "Skip software parts selection menu"
msgstr "略过软件部分选择èœå•"
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr "æ‚项选项"
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr "%s.xml 已储存于 ui 文件夹。"
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr "å称: æè¿°ï¼š\n"
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr "%s.txt 已储存于 ui 资料夹下。"
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr "汇出为 XML æ ¼å¼ ï¼ˆåŒ -listxml)"
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr "汇出为 TXT æ ¼å¼ ï¼ˆåŒ -listfull)"
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr "ä¿å­˜æœºæ¢°è®¾å®š"
@@ -1082,17 +1071,12 @@ msgid "Settings"
msgstr "设定"
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr "**ä¿å­˜è‡³ ui.ini 时错误**"
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
-msgstr "**载入 %s.ini 时错误**"
+msgid "**Error saving ui.ini**"
+msgstr "**ä¿å­˜ ui.ini 时错误**"
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr "**ä¿å­˜ %s.ini 时错误**"
#: src/emu/ui/optsmenu.cpp:376
@@ -1110,14 +1094,15 @@ msgid "Selection List - Search: "
msgstr "é€‰é¡¹æ¸…å• - æœå¯»ï¼š "
#: src/emu/ui/selector.cpp:181
-msgid " to select"
-msgstr " 以选择"
+#, c-format
+msgid "Double click or press %1$s to select"
+msgstr "åŒå‡»æˆ–按下 %1$s 以选择"
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr "一般信æ¯"
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
@@ -1126,15 +1111,15 @@ msgstr ""
"%s\n"
" 已新增至最爱清å•。"
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr " 从最爱清å•移除。"
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1145,260 +1130,260 @@ msgstr ""
"\n"
"按任æ„é”® (除 ESC 键) 继续。"
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr "设定选项"
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr "设定机械"
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr "%1$s %2$s ( %3$d / %4$d 机械 (%5$d BIOS) )"
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr "%1$s (%2$s - %3$s) - "
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr "%1$s æœå¯»ï¼š %2$s_"
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr "Rom组: %1$-.100s"
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr "%1$s, %2$-.100s"
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr "驱动相容于: %-.100s"
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr "驱动为主档"
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr "整体: ä¸å¯æ‰§è¡Œ"
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr "整体: æœªæ¨¡æ‹Ÿä¿æŠ¤"
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr "整体: å¯ä»¥æ‰§è¡Œ"
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr "图形: ä¸å®Œç¾Žï¼Œ "
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr "图形: OK, "
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr "声音: 无法执行"
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr "声音: ä¸å®Œç¾Ž"
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr "声音: OK"
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr "系统: %1$-.100s"
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
-msgstr "软体相容于: %1$-.100s"
+msgstr "软件相容于: %1$-.100s"
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
-msgstr "软体为主档"
+msgstr "软件为主档"
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr "已支æ´ï¼š å¦"
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr "已支æ´ï¼š 部分"
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr "已支æ´ï¼š 是"
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr "Rom套: %1$-.100s"
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr "%1$s %2$s"
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr "Rom套: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr "年份: %1$s\n"
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr "制造商: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr "驱动程å¼ç›¸å®¹äºŽï¼š %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr "驱动程å¼ä¸ºä¸»æ¡£\n"
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr "整体: ä¸å¯æ‰§è¡Œ\n"
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr "整体: æœªæ¨¡æ‹Ÿä¿æŠ¤\n"
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr "整体: å¯ä»¥æ‰§è¡Œ\n"
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr "图形: 色彩ä¸å®Œç¾Ž\n"
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr "图形: ä¸å®Œç¾Ž\n"
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr "图形: OK\n"
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr "声音: 无法执行\n"
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr "声音: ä¸å®Œç¾Ž\n"
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr "声音: OK\n"
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr "驱动程å¼å°šæœªå®Œæ•´ï¼š %1$s\n"
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr "游æˆä¸ºæœºæ¢°å¼ï¼š %1$s\n"
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr "需è¦è£…饰图: %1$s\n"
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr "å¿…è¦å¯ç‚¹å‡»çš„装饰图: %1$s\n"
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr "支æ´å°é¢åž‹ç­ä½“: %1$s\n"
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr "驱动为 BIOS: %1$s\n"
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr "支æ´å³æ—¶å­˜æ¡£ï¼š %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr "ç”»é¢æ–¹å‘: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr "垂直"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr "æ°´å¹³"
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr "éœ€è¦ CHD: %1$s\n"
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr "ROM 验è¯é€šè¿‡ï¼š OK\n"
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr "ROM 验è¯é€šè¿‡ï¼š 错误\n"
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr "样本档验è¯é€šè¿‡ï¼š ä¸éœ€è¦\n"
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr "样本档验è¯é€šè¿‡ï¼š OK\n"
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr "样本档验è¯é€šè¿‡ï¼š 错误\n"
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
@@ -1406,12 +1391,12 @@ msgstr ""
"ROM 验è¯é€šè¿‡ï¼š å·²åœç”¨\n"
"样本档验è¯é€šè¿‡ï¼š å·²åœç”¨\n"
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr "æ— å¯ç”¨ä¿¡æ¯"
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr "用法"
@@ -1419,7 +1404,7 @@ msgstr "用法"
msgid " (default)"
msgstr " (缺çœ)"
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1430,57 +1415,57 @@ msgstr ""
"\n"
"按任æ„é”® (除 ESC 键) 继续。"
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr "%1$s %2$s ( %3$d / %4$d 软件 )"
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr "驱动: \"%1$s\" è½¯ä»¶æ¸…å• "
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr "区域: %1$s -"
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr "出版商: %1$s -"
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr "年代: %1$s -"
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr "软件清å•: %1$s -"
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr "装置类别: %1$s -"
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr "%s æœå¯»ï¼š %s_"
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr "%1$-.100s"
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr "软件部分选项: "
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr "选择 BIOS:"
@@ -2078,5 +2063,8 @@ msgstr " 色彩"
msgid " PENS"
msgstr " PENS"
-#~ msgid "Search: "
-#~ msgstr "æœå¯»: "
+#~ msgid "**Error loading %s.ini**"
+#~ msgstr "**载入 %s.ini 时错误**"
+
+#~ msgid "**Error loading ui.ini**"
+#~ msgstr "载入 ui.ini 时错误**"
diff --git a/language/Chinese_Traditional/strings.po b/language/Chinese_Traditional/strings.po
index dc0158813d3..1efd53ed3cb 100644
--- a/language/Chinese_Traditional/strings.po
+++ b/language/Chinese_Traditional/strings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
-"PO-Revision-Date: 2016-02-29 09:45+0800\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
+"PO-Revision-Date: 2016-03-06 22:30+0800\n"
"Last-Translator: YuiFAN\n"
"Language-Team: MAME Language Team\n"
"Language: zh_TW\n"
@@ -319,13 +319,10 @@ msgstr "還原至原本é¡è‰²"
msgid "UI Colors Settings"
msgstr "UI 色彩設定"
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr "雙擊或按下 "
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
-msgstr " 以改變é¡è‰²å€¼"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
+msgstr "雙擊或按下 %1$s 以改變é¡è‰²å€¼"
#: src/emu/ui/custui.cpp:617
msgid "Menu Preview"
@@ -414,34 +411,34 @@ msgstr "軟體歷å²"
msgid "Software Usage"
msgstr "軟體用法"
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr "版本: "
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr "æ­·å²"
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr "Mameinfo"
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr "Messinfo"
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr "系統資訊"
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr "Mamescore"
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr "指令集"
@@ -554,12 +551,9 @@ msgid "Folders Setup"
msgstr "資料夾設定"
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr "ç¾æœ‰ "
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
-msgstr " 資料夾"
+#, c-format
+msgid "Current %1$s Folders"
+msgstr "ç›®å‰ %1$s 資料夾"
#: src/emu/ui/dirmenu.cpp:195
msgid "Change Folder"
@@ -573,29 +567,24 @@ msgstr "新增資料夾"
msgid "Remove Folder"
msgstr "移除資料夾"
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr "變更)"
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
-msgstr "新增"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
+msgstr "變更 %1$s 資料夾 - æœå°‹ï¼š %2$s_"
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
-msgstr " 資料夾 - æœå°‹ï¼š "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
+msgstr "新增 %1$s 資料夾 - æœå°‹ï¼š %2$s_"
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr "按下 TAB éµè¨­å®š"
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr "移除 "
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
-msgstr " 資料夾"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
+msgstr "移除 %1$s 資料夾"
#: src/emu/ui/dsplmenu.cpp:38
msgid "Video Mode"
@@ -658,19 +647,19 @@ msgstr "視訊é¸é …"
msgid "File Already Exists - Override?"
msgstr "檔案已存在 — 是å¦è¦†è“‹ï¼Ÿ"
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr "å¦"
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr "是"
@@ -901,11 +890,11 @@ msgstr "回上一層é¸å–®"
msgid "Auto"
msgstr "自動"
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
-msgstr "æ˜ åƒæª”"
+msgstr "圖片"
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr "資訊"
@@ -1005,38 +994,38 @@ msgstr "ç•¥éŽ BIOS 鏿“‡é¸å–®"
msgid "Skip software parts selection menu"
msgstr "ç•¥éŽè»Ÿé«”éƒ¨åˆ†é¸æ“‡é¸å–®"
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr "雜項é¸é …"
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr "%s.xml 已儲存於 ui 資料夾下。"
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr "å稱: æè¿°ï¼š\n"
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr "%s.txt 已儲存於 ui 資料夾下。"
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr "匯出為 XML æ ¼å¼ ï¼ˆåŒ -listxml)"
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr "匯出為 TXT æ ¼å¼ ï¼ˆåŒ -listfull)"
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr "儲存機å°è¨­å®š"
@@ -1082,18 +1071,13 @@ msgid "Settings"
msgstr "設定"
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr "**儲存至 ui.ini 時錯誤**"
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
-msgstr "**載入 %s.ini 時錯誤**"
+msgid "**Error saving ui.ini**"
+msgstr "**儲存 ui.ini 時發生錯誤**"
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
-msgstr "**儲存 %s.ini 時錯誤**"
+msgid "**Error saving %s.ini**"
+msgstr "**儲存 %s.ini 時發生錯誤**"
#: src/emu/ui/optsmenu.cpp:376
msgid ""
@@ -1110,14 +1094,15 @@ msgid "Selection List - Search: "
msgstr "é¸é …清單 - æœå°‹ï¼š "
#: src/emu/ui/selector.cpp:181
-msgid " to select"
-msgstr " 以鏿“‡"
+#, c-format
+msgid "Double click or press %1$s to select"
+msgstr "雙擊或按下 %1$s 以鏿“‡"
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr "一般資訊"
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
@@ -1126,15 +1111,15 @@ msgstr ""
"%s\n"
" 已新增至最愛清單。"
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr " 從最愛清單移除。"
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1145,260 +1130,260 @@ msgstr ""
"\n"
"按任æ„éµ ï¼ˆé™¤ ESC éµï¼‰ 繼續。"
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr "設定é¸é …"
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr "設定機å°"
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr "%1$s %2$s ( %3$d / %4$d æ©Ÿå° (%5$d BIOS) )"
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr "%1$s (%2$s - %3$s) - "
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr "%1$s æœå°‹ï¼š %2$s_"
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr "Rom組: %1$-.100s"
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr "%1$s, %2$-.100s"
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr "驅動程å¼ç›¸å®¹æ–¼ï¼š %-.100s"
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr "驅動程å¼ç‚ºä¸»æª”"
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr "整體: ä¸å¯åŸ·è¡Œ"
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr "整體: 未模擬ä¿è­·"
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr "整體: å¯ä»¥åŸ·è¡Œ"
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr "圖形: ä¸å®Œç¾Žï¼Œ "
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr "圖形: OK, "
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr "è²éŸ³ï¼š 無法執行"
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr "è²éŸ³ï¼š ä¸å®Œç¾Ž"
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr "è²éŸ³ï¼š OK"
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr "系統: %1$-.100s"
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr "軟體相容於: %1$-.100s"
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr "軟體為主檔"
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr "已支æ´ï¼š å¦"
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr "已支æ´ï¼š 部分"
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr "已支æ´ï¼š 是"
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr "Rom組: %1$-.100s"
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr "%1$s %2$s"
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
-msgstr "Rom組:: %1$-.100s\n"
+msgstr "Rom組: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr "年份: %1$s\n"
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr "製造商: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr "驅動程å¼ç›¸å®¹æ–¼ï¼š %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr "驅動程å¼ç‚ºä¸»æª”\n"
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr "整體: ä¸å¯åŸ·è¡Œ\n"
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr "整體: 未模擬ä¿è­·\n"
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr "æ•´é«”: å¯ä»¥åŸ·è¡Œ\n"
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr "圖形: 色彩ä¸å®Œç¾Ž\n"
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr "圖形: ä¸å®Œç¾Ž\n"
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr "圖形: OK\n"
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr "è²éŸ³ï¼š 無法執行\n"
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr "è²éŸ³ï¼š ä¸å®Œç¾Ž\n"
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr "è²éŸ³ï¼š OK\n"
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr "驅動程å¼å°šæœªå®Œæ•´ï¼š %1$s\n"
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr "éŠæˆ²ç‚ºæ©Ÿæ¢°å¼ï¼š %1$s\n"
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr "需è¦è£é£¾åœ–: %1$s\n"
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr "需è¦å¯é»žæ“Šçš„è£é£¾åœ–: %1$s\n"
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr "æ”¯æ´æª¯é¢åž‹ç­é«”: %1$s\n"
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr "驅動程å¼ç‚º BIOS: %1$s\n"
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr "支æ´å³æ™‚存檔: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr "ç•«é¢æ–¹å‘: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr "垂直"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr "æ°´å¹³"
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr "éœ€è¦ CHD: %1$s\n"
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr "ROM 驗證通éŽï¼š OK\n"
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr "ROM 驗證通éŽï¼š 錯誤\n"
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr "樣本檔驗證通éŽï¼š ä¸éœ€è¦\n"
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr "樣本檔驗證通éŽï¼š OK\n"
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr "樣本檔驗證通éŽï¼š 錯誤\n"
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
@@ -1406,12 +1391,12 @@ msgstr ""
"ROM 驗證通éŽï¼š å·²åœç”¨\n"
"樣本檔驗證通éŽï¼š å·²åœç”¨\n"
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr "ç„¡å¯ç”¨è³‡è¨Š"
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr "用法"
@@ -1419,7 +1404,7 @@ msgstr "用法"
msgid " (default)"
msgstr " (é è¨­ï¼‰"
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1430,57 +1415,57 @@ msgstr ""
"\n"
"按任æ„éµ ï¼ˆé™¤ ESC éµï¼‰ 繼續。"
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr "%1$s %2$s ( %3$d / %4$d 軟體 )"
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr "驅動程å¼ï¼š \"%1$s\" 軟體清單 "
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr "å€åŸŸï¼š %1$s -"
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr "出版商: %1$s -"
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr "年代: %1$s -"
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr "軟體清單: %1$s -"
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr "è£ç½®é¡žåˆ¥ï¼š %1$s -"
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr "%s æœå°‹ï¼š %s_"
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr "%1$-.100s"
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr "軟體部分é¸é …: "
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr "鏿“‡ BIOS:"
@@ -1494,8 +1479,8 @@ msgid ""
msgstr ""
"找ä¸åˆ°æ©Ÿå°ï¼Œè«‹æª¢æŸ¥ %1$s.ini çš„ ROM 目錄設定\n"
"\n"
-"如果這是您首次使用 %2$s,請åƒé–± docs 目錄中的 config.txt 以å–得設定 %2$s 的相"
-"關資訊。"
+"如果這是首次使用 %2$s,請åƒé–± docs 目錄中的 config.txt 以å–得設定 %2$s 的相關"
+"資訊。"
#: src/emu/ui/simpleselgame.cpp:287
#, c-format
@@ -2077,3 +2062,9 @@ msgstr " 色彩"
#: src/emu/ui/viewgfx.cpp:391
msgid " PENS"
msgstr " PENS"
+
+#~ msgid "**Error loading %s.ini**"
+#~ msgstr "**載入 %s.ini 時發生錯誤**"
+
+#~ msgid "**Error loading ui.ini**"
+#~ msgstr "載入 ui.ini 時錯誤**"
diff --git a/language/Croatian/strings.po b/language/Croatian/strings.po
index f7db0380557..c92c021e14f 100644
--- a/language/Croatian/strings.po
+++ b/language/Croatian/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -318,12 +318,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -413,34 +410,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -553,11 +550,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -572,28 +566,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -657,19 +646,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -900,11 +889,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -998,38 +987,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1075,17 +1064,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1100,29 +1084,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1130,271 +1115,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1402,7 +1387,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1410,57 +1395,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Czech/strings.po b/language/Czech/strings.po
index f7e40f63918..f50b2e78a2c 100644
--- a/language/Czech/strings.po
+++ b/language/Czech/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -317,12 +317,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -412,34 +409,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -552,11 +549,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -571,28 +565,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -656,19 +645,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -899,11 +888,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -997,38 +986,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1074,17 +1063,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1099,29 +1083,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1129,271 +1114,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1401,7 +1386,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1409,57 +1394,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Danish/strings.po b/language/Danish/strings.po
index 332cfabaa32..38eb7cb9782 100644
--- a/language/Danish/strings.po
+++ b/language/Danish/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -318,12 +318,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -413,34 +410,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -553,11 +550,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -572,28 +566,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -657,19 +646,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -900,11 +889,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -998,38 +987,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1075,17 +1064,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1100,29 +1084,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1130,271 +1115,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1402,7 +1387,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1410,57 +1395,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Dutch/strings.po b/language/Dutch/strings.po
index ea72c7c2904..a218bc64a51 100644
--- a/language/Dutch/strings.po
+++ b/language/Dutch/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -20,19 +20,19 @@ msgstr ""
#: src/emu/ui/auditmenu.cpp:111
msgid "Audit in progress..."
-msgstr ""
+msgstr "Bezig met controle..."
#: src/emu/ui/barcode.cpp:72
msgid "New Barcode:"
-msgstr ""
+msgstr "Nieuwe barcode:"
#: src/emu/ui/barcode.cpp:76
msgid "Enter Code"
-msgstr ""
+msgstr "Vul code in"
#: src/emu/ui/barcode.cpp:118
msgid "Barcode length invalid!"
-msgstr ""
+msgstr "Ongeldige barcode lengte"
#: src/emu/ui/cheatopt.cpp:77
#, c-format
@@ -43,414 +43,411 @@ msgstr ""
#: src/emu/ui/cheatopt.cpp:90
msgid "All cheats reloaded"
-msgstr ""
+msgstr "Alle cheats opnieuw ingelezen"
#: src/emu/ui/cheatopt.cpp:121
msgid "Autofire Settings"
-msgstr ""
+msgstr "Autofire instellingen"
#: src/emu/ui/cheatopt.cpp:139
msgid "Reset All"
-msgstr ""
+msgstr "Reset alles"
#: src/emu/ui/cheatopt.cpp:142
msgid "Reload All"
-msgstr ""
+msgstr "Alles opnieuw inlezen"
#: src/emu/ui/cheatopt.cpp:258
msgid "Autofire Status"
-msgstr ""
+msgstr "Autofire status"
#: src/emu/ui/cheatopt.cpp:258 src/emu/ui/ui.cpp:1742
#: src/emu/ui/videoopt.cpp:207 src/emu/ui/videoopt.cpp:211
#: src/emu/ui/videoopt.cpp:215 src/emu/ui/videoopt.cpp:219
#: src/emu/ui/videoopt.cpp:223
msgid "Disabled"
-msgstr ""
+msgstr "Uitgeschakeld"
#: src/emu/ui/cheatopt.cpp:258 src/emu/ui/ui.cpp:1742
#: src/emu/ui/videoopt.cpp:207 src/emu/ui/videoopt.cpp:211
#: src/emu/ui/videoopt.cpp:215 src/emu/ui/videoopt.cpp:219
#: src/emu/ui/videoopt.cpp:223
msgid "Enabled"
-msgstr ""
+msgstr "Ingeschakeld"
#: src/emu/ui/cheatopt.cpp:284 src/emu/ui/cheatopt.cpp:290
#: src/emu/ui/dsplmenu.cpp:184 src/emu/ui/menu.cpp:674
#: src/emu/ui/sndmenu.cpp:134 src/emu/ui/sndmenu.cpp:136
msgid "On"
-msgstr ""
+msgstr "Aan"
#: src/emu/ui/cheatopt.cpp:284 src/emu/ui/cheatopt.cpp:290
#: src/emu/ui/dsplmenu.cpp:184 src/emu/ui/menu.cpp:677
#: src/emu/ui/sndmenu.cpp:134 src/emu/ui/sndmenu.cpp:136
msgid "Off"
-msgstr ""
+msgstr "Uit"
#: src/emu/ui/cheatopt.cpp:301
msgid "No buttons found on this machine!"
-msgstr ""
+msgstr "Geen knoppen gevonden op deze machine!"
#: src/emu/ui/cheatopt.cpp:312 src/emu/ui/cheatopt.cpp:316
msgid "Autofire Delay"
-msgstr ""
+msgstr "Autofire vertraging"
#: src/emu/ui/ctrlmenu.cpp:20
msgid "Lightgun Device Assignment"
-msgstr ""
+msgstr "Lightgun toewijzing"
#: src/emu/ui/ctrlmenu.cpp:21
msgid "Trackball Device Assignment"
-msgstr ""
+msgstr "Trackball toewijzing"
#: src/emu/ui/ctrlmenu.cpp:22
msgid "Pedal Device Assignment"
-msgstr ""
+msgstr "Pedaal toewijzing"
#: src/emu/ui/ctrlmenu.cpp:23
msgid "Adstick Device Assignment"
-msgstr ""
+msgstr "Adstick toewijzing"
#: src/emu/ui/ctrlmenu.cpp:24
msgid "Paddle Device Assignment"
-msgstr ""
+msgstr "Paddle toewijzing"
#: src/emu/ui/ctrlmenu.cpp:25
msgid "Dial Device Assignment"
-msgstr ""
+msgstr "Dial toewijzing"
#: src/emu/ui/ctrlmenu.cpp:26
msgid "Positional Device Assignment"
-msgstr ""
+msgstr "Positie toewijzing"
#: src/emu/ui/ctrlmenu.cpp:27
msgid "Mouse Device Assignment"
-msgstr ""
+msgstr "Muis toewijzing"
#: src/emu/ui/ctrlmenu.cpp:106 src/emu/ui/ctrlmenu.cpp:126
#: src/emu/ui/optsmenu.cpp:268
msgid "Device Mapping"
-msgstr ""
+msgstr "Invoerapparaat toewijzing"
#: src/emu/ui/custmenu.cpp:156 src/emu/ui/custmenu.cpp:441
msgid "Main filter"
-msgstr ""
+msgstr "Hoofdfilter"
#: src/emu/ui/custmenu.cpp:165 src/emu/ui/custmenu.cpp:450
msgid "Other filter"
-msgstr ""
+msgstr "Ander filter"
#: src/emu/ui/custmenu.cpp:174 src/emu/ui/optsmenu.cpp:239
msgid "^!Manufacturer"
-msgstr ""
+msgstr "^!Fabrikant"
#: src/emu/ui/custmenu.cpp:183 src/emu/ui/custmenu.cpp:468
#: src/emu/ui/optsmenu.cpp:247
msgid "^!Year"
-msgstr ""
+msgstr "^!Jaar"
#: src/emu/ui/custmenu.cpp:192 src/emu/ui/custmenu.cpp:504
msgid "Remove last filter"
-msgstr ""
+msgstr "Verwijder laatste filter"
#: src/emu/ui/custmenu.cpp:195 src/emu/ui/custmenu.cpp:507
msgid "Add filter"
-msgstr ""
+msgstr "Voeg filter toe"
#: src/emu/ui/custmenu.cpp:210 src/emu/ui/custmenu.cpp:230
#: src/emu/ui/custmenu.cpp:523 src/emu/ui/custmenu.cpp:543
msgid "Select custom filters:"
-msgstr ""
+msgstr "Kies custom filter:"
#: src/emu/ui/custmenu.cpp:459
msgid "^!Publisher"
-msgstr ""
+msgstr "^!Uitgever"
#: src/emu/ui/custmenu.cpp:477
msgid "^!Software List"
-msgstr ""
+msgstr "^!Software lijst"
#: src/emu/ui/custmenu.cpp:486
msgid "^!Device type"
-msgstr ""
+msgstr "^!Device type"
#: src/emu/ui/custmenu.cpp:495
msgid "^!Region"
-msgstr ""
+msgstr "^!Regio"
#: src/emu/ui/custui.cpp:20
msgid "Show All"
-msgstr ""
+msgstr "Toon alles"
#: src/emu/ui/custui.cpp:21
msgid "Hide Filters"
-msgstr ""
+msgstr "Verberg filters"
#: src/emu/ui/custui.cpp:22
msgid "Hide Info/Image"
-msgstr ""
+msgstr "Verberg info/plaatje"
#: src/emu/ui/custui.cpp:23
msgid "Hide Both"
-msgstr ""
+msgstr "Verberg beide"
#: src/emu/ui/custui.cpp:139
msgid "Fonts"
-msgstr ""
+msgstr "Lettertypes"
#: src/emu/ui/custui.cpp:140
msgid "Colors"
-msgstr ""
+msgstr "Kleuren"
#: src/emu/ui/custui.cpp:145 src/emu/ui/dirmenu.cpp:33
msgid "Language"
-msgstr ""
+msgstr "Taal"
#: src/emu/ui/custui.cpp:149
msgid "Show side panels"
-msgstr ""
+msgstr "Toon zijpanelen"
#: src/emu/ui/custui.cpp:164 src/emu/ui/custui.cpp:184
msgid "Custom UI Settings"
-msgstr ""
+msgstr "Custom UI instellingen"
#: src/emu/ui/custui.cpp:268
msgid "default"
-msgstr ""
+msgstr "standaard"
#: src/emu/ui/custui.cpp:371
msgid "UI Font"
-msgstr ""
+msgstr "UI Lettertype"
#: src/emu/ui/custui.cpp:375
msgid "Bold"
-msgstr ""
+msgstr "Vet"
#: src/emu/ui/custui.cpp:376
msgid "Italic"
-msgstr ""
+msgstr "Cursief"
#: src/emu/ui/custui.cpp:381
msgid "Lines"
-msgstr ""
+msgstr "Lijnen"
#: src/emu/ui/custui.cpp:387
msgid "Infos text size"
-msgstr ""
+msgstr "Infos tekst grootte"
#: src/emu/ui/custui.cpp:404
msgid "UI Fonts Settings"
-msgstr ""
+msgstr "UI Lettertype Instellingen"
#: src/emu/ui/custui.cpp:431
msgid "Sample text - Lorem ipsum dolor sit amet, consectetur adipiscing elit."
-msgstr ""
+msgstr "Voorbeeld tekst - De kat krabt de krullen van de trap."
#: src/emu/ui/custui.cpp:529
msgid "Normal text"
-msgstr ""
+msgstr "Normale tekst"
#: src/emu/ui/custui.cpp:530
msgid "Selected color"
-msgstr ""
+msgstr "Geselecteerde kleur"
#: src/emu/ui/custui.cpp:531
msgid "Normal text background"
-msgstr ""
+msgstr "Normale tekst achtergrond"
#: src/emu/ui/custui.cpp:532
msgid "Selected background color"
-msgstr ""
+msgstr "Geselecteerde achtergrond kleur"
#: src/emu/ui/custui.cpp:533
msgid "Subitem color"
-msgstr ""
+msgstr "Subitem kleur"
#: src/emu/ui/custui.cpp:534 src/emu/ui/custui.cpp:629
msgid "Clone"
-msgstr ""
+msgstr "Kloon"
#: src/emu/ui/custui.cpp:535
msgid "Border"
-msgstr ""
+msgstr "Rand"
#: src/emu/ui/custui.cpp:536
msgid "Background"
-msgstr ""
+msgstr "Achtergrond"
#: src/emu/ui/custui.cpp:537
msgid "Dipswitch"
-msgstr ""
+msgstr "Dipswitch"
#: src/emu/ui/custui.cpp:538
msgid "Unavailable color"
-msgstr ""
+msgstr "Niet beschikbaar kleur"
#: src/emu/ui/custui.cpp:539
msgid "Slider color"
-msgstr ""
+msgstr "Schuif kleur"
#: src/emu/ui/custui.cpp:540
msgid "Gfx viewer background"
-msgstr ""
+msgstr "Gfx viewer achtergrond"
#: src/emu/ui/custui.cpp:541
msgid "Mouse over color"
-msgstr ""
+msgstr "Muis-over kleur"
#: src/emu/ui/custui.cpp:542
msgid "Mouse over background color"
-msgstr ""
+msgstr "Muis-over achtergrond kleur"
#: src/emu/ui/custui.cpp:543
msgid "Mouse down color"
-msgstr ""
+msgstr "Muis-down kleur"
#: src/emu/ui/custui.cpp:544
msgid "Mouse down background color"
-msgstr ""
+msgstr "Muis-down achtergrond kleur"
#: src/emu/ui/custui.cpp:547
msgid "Restore originals colors"
-msgstr ""
+msgstr "Herstel originele kleuren"
#: src/emu/ui/custui.cpp:563
msgid "UI Colors Settings"
-msgstr ""
-
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
+msgstr "UI Kleur Instellingen"
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
-msgstr ""
+#, c-format
+msgid "Double click or press %1$s to change the color value"
+msgstr "Dubbelklik of druk op %1$s om de kleurwaarde te wijzigen"
#: src/emu/ui/custui.cpp:617
msgid "Menu Preview"
-msgstr ""
+msgstr "Menu Voorbeeld"
#: src/emu/ui/custui.cpp:625
msgid "Normal"
-msgstr ""
+msgstr "Normaal"
#: src/emu/ui/custui.cpp:626
msgid "Subitem"
-msgstr ""
+msgstr "Onderdeel"
#: src/emu/ui/custui.cpp:627
msgid "Selected"
-msgstr ""
+msgstr "Geselecteerd"
#: src/emu/ui/custui.cpp:628
msgid "Mouse Over"
-msgstr ""
+msgstr "Muis-over"
#: src/emu/ui/custui.cpp:860 src/emu/ui/custui.cpp:863
msgid "Alpha"
-msgstr ""
+msgstr "Alpha"
#: src/emu/ui/custui.cpp:868 src/emu/ui/custui.cpp:871
#: src/emu/ui/custui.cpp:1030
msgid "Red"
-msgstr ""
+msgstr "Rood"
#: src/emu/ui/custui.cpp:876 src/emu/ui/custui.cpp:879
#: src/emu/ui/custui.cpp:1033
msgid "Green"
-msgstr ""
+msgstr "Groen"
#: src/emu/ui/custui.cpp:884 src/emu/ui/custui.cpp:887
#: src/emu/ui/custui.cpp:1034
msgid "Blue"
-msgstr ""
+msgstr "Blue"
#: src/emu/ui/custui.cpp:890
msgid "Choose from palette"
-msgstr ""
+msgstr "Kies uit palet"
#: src/emu/ui/custui.cpp:906
msgid " - ARGB Settings"
-msgstr ""
+msgstr " - ARGB Instellingen"
#: src/emu/ui/custui.cpp:930
msgid "Color preview ="
-msgstr ""
+msgstr "Kleur voorbeeld ="
#: src/emu/ui/custui.cpp:1026
msgid "White"
-msgstr ""
+msgstr "Wit"
#: src/emu/ui/custui.cpp:1027
msgid "Silver"
-msgstr ""
+msgstr "Zilver"
#: src/emu/ui/custui.cpp:1028
msgid "Gray"
-msgstr ""
+msgstr "Grijs"
#: src/emu/ui/custui.cpp:1029
msgid "Black"
-msgstr ""
+msgstr "Zwart"
#: src/emu/ui/custui.cpp:1031
msgid "Orange"
-msgstr ""
+msgstr "Oranje"
#: src/emu/ui/custui.cpp:1032
msgid "Yellow"
-msgstr ""
+msgstr "Geel"
#: src/emu/ui/custui.cpp:1035
msgid "Violet"
-msgstr ""
+msgstr "Violet"
#: src/emu/ui/datmenu.cpp:59
msgid "Software History"
-msgstr ""
+msgstr "Softwaregeschiedenis"
#: src/emu/ui/datmenu.cpp:61
msgid "Software Usage"
-msgstr ""
+msgstr "Softwaregebruik"
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
-msgstr ""
+msgstr "Revisie: "
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
-msgstr ""
+msgstr "Geschiedenis"
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
-msgstr ""
+msgstr "Mameinfo"
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
-msgstr ""
+msgstr "Messinfo"
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
-msgstr ""
+msgstr "Sysinfo"
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
-msgstr ""
+msgstr "Mamescore"
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
-msgstr ""
+msgstr "Commando"
#: src/emu/ui/dirmenu.cpp:31
msgid "ROMs"
-msgstr ""
+msgstr "ROMs"
#: src/emu/ui/dirmenu.cpp:32
msgid "UI"
-msgstr ""
+msgstr "UI"
#: src/emu/ui/dirmenu.cpp:34
msgid "Samples"
@@ -490,11 +487,11 @@ msgstr ""
#: src/emu/ui/dirmenu.cpp:43 src/emu/ui/menu.cpp:48
msgid "Titles"
-msgstr ""
+msgstr "Titels"
#: src/emu/ui/dirmenu.cpp:44 src/emu/ui/menu.cpp:49
msgid "Ends"
-msgstr ""
+msgstr "Eindes"
#: src/emu/ui/dirmenu.cpp:45 src/emu/ui/menu.cpp:46
msgid "PCBs"
@@ -506,11 +503,11 @@ msgstr ""
#: src/emu/ui/dirmenu.cpp:47
msgid "Controls Panels"
-msgstr ""
+msgstr "Controlepanelen"
#: src/emu/ui/dirmenu.cpp:48
msgid "Crosshairs"
-msgstr ""
+msgstr "Vizier"
#: src/emu/ui/dirmenu.cpp:49
msgid "Artworks"
@@ -518,7 +515,7 @@ msgstr ""
#: src/emu/ui/dirmenu.cpp:50 src/emu/ui/menu.cpp:51
msgid "Bosses"
-msgstr ""
+msgstr "Bazen"
#: src/emu/ui/dirmenu.cpp:51
msgid "Artworks Preview"
@@ -526,15 +523,15 @@ msgstr ""
#: src/emu/ui/dirmenu.cpp:52 src/emu/ui/menu.cpp:57
msgid "Select"
-msgstr ""
+msgstr "Selecteer"
#: src/emu/ui/dirmenu.cpp:53
msgid "GameOver"
-msgstr ""
+msgstr "Einde spel"
#: src/emu/ui/dirmenu.cpp:54 src/emu/ui/menu.cpp:55
msgid "HowTo"
-msgstr ""
+msgstr "Hoe te bedienen"
#: src/emu/ui/dirmenu.cpp:55 src/emu/ui/menu.cpp:52
msgid "Logos"
@@ -546,59 +543,51 @@ msgstr ""
#: src/emu/ui/dirmenu.cpp:57 src/emu/ui/menu.cpp:53
msgid "Versus"
-msgstr ""
+msgstr "Tegen"
#: src/emu/ui/dirmenu.cpp:116 src/emu/ui/dirmenu.cpp:136
msgid "Folders Setup"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
+msgstr "Map instellingen"
#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
-msgstr ""
+#, c-format
+msgid "Current %1$s Folders"
+msgstr "Huidige %$1s mappen"
#: src/emu/ui/dirmenu.cpp:195
msgid "Change Folder"
-msgstr ""
+msgstr "Wijzig map"
#: src/emu/ui/dirmenu.cpp:195
msgid "Add Folder"
-msgstr ""
+msgstr "Voeg map toe"
#: src/emu/ui/dirmenu.cpp:198
msgid "Remove Folder"
-msgstr ""
+msgstr "Verwijder map"
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
-msgstr ""
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
+msgstr "Wijzig %$1s map - Zoek: %2$s_"
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
-msgstr ""
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
+msgstr "Voeg %$1s map toe - Zoek: %2$s_"
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
+msgstr "Druk op TAB om te kiezen"
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
-msgstr ""
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
+msgstr "Verwijder %$1s map"
#: src/emu/ui/dsplmenu.cpp:38
msgid "Video Mode"
-msgstr ""
+msgstr "Video modus"
#: src/emu/ui/dsplmenu.cpp:40
msgid "Hardware Stretch"
@@ -634,11 +623,11 @@ msgstr ""
#: src/emu/ui/dsplmenu.cpp:49
msgid "Enforce Aspect Ratio"
-msgstr ""
+msgstr "Forceer aspect ratio"
#: src/emu/ui/dsplmenu.cpp:50
msgid "Start Out Maximized"
-msgstr ""
+msgstr "Start gemaximaliseerd"
#: src/emu/ui/dsplmenu.cpp:51
msgid "Synchronized Refresh"
@@ -651,101 +640,103 @@ msgstr ""
#: src/emu/ui/dsplmenu.cpp:204 src/emu/ui/dsplmenu.cpp:224
#: src/emu/ui/optsmenu.cpp:265
msgid "Display Options"
-msgstr ""
+msgstr "Schermopties"
#: src/emu/ui/filesel.cpp:159
msgid "File Already Exists - Override?"
-msgstr ""
+msgstr "Bestand bestaat al - Overschrijven?"
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
-msgstr ""
+msgstr "Nee"
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
-msgstr ""
+msgstr "Ja"
#: src/emu/ui/filesel.cpp:271
msgid "New Image Name:"
-msgstr ""
+msgstr "Naam nieuw bestand:"
#: src/emu/ui/filesel.cpp:277
msgid "Image Format:"
-msgstr ""
+msgstr "Bestandsformaat:"
#: src/emu/ui/filesel.cpp:283
msgid "Create"
-msgstr ""
+msgstr "Creëer"
#: src/emu/ui/filesel.cpp:314
msgid "Please enter a file extension too"
-msgstr ""
+msgstr "Vul ook een bestandsextensie in"
#: src/emu/ui/filesel.cpp:502 src/emu/ui/swlist.cpp:65
msgid "[empty slot]"
-msgstr ""
+msgstr "[lege plek]"
#: src/emu/ui/filesel.cpp:506
msgid "[create]"
-msgstr ""
+msgstr "[creëer]"
#: src/emu/ui/filesel.cpp:510 src/emu/ui/swlist.cpp:76
msgid "[software list]"
-msgstr ""
+msgstr "[software lijst]"
#: src/emu/ui/filesel.cpp:802
msgid "Select image format"
-msgstr ""
+msgstr "Selecteer bestandsformaat"
#: src/emu/ui/filesel.cpp:862
msgid "Select access mode"
-msgstr ""
+msgstr "Selecteer toegangsmodus"
#: src/emu/ui/filesel.cpp:863
msgid "Read-only"
-msgstr ""
+msgstr "Alleen lezen"
#: src/emu/ui/filesel.cpp:865
msgid "Read-write"
-msgstr ""
+msgstr "Lezen en schrijven"
#: src/emu/ui/filesel.cpp:866
msgid "Read this image, write to another image"
-msgstr ""
+msgstr "Lees dit bestamd, schrijf naar een ander bestand"
#: src/emu/ui/filesel.cpp:867
msgid "Read this image, write to diff"
-msgstr ""
+msgstr "Lees dit bestand, schrijf naar een diff"
#: src/emu/ui/imgcntrl.cpp:115
msgid "Cannot save over directory"
-msgstr ""
+msgstr "Kan geen map vervangen"
#: src/emu/ui/imgcntrl.cpp:149
msgid ""
"The software selected is missing one or more required ROM or CHD images. "
"Please select a different one."
msgstr ""
+"De geselecteerde software mist een of meerdere benodigde ROM of CHD bestanden. "
+"Kies een andere."
#: src/emu/ui/info.cpp:98
msgid "Not supported"
-msgstr ""
+msgstr "Niet ondersteund"
#: src/emu/ui/info.cpp:101
msgid "Partially supported"
-msgstr ""
+msgstr "Gedeeltelijk ondersteund"
#: src/emu/ui/info.cpp:109
msgid "[empty]"
-msgstr ""
+msgstr "[leeg]"
#: src/emu/ui/info_pty.cpp:26 src/emu/ui/mainmenu.cpp:90
msgid "Pseudo terminals"
@@ -753,32 +744,32 @@ msgstr ""
#: src/emu/ui/info_pty.cpp:35
msgid "[failed]"
-msgstr ""
+msgstr "[gefaald]"
#: src/emu/ui/inputmap.cpp:52
msgid "User Interface"
-msgstr ""
+msgstr "Gebruikersinterface"
#: src/emu/ui/inputmap.cpp:59
msgid "Other Controls"
-msgstr ""
+msgstr "Andere controls"
#: src/emu/ui/inputmap.cpp:625 src/emu/ui/miscmenu.cpp:90
#: src/emu/ui/slotopt.cpp:172
msgid "Reset"
-msgstr ""
+msgstr "Herstel"
#: src/emu/ui/mainmenu.cpp:53
msgid "Input (general)"
-msgstr ""
+msgstr "Invoer (algemeen)"
#: src/emu/ui/mainmenu.cpp:55
msgid "Input (this Machine)"
-msgstr ""
+msgstr "Invoer (deze machine)"
#: src/emu/ui/mainmenu.cpp:59
msgid "Analog Controls"
-msgstr ""
+msgstr "Analoge controls"
#: src/emu/ui/mainmenu.cpp:61
msgid "Dip Switches"
@@ -786,19 +777,19 @@ msgstr ""
#: src/emu/ui/mainmenu.cpp:64
msgid "Machine Configuration"
-msgstr ""
+msgstr "Machineconfiguratie"
#: src/emu/ui/mainmenu.cpp:68
msgid "Bookkeeping Info"
-msgstr ""
+msgstr "Boekhoudinginformatie"
#: src/emu/ui/mainmenu.cpp:71
msgid "Machine Information"
-msgstr ""
+msgstr "Machineinformatie"
#: src/emu/ui/mainmenu.cpp:77
msgid "Image Information"
-msgstr ""
+msgstr "Bestandsinformatie"
#: src/emu/ui/mainmenu.cpp:80
msgid "File Manager"
@@ -810,7 +801,7 @@ msgstr ""
#: src/emu/ui/mainmenu.cpp:93
msgid "Bios Selection"
-msgstr ""
+msgstr "Biosselectie"
#: src/emu/ui/mainmenu.cpp:99
msgid "Slot Devices"
@@ -818,7 +809,7 @@ msgstr ""
#: src/emu/ui/mainmenu.cpp:106
msgid "Barcode Reader"
-msgstr ""
+msgstr "Barcodelezer"
#: src/emu/ui/mainmenu.cpp:113
msgid "Network Devices"
@@ -826,7 +817,7 @@ msgstr ""
#: src/emu/ui/mainmenu.cpp:118
msgid "Keyboard Mode"
-msgstr ""
+msgstr "Keyboardmodus"
#: src/emu/ui/mainmenu.cpp:121
msgid "Slider Controls"
@@ -834,7 +825,7 @@ msgstr ""
#: src/emu/ui/mainmenu.cpp:124
msgid "Video Options"
-msgstr ""
+msgstr "Videoopties"
#: src/emu/ui/mainmenu.cpp:128
msgid "Crosshair Options"
@@ -850,15 +841,15 @@ msgstr ""
#: src/emu/ui/mainmenu.cpp:142
msgid "Add To Favorites"
-msgstr ""
+msgstr "Voeg toe aan favorieten"
#: src/emu/ui/mainmenu.cpp:144
msgid "Remove From Favorites"
-msgstr ""
+msgstr "Verwijder uit favorieten"
#: src/emu/ui/mainmenu.cpp:151
msgid "Select New Machine"
-msgstr ""
+msgstr "Selecteer nieuwe machine"
#: src/emu/ui/menu.cpp:45
msgid "Control Panels"
@@ -866,7 +857,7 @@ msgstr ""
#: src/emu/ui/menu.cpp:50
msgid "Artwork Preview"
-msgstr ""
+msgstr "Artwork voorvertoning"
#: src/emu/ui/menu.cpp:54
msgid "Game Over"
@@ -874,11 +865,11 @@ msgstr ""
#: src/emu/ui/menu.cpp:63
msgid "Add or remove favorites"
-msgstr ""
+msgstr "Naar of van favorietenlijst"
#: src/emu/ui/menu.cpp:64
msgid "Export displayed list to file"
-msgstr ""
+msgstr "Exporteer lijst naar bestand"
#: src/emu/ui/menu.cpp:65
msgid "Show DATs view"
@@ -886,39 +877,39 @@ msgstr ""
#: src/emu/ui/menu.cpp:252
msgid "Return to Machine"
-msgstr ""
+msgstr "Terug naar machine"
#: src/emu/ui/menu.cpp:256 src/emu/ui/menu.cpp:258
msgid "Exit"
-msgstr ""
+msgstr "Afsluiten"
#: src/emu/ui/menu.cpp:263 src/emu/ui/menu.cpp:265
msgid "Return to Previous Menu"
-msgstr ""
+msgstr "Terug naar vorig menu"
#: src/emu/ui/menu.cpp:680
msgid "Auto"
-msgstr ""
+msgstr "Automatisch"
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
#: src/emu/ui/miscmenu.cpp:36
msgid "Keyboard Mode:"
-msgstr ""
+msgstr "Toetsenboordmodus:"
#: src/emu/ui/miscmenu.cpp:36
msgid "Natural"
-msgstr ""
+msgstr "Natuurlijk"
#: src/emu/ui/miscmenu.cpp:36
msgid "Emulated"
-msgstr ""
+msgstr "Geëmuleerd"
#: src/emu/ui/miscmenu.cpp:239
#, c-format
@@ -952,7 +943,7 @@ msgstr ""
#: src/emu/ui/miscmenu.cpp:259
msgid " (locked)"
-msgstr ""
+msgstr " (afgeschermd)"
#: src/emu/ui/miscmenu.cpp:518
msgid "Visible Delay"
@@ -960,11 +951,11 @@ msgstr ""
#: src/emu/ui/miscmenu.cpp:557
msgid "Re-select last machine played"
-msgstr ""
+msgstr "Kies laatst gespeelde machine opnieuw"
#: src/emu/ui/miscmenu.cpp:558
msgid "Enlarge images in the right panel"
-msgstr ""
+msgstr "Vergroot plaatsen in het rechter paneel"
#: src/emu/ui/miscmenu.cpp:559
msgid "DATs info"
@@ -972,66 +963,66 @@ msgstr ""
#: src/emu/ui/miscmenu.cpp:561
msgid "Show mouse pointer"
-msgstr ""
+msgstr "Toon muispointer"
#: src/emu/ui/miscmenu.cpp:562
msgid "Confirm quit from machines"
-msgstr ""
+msgstr "Machine afsluiten bevestigen"
#: src/emu/ui/miscmenu.cpp:563
msgid "Skip displaying information's screen at startup"
-msgstr ""
+msgstr "Sla informatiescherm bij het opstarten over"
#: src/emu/ui/miscmenu.cpp:564
msgid "Force 4:3 appearance for software snapshot"
-msgstr ""
+msgstr "Toon software snapshot geforceerd in 4:3 formaat"
#: src/emu/ui/miscmenu.cpp:565
msgid "Use image as background"
-msgstr ""
+msgstr "Gebruik plaatje als achtergrond"
#: src/emu/ui/miscmenu.cpp:566
msgid "Skip bios selection menu"
-msgstr ""
+msgstr "Sla bios selectie menu over"
#: src/emu/ui/miscmenu.cpp:567
msgid "Skip software parts selection menu"
-msgstr ""
+msgstr "Sla software onderdelen selectie menu over"
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
-msgstr ""
+msgstr "Overige opties"
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
-msgstr ""
+msgstr "%s.xml opgeslagen in 'ui' map."
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
-msgstr ""
+msgstr "Naam: Omschrijving:\n"
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
-msgstr ""
+msgstr "%s.txt opgeslagen in 'ui' map."
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
-msgstr ""
+msgstr "Exporteer in XML formaat (zoals -listxml)"
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
-msgstr ""
+msgstr "Exporteer in TXT formaat (zoals -listfull)"
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
-msgstr ""
+msgstr "Dummie"
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
-msgstr ""
+msgstr "Sla machineconfiguratie op"
#: src/emu/ui/optsmenu.cpp:217
msgid "Filter"
@@ -1039,54 +1030,49 @@ msgstr ""
#: src/emu/ui/optsmenu.cpp:226
msgid " ^!File"
-msgstr ""
+msgstr " ^!Bestand"
#: src/emu/ui/optsmenu.cpp:231
msgid " ^!Category"
-msgstr ""
+msgstr " ^!Categorie"
#: src/emu/ui/optsmenu.cpp:254
msgid "^!Setup custom filter"
-msgstr ""
+msgstr "^!Stel eigen filter in"
#: src/emu/ui/optsmenu.cpp:262
msgid "Customize UI"
-msgstr ""
+msgstr "Pas UI aan"
#: src/emu/ui/optsmenu.cpp:263
msgid "Configure Directories"
-msgstr ""
+msgstr "Configureer mappen"
#: src/emu/ui/optsmenu.cpp:266 src/emu/ui/sndmenu.cpp:150
#: src/emu/ui/sndmenu.cpp:170
msgid "Sound Options"
-msgstr ""
+msgstr "Geluidsopties"
#: src/emu/ui/optsmenu.cpp:269
msgid "General Inputs"
-msgstr ""
+msgstr "Algemene invoer"
#: src/emu/ui/optsmenu.cpp:271
msgid "Save Configuration"
-msgstr ""
+msgstr "Sla configuratie op"
#: src/emu/ui/optsmenu.cpp:285 src/emu/ui/optsmenu.cpp:305
msgid "Settings"
-msgstr ""
+msgstr "Instellingen"
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
-msgstr ""
+msgid "**Error saving ui.ini**"
+msgstr "**Fout bij het opslaan van ui.ini**"
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
-msgstr ""
+msgid "**Error saving %s.ini**"
+msgstr "**Fout bij het opslaan van %s.ini**"
#: src/emu/ui/optsmenu.cpp:376
msgid ""
@@ -1094,375 +1080,393 @@ msgid ""
" Configuration saved \n"
"\n"
msgstr ""
+"\n"
+" Configuratie opgeslagen\n"
+"\n"
#: src/emu/ui/selector.cpp:152
msgid "Selection List - Search: "
-msgstr ""
+msgstr "Selectielijst - Zoeken: "
#: src/emu/ui/selector.cpp:181
-msgid " to select"
-msgstr ""
+#, c-format
+msgid "Double click or press %1$s to select"
+msgstr "Dubbelklik of druk %1$s om te selecteren"
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
-msgstr ""
+msgstr "Algemene informatie"
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
+"%s\n"
+" toegevoegd aan favorieten."
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
+"%s\n"
+" verwijderd van favorieten."
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
"\n"
"Press any key (except ESC) to continue."
msgstr ""
+"De geselecteerde machine mist één of meerdere benodigde ROM of CHD bestanden. "
+"Selecteer een andere machine.\n"
+"\n"
+"Druk een toets (behalve ESC) om verder te gaan."
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
-msgstr ""
+msgstr "Configureer opties"
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
-msgstr ""
+msgstr "Configureer machine"
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
-msgstr ""
+msgstr "%1$s Zoek: %2$s_"
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
-msgstr ""
+msgstr "Driver is een kloon van: %1$-.100s"
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
-msgstr ""
+msgstr "Driver is ouder"
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
-msgstr ""
+msgstr "Status: WERKT NIET"
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
-msgstr ""
+msgstr "Status: Beveiliging niet geëmuleerd"
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
-msgstr ""
+msgstr "Status: Werkt"
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
-msgstr ""
+msgstr "Beeld: Niet volledig, "
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
-msgstr ""
+msgstr "Beeld: OK, "
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
-msgstr ""
+msgstr "Geluid: Niet geïmplementeerd"
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
-msgstr ""
+msgstr "Geluid: Niet volledig"
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
-msgstr ""
+msgstr "Geluid: OK"
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
-msgstr ""
+msgstr "Systeem: %1$-.100s"
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
-msgstr ""
+msgstr "Software is kloon van: %1$-.100s"
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
-msgstr ""
+msgstr "Software is ouder"
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
-msgstr ""
+msgstr "Ondersteund: Nee"
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
-msgstr ""
+msgstr "Ondersteund: Gedeeltelijk"
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
-msgstr ""
+msgstr "Ondersteund: Ja"
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
-msgstr ""
+msgstr "Jaar: %1$s\n"
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
-msgstr ""
+msgstr "Fabrikant: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
-msgstr ""
+msgstr "Driver is kloon van: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
-msgstr ""
+msgstr "Driver is ouder\n"
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
-msgstr ""
+msgstr "Status: WERKT NIET\n"
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
-msgstr ""
+msgstr "Status: Beveiliging niet geëmuleerd\n"
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
-msgstr ""
+msgstr "Status: Werkt\n"
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
-msgstr ""
+msgstr "Beeld: Kleuren niet juist\n"
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
-msgstr ""
+msgstr "Beeld: Onvolledig\n"
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
-msgstr ""
+msgstr "Beeld: OK\n"
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
-msgstr ""
+msgstr "Geluid: Niet geïmplementeerd\n"
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
-msgstr ""
+msgstr "Geluid: Onvolledig\n"
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
-msgstr ""
+msgstr "Geluid: OK\n"
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
-msgstr ""
+msgstr "Raamwerkdriver: %1$s\n"
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
-msgstr ""
+msgstr "Machine heeft mechanische onderdelen: %1$s\n"
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
-msgstr ""
+msgstr "Vereist artwork: %1$s\n"
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
-msgstr ""
+msgstr "Vereist klikbare artwork: %1$s\n"
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
-msgstr ""
+msgstr "Ondersteund cocktail: %1$s\n"
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
-msgstr ""
+msgstr "Ondersteund opslag: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
-msgstr ""
+msgid "Screen Orientation: %1$s\n"
+msgstr "Schermoriëntatie: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
-msgstr ""
+msgstr "Verticaal"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
-msgstr ""
+msgstr "Horizontaal"
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
-msgstr ""
+msgstr "Vereist CHD: %1$s\n"
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
-msgstr ""
+msgstr "Roms controle stap: OK\n"
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
-msgstr ""
+msgstr "Roms controle stap: FOUT\n"
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
-msgstr ""
+msgstr "Samples controle stap: Geen benodigd\n"
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
-msgstr ""
+msgstr "Samples controle stap: OK\n"
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
-msgstr ""
+msgstr "Samples controle stap: FOUT\n"
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
+"Roms controle stap: Uitgeschakeld\n"
+"Samples controle stap: Uitgeschakeld\n"
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
-msgstr ""
+msgstr "Geen informatie beschikbaar"
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
-msgstr ""
+msgstr "Gebruik"
#: src/emu/ui/selsoft.cpp:109
msgid " (default)"
-msgstr ""
+msgstr " (standaard)"
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
"\n"
"Press any key (except ESC) to continue."
msgstr ""
+"De geselecteerde software mist één of meerdere benodigde bestanden. Selecteer "
+"een andere software.\n"
+"\n"
+"Druk een toets (behalve ESC) om verder te gaan."
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
-msgstr ""
+msgstr "Driver: \"%1$s\" softwarelijst "
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
-msgstr ""
+msgstr "Regio: %1$s -"
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
-msgstr ""
+msgstr "Uitgever: %1$s -"
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
-msgstr ""
+msgstr "Jaar: %1$s -"
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
-msgstr ""
+msgstr "Softwarelijst: %1$s -"
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
-msgstr ""
+msgstr "%s Zoek: %s_"
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
-msgstr ""
+msgstr "Softwareonderdeel selectie:"
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
-msgstr ""
+msgstr "Bios selectie:"
#: src/emu/ui/simpleselgame.cpp:232
#, c-format
@@ -1472,15 +1476,19 @@ msgid ""
"If this is your first time using %2$s, please see the config.txt file in the "
"docs directory for information on configuring %2$s."
msgstr ""
+"Geen machines gevonden. Controleer de rompath instellingen in het bestand %1$s.ini.\n"
+"\n"
+"Als dit de eerste keer is dat je %2$s gebruikt, lees dan het bestand config.txt in "
+"de docs map voor informatie hoe %2$s te configureren."
#: src/emu/ui/simpleselgame.cpp:287
#, c-format
msgid "Type name or select: %1$s_"
-msgstr ""
+msgstr "Type naam of selecteer: %1$s_"
#: src/emu/ui/simpleselgame.cpp:289
msgid "Type name or select: (random)"
-msgstr ""
+msgstr "Type naam of selecteer: (willekeurig)"
#: src/emu/ui/simpleselgame.cpp:328
#, c-format
@@ -1489,28 +1497,28 @@ msgstr ""
#: src/emu/ui/simpleselgame.cpp:340 src/emu/ui/simpleselgame.cpp:347
msgid "Imperfect"
-msgstr ""
+msgstr "Onvolledig"
#: src/emu/ui/simpleselgame.cpp:342 src/emu/ui/simpleselgame.cpp:349
msgid "OK"
-msgstr ""
+msgstr "OK"
#: src/emu/ui/simpleselgame.cpp:345
msgid "Unimplemented"
-msgstr ""
+msgstr "Niet geïmplementeerd"
#: src/emu/ui/simpleselgame.cpp:351
#, c-format
msgid "Gfx: %s, Sound: %s"
-msgstr ""
+msgstr "Beeld: %s, Geluid: %s"
#: src/emu/ui/slotopt.cpp:166
msgid " [internal]"
-msgstr ""
+msgstr " [intern]"
#: src/emu/ui/sndmenu.cpp:134
msgid "Sound"
-msgstr ""
+msgstr "Geluid"
#: src/emu/ui/sndmenu.cpp:135
msgid "Sample Rate"
@@ -1518,76 +1526,76 @@ msgstr ""
#: src/emu/ui/sndmenu.cpp:136
msgid "Use External Samples"
-msgstr ""
+msgstr "Gebruik externe samples"
#: src/emu/ui/swlist.cpp:70
msgid "[file manager]"
-msgstr ""
+msgstr "[Bestandsbeheer]"
#: src/emu/ui/swlist.cpp:235
msgid "Switch Item Ordering"
-msgstr ""
+msgstr "Wissel onderdeel volgorde"
#: src/emu/ui/swlist.cpp:268
#, c-format
msgid "Switched Order: entries now ordered by %s"
-msgstr ""
+msgstr "Volgorde gewijzigd: elementen zijn nu gesorteerd op %s"
#: src/emu/ui/swlist.cpp:268
msgid "shortname"
-msgstr ""
+msgstr "korte naam"
#: src/emu/ui/swlist.cpp:268
msgid "description"
-msgstr ""
+msgstr "omschrijving"
#: src/emu/ui/swlist.cpp:436
msgid "[compatible lists]"
-msgstr ""
+msgstr "[compatibele lijsten]"
#: src/emu/ui/tapectrl.cpp:84
msgid "stopped"
-msgstr ""
+msgstr "gestopt"
#: src/emu/ui/tapectrl.cpp:86
msgid "playing"
-msgstr ""
+msgstr "afspelen"
#: src/emu/ui/tapectrl.cpp:86
msgid "(playing)"
-msgstr ""
+msgstr "(afspelen)"
#: src/emu/ui/tapectrl.cpp:87
msgid "recording"
-msgstr ""
+msgstr "opnemen"
#: src/emu/ui/tapectrl.cpp:87
msgid "(recording)"
-msgstr ""
+msgstr "(opnemen)"
#: src/emu/ui/tapectrl.cpp:94
msgid "Pause/Stop"
-msgstr ""
+msgstr "Pauzeer/Stop"
#: src/emu/ui/tapectrl.cpp:97
msgid "Play"
-msgstr ""
+msgstr "Speel"
#: src/emu/ui/tapectrl.cpp:100
msgid "Record"
-msgstr ""
+msgstr "Neem op"
#: src/emu/ui/tapectrl.cpp:103
msgid "Rewind"
-msgstr ""
+msgstr "Terugspoelen"
#: src/emu/ui/tapectrl.cpp:106
msgid "Fast Forward"
-msgstr ""
+msgstr "Snel vooruit"
#: src/emu/ui/ui.cpp:415
msgid "This driver requires images to be loaded in the following device(s): "
-msgstr ""
+msgstr "Deze driver vereist images ingelezen in de volgende device(s): "
#: src/emu/ui/ui.cpp:1043
#, c-format
@@ -1606,69 +1614,78 @@ msgid ""
"One or more ROMs/CHDs for this machine are incorrect. The machine may not "
"run correctly.\n"
msgstr ""
+"Één of meerdere ROMs/CHDs voor deze machine zijn niet correct. De machine kan "
+"mogelijk niet goed functioneren.\n"
#: src/emu/ui/ui.cpp:1094
msgid ""
"There are known problems with this machine\n"
"\n"
msgstr ""
+"Er zijn bekende problemen met deze machine\n"
+"\n"
#: src/emu/ui/ui.cpp:1098
msgid ""
"One or more ROMs/CHDs for this machine have not been correctly dumped.\n"
msgstr ""
+"Éémn of meerder ROMs/CHDs voor de machine zijn niet correct gedumpt.\n"
#: src/emu/ui/ui.cpp:1102
#, c-format
msgid "The keyboard emulation may not be 100% accurate.\n"
-msgstr ""
+msgstr "De toetsenbordemulatie is mogelijk niet 100% accuraat.\n"
#: src/emu/ui/ui.cpp:1104
#, c-format
msgid "The colors aren't 100% accurate.\n"
-msgstr ""
+msgstr "De kleuren zijn niet 100% accuraat.\n"
#: src/emu/ui/ui.cpp:1106
msgid "The colors are completely wrong.\n"
-msgstr ""
+msgstr "De kleuren zijn zeker fout.\n"
#: src/emu/ui/ui.cpp:1108
#, c-format
msgid "The video emulation isn't 100% accurate.\n"
-msgstr ""
+msgstr "De beeldemulatie is niet 100% accuraat.\n"
#: src/emu/ui/ui.cpp:1110
#, c-format
msgid "The sound emulation isn't 100% accurate.\n"
-msgstr ""
+msgstr "De geluidsemulatie is niet 100% accuraat.\n"
#: src/emu/ui/ui.cpp:1112
msgid "The machine lacks sound.\n"
-msgstr ""
+msgstr "Deze machine heeft geen geluid.\n"
#: src/emu/ui/ui.cpp:1115
msgid "Screen flipping in cocktail mode is not supported.\n"
-msgstr ""
+msgstr "Schermflippen in cocktail modus is niet ondersteund.\n"
#: src/emu/ui/ui.cpp:1119
msgid "The machine requires external artwork files\n"
-msgstr ""
+msgstr "Deze machine vereist extern artwork bestanden\n"
#: src/emu/ui/ui.cpp:1124
msgid ""
"This machine was never completed. It may exhibit strange behavior or missing "
"elements that are not bugs in the emulation.\n"
msgstr ""
+"Deze machine was nooit afgemaakt. Het kan vreemd gedrag vertonen of elementen "
+"missen die geen fouten zijn met de emulatie.\n"
#: src/emu/ui/ui.cpp:1129
msgid ""
"This machine has no sound hardware, MAME will produce no sounds, this is "
"expected behaviour.\n"
msgstr ""
+"Deze machine heeft geen geluidhardware, MAME zal geen geluid produceren, dit is "
+"verwacht gedrag.\n"
#: src/emu/ui/ui.cpp:1137
msgid "The machine has protection which isn't fully emulated.\n"
-msgstr ""
+msgstr "Deze machine heeft beveiliging die nog niet volledig is geëmuleerd.\n"
#: src/emu/ui/ui.cpp:1140
msgid ""
@@ -1677,6 +1694,9 @@ msgid ""
"complete. There is nothing you can do to fix this problem except wait for "
"the developers to improve the emulation.\n"
msgstr ""
+"DEZE MACHINE DOET HET NIET. De emulatie van deze machine is nog niet compleet. Er is "
+"niets wat je kunt doen om dit probleem te verhelpen afgezien van het afwachten tot de "
+"ontwikkelaars de emulatie verder verbeteren.\n"
#: src/emu/ui/ui.cpp:1144
msgid ""
@@ -1685,6 +1705,10 @@ msgid ""
"physical interaction or consists of mechanical devices. It is not possible "
"to fully play this machine.\n"
msgstr ""
+"\n"
+"Bepaalde onderdelen van deze machine kunnen niet worden geëmuleerd in verband met "
+"fysieke interactie of het gebruik van mechanische componenten. Het is niet mogelijk "
+"deze machine volledig te spelen.\n"
#: src/emu/ui/ui.cpp:1163
msgid ""
@@ -1692,6 +1716,9 @@ msgid ""
"\n"
"There are working clones of this machine: "
msgstr ""
+"\n"
+"\n"
+"Dit zijn werkende klonen van de machine: "
#: src/emu/ui/ui.cpp:1177
msgid ""
@@ -1699,6 +1726,9 @@ msgid ""
"\n"
"Type OK or move the joystick left then right to continue"
msgstr ""
+"\n"
+"\n"
+"Type OK of beweeg de joystick naar links en rechts om verder te gaan"
#: src/emu/ui/ui.cpp:1192
#, c-format
@@ -1723,16 +1753,20 @@ msgid ""
"\n"
"Sound:\n"
msgstr ""
+"\n"
+"Geluid:\n"
#: src/emu/ui/ui.cpp:1271
msgid ""
"\n"
"Video:\n"
msgstr ""
+"\n"
+"Beeld:\n"
#: src/emu/ui/ui.cpp:1275
msgid "None\n"
-msgstr ""
+msgstr "Geen\n"
#: src/emu/ui/ui.cpp:1282
msgid "Vector"
@@ -1749,57 +1783,57 @@ msgstr ""
#: src/emu/ui/ui.cpp:1577 src/emu/ui/ui.cpp:1587
msgid "Keyboard Emulation Status"
-msgstr ""
+msgstr "Toetsenbord emulatiestatus"
#: src/emu/ui/ui.cpp:1579
msgid "Mode: PARTIAL Emulation"
-msgstr ""
+msgstr "Modus: GEDEELTELIJKE emulatie"
#: src/emu/ui/ui.cpp:1580
msgid "UI: Enabled"
-msgstr ""
+msgstr "UI: Ingeschakeld"
#: src/emu/ui/ui.cpp:1582 src/emu/ui/ui.cpp:1592
msgid "**Use ScrLock to toggle**"
-msgstr ""
+msgstr "**Gebruik ScrLock om te wisselen**"
#: src/emu/ui/ui.cpp:1589
msgid "Mode: FULL Emulation"
-msgstr ""
+msgstr "Modus: VOLLEDIGE emulatie"
#: src/emu/ui/ui.cpp:1590
msgid "UI: Disabled"
-msgstr ""
+msgstr "UI: Uitgeschakeld"
#: src/emu/ui/ui.cpp:1736
msgid "Autofire can't be enabled"
-msgstr ""
+msgstr "Autofire kan niet worden ingeschakeld"
#: src/emu/ui/ui.cpp:1775
msgid "Select position to save to"
-msgstr ""
+msgstr "Selecteer positie om naar op te slaan"
#: src/emu/ui/ui.cpp:1777
msgid "Select position to load from"
-msgstr ""
+msgstr "Selecteer positie om van in te lezen"
#: src/emu/ui/ui.cpp:1801
msgid "Save cancelled"
-msgstr ""
+msgstr "Opslaan afgebroken"
#: src/emu/ui/ui.cpp:1803
msgid "Load cancelled"
-msgstr ""
+msgstr "Inlezen afgebroken"
#: src/emu/ui/ui.cpp:1846
#, c-format
msgid "Save to position %s"
-msgstr ""
+msgstr "Opslaan naar positie %s"
#: src/emu/ui/ui.cpp:1851
#, c-format
msgid "Load from position %s"
-msgstr ""
+msgstr "Inlezen van positie %s"
#: src/emu/ui/ui.cpp:1891
#, c-format
@@ -1809,6 +1843,10 @@ msgid ""
"Press ''%1$s'' to quit,\n"
"Press ''%2$s'' to return to emulation."
msgstr ""
+"Weet je zeker dat je wilt stoppen?\n"
+"\n"
+"Druk op ''%1%s'' om te stoppen,\n"
+"druk op ''%2$s'' om terug te keren naar de emulatie."
#: src/emu/ui/ui.cpp:1967
msgid "Master Volume"
@@ -2016,12 +2054,12 @@ msgstr ""
#: src/emu/ui/videoopt.cpp:227
msgid "Full"
-msgstr ""
+msgstr "Volledig"
#: src/emu/ui/viewgfx.cpp:391
msgid " COLORS"
-msgstr ""
+msgstr " KLEUREN"
#: src/emu/ui/viewgfx.cpp:391
msgid " PENS"
-msgstr ""
+msgstr " PENNEN"
diff --git a/language/English/strings.po b/language/English/strings.po
index 1272932ab4a..29b1c39fedd 100644
--- a/language/English/strings.po
+++ b/language/English/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -317,12 +317,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -412,34 +409,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -552,11 +549,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -571,28 +565,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -656,19 +645,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -899,11 +888,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -997,38 +986,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1074,17 +1063,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1099,29 +1083,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1129,271 +1114,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1401,7 +1386,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1409,57 +1394,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Estonian/strings.po b/language/Estonian/strings.po
index 842b8a55577..7fdd1facdd5 100644
--- a/language/Estonian/strings.po
+++ b/language/Estonian/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -317,12 +317,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -412,34 +409,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -552,11 +549,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -571,28 +565,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -656,19 +645,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -899,11 +888,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -997,38 +986,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1074,17 +1063,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1099,29 +1083,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1129,271 +1114,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1401,7 +1386,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1409,57 +1394,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Finnish/strings.po b/language/Finnish/strings.po
index 6150f447a0a..0eecf243c00 100644
--- a/language/Finnish/strings.po
+++ b/language/Finnish/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -318,12 +318,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -413,34 +410,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -553,11 +550,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -572,28 +566,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -657,19 +646,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -900,11 +889,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -998,38 +987,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1075,17 +1064,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1100,29 +1084,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1130,271 +1115,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1402,7 +1387,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1410,57 +1395,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/French/strings.po b/language/French/strings.po
index fb67ffbf58b..2a5af7274c9 100644
--- a/language/French/strings.po
+++ b/language/French/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: Benjamin Siskoo\n"
@@ -166,15 +166,15 @@ msgstr "Sélectionner les filtres personnalisés :"
#: src/emu/ui/custmenu.cpp:459
msgid "^!Publisher"
-msgstr ""
+msgstr "^!Editeur"
#: src/emu/ui/custmenu.cpp:477
msgid "^!Software List"
-msgstr ""
+msgstr "^!Liste de Logiciel"
#: src/emu/ui/custmenu.cpp:486
msgid "^!Device type"
-msgstr ""
+msgstr "^!Type de Périphérique"
#: src/emu/ui/custmenu.cpp:495
msgid "^!Region"
@@ -214,11 +214,11 @@ msgstr "Afficher les Onglets à Côté"
#: src/emu/ui/custui.cpp:164 src/emu/ui/custui.cpp:184
msgid "Custom UI Settings"
-msgstr "Configurer l'Interface Personnalisé"
+msgstr "Configurer l'Interface Personnalisée"
#: src/emu/ui/custui.cpp:268
msgid "default"
-msgstr ""
+msgstr "défaut"
#: src/emu/ui/custui.cpp:371
msgid "UI Font"
@@ -322,13 +322,10 @@ msgstr "Restaurer les Couleurs Originales"
msgid "UI Colors Settings"
msgstr "Paramètrage des Couleurs de l'Interface"
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr "Double cliquer ou presser "
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
-msgstr " pour changer la valeur de la couleur"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
+msgstr "Double-cliquez ou pressez %1$s pour changer la valeur de la couleur"
#: src/emu/ui/custui.cpp:617
msgid "Menu Preview"
@@ -417,34 +414,34 @@ msgstr "Histoire du Logiciel"
msgid "Software Usage"
msgstr "Utilisation du Logiciel"
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr "Révision : "
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr "Histoire"
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr "Mameinfo"
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr "MessInfo"
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr "SysInfo"
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr "MameScore"
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr "Command"
@@ -557,12 +554,9 @@ msgid "Folders Setup"
msgstr "Configurer les Dossiers"
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr "En cours "
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
-msgstr " Dossiers"
+#, c-format
+msgid "Current %1$s Folders"
+msgstr ""
#: src/emu/ui/dirmenu.cpp:195
msgid "Change Folder"
@@ -576,33 +570,28 @@ msgstr "Ajouter un Dossier"
msgid "Remove Folder"
msgstr "Enlever le Dossier"
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr "Changer)"
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
-msgstr "Ajouter"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
+msgstr "Changer %1$s Dossier - Recherche : %2$s_"
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
-msgstr " Dossier - Rechercher : "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
+msgstr "Ajouter %1$s Dossier - Recherche : %2$s_"
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
-msgstr "Presser TAB pour choisir"
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr "Enlever "
+msgstr "Presser TAB pour Faire les Réglages"
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
-msgstr " Dossier"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
+msgstr "Supprimer le Dossier %1$s"
#: src/emu/ui/dsplmenu.cpp:38
msgid "Video Mode"
-msgstr ""
+msgstr "Mode Vidéo"
#: src/emu/ui/dsplmenu.cpp:40
msgid "Hardware Stretch"
@@ -622,7 +611,7 @@ msgstr "GLSL"
#: src/emu/ui/dsplmenu.cpp:45
msgid "Bilinear Filtering"
-msgstr ""
+msgstr "Flitrage Bi-linèaire"
#: src/emu/ui/dsplmenu.cpp:46
msgid "Bitmap Prescaling"
@@ -630,7 +619,7 @@ msgstr "PréScaling du Bitmap"
#: src/emu/ui/dsplmenu.cpp:47
msgid "Multi-Threaded Rendering"
-msgstr "Renu Multi Tâches"
+msgstr "Rendu Multi Tâches"
#: src/emu/ui/dsplmenu.cpp:48
msgid "Window Mode"
@@ -642,7 +631,7 @@ msgstr "Garder les Proportions"
#: src/emu/ui/dsplmenu.cpp:50
msgid "Start Out Maximized"
-msgstr "Commencer en Maximisée"
+msgstr "Affichage Agrandit au Démarrage"
#: src/emu/ui/dsplmenu.cpp:51
msgid "Synchronized Refresh"
@@ -650,7 +639,7 @@ msgstr "Rafraîchissement Syncrhonisé"
#: src/emu/ui/dsplmenu.cpp:52
msgid "Wait Vertical Sync"
-msgstr "Attente de la Synchro Vertical"
+msgstr "Attente de la Synchro Verticale"
#: src/emu/ui/dsplmenu.cpp:204 src/emu/ui/dsplmenu.cpp:224
#: src/emu/ui/optsmenu.cpp:265
@@ -661,19 +650,19 @@ msgstr "Options D'Affichage"
msgid "File Already Exists - Override?"
msgstr "Le Fichier Existe Déjà - Continuer ?"
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr "Non"
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr "Oui"
@@ -683,7 +672,7 @@ msgstr "Nouveau Nom de l'Image :"
#: src/emu/ui/filesel.cpp:277
msgid "Image Format:"
-msgstr ""
+msgstr "Format de l'Image :"
#: src/emu/ui/filesel.cpp:283
msgid "Create"
@@ -691,7 +680,7 @@ msgstr "Créer"
#: src/emu/ui/filesel.cpp:314
msgid "Please enter a file extension too"
-msgstr "Veuillez entrer l'extenstion du fichier aussi"
+msgstr "Veuillez entrer l'extension du fichier aussi"
#: src/emu/ui/filesel.cpp:502 src/emu/ui/swlist.cpp:65
msgid "[empty slot]"
@@ -703,15 +692,15 @@ msgstr "[créer]"
#: src/emu/ui/filesel.cpp:510 src/emu/ui/swlist.cpp:76
msgid "[software list]"
-msgstr ""
+msgstr "[Liste de Logiciel]"
#: src/emu/ui/filesel.cpp:802
msgid "Select image format"
-msgstr ""
+msgstr "Sélection du Format de l'Image"
#: src/emu/ui/filesel.cpp:862
msgid "Select access mode"
-msgstr ""
+msgstr "Sélection du Mode d'Accès"
#: src/emu/ui/filesel.cpp:863
msgid "Read-only"
@@ -767,7 +756,7 @@ msgstr "Interface Utilisateur"
#: src/emu/ui/inputmap.cpp:59
msgid "Other Controls"
-msgstr ""
+msgstr "Autres Contrôles"
#: src/emu/ui/inputmap.cpp:625 src/emu/ui/miscmenu.cpp:90
#: src/emu/ui/slotopt.cpp:172
@@ -776,11 +765,11 @@ msgstr "Redémarrer"
#: src/emu/ui/mainmenu.cpp:53
msgid "Input (general)"
-msgstr "Périphérique d'Entrée (Général)"
+msgstr "Configuration des Contrôles pour Tous les Jeux"
#: src/emu/ui/mainmenu.cpp:55
msgid "Input (this Machine)"
-msgstr "Périphérique d'Entrée (Cette Machine)"
+msgstr "Configuration des Contrôles pour ce Jeu Uniquement"
#: src/emu/ui/mainmenu.cpp:59
msgid "Analog Controls"
@@ -800,11 +789,11 @@ msgstr "Info : Crédits et Temps de Jeu"
#: src/emu/ui/mainmenu.cpp:71
msgid "Machine Information"
-msgstr "Information sur la Machine"
+msgstr "Informations sur la Machine"
#: src/emu/ui/mainmenu.cpp:77
msgid "Image Information"
-msgstr "Information de l'Image"
+msgstr "Informations sur l'Image"
#: src/emu/ui/mainmenu.cpp:80
msgid "File Manager"
@@ -880,7 +869,7 @@ msgstr ""
#: src/emu/ui/menu.cpp:63
msgid "Add or remove favorites"
-msgstr ""
+msgstr "Ajouter ou Supprimer des Favoris"
#: src/emu/ui/menu.cpp:64
msgid "Export displayed list to file"
@@ -892,7 +881,7 @@ msgstr "Afficher la visualisation des DATs"
#: src/emu/ui/menu.cpp:252
msgid "Return to Machine"
-msgstr ""
+msgstr "Revenir à la Machine"
#: src/emu/ui/menu.cpp:256 src/emu/ui/menu.cpp:258
msgid "Exit"
@@ -906,11 +895,11 @@ msgstr "Revenir au Menu Précédent"
msgid "Auto"
msgstr "Auto"
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr "Images"
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr "Infos"
@@ -992,7 +981,7 @@ msgstr "Confirmer l'Arrêt depuis les Machines"
#: src/emu/ui/miscmenu.cpp:563
msgid "Skip displaying information's screen at startup"
-msgstr "Passer les infos d'affichage au démarrage"
+msgstr "Ne pas Afficher les Informations au Démarrage"
#: src/emu/ui/miscmenu.cpp:564
msgid "Force 4:3 appearance for software snapshot"
@@ -1000,7 +989,7 @@ msgstr "Forcer l'Affichage en 4:3 pour les copies d'écrans"
#: src/emu/ui/miscmenu.cpp:565
msgid "Use image as background"
-msgstr "Utiliser une Image de Fond"
+msgstr "Utiliser l'Image comme Fond d'Ecran"
#: src/emu/ui/miscmenu.cpp:566
msgid "Skip bios selection menu"
@@ -1010,40 +999,40 @@ msgstr "Passer le menu de Sélection du Bios"
msgid "Skip software parts selection menu"
msgstr "Passer le menu de sélection logiciel"
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr "Options Diverses"
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr "%s.xml a été sauvegardé sous le dossier UI."
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr "Nom : Description:\n"
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr "%s.txt a été sauvegardé sous le dossier UI."
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
-msgstr "Exporer au Format XML (comme -listxml)"
+msgstr "Exporter au Format XML (comme -listxml)"
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr "Exporter au Format TXT (comme -listfull)"
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr "Factice"
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
-msgstr ""
+msgstr "Sauvegarder la Configuration de la Machine"
#: src/emu/ui/optsmenu.cpp:217
msgid "Filter"
@@ -1059,11 +1048,11 @@ msgstr " ^!Catégorie"
#: src/emu/ui/optsmenu.cpp:254
msgid "^!Setup custom filter"
-msgstr ""
+msgstr "^!Paramètrer le Filtre Personnalisé"
#: src/emu/ui/optsmenu.cpp:262
msgid "Customize UI"
-msgstr "Personnaliser l'UI"
+msgstr "Personnaliser l'Interface Utilisateur"
#: src/emu/ui/optsmenu.cpp:263
msgid "Configure Directories"
@@ -1072,7 +1061,7 @@ msgstr "Configurer les Répertoires"
#: src/emu/ui/optsmenu.cpp:266 src/emu/ui/sndmenu.cpp:150
#: src/emu/ui/sndmenu.cpp:170
msgid "Sound Options"
-msgstr "Options Sons"
+msgstr "Options Son"
#: src/emu/ui/optsmenu.cpp:269
msgid "General Inputs"
@@ -1087,39 +1076,35 @@ msgid "Settings"
msgstr "Paramètres"
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
+msgid "**Error saving ui.ini**"
msgstr "**Erreur de sauvegarde du fichier ui.ini**"
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
-msgstr ""
-
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
-msgstr ""
+msgid "**Error saving %s.ini**"
+msgstr "**Erreur de Sauvegarde %s.ini**"
#: src/emu/ui/optsmenu.cpp:376
msgid ""
"\n"
" Configuration saved \n"
"\n"
-msgstr " Configuration Sauvegardé \n"
+msgstr " Configuration Sauvegardée \n"
#: src/emu/ui/selector.cpp:152
msgid "Selection List - Search: "
msgstr "Liste de Sélection - Recherche : "
#: src/emu/ui/selector.cpp:181
-msgid " to select"
-msgstr " à sélectionner"
+#, c-format
+msgid "Double click or press %1$s to select"
+msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
-msgstr ""
+msgstr "Info Générale"
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
@@ -1128,281 +1113,283 @@ msgstr ""
"%s\n"
" ajouté à la liste des favoris."
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
+"%s\n"
+" supprimé depuis la Liste des Favoris."
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
"\n"
"Press any key (except ESC) to continue."
msgstr ""
-"La Machine Sélectionnée est manquand ou une ou plusieurs images ROM ou CHD "
-"sont nécessaires. Veuillez Sélectionner une Machine différente.\n"
+"Une ou plusieurs Images ROM ou CHD sont manquantes pour le Jeu "
+"SélectionnéVeuillez Choisir un Jeu Différent.\n"
"\n"
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr "Configurer les Options"
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
-msgstr ""
+msgstr "Configurer la Machine"
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr "%1$s (%2$s - %3$s) - "
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr "%1$s (%2$s) - "
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
-msgstr ""
+msgstr "%1$s Recherche : %2$s_"
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr "Set de Rom : %1$-.100s"
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr "%1$s, %2$-.100s"
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr "Le Driver est un Clone De : %1$-.100s"
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr "Le Driver est un Parent"
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr "Global : NE FONCTIONNE PAS"
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr "Global : Protection Non Emulé"
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr "Global : Fonctionne"
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
-msgstr "Graphismes : Imparfait, "
+msgstr "Graphiques : Imparfait, "
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr "Graphismes : OK, "
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr "Son : non implémenté"
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr "Son : Imparfait"
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
-msgstr ""
+msgstr "Son : OK"
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr "Système : %1$-.100s"
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
-msgstr ""
+msgstr "Le Logiciel est un Clone de : %1$-.100s"
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
-msgstr ""
+msgstr "Le Logiciel est Parent"
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr "Supporté : Non"
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr "Supporté : Partiellement"
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr "Supporté : Oui"
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr "Set de Rom : %1$-.100s"
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr "%1$s %2$s"
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr "Set de ROM : %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
-msgstr ""
+msgstr "Année: %1$s\n"
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr "Développeur : %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr "Le Driver est un Clone De : %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr "Le Driver est Parent\n"
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr "Global : NE FONCTIONNE PAS\n"
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr "Global : Protection Non Emulée\n"
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr "Global : Fonctionne\n"
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr "Graphismes : Couleurs Imparfaites\n"
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr "Graphismes : Imparfait\n"
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr "Graphismes : Ok\n"
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr "Son : Non Implémenté\n"
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr "Son : Imparfait\n"
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
-msgstr ""
+msgstr "Son : OK\n"
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
-msgstr "Le Driver Fantôme : %1$s\n"
+msgstr "Driver Fantôme : %1$s\n"
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr "Le jeu est Mécanique : %1$s\n"
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr "Nécessite l'Artwork: %1$s\n"
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
-msgstr "Ncessite un Artwork Cliquable : %1$s\n"
+msgstr "Nécessite un Artwork Cliquable : %1$s\n"
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr "Support Cocktail : %1$s\n"
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-"Le Driver Bios : %1$s\n"
+"Driver Bios : %1$s\n"
" "
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr "Support des Sauvegardes : %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr "Orientation de l'Ecran : %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr "Vertical"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr "Horizontal"
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr "Nécessite un CHD : %1$s\n"
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr "Contrôle des Roms : OK\n"
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr "Contrôles des Roms : MAUVAIS\n"
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr "Contrôles de Samples : Samples Inutile\n"
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr "Contrôles des Samples : OK\n"
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr "Contrôles des Samples : MAUVAIS\n"
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
@@ -1410,12 +1397,12 @@ msgstr ""
"Contrôles des Roms : Désactivé\n"
"Contrôles des Samples : Désactivé\n"
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
-msgstr "Aucunes Infos Disponible"
+msgstr "Aucune Info Disponible"
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr "Utilisation"
@@ -1423,7 +1410,7 @@ msgstr "Utilisation"
msgid " (default)"
msgstr " (défaut)"
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1433,59 +1420,59 @@ msgstr ""
"Le Logiciel Sélectionné est manquant, un ou plusieurs fichiers sont "
"nécessaires. Veuillez sélectionner un logiciel différent.\n"
"\n"
-"Presser n'importe quel touche (sauf ECHAP) pour continuer."
+"Appuyer sur n'importe quel touche (sauf ECHAP) pour continuer."
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr "%1$s %2$s ( %3$d / %4$d logiciels )"
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr "Driver: \"%1$s\" liste logiciel "
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
-msgstr ""
+msgstr "Région : %1$s -"
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
-msgstr ""
+msgstr "Editeur : %1$s -"
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
-msgstr ""
+msgstr "Année : %1$s -"
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
-msgstr ""
+msgstr "Listes de Logiciels : %1$s -"
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
-msgstr ""
+msgstr "Type de Périphérique : %1$s -"
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
-msgstr ""
+msgstr "%s Recherche : %s_"
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr "%1$-.100s"
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr "Sélection Logiciel :"
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr "Sélection du Bios :"
@@ -1497,8 +1484,8 @@ msgid ""
"If this is your first time using %2$s, please see the config.txt file in the "
"docs directory for information on configuring %2$s."
msgstr ""
-"Aucune Machine trouvé. Veuillez vérifier le chemin de la rom spécifiée dans "
-"le fichier %1$s.ini.\n"
+"Aucun jeu trouvé. Veuillez vérifier le chemin de la rom spécifiée dans le "
+"fichier %1$s.ini.\n"
"\n"
"Si c'est la première fois que vous utilisez %2$s, veuillez lire le fichier "
"config.txt dans le répertoire docs pour plus d'info sur la configuration "
@@ -1507,11 +1494,11 @@ msgstr ""
#: src/emu/ui/simpleselgame.cpp:287
#, c-format
msgid "Type name or select: %1$s_"
-msgstr "Taper le nom ou sélectionner : %1$s_"
+msgstr "Taper le nom ou choisir : %1$s_"
#: src/emu/ui/simpleselgame.cpp:289
msgid "Type name or select: (random)"
-msgstr "Taper le nom ou sélectionner : (au hasard)"
+msgstr "Taper le nom ou choisir : (au hasard)"
#: src/emu/ui/simpleselgame.cpp:328
#, c-format
@@ -1545,7 +1532,7 @@ msgstr "Son"
#: src/emu/ui/sndmenu.cpp:135
msgid "Sample Rate"
-msgstr "Echantillonage"
+msgstr "Vitesse d'Echantillonnage"
#: src/emu/ui/sndmenu.cpp:136
msgid "Use External Samples"
@@ -1553,7 +1540,7 @@ msgstr "Utilisez les fichiers sons (Samples) Externes"
#: src/emu/ui/swlist.cpp:70
msgid "[file manager]"
-msgstr ""
+msgstr "[Gestionnaire de Fichier]"
#: src/emu/ui/swlist.cpp:235
msgid "Switch Item Ordering"
@@ -1574,11 +1561,11 @@ msgstr "description"
#: src/emu/ui/swlist.cpp:436
msgid "[compatible lists]"
-msgstr ""
+msgstr "[Listes Compatible]"
#: src/emu/ui/tapectrl.cpp:84
msgid "stopped"
-msgstr ""
+msgstr "arrêté"
#: src/emu/ui/tapectrl.cpp:86
msgid "playing"
@@ -1619,7 +1606,8 @@ msgstr "Avancée Rapide"
#: src/emu/ui/ui.cpp:415
msgid "This driver requires images to be loaded in the following device(s): "
msgstr ""
-"Ce driver nécessite les images pour être chargé dans les périphériques : "
+"Ce driver nécessite les images pour être chargé dans les périphérique(s) "
+"suivant(s) : "
#: src/emu/ui/ui.cpp:1043
#, c-format
@@ -1636,7 +1624,7 @@ msgstr ""
"interdite par la loi sur les droits d'auteurs.\n"
"\n"
"SI VOUS N'ETES PAS LEGALEMENT HABILITE A LANCER \"%1$s\" SUR CETTE "
-"EMULATEUR, PRESSEZ ECHAP.\n"
+"EMULATEUR, PRESSEZ LA TOUCHE ECHAP.\n"
"\n"
"Autrement, taper OK ou bouger le joystick de gauche à droite pour continuer"
@@ -1645,23 +1633,23 @@ msgid ""
"One or more ROMs/CHDs for this machine are incorrect. The machine may not "
"run correctly.\n"
msgstr ""
-"Une ou plusieurs ROMS/CHD pour cette machine ne sont pas bonne. Cette "
-"machine peut ne pas se lancer correctement.\n"
+"Une ou plusieurs ROMS/CHD de ce jeu est (sont)incorrecte(s). Ce jeu pourrait "
+"ne pas se lancer correctement.\n"
#: src/emu/ui/ui.cpp:1094
msgid ""
"There are known problems with this machine\n"
"\n"
msgstr ""
-"Il y a des problèmes connus avec cette machine\n"
+"Il y a des problèmes connus avec ce jeu\n"
"\n"
#: src/emu/ui/ui.cpp:1098
msgid ""
"One or more ROMs/CHDs for this machine have not been correctly dumped.\n"
msgstr ""
-"Une ou plusieurs ROMs/CHDs pour cette machine n'a pas été correctement "
-"copié(s).\n"
+"Une ou plusieurs ROMs/CHDs de ce jeu n'a (n'ont) pas été(s) correctement "
+"copiée(s).\n"
#: src/emu/ui/ui.cpp:1102
#, c-format
@@ -1671,7 +1659,7 @@ msgstr "L'émulation du clavier peut ne pas être précise à 100%.\n"
#: src/emu/ui/ui.cpp:1104
#, c-format
msgid "The colors aren't 100% accurate.\n"
-msgstr "Les couleurs ne sont pas précises à 100%.\n"
+msgstr "Les couleurs ne sont pas parfaites à 100%.\n"
#: src/emu/ui/ui.cpp:1106
msgid "The colors are completely wrong.\n"
@@ -1689,7 +1677,7 @@ msgstr "L'émulation du son n'est pas précise à 100%.\n"
#: src/emu/ui/ui.cpp:1112
msgid "The machine lacks sound.\n"
-msgstr "La machine manque de son.\n"
+msgstr "Il n'y a aucun son pour ce jeu.\n"
#: src/emu/ui/ui.cpp:1115
msgid "Screen flipping in cocktail mode is not supported.\n"
@@ -1704,16 +1692,16 @@ msgid ""
"This machine was never completed. It may exhibit strange behavior or missing "
"elements that are not bugs in the emulation.\n"
msgstr ""
-"Cette machine n'a jamais été terminé. Il peut y avoir des comportements "
-"étranges ou des élèmentsmanquants qui ne sont pas des bugs d'émulation.\n"
+"Ce jeu n'a jamais été terminé. Il peut y avoir des comportements étranges ou "
+"des éléments manquants qui ne sont pas des bugs d'émulation.\n"
#: src/emu/ui/ui.cpp:1129
msgid ""
"This machine has no sound hardware, MAME will produce no sounds, this is "
"expected behaviour.\n"
msgstr ""
-"Cette machine ne possède pas de matériel son, MAME ne fournira aucun son, "
-"ceci est un commportement prévu.\n"
+"Ce jeu ne possède pas de son à l'origine, MAME ne produira aucun son, c'est "
+"un fonctionnement normal pour ce jeu.\n"
#: src/emu/ui/ui.cpp:1137
msgid "The machine has protection which isn't fully emulated.\n"
@@ -1726,9 +1714,9 @@ msgid ""
"complete. There is nothing you can do to fix this problem except wait for "
"the developers to improve the emulation.\n"
msgstr ""
-"CETTE MACHINE NE FONCTIONNE PAS. L'émulation pour cette machine n'est pas "
-"encore complète. Il n'y a rien que vous puissiez faire pour corriger ce "
-"problème sauf d'attendre que les développeurs améliorent l'émulationon.\n"
+"CE JEU NE FONCTIONNE PAS. L'émulation pour ce jeu n'est pas encore terminée. "
+"Il n'y a rien que vous puissiez faire pour corriger ce problème sauf "
+"d'attendre que les développeurs améliorent l'émulation.\n"
#: src/emu/ui/ui.cpp:1144
msgid ""
@@ -1737,16 +1725,16 @@ msgid ""
"physical interaction or consists of mechanical devices. It is not possible "
"to fully play this machine.\n"
msgstr ""
-"Certains éléments de cette machine ne peuvent pas être émulés car cela "
-"nécessite une interaction physique ou comporte des périphériques mécaniques. "
-"Il n'est pas possible de jouer complètement sur cette machine"
+"Certains éléments de ce jeu ne peuvent pas être émulés car cela nécessite "
+"une interaction physique ou comporte des périphériques mécaniques. Il n'est "
+"pas possible de jouer à 100% avec ce jeu.\n"
#: src/emu/ui/ui.cpp:1163
msgid ""
"\n"
"\n"
"There are working clones of this machine: "
-msgstr "Il y a des clones qui fonctionnent sur cette machine :"
+msgstr "Il y a des clones de ce jeu qui fonctionnent :"
#: src/emu/ui/ui.cpp:1177
msgid ""
@@ -1775,7 +1763,7 @@ msgstr ""
#: src/emu/ui/ui.cpp:1228 src/emu/ui/ui.cpp:1267
msgid "MHz"
-msgstr ""
+msgstr "MHz"
#: src/emu/ui/ui.cpp:1228 src/emu/ui/ui.cpp:1267
msgid "kHz"
@@ -1957,20 +1945,20 @@ msgstr "Scintillement - Vector"
#: src/emu/ui/ui.cpp:2083
msgid "Beam Width Minimum"
-msgstr "Largeur Minimum du rayon"
+msgstr "Largeur Minimum du Rayon"
#: src/emu/ui/ui.cpp:2085
msgid "Beam Width Maximum"
-msgstr "Largeur Maximum du rayon"
+msgstr "Largeur Maximum du Rayon"
#: src/emu/ui/ui.cpp:2087
msgid "Beam Intensity Weight"
-msgstr "Intensité du poid du rayon"
+msgstr "Intensité du Poids du Rayon"
#: src/emu/ui/ui.cpp:2099
#, c-format
msgid "Crosshair Scale %1$s"
-msgstr ""
+msgstr "Echelle du Viseur %1$s"
#: src/emu/ui/ui.cpp:2099 src/emu/ui/ui.cpp:2102
msgid "X"
@@ -1983,7 +1971,7 @@ msgstr "Y"
#: src/emu/ui/ui.cpp:2102
#, c-format
msgid "Crosshair Offset %1$s"
-msgstr ""
+msgstr "Etalonnage du Viseur %1$s"
#: src/emu/ui/ui.cpp:2121
#, c-format
@@ -2022,7 +2010,7 @@ msgstr "%1$1.2f"
#: src/emu/ui/ui.cpp:2526
#, c-format
msgid "Screen '%1$s'"
-msgstr ""
+msgstr "Ecran '%1$s'"
#: src/emu/ui/ui.cpp:2528
msgid "Screen"
@@ -2031,22 +2019,22 @@ msgstr "Ecran"
#: src/emu/ui/ui.cpp:2544
#, c-format
msgid "Crosshair Scale X %1$1.3f"
-msgstr ""
+msgstr "Echelle du Viseur X %1$1.3f"
#: src/emu/ui/ui.cpp:2544
#, c-format
msgid "Crosshair Scale Y %1$1.3f"
-msgstr ""
+msgstr "Echelle du Viseur Y %1$1.3f"
#: src/emu/ui/ui.cpp:2563
#, c-format
msgid "Crosshair Offset X %1$1.3f"
-msgstr ""
+msgstr "Etalonnage du Viseur X %1$1.3f"
#: src/emu/ui/ui.cpp:2563
#, c-format
msgid "Crosshair Offset Y %1$1.3f"
-msgstr ""
+msgstr "Etalonnage du Viseur Y %1$1.3f"
#: src/emu/ui/videoopt.cpp:55
#, c-format
@@ -2093,6 +2081,42 @@ msgstr " COULEURS"
msgid " PENS"
msgstr " PENS"
+#~ msgid "**Error loading %s.ini**"
+#~ msgstr "**Erreur de Chargement %s.ini**"
+
+#~ msgid "**Error loading ui.ini**"
+#~ msgstr "**Erreur de Chargement ui.ini**"
+
+#~ msgid "Double click or press "
+#~ msgstr "Double cliquer ou presser "
+
+#~ msgid " to change the color value"
+#~ msgstr " pour changer la valeur de la couleur"
+
+#~ msgid " to select"
+#~ msgstr " à choisir"
+
+#~ msgid "Current "
+#~ msgstr "En cours "
+
+#~ msgid " Folders"
+#~ msgstr " Dossiers"
+
+#~ msgid "Change)"
+#~ msgstr "Changer)"
+
+#~ msgid "Add"
+#~ msgstr "Ajouter"
+
+#~ msgid " Folder - Search: "
+#~ msgstr " Dossier - Rechercher : "
+
+#~ msgid "Remove "
+#~ msgstr "Enlever "
+
+#~ msgid " Folder"
+#~ msgstr " Dossier"
+
#~ msgid " Search: "
#~ msgstr " Rechercher :"
diff --git a/language/French_Belgium/strings.po b/language/French_Belgium/strings.po
index 53e6fb8a6c6..20816d91123 100644
--- a/language/French_Belgium/strings.po
+++ b/language/French_Belgium/strings.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
-"PO-Revision-Date: 2016-03-01 19:37+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
+"PO-Revision-Date: 2016-03-06 10:44+0100\n"
"Last-Translator: Mevi <mevi.mame@gmail.com>\n"
"Language-Team: MAME Language Team\n"
"Language: fr_BE\n"
@@ -31,7 +31,7 @@ msgstr "Entrer un code"
#: src/emu/ui/barcode.cpp:118
msgid "Barcode length invalid!"
-msgstr "Longueur du code-barres non valide!"
+msgstr "Longueur du code-barres non valide !"
#: src/emu/ui/cheatopt.cpp:77
#, c-format
@@ -52,11 +52,11 @@ msgstr "Paramètres du tir automatique"
#: src/emu/ui/cheatopt.cpp:139
msgid "Reset All"
-msgstr "Réinitialiser tout"
+msgstr "Tout réinitialiser"
#: src/emu/ui/cheatopt.cpp:142
msgid "Reload All"
-msgstr "Recharger tout"
+msgstr "Tout recharger"
#: src/emu/ui/cheatopt.cpp:258
msgid "Autofire Status"
@@ -90,11 +90,11 @@ msgstr "Inactif"
#: src/emu/ui/cheatopt.cpp:301
msgid "No buttons found on this machine!"
-msgstr "Aucun bouton trouvé sur cette machine!"
+msgstr "Aucun bouton trouvé sur cette machine !"
#: src/emu/ui/cheatopt.cpp:312 src/emu/ui/cheatopt.cpp:316
msgid "Autofire Delay"
-msgstr "Retard du tir automatique"
+msgstr "Attente du tir automatique"
#: src/emu/ui/ctrlmenu.cpp:20
msgid "Lightgun Device Assignment"
@@ -131,7 +131,7 @@ msgstr "Affecter au périphérique Souris"
#: src/emu/ui/ctrlmenu.cpp:106 src/emu/ui/ctrlmenu.cpp:126
#: src/emu/ui/optsmenu.cpp:268
msgid "Device Mapping"
-msgstr "Définir le périphérique"
+msgstr "Mappage des périphériques"
#: src/emu/ui/custmenu.cpp:156 src/emu/ui/custmenu.cpp:441
msgid "Main filter"
@@ -143,7 +143,7 @@ msgstr "Autre filtre"
#: src/emu/ui/custmenu.cpp:174 src/emu/ui/optsmenu.cpp:239
msgid "^!Manufacturer"
-msgstr "^!Fabricant"
+msgstr "^!Constructeur"
#: src/emu/ui/custmenu.cpp:183 src/emu/ui/custmenu.cpp:468
#: src/emu/ui/optsmenu.cpp:247
@@ -181,7 +181,7 @@ msgstr "^!Région"
#: src/emu/ui/custui.cpp:20
msgid "Show All"
-msgstr "Afficher tout"
+msgstr "Tout afficher"
#: src/emu/ui/custui.cpp:21
msgid "Hide Filters"
@@ -189,7 +189,7 @@ msgstr "Cacher les filtres"
#: src/emu/ui/custui.cpp:22
msgid "Hide Info/Image"
-msgstr "Cacher Info/Image"
+msgstr "Cacher Images/Infos"
#: src/emu/ui/custui.cpp:23
msgid "Hide Both"
@@ -209,7 +209,7 @@ msgstr "Langue"
#: src/emu/ui/custui.cpp:149
msgid "Show side panels"
-msgstr "Afficher les side panels"
+msgstr "Afficher les panneaux latéraux"
#: src/emu/ui/custui.cpp:164 src/emu/ui/custui.cpp:184
msgid "Custom UI Settings"
@@ -237,7 +237,7 @@ msgstr "Lignes"
#: src/emu/ui/custui.cpp:387
msgid "Infos text size"
-msgstr "Taille du texte Infos"
+msgstr "Taille du texte des infos"
#: src/emu/ui/custui.cpp:404
msgid "UI Fonts Settings"
@@ -320,17 +320,15 @@ msgstr "Restaurer les couleurs d'origine"
msgid "UI Colors Settings"
msgstr "Paramètres des couleurs de l'interface"
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr "Double-cliquer ou appuyer sur "
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
-msgstr " pour changer la valeur de la couleur"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
+msgstr ""
+"Double-cliquer ou appuyer sur %1$s pour changer la valeur de la couleur"
#: src/emu/ui/custui.cpp:617
msgid "Menu Preview"
-msgstr "Prévisualiser le menu"
+msgstr "Aperçu du menu"
#: src/emu/ui/custui.cpp:625
msgid "Normal"
@@ -377,7 +375,7 @@ msgstr " - Paramètres ARVB"
#: src/emu/ui/custui.cpp:930
msgid "Color preview ="
-msgstr "Couleur prévisualisée ="
+msgstr "Aperçu de la couleur ="
#: src/emu/ui/custui.cpp:1026
msgid "White"
@@ -415,36 +413,36 @@ msgstr "Historique du logiciel"
msgid "Software Usage"
msgstr "Utilisation du logiciel"
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
-msgstr "Révision :"
+msgstr "Révision : "
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
-msgstr ""
+msgstr "Aperçu history.dat"
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
-msgstr ""
+msgstr "Aperçu mameinfo.dat"
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
-msgstr ""
+msgstr "Aperçu messinfo.dat"
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
-msgstr ""
+msgstr "Aperçu sysinfo.dat"
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
-msgstr ""
+msgstr "Aperçu story.dat (MAMESCORE)"
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
-msgstr ""
+msgstr "Aperçu command.dat"
#: src/emu/ui/dirmenu.cpp:31
msgid "ROMs"
@@ -452,7 +450,7 @@ msgstr ""
#: src/emu/ui/dirmenu.cpp:32
msgid "UI"
-msgstr ""
+msgstr "UI (Interface utilisateur)"
#: src/emu/ui/dirmenu.cpp:34
msgid "Samples"
@@ -460,47 +458,47 @@ msgstr ""
#: src/emu/ui/dirmenu.cpp:35
msgid "DATs"
-msgstr ""
+msgstr "Fichiers DAT"
#: src/emu/ui/dirmenu.cpp:36
msgid "INIs"
-msgstr ""
+msgstr "Fichiers INI"
#: src/emu/ui/dirmenu.cpp:37
msgid "Extra INIs"
-msgstr ""
+msgstr "Fichiers INI supplémentaires"
#: src/emu/ui/dirmenu.cpp:38
msgid "Icons"
-msgstr ""
+msgstr "Icônes"
#: src/emu/ui/dirmenu.cpp:39 src/emu/ui/miscmenu.cpp:560
msgid "Cheats"
-msgstr ""
+msgstr "Cheats (Codes de triche)"
#: src/emu/ui/dirmenu.cpp:40 src/emu/ui/menu.cpp:43
msgid "Snapshots"
-msgstr ""
+msgstr "Snapshots (Captures d'écran)"
#: src/emu/ui/dirmenu.cpp:41 src/emu/ui/menu.cpp:44
msgid "Cabinets"
-msgstr ""
+msgstr "Cabinets (Bornes)"
#: src/emu/ui/dirmenu.cpp:42 src/emu/ui/menu.cpp:47
msgid "Flyers"
-msgstr ""
+msgstr "Flyers (Prospectus)"
#: src/emu/ui/dirmenu.cpp:43 src/emu/ui/menu.cpp:48
msgid "Titles"
-msgstr ""
+msgstr "Titles (Écrans-titre)"
#: src/emu/ui/dirmenu.cpp:44 src/emu/ui/menu.cpp:49
msgid "Ends"
-msgstr ""
+msgstr "Ends (Fins de jeu)"
#: src/emu/ui/dirmenu.cpp:45 src/emu/ui/menu.cpp:46
msgid "PCBs"
-msgstr ""
+msgstr "PCBs (Circuits imprimés)"
#: src/emu/ui/dirmenu.cpp:46 src/emu/ui/menu.cpp:58 src/emu/ui/videoopt.cpp:223
msgid "Marquees"
@@ -508,27 +506,27 @@ msgstr ""
#: src/emu/ui/dirmenu.cpp:47
msgid "Controls Panels"
-msgstr "Control Panels"
+msgstr "Control Panels (Panneaux de contrôle)"
#: src/emu/ui/dirmenu.cpp:48
msgid "Crosshairs"
-msgstr ""
+msgstr "Crosshairs (Viseurs)"
#: src/emu/ui/dirmenu.cpp:49
msgid "Artworks"
-msgstr ""
+msgstr "Artworks (Illustrations)"
#: src/emu/ui/dirmenu.cpp:50 src/emu/ui/menu.cpp:51
msgid "Bosses"
-msgstr ""
+msgstr "Bosses (Ennemis et adversaires)"
#: src/emu/ui/dirmenu.cpp:51
msgid "Artworks Preview"
-msgstr ""
+msgstr "Artworks Preview (Aperçu)"
#: src/emu/ui/dirmenu.cpp:52 src/emu/ui/menu.cpp:57
msgid "Select"
-msgstr ""
+msgstr "Select (Écran de sélection)"
#: src/emu/ui/dirmenu.cpp:53
msgid "GameOver"
@@ -536,7 +534,7 @@ msgstr ""
#: src/emu/ui/dirmenu.cpp:54 src/emu/ui/menu.cpp:55
msgid "HowTo"
-msgstr ""
+msgstr "HowTo (Comment faire)"
#: src/emu/ui/dirmenu.cpp:55 src/emu/ui/menu.cpp:52
msgid "Logos"
@@ -555,16 +553,13 @@ msgid "Folders Setup"
msgstr "Configuration des dossiers"
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr "Actuel "
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
-msgstr " dossiers"
+#, c-format
+msgid "Current %1$s Folders"
+msgstr "Dossier(s) actuel(s) pour %1$s"
#: src/emu/ui/dirmenu.cpp:195
msgid "Change Folder"
-msgstr "Changer un dossier"
+msgstr "Changer le dossier"
#: src/emu/ui/dirmenu.cpp:195
msgid "Add Folder"
@@ -572,31 +567,26 @@ msgstr "Ajouter un dossier"
#: src/emu/ui/dirmenu.cpp:198
msgid "Remove Folder"
-msgstr "Supprimer un dossier"
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr "Changer)"
+msgstr "Supprimer le dossier"
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
-msgstr "Ajouter"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
+msgstr "Modifier le dossier %1$s - Recherche: %2$s_"
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
-msgstr " Dossier - Recherche :"
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
+msgstr "Ajouter un dossier %1$s - Recherche: %2$s_"
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr "Appuyer sur TAB pour définir"
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr "Supprimer "
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
-msgstr " Dossier"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
+msgstr "Supprimer le dossier %1$s"
#: src/emu/ui/dsplmenu.cpp:38
msgid "Video Mode"
@@ -620,15 +610,15 @@ msgstr ""
#: src/emu/ui/dsplmenu.cpp:45
msgid "Bilinear Filtering"
-msgstr ""
+msgstr "Filtrage bilinéaire"
#: src/emu/ui/dsplmenu.cpp:46
msgid "Bitmap Prescaling"
-msgstr ""
+msgstr "Prescaling de l'image"
#: src/emu/ui/dsplmenu.cpp:47
msgid "Multi-Threaded Rendering"
-msgstr ""
+msgstr "Rendu multithread"
#: src/emu/ui/dsplmenu.cpp:48
msgid "Window Mode"
@@ -636,7 +626,7 @@ msgstr "Mode fenêtré"
#: src/emu/ui/dsplmenu.cpp:49
msgid "Enforce Aspect Ratio"
-msgstr "Forcer le format d'affichage"
+msgstr "Respecter le ratio d'affichage"
#: src/emu/ui/dsplmenu.cpp:50
msgid "Start Out Maximized"
@@ -644,11 +634,11 @@ msgstr "Démarrer en mode plein écran"
#: src/emu/ui/dsplmenu.cpp:51
msgid "Synchronized Refresh"
-msgstr ""
+msgstr "Synchroniser le rafraîchissement de l'écran"
#: src/emu/ui/dsplmenu.cpp:52
msgid "Wait Vertical Sync"
-msgstr ""
+msgstr "Attendre V-Sync"
#: src/emu/ui/dsplmenu.cpp:204 src/emu/ui/dsplmenu.cpp:224
#: src/emu/ui/optsmenu.cpp:265
@@ -657,21 +647,21 @@ msgstr "Options d'affichage"
#: src/emu/ui/filesel.cpp:159
msgid "File Already Exists - Override?"
-msgstr "Ce fichier existe déjà - Écraser?"
+msgstr "Ce fichier existe déjà - Écraser ?"
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr "Non"
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr "Oui"
@@ -761,7 +751,7 @@ msgstr "[échoué]"
#: src/emu/ui/inputmap.cpp:52
msgid "User Interface"
-msgstr "Interface utilisateur"
+msgstr "Interface"
#: src/emu/ui/inputmap.cpp:59
msgid "Other Controls"
@@ -818,7 +808,7 @@ msgstr "Sélection du BIOS"
#: src/emu/ui/mainmenu.cpp:99
msgid "Slot Devices"
-msgstr ""
+msgstr "Slot Devices (Périphériques d'emplacement)"
#: src/emu/ui/mainmenu.cpp:106
msgid "Barcode Reader"
@@ -866,11 +856,11 @@ msgstr "Sélectionner une nouvelle machine"
#: src/emu/ui/menu.cpp:45
msgid "Control Panels"
-msgstr ""
+msgstr "Control Panels (Commandes)"
#: src/emu/ui/menu.cpp:50
msgid "Artwork Preview"
-msgstr ""
+msgstr "Aperçu de l'artwork"
#: src/emu/ui/menu.cpp:54
msgid "Game Over"
@@ -890,11 +880,11 @@ msgstr "Afficher vue des fichiers DATs"
#: src/emu/ui/menu.cpp:252
msgid "Return to Machine"
-msgstr ""
+msgstr "Retour à la machine actuelle"
#: src/emu/ui/menu.cpp:256 src/emu/ui/menu.cpp:258
msgid "Exit"
-msgstr "Quitter MAME"
+msgstr "Quitter"
#: src/emu/ui/menu.cpp:263 src/emu/ui/menu.cpp:265
msgid "Return to Previous Menu"
@@ -904,11 +894,11 @@ msgstr "Retour au menu précédent"
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -953,12 +943,12 @@ msgstr ""
#: src/emu/ui/miscmenu.cpp:256
msgid "Coin %1$c: NA%3$s\n"
-msgstr "Monnaie %1$c : ND%3$s\n"
+msgstr "Monnayeur %1$c : ND%3$s\n"
#: src/emu/ui/miscmenu.cpp:256
#, c-format
msgid "Coin %1$c: %2$d%3$s\n"
-msgstr "Monnaie %1$c : %2$d%3$s\n"
+msgstr "Monnayeur %1$c : %2$d%3$s\n"
#: src/emu/ui/miscmenu.cpp:259
msgid " (locked)"
@@ -966,7 +956,7 @@ msgstr " (verrouillé)"
#: src/emu/ui/miscmenu.cpp:518
msgid "Visible Delay"
-msgstr "Retard visible"
+msgstr "Attente visible"
#: src/emu/ui/miscmenu.cpp:557
msgid "Re-select last machine played"
@@ -998,7 +988,7 @@ msgstr "Forcer l'aspect 4:3 pour la capture d'écran"
#: src/emu/ui/miscmenu.cpp:565
msgid "Use image as background"
-msgstr "Utiliser une image de fond"
+msgstr "Utiliser l'image comme fond d'écran"
#: src/emu/ui/miscmenu.cpp:566
msgid "Skip bios selection menu"
@@ -1008,38 +998,38 @@ msgstr "Passer le menu de sélection du BIOS"
msgid "Skip software parts selection menu"
msgstr "Passer le menu de sélection des logiciels"
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr "Autres options"
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr "%s.xml sauvegardé dans le dossier ui."
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr "Nom : Description :\n"
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr "%s.txt sauvegardé dans le dossier ui."
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr "Exporter au format XML (comme -listxml)"
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr "Exporter au format TXT (comme -listfull)"
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
-msgstr "Fictif"
+msgstr "Fictif - Non chargé"
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr "Sauvegarder la configuration de la machine"
@@ -1085,17 +1075,12 @@ msgid "Settings"
msgstr "Paramètres"
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
+msgid "**Error saving ui.ini**"
msgstr "**Erreur de sauvegarde du fichier ui.ini**"
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
-msgstr "**Erreur de chargement du fichier %s.ini**"
-
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr "**Erreur de sauvegarde du fichier %s.ini**"
#: src/emu/ui/optsmenu.cpp:376
@@ -1113,14 +1098,15 @@ msgid "Selection List - Search: "
msgstr "Liste de sélection - Recherche : "
#: src/emu/ui/selector.cpp:181
-msgid " to select"
-msgstr " pour sélectionner"
+#, c-format
+msgid "Double click or press %1$s to select"
+msgstr "Double-cliquer ou appuyer sur %1$s pour sélectionner"
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr "Informations générales"
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
@@ -1129,8 +1115,8 @@ msgstr ""
"%s\n"
" ajouté à la liste des favoris."
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
@@ -1139,7 +1125,7 @@ msgstr ""
"%s\n"
" supprimé de la liste des favoris."
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1147,264 +1133,264 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
"Il manque un ou plusieurs fichiers de ROMs ou d'images CHD pour utiliser "
-"cette machine. Veuillez sélectionner une machine différente.\n"
+"cette machine. Veuillez en sélectionner une autre.\n"
"\n"
"Appuyez sur une touche (excepté ESC) pour continuer."
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr "Configurer les options"
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr "Configurer la machine"
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr "%1$s Recherche : %2$s_"
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr "Romset : %1$-.100s"
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr "Ce driver est un clone de : %1$-.100s"
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr "Ce driver est le parent"
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr "En résumé : NE FONCTIONNE PAS"
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr "En résumé : Protection non émulée"
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr "En résumé : Fonctionne correctement"
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr "Graphismes : Imparfaits, "
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr "Graphismes : OK, "
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr "Son : Non implémenté"
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr "Son : Imparfait"
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr "Son : OK"
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr "Système : %1$-.100s"
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr "Ce logiciel est un clone de : %1$-.100s"
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr "Ce logiciel est le parent"
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr "Supporté : Non"
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr "Supporté : Partiellement"
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr "Supporté : Oui"
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr "romset : %1$-.100s"
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr "Romset : %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr "Année : %1$s\n"
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
-msgstr "Fabricant : %1$-.100s\n"
+msgstr "Constructeur : %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr "Ce driver est un clone de : %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr "Ce driver est le parent\n"
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr "En résumé : NE FONCTIONNE PAS\n"
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr "En résumé : Protection non émulée\n"
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr "En résumé : Fonctionne correctement\n"
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr "Graphismes : Couleurs imparfaites\n"
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr "Graphismes : Imparfaits\n"
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr "Graphismes : OK\n"
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr "Son : Non implémenté\n"
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr "Son : Imparfait\n"
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr "Son : OK\n"
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr "Ce driver est embryonnaire : %1$s\n"
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
-msgstr "Éléments mécaniques dans ce jeu : %1$s\n"
+msgstr "Jeu comportant des éléments mécaniques : %1$s\n"
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr "Artwork nécessaire : %1$s\n"
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr "Artwork cliquable nécessaire : %1$s\n"
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
-msgstr "Support du coktail mode : %1$s\n"
+msgstr "Support du mode coktail : %1$s\n"
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr "Ce driver est un BIOS : %1$s\n"
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr "Supporte les sauvegardes : %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
-msgstr ""
+msgid "Screen Orientation: %1$s\n"
+msgstr "Orientation de l'écran: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr "Verticale"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr "Horizontale"
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr "CHD nécessaire : %1$s\n"
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr "Vérification des ROMs : OK\n"
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr "Vérification des ROMs : PAS OK\n"
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr "Vérification des samples : aucun n'est nécessaire\n"
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr "Vérification des samples : OK\n"
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr "Vérification des samples : PAS OK\n"
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
@@ -1412,12 +1398,12 @@ msgstr ""
"Vérification des ROMs: Désactivée\n"
"Vérification des samples : Désactivée\n"
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr "Aucune information disponible"
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr "Utilisation"
@@ -1425,7 +1411,7 @@ msgstr "Utilisation"
msgid " (default)"
msgstr " (par défaut)"
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1433,61 +1419,61 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
"Il manque un ou plusieurs fichiers nécessaires à l'utilisation de ce "
-"logiciel. Veuillez sélectionner un logiciel différent.\n"
+"logiciel. Veuillez en sélectionner un autre.\n"
"\n"
"Appuyez sur une touche (excepté ESC) pour continuer."
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr "%1$s %2$s ( %3$d / %4$d logiciels )"
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
-msgstr "Driver : \"%1$s\" liste de logiciels "
+msgstr "Liste de logiciels pour le driver : \"%1$s\" "
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr "Région : %1$s -"
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr "Éditeur : %1$s -"
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr "Année : %1$s -"
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr "Liste de logiciels : %1$s -"
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr "Type de périphérique : %1$s -"
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr "%s Recherche : %s_"
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr "Sélection du logiciel :"
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr "Sélection du BIOS :"
@@ -1547,7 +1533,7 @@ msgstr "Son"
#: src/emu/ui/sndmenu.cpp:135
msgid "Sample Rate"
-msgstr "Niveau d'échantillonnage"
+msgstr "Fréquence d'échantillonnage"
#: src/emu/ui/sndmenu.cpp:136
msgid "Use External Samples"
@@ -1564,7 +1550,8 @@ msgstr "Permuter l'ordre des éléments"
#: src/emu/ui/swlist.cpp:268
#, c-format
msgid "Switched Order: entries now ordered by %s"
-msgstr "Commande de tri effectuée : les entrées sont maintenant classés par %s"
+msgstr ""
+"Commande de tri effectuée : les entrées sont maintenant classées par %s"
#: src/emu/ui/swlist.cpp:268
msgid "shortname"
@@ -1584,7 +1571,7 @@ msgstr "arrêté"
#: src/emu/ui/tapectrl.cpp:86
msgid "playing"
-msgstr "En cours de lecture"
+msgstr "en cours de lecture"
#: src/emu/ui/tapectrl.cpp:86
msgid "(playing)"
@@ -1592,7 +1579,7 @@ msgstr "(en cours de lecture)"
#: src/emu/ui/tapectrl.cpp:87
msgid "recording"
-msgstr "En cours d'enregistrement"
+msgstr "en cours d'enregistrement"
#: src/emu/ui/tapectrl.cpp:87
msgid "(recording)"
@@ -1621,7 +1608,7 @@ msgstr ""
#: src/emu/ui/ui.cpp:415
msgid "This driver requires images to be loaded in the following device(s): "
msgstr ""
-"Ce driver nécessite le chargement d'images dans le(s) périphérique "
+"Ce driver nécessite le chargement d'images dans le(s) périphérique(s) "
"suivant(s) : "
#: src/emu/ui/ui.cpp:1043
@@ -1648,8 +1635,8 @@ msgid ""
"One or more ROMs/CHDs for this machine are incorrect. The machine may not "
"run correctly.\n"
msgstr ""
-"Un ou plusieurs fichiers ROMs/CHDs nécessaires à l'utilisation de cette "
-"machine sont incorrects. Il est possible qu'elle ne fonctionne pas "
+"Un ou plusieurs fichiers ROMs ou d'images CHD nécessaires à l'utilisation de "
+"cette machine sont incorrects. Il est possible qu'elle ne fonctionne pas "
"correctement.\n"
#: src/emu/ui/ui.cpp:1094
@@ -1657,7 +1644,7 @@ msgid ""
"There are known problems with this machine\n"
"\n"
msgstr ""
-"On rencontre les problèmes suivants avec cette machine\n"
+"On rencontre les problèmes suivants avec cette machine :\n"
"\n"
#: src/emu/ui/ui.cpp:1098
@@ -1745,7 +1732,7 @@ msgid ""
msgstr ""
"\n"
"Certains composants de cette machine ne peuvent pas être émulés car ils "
-"nécessitent une interaction physique ou se composent d'éléments mécaniques. "
+"nécessitent une interaction physique ou comportent des éléments mécaniques. "
"Il n'est donc pas possible d'y jouer complètement.\n"
#: src/emu/ui/ui.cpp:1163
@@ -1781,7 +1768,7 @@ msgstr ""
"%2$s %3$s\n"
"Driver : %4$s\n"
"\n"
-"CPU :\n"
+"Processeur(s) :\n"
#: src/emu/ui/ui.cpp:1228 src/emu/ui/ui.cpp:1267
msgid "MHz"
@@ -1813,7 +1800,7 @@ msgstr "Aucun\n"
#: src/emu/ui/ui.cpp:1282
msgid "Vector"
-msgstr ""
+msgstr "Graphismes vectoriels"
#: src/emu/ui/ui.cpp:1293
#, c-format
@@ -1854,11 +1841,11 @@ msgstr "Le tir automatique ne peut pas être activé"
#: src/emu/ui/ui.cpp:1775
msgid "Select position to save to"
-msgstr "Sélectionner la position de la sauvegarde"
+msgstr "Sauvegarder à la position"
#: src/emu/ui/ui.cpp:1777
msgid "Select position to load from"
-msgstr "Sélectionner la position du chargement"
+msgstr "Charger depuis la position"
#: src/emu/ui/ui.cpp:1801
msgid "Save cancelled"
@@ -1871,12 +1858,12 @@ msgstr "Chargement annulé"
#: src/emu/ui/ui.cpp:1846
#, c-format
msgid "Save to position %s"
-msgstr "Sauvegarder à la position %s"
+msgstr "Sauvegarde à la position %s"
#: src/emu/ui/ui.cpp:1851
#, c-format
msgid "Load from position %s"
-msgstr "Charger depuis la position %s"
+msgstr "Chargement depuis la position %s"
#: src/emu/ui/ui.cpp:1891
#, c-format
@@ -1886,24 +1873,24 @@ msgid ""
"Press ''%1$s'' to quit,\n"
"Press ''%2$s'' to return to emulation."
msgstr ""
-"Êtes-vous certain de vouloir quitter?\n"
+"Êtes-vous certain de vouloir quitter ?\n"
"\n"
"Appuyez sur ''%1$s'' pour quitter,\n"
"Appuyez sur ''%2$s'' pour retourner à l'émulation."
#: src/emu/ui/ui.cpp:1967
msgid "Master Volume"
-msgstr ""
+msgstr "Volume principal"
#: src/emu/ui/ui.cpp:1977
#, c-format
msgid "%1$s Volume"
-msgstr ""
+msgstr "Volume %1$s"
#: src/emu/ui/ui.cpp:1999
#, c-format
msgid "Overclock CPU %1$s"
-msgstr ""
+msgstr "Overclock du processeur %1$s"
#: src/emu/ui/ui.cpp:2019
#, c-format
@@ -1948,43 +1935,43 @@ msgstr "%1$s - Position Verticale"
#: src/emu/ui/ui.cpp:2063
#, c-format
msgid "Laserdisc '%1$s' Horiz Stretch"
-msgstr "Laserdisc '%1$s' Stretch Horizontal"
+msgstr "'%1$s' Laserdisc - Stretch Horizontal"
#: src/emu/ui/ui.cpp:2066
#, c-format
msgid "Laserdisc '%1$s' Horiz Position"
-msgstr "Laserdisc '%1$s' Position Horizontal"
+msgstr "'%1$s' Laserdisc - Position Horizontale"
#: src/emu/ui/ui.cpp:2069
#, c-format
msgid "Laserdisc '%1$s' Vert Stretch"
-msgstr "Laserdisc '%1$s' Stretch Vertical"
+msgstr "'%1$s' Laserdisc - Stretch Vertical"
#: src/emu/ui/ui.cpp:2072
#, c-format
msgid "Laserdisc '%1$s' Vert Position"
-msgstr "Laserdisc '%1$s' Position Verticale"
+msgstr "'%1$s' Laserdisc - Position Verticale"
#: src/emu/ui/ui.cpp:2081
msgid "Vector Flicker"
-msgstr ""
+msgstr "Scintillement de l'affichage vectoriel"
#: src/emu/ui/ui.cpp:2083
msgid "Beam Width Minimum"
-msgstr ""
+msgstr "Largeur de rayon minimum"
#: src/emu/ui/ui.cpp:2085
msgid "Beam Width Maximum"
-msgstr ""
+msgstr "Largeur de rayon maximum"
#: src/emu/ui/ui.cpp:2087
msgid "Beam Intensity Weight"
-msgstr ""
+msgstr "Intensité du rayon"
#: src/emu/ui/ui.cpp:2099
#, c-format
msgid "Crosshair Scale %1$s"
-msgstr ""
+msgstr "Viseur - Échelle %1$s"
#: src/emu/ui/ui.cpp:2099 src/emu/ui/ui.cpp:2102
msgid "X"
@@ -1997,7 +1984,7 @@ msgstr ""
#: src/emu/ui/ui.cpp:2102
#, c-format
msgid "Crosshair Offset %1$s"
-msgstr ""
+msgstr "Viseur - Offset %1$s"
#: src/emu/ui/ui.cpp:2121
#, c-format
@@ -2045,22 +2032,22 @@ msgstr "Écran"
#: src/emu/ui/ui.cpp:2544
#, c-format
msgid "Crosshair Scale X %1$1.3f"
-msgstr ""
+msgstr "Viseur - Échelle X %1$1.3f"
#: src/emu/ui/ui.cpp:2544
#, c-format
msgid "Crosshair Scale Y %1$1.3f"
-msgstr ""
+msgstr "Viseur - Échelle Y %1$1.3f"
#: src/emu/ui/ui.cpp:2563
#, c-format
msgid "Crosshair Offset X %1$1.3f"
-msgstr ""
+msgstr "Viseur - Offset X %1$1.3f"
#: src/emu/ui/ui.cpp:2563
#, c-format
msgid "Crosshair Offset Y %1$1.3f"
-msgstr ""
+msgstr "Viseur - Offset Y %1$1.3f"
#: src/emu/ui/videoopt.cpp:55
#, c-format
@@ -2073,19 +2060,19 @@ msgstr "Rotation"
#: src/emu/ui/videoopt.cpp:207
msgid "Backdrops"
-msgstr ""
+msgstr "Backdrops (Fonds)"
#: src/emu/ui/videoopt.cpp:211
msgid "Overlays"
-msgstr ""
+msgstr "Overlays (Calques)"
#: src/emu/ui/videoopt.cpp:215
msgid "Bezels"
-msgstr ""
+msgstr "Bezels (Cadres)"
#: src/emu/ui/videoopt.cpp:219
msgid "CPanels"
-msgstr ""
+msgstr "CPanels (Commandes)"
#: src/emu/ui/videoopt.cpp:227
msgid "View"
@@ -2093,7 +2080,7 @@ msgstr "Vue"
#: src/emu/ui/videoopt.cpp:227
msgid "Cropped"
-msgstr "Rétrécie"
+msgstr "Tronquée"
#: src/emu/ui/videoopt.cpp:227
msgid "Full"
@@ -2107,5 +2094,8 @@ msgstr " COULEURS"
msgid " PENS"
msgstr " MARQUEURS"
-#~ msgid "Screen Orientation: %1$s\n"
-#~ msgstr "Orientation de l'écran : %1$s\n"
+#~ msgid "**Error loading %s.ini**"
+#~ msgstr "**Erreur de chargement du fichier %s.ini**"
+
+#~ msgid "**Error loading ui.ini**"
+#~ msgstr "**Erreur de chargement du fichier ui.ini**"
diff --git a/language/French_Canada/strings.po b/language/French_Canada/strings.po
index 1ca3fea8622..7e305b41d3b 100644
--- a/language/French_Canada/strings.po
+++ b/language/French_Canada/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -318,12 +318,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -413,34 +410,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -553,11 +550,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -572,28 +566,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -657,19 +646,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -900,11 +889,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -998,38 +987,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1075,17 +1064,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1100,29 +1084,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1130,271 +1115,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1402,7 +1387,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1410,57 +1395,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Georgian/strings.po b/language/Georgian/strings.po
index 7cdae3a3afb..6a81480e1a2 100644
--- a/language/Georgian/strings.po
+++ b/language/Georgian/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -316,12 +316,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -411,34 +408,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -551,11 +548,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -570,28 +564,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -655,19 +644,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -898,11 +887,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -996,38 +985,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1073,17 +1062,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1098,29 +1082,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1128,271 +1113,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1400,7 +1385,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1408,57 +1393,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/German/strings.po b/language/German/strings.po
index af22b814139..c72cb8bc575 100644
--- a/language/German/strings.po
+++ b/language/German/strings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
-"PO-Revision-Date: 2016-02-27 14:59+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
+"PO-Revision-Date: 2016-03-09 15:19+0100\n"
"Last-Translator: Lothar Serra Mari <scummvm@rootfather.de>\n"
"Language-Team: MAME Language Team\n"
"Language: de\n"
@@ -50,7 +50,7 @@ msgstr "Alle Cheats neu geladen"
#: src/emu/ui/cheatopt.cpp:121
msgid "Autofire Settings"
-msgstr "Einstellungen Dauerfeuer"
+msgstr "Dauerfeuer-Einstellungen"
#: src/emu/ui/cheatopt.cpp:139
msgid "Reset All"
@@ -62,7 +62,7 @@ msgstr "Alle neu laden"
#: src/emu/ui/cheatopt.cpp:258
msgid "Autofire Status"
-msgstr "Status Dauerfeuer"
+msgstr "Dauerfeuer-Status"
#: src/emu/ui/cheatopt.cpp:258 src/emu/ui/ui.cpp:1742
#: src/emu/ui/videoopt.cpp:207 src/emu/ui/videoopt.cpp:211
@@ -100,7 +100,7 @@ msgstr "Verzögerung für Dauerfeuer"
#: src/emu/ui/ctrlmenu.cpp:20
msgid "Lightgun Device Assignment"
-msgstr "Lichtpistolen-Zuordnung"
+msgstr "Lightgun-Zuordnung"
#: src/emu/ui/ctrlmenu.cpp:21
msgid "Trackball Device Assignment"
@@ -239,16 +239,15 @@ msgstr "Linien"
#: src/emu/ui/custui.cpp:387
msgid "Infos text size"
-msgstr "Textgröße Informationen"
+msgstr "Textgröße für Informationen"
#: src/emu/ui/custui.cpp:404
msgid "UI Fonts Settings"
-msgstr "Einstellungen Schriftart für Benutzeroberfläche"
+msgstr "Schriftart-Einstellungen für Benutzeroberfläche"
#: src/emu/ui/custui.cpp:431
msgid "Sample text - Lorem ipsum dolor sit amet, consectetur adipiscing elit."
-msgstr ""
-"Beispieltext - Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+msgstr "Beispieltext - Lorem ipsum dolor sit amet, consectetur adipiscing elit."
#: src/emu/ui/custui.cpp:529
msgid "Normal text"
@@ -322,13 +321,10 @@ msgstr "Auf Originalfarben zurücksetzen"
msgid "UI Colors Settings"
msgstr "Farbeinstellungen für Benutzeroberfläche"
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr "Doppelklicken Sie oder drücken Sie "
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
-msgstr " um den Farbwert zu ändern"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
+msgstr "Doppelklicken oder drücken Sie %1$s, um den Farbwert zu ändern"
#: src/emu/ui/custui.cpp:617
msgid "Menu Preview"
@@ -417,34 +413,34 @@ msgstr "Geschichte der Software"
msgid "Software Usage"
msgstr "Verwendung der Software"
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr "Version: "
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr "Geschichte"
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr "Mameinfo"
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr "Messinfo"
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr "Sysinfo"
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr "Mamespielstand"
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr "Befehl"
@@ -557,12 +553,9 @@ msgid "Folders Setup"
msgstr "Ordnereinstellungen"
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr "Aktuelle "
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
-msgstr " Ordner"
+#, c-format
+msgid "Current %1$s Folders"
+msgstr "Aktuelle %1$s-Ordner"
#: src/emu/ui/dirmenu.cpp:195
msgid "Change Folder"
@@ -576,29 +569,24 @@ msgstr "Ordner hinzufügen"
msgid "Remove Folder"
msgstr "Ordner entfernen"
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr "Ändern)"
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
-msgstr "Hinzufügen"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
+msgstr "%1$s-Ordner ändern - Suche: %2$s_"
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
-msgstr " Ordner - Suche: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
+msgstr "%1$s-Ordner hinzufügen - Suche: %2$s_"
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr "Zum Setzen drücken Sie TAB"
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr "Entferne "
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
-msgstr " Ordner"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
+msgstr "%1$s-Ordner entfernen"
#: src/emu/ui/dsplmenu.cpp:38
msgid "Video Mode"
@@ -606,7 +594,7 @@ msgstr "Videomodus"
#: src/emu/ui/dsplmenu.cpp:40
msgid "Hardware Stretch"
-msgstr "Hardware Streckung"
+msgstr "Hardware-Streckung"
#: src/emu/ui/dsplmenu.cpp:41
msgid "Triple Buffering"
@@ -626,11 +614,11 @@ msgstr "Bilineare Filterung"
#: src/emu/ui/dsplmenu.cpp:46
msgid "Bitmap Prescaling"
-msgstr "Bitmap Vorskalierung"
+msgstr "Bitmap-Vorskalierung"
#: src/emu/ui/dsplmenu.cpp:47
msgid "Multi-Threaded Rendering"
-msgstr "Multi-Thread Rendering"
+msgstr "Multi-Thread-Rendering"
#: src/emu/ui/dsplmenu.cpp:48
msgid "Window Mode"
@@ -661,29 +649,29 @@ msgstr "Anzeigeeinstellungen"
msgid "File Already Exists - Override?"
msgstr "Datei existiert bereits - Überschreiben?"
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr "Nein"
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr "Ja"
#: src/emu/ui/filesel.cpp:271
msgid "New Image Name:"
-msgstr ""
+msgstr "Neuer Image-Name:"
#: src/emu/ui/filesel.cpp:277
msgid "Image Format:"
-msgstr "Image Format"
+msgstr "Image-Format"
#: src/emu/ui/filesel.cpp:283
msgid "Create"
@@ -707,7 +695,7 @@ msgstr "[Softwareliste]"
#: src/emu/ui/filesel.cpp:802
msgid "Select image format"
-msgstr "Image Format auswählen"
+msgstr "Image-Format auswählen"
#: src/emu/ui/filesel.cpp:862
msgid "Select access mode"
@@ -734,12 +722,8 @@ msgid "Cannot save over directory"
msgstr "Kann Verzeichnis nicht überschreiben"
#: src/emu/ui/imgcntrl.cpp:149
-msgid ""
-"The software selected is missing one or more required ROM or CHD images. "
-"Please select a different one."
-msgstr ""
-"Dem gewählten Programm fehlen ein oder mehrere benötigte ROM- oder CHD-"
-"Abbilder. Bitte wählen Sie ein anderes Programm aus."
+msgid "The software selected is missing one or more required ROM or CHD images. Please select a different one."
+msgstr "Dem gewählten Programm fehlen ein oder mehrere benötigte ROM- oder CHD-Abbilder. Bitte wählen Sie ein anderes Programm aus."
#: src/emu/ui/info.cpp:98
msgid "Not supported"
@@ -747,7 +731,7 @@ msgstr "Nicht unterstützt"
#: src/emu/ui/info.cpp:101
msgid "Partially supported"
-msgstr "Teilweise unterstütz"
+msgstr "Teilweise unterstützt"
#: src/emu/ui/info.cpp:109
msgid "[empty]"
@@ -906,11 +890,11 @@ msgstr "Zurück zum vorherigen Menü"
msgid "Auto"
msgstr "Auto"
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr "Images"
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr "Informationen"
@@ -955,12 +939,12 @@ msgstr ""
#: src/emu/ui/miscmenu.cpp:256
msgid "Coin %1$c: NA%3$s\n"
-msgstr "Geld %1$c: NA%3$s\n"
+msgstr "Münzen %1$c: NA%3$s\n"
#: src/emu/ui/miscmenu.cpp:256
#, c-format
msgid "Coin %1$c: %2$d%3$s\n"
-msgstr "Geld %1$c: %2$d%3$s\n"
+msgstr "Münzen %1$c: %2$d%3$s\n"
#: src/emu/ui/miscmenu.cpp:259
msgid " (locked)"
@@ -1010,38 +994,38 @@ msgstr "Menü zur BIOS-Auswahl überspringen"
msgid "Skip software parts selection menu"
msgstr "Menü zur Softwareauswahl überspringen"
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr "Verschiedene Einstellungen"
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr "%s.xml im Ordner der Benutzeroberfläche gespeichert."
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr "Name: Beschreibung:\n"
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr "%s.txt im Ordner der Benutzeroberfläche gespeichert."
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr "Im XML-Format exportieren"
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr "Im TXT-Format exportieren"
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr "Dummy"
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr "Konfiguration der Maschine speichern"
@@ -1087,17 +1071,12 @@ msgid "Settings"
msgstr "Einstellungen"
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
+msgid "**Error saving ui.ini**"
msgstr "**Fehler beim Speichern von ui.ini**"
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
-msgstr "**Fehler beim Laden von %s.ini**"
-
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr "**Fehler beim Speichern von %s.ini**"
#: src/emu/ui/optsmenu.cpp:376
@@ -1115,14 +1094,15 @@ msgid "Selection List - Search: "
msgstr "Auswahlliste - Suche: "
#: src/emu/ui/selector.cpp:181
-msgid " to select"
-msgstr " um auszuwählen"
+#, c-format
+msgid "Double click or press %1$s to select"
+msgstr "Zum Auswählen, doppelklicken oder drücken Sie %1$s"
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr "Allgemeine Informationen"
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
@@ -1131,8 +1111,8 @@ msgstr ""
"%s\n"
" zur Favoritenliste hinzugefügt."
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
@@ -1141,272 +1121,270 @@ msgstr ""
"%s\n"
" von der Favoritenliste entfernt."
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
-"The selected machine is missing one or more required ROM or CHD images. "
-"Please select a different machine.\n"
+"The selected machine is missing one or more required ROM or CHD images. Please select a different machine.\n"
"\n"
"Press any key (except ESC) to continue."
msgstr ""
-"Der gewählten Maschine fehlen ein oder mehrere benötigte ROM- oder CHD-"
-"Abbilder. Bitte wählen Sie eine andere Maschine aus.\n"
+"Der gewählten Maschine fehlen ein oder mehrere benötigte ROM- oder CHD-Abbilder. Bitte wählen Sie eine andere Maschine aus.\n"
"\n"
"Drücken Sie eine beliebige Taste (außer ESC) zum Fortfahren."
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr "Optionen konfigurieren"
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr "Maschine konfigurieren"
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr "%1$s %2$s ( %3$d / %4$d Maschinen (%5$d BIOS) )"
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr "%1$s (%2$s - %3$s) - "
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr "%1$s (%2$s) - "
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr "%1$s Suche: %2$s_"
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr "ROM-Satz: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr "%1$s, %2$-.100s"
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr "Treiber ist ein Klon von: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
-msgstr "Treiber ist \"Eltern\"-Treiber\n"
+msgstr "Treiber ist Ursprungs-Treiber"
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr "Insgesamt: FUNKTIONIERT NICHT\n"
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr "Insgesamt: Nicht emulierter Kopierschutz\n"
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr "Insgesamt: Funktioniert\n"
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr "Grafik: Fehlerhaft, "
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr "Grafik: OK, "
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr "Sound: nicht implementiert"
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr "Sound: Fehlerhaft"
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr "Sound: OK"
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr "System: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr "Programm ist ein Klon von: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
-msgstr "Programm ist \"Eltern\"-Programm"
+msgstr "Programm ist Ursprungs-Programm"
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr "Unterstützt: Nein"
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr "Unterstützt: Teilweise"
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr "Unterstützt: Ja"
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr "ROM-Satz: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr "%1$s %2$s"
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr "ROM-Satz: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr "Jahr: %1$s\n"
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr "Hersteller: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr "Treiber ist ein Klon von: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
-msgstr "Treiber ist \"Eltern\"-Treiber\n"
+msgstr "Treiber ist Ursprungs-Treiber\n"
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr "Insgesamt: FUNKTIONIERT NICHT\n"
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr "Insgesamt: Nicht emulierter Kopierschutz\n"
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr "Insgesamt: Funktioniert\n"
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr "Grafik: Fehlerhafte Farben\n"
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr "Grafik: Fehlerhaft\n"
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr "Grafik: OK\n"
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr "Sound: nicht implementiert\n"
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr "Sound: Fehlerhaft\n"
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr "Sound: OK\n"
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr "Treiber ist ein \"Skelett\": %s\n"
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr "Spiel ist mechanisch: %1$s\n"
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr "Benötigt Illustrationen: %1$s\n"
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr "Benötigt klickbare Illustrationen: %1$s\n"
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr "Unterstützt Cocktail-Modus: %1$s\n"
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr "Treiber ist BIOS: %1$s\n"
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr "Unterstützt Speichern: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr "Bildschirm-Ausrichtung: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr "Vertikal"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr "Horizontal"
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr "Benötigt CHD: %1$s\n"
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr "ROM-Überprüfung: OK\n"
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr "ROM-Überprüfung: FEHLERHAFT\n"
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr "Samples-Überprüfung: Nicht nötig\n"
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr "Samples-Überprüfung: OK\n"
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr "Samples-Überprüfung: FEHLERHAFT\n"
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
@@ -1414,12 +1392,12 @@ msgstr ""
"ROM-Überprüfung: Deaktiviert\n"
"Samples-Überprüfung: Deaktiviert\n"
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr "Keine Informationen verfügbar"
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr "Verwendung"
@@ -1427,69 +1405,67 @@ msgstr "Verwendung"
msgid " (default)"
msgstr " (Standard)"
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
-"The selected software is missing one or more required files. Please select a "
-"different software.\n"
+"The selected software is missing one or more required files. Please select a different software.\n"
"\n"
"Press any key (except ESC) to continue."
msgstr ""
-"Dem gewählten Programm fehlen ein oder mehrere benötigte ROM- oder CHD-"
-"Abbilder. Bitte wählen Sie ein anderes Programm aus.\n"
+"Dem gewählten Programm fehlen ein oder mehrere benötigte ROM- oder CHD-Abbilder. Bitte wählen Sie ein anderes Programm aus.\n"
"\n"
"Drücken Sie eine beliebige Taste (außer ESC) zum Fortfahren."
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr "%1$s %2$s ( %3$d / %4$d Programme )"
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr "Treiber: \"%1$s\" Softwareliste "
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr "Region: %1$s -"
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr "Herausgeber: %1$s -"
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr "Jahr: %1$s -"
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr "Softwareliste: %1$s -"
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr "Gerätetyp: %1$s -"
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr "%s Suche: %s_"
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr "%1$-.100s"
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr "Softwareauswahl:"
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr "BIOS-Auswahl"
@@ -1498,14 +1474,11 @@ msgstr "BIOS-Auswahl"
msgid ""
"No machines found. Please check the rompath specified in the %1$s.ini file.\n"
"\n"
-"If this is your first time using %2$s, please see the config.txt file in the "
-"docs directory for information on configuring %2$s."
+"If this is your first time using %2$s, please see the config.txt file in the docs directory for information on configuring %2$s."
msgstr ""
-"Keine Maschinen gefunden. Bitte überprüfen Sie den in der ini-Datei %1$s.ini "
-"angegebenen Pfad zu den ROM-Dateien. \n"
+"Keine Maschinen gefunden. Bitte überprüfen Sie den in der ini-Datei %1$s.ini angegebenen Pfad zu den ROM-Dateien. \n"
"\n"
-" Wenn Sie %2$s zum ersten Mal verwenden, lesen Sie bitte die Datei config."
-"txt im Verzeichnis \"docs\" zur Konfiguration von %2$s."
+" Wenn Sie %2$s zum ersten Mal verwenden, lesen Sie bitte die Datei config.txt im Verzeichnis \"docs\" zur Konfiguration von %2$s."
#: src/emu/ui/simpleselgame.cpp:287
#, c-format
@@ -1621,37 +1594,26 @@ msgstr "Vorspulen"
#: src/emu/ui/ui.cpp:415
msgid "This driver requires images to be loaded in the following device(s): "
-msgstr ""
-"Für diese Maschine müssen Abbilder in die folgenden Geräte eingehängt werden:"
+msgstr "Für diese Maschine müssen Abbilder in die folgenden Geräte eingehängt werden:"
#: src/emu/ui/ui.cpp:1043
#, c-format
msgid ""
-"Usage of emulators in conjunction with ROMs you don't own is forbidden by "
-"copyright law.\n"
+"Usage of emulators in conjunction with ROMs you don't own is forbidden by copyright law.\n"
"\n"
-"IF YOU ARE NOT LEGALLY ENTITLED TO PLAY \"%1$s\" ON THIS EMULATOR, PRESS "
-"ESC.\n"
+"IF YOU ARE NOT LEGALLY ENTITLED TO PLAY \"%1$s\" ON THIS EMULATOR, PRESS ESC.\n"
"\n"
"Otherwise, type OK or move the joystick left then right to continue"
msgstr ""
-"Die unlizenzierte Beschaffung und Verwendung von Computerprogrammen "
-"(einschließlich ROM-Inhalten), beispielsweise zur Nutzung in einem Emulator, "
-"stellt einen Verstoß gegen das Urheberrecht dar.\n"
+"Die unlizenzierte Beschaffung und Verwendung von Computerprogrammen (einschließlich ROM-Inhalten), beispielsweise zur Nutzung in einem Emulator, stellt einen Verstoß gegen das Urheberrecht dar.\n"
"\n"
-"WENN SIE NICHT BERECHTIGT SIND, \"%s\" IN DIESEM EMULATOR ZU VERWENDEN, "
-"DRÜCKEN SIE ESC.\n"
+"WENN SIE NICHT BERECHTIGT SIND, \"%s\" IN DIESEM EMULATOR ZU VERWENDEN, DRÜCKEN SIE ESC.\n"
"\n"
-"Andernfalls geben Sie \"OK\" ein oder bewegen Sie den Joystick nach links "
-"und dann nach rechts um fortzufahren"
+"Andernfalls geben Sie \"OK\" ein oder bewegen Sie den Joystick nach links und dann nach rechts um fortzufahren"
#: src/emu/ui/ui.cpp:1081
-msgid ""
-"One or more ROMs/CHDs for this machine are incorrect. The machine may not "
-"run correctly.\n"
-msgstr ""
-"Ein oder mehrere ROMs/CHDs für diese Maschine sind nicht korrekt. Eventuell "
-"wird die Maschine nicht richtig laufen.\n"
+msgid "One or more ROMs/CHDs for this machine are incorrect. The machine may not run correctly.\n"
+msgstr "Ein oder mehrere ROMs/CHDs für diese Maschine sind nicht korrekt. Eventuell wird die Maschine nicht richtig laufen.\n"
#: src/emu/ui/ui.cpp:1094
msgid ""
@@ -1662,10 +1624,8 @@ msgstr ""
"\n"
#: src/emu/ui/ui.cpp:1098
-msgid ""
-"One or more ROMs/CHDs for this machine have not been correctly dumped.\n"
-msgstr ""
-"Ein oder mehrere ROMs/CHDs dieser Maschine wurden nicht korrekt ausgelesen.\n"
+msgid "One or more ROMs/CHDs for this machine have not been correctly dumped.\n"
+msgstr "Ein oder mehrere ROMs/CHDs dieser Maschine wurden nicht korrekt ausgelesen.\n"
#: src/emu/ui/ui.cpp:1102
#, c-format
@@ -1704,51 +1664,32 @@ msgid "The machine requires external artwork files\n"
msgstr "Die Maschine benötigt externe Illustrationsdateien\n"
#: src/emu/ui/ui.cpp:1124
-msgid ""
-"This machine was never completed. It may exhibit strange behavior or missing "
-"elements that are not bugs in the emulation.\n"
-msgstr ""
-"Diese Maschine wurde niemals fertiggestellt. Sie kann seltsames Verhalten "
-"oder fehlende Elemente aufweisen, die nicht auf Fehler der Emulation "
-"zurückzuführen sind.\n"
+msgid "This machine was never completed. It may exhibit strange behavior or missing elements that are not bugs in the emulation.\n"
+msgstr "Diese Maschine wurde niemals fertiggestellt. Sie kann seltsames Verhalten oder fehlende Elemente aufweisen, die nicht auf Fehler der Emulation zurückzuführen sind.\n"
#: src/emu/ui/ui.cpp:1129
-msgid ""
-"This machine has no sound hardware, MAME will produce no sounds, this is "
-"expected behaviour.\n"
-msgstr ""
-"Diese Maschine besitzt keine Sound-Hardware; MAME wird erwartungsgemäß keine "
-"Töne ausgeben.\n"
+msgid "This machine has no sound hardware, MAME will produce no sounds, this is expected behaviour.\n"
+msgstr "Diese Maschine besitzt keine Sound-Hardware; MAME wird erwartungsgemäß keine Töne ausgeben.\n"
#: src/emu/ui/ui.cpp:1137
msgid "The machine has protection which isn't fully emulated.\n"
-msgstr ""
-"Die Maschine besitzt einen Kopierschutz, der nicht vollständig emuliert "
-"ist.\n"
+msgstr "Die Maschine besitzt einen Kopierschutz, der nicht vollständig emuliert ist.\n"
#: src/emu/ui/ui.cpp:1140
msgid ""
"\n"
-"THIS MACHINE DOESN'T WORK. The emulation for this machine is not yet "
-"complete. There is nothing you can do to fix this problem except wait for "
-"the developers to improve the emulation.\n"
+"THIS MACHINE DOESN'T WORK. The emulation for this machine is not yet complete. There is nothing you can do to fix this problem except wait for the developers to improve the emulation.\n"
msgstr ""
"\n"
-"DIESE MASCHINE FUNKTIONIERT NICHT. Die Emulation dieser Maschine ist noch "
-"nicht vollständig. Sie können nur darauf warten, dass die Entwickler die "
-"Emulation verbessern.\n"
+"DIESE MASCHINE FUNKTIONIERT NICHT. Die Emulation dieser Maschine ist noch nicht vollständig. Sie können nur darauf warten, dass die Entwickler die Emulation verbessern.\n"
#: src/emu/ui/ui.cpp:1144
msgid ""
"\n"
-"Certain elements of this machine cannot be emulated as it requires actual "
-"physical interaction or consists of mechanical devices. It is not possible "
-"to fully play this machine.\n"
+"Certain elements of this machine cannot be emulated as it requires actual physical interaction or consists of mechanical devices. It is not possible to fully play this machine.\n"
msgstr ""
"\n"
-"Verschiedene Elemente dieser Maschine können nicht emuliert werden, da sie "
-"echte physische Interaktion voraussetzen oder mechanische Komponenten "
-"beinhalten. Es ist nicht möglich, diese Maschine vollständig zu verwenden.\n"
+"Verschiedene Elemente dieser Maschine können nicht emuliert werden, da sie echte physische Interaktion voraussetzen oder mechanische Komponenten beinhalten. Es ist nicht möglich, diese Maschine vollständig zu verwenden.\n"
#: src/emu/ui/ui.cpp:1163
msgid ""
@@ -1768,8 +1709,7 @@ msgid ""
msgstr ""
"\n"
"\n"
-"Geben Sie \"OK\" ein oder bewegen Sie den Joystick nach links und dann nach "
-"rechts, um fortzufahren"
+"Geben Sie \"OK\" ein oder bewegen Sie den Joystick nach links und dann nach rechts, um fortzufahren"
#: src/emu/ui/ui.cpp:1192
#, c-format
@@ -2109,3 +2049,39 @@ msgstr " FARBEN"
#: src/emu/ui/viewgfx.cpp:391
msgid " PENS"
msgstr " STIFTE"
+
+#~ msgid "**Error loading %s.ini**"
+#~ msgstr "**Fehler beim Laden von %s.ini**"
+
+#~ msgid "**Error loading ui.ini**"
+#~ msgstr "**Fehler beim Laden von ui.ini**"
+
+#~ msgid "Double click or press "
+#~ msgstr "Doppelklicken Sie oder drücken Sie "
+
+#~ msgid " to change the color value"
+#~ msgstr " um den Farbwert zu ändern"
+
+#~ msgid " to select"
+#~ msgstr " um auszuwählen"
+
+#~ msgid "Current "
+#~ msgstr "Aktuelle "
+
+#~ msgid " Folders"
+#~ msgstr " Ordner"
+
+#~ msgid "Change)"
+#~ msgstr "Ändern)"
+
+#~ msgid "Add"
+#~ msgstr "Hinzufügen"
+
+#~ msgid " Folder - Search: "
+#~ msgstr " Ordner - Suche: "
+
+#~ msgid "Remove "
+#~ msgstr "Entferne "
+
+#~ msgid " Folder"
+#~ msgstr " Ordner"
diff --git a/language/Greek/strings.po b/language/Greek/strings.po
index bf46c7fd12b..d213e971bfe 100644
--- a/language/Greek/strings.po
+++ b/language/Greek/strings.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
-"PO-Revision-Date: 2016-03-01 16:29+0200\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
+"PO-Revision-Date: 2016-03-08 15:22+0200\n"
"Last-Translator: Mame.gr\n"
"Language-Team: MAME Language Team\n"
"Language: el\n"
@@ -16,7 +16,6 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.8.6\n"
#: src/emu/ui/auditmenu.cpp:111
msgid "Audit in progress..."
@@ -24,15 +23,15 @@ msgstr "Ελέγχος σε εξέλιξη..."
#: src/emu/ui/barcode.cpp:72
msgid "New Barcode:"
-msgstr "Îέο Barcode:"
+msgstr "Îέος ΓÏαμμωτός Κώδικας:"
#: src/emu/ui/barcode.cpp:76
msgid "Enter Code"
-msgstr "Εισάγετε τον κωδικό"
+msgstr "Εισάγετε τον Κωδικό"
#: src/emu/ui/barcode.cpp:118
msgid "Barcode length invalid!"
-msgstr "Μη έγκυÏο μήκος γÏÎ±Î¼Î¼Î¹ÎºÎ¿Ï ÎºÏŽÎ´Î¹ÎºÎ±!"
+msgstr "Μη έγκυÏο μήκος γÏÎ±Î¼Î¼Ï‰Ï„Î¿Ï ÎºÏŽÎ´Î¹ÎºÎ±!"
#: src/emu/ui/cheatopt.cpp:77
#, c-format
@@ -91,7 +90,7 @@ msgstr "Off"
#: src/emu/ui/cheatopt.cpp:301
msgid "No buttons found on this machine!"
-msgstr "Δεν βÏέθηκαν κουμπιά σε αυτόν το μηχάνημα!"
+msgstr "Δεν βÏέθηκαν κουμπιά σε αυτό το μηχάνημα!"
#: src/emu/ui/cheatopt.cpp:312 src/emu/ui/cheatopt.cpp:316
msgid "Autofire Delay"
@@ -132,7 +131,7 @@ msgstr "Ανάθεση συσκευής ΠοντικιοÏ"
#: src/emu/ui/ctrlmenu.cpp:106 src/emu/ui/ctrlmenu.cpp:126
#: src/emu/ui/optsmenu.cpp:268
msgid "Device Mapping"
-msgstr "Αντιστοίχιση συσκευής"
+msgstr "Αντιστοίχιση Συσκευής"
#: src/emu/ui/custmenu.cpp:156 src/emu/ui/custmenu.cpp:441
msgid "Main filter"
@@ -186,15 +185,15 @@ msgstr "ΠÏοβολή όλων"
#: src/emu/ui/custui.cpp:21
msgid "Hide Filters"
-msgstr "ΑπόκÏυψη φίλτÏων"
+msgstr "ΑπόκÏυψη ΦίλτÏων"
#: src/emu/ui/custui.cpp:22
msgid "Hide Info/Image"
-msgstr "ΑπόκÏυψη πληÏοφοÏίες/εικόνα"
+msgstr "ΑπόκÏυψη ΠληÏοφοÏίων/Εικόνας"
#: src/emu/ui/custui.cpp:23
msgid "Hide Both"
-msgstr "ΑπόκÏυψη όλων"
+msgstr "ΑπόκÏυψη Όλων"
#: src/emu/ui/custui.cpp:139
msgid "Fonts"
@@ -210,11 +209,11 @@ msgstr "Γλώσσα"
#: src/emu/ui/custui.cpp:149
msgid "Show side panels"
-msgstr "Εμφάνιση πλαϊνών πάνελ"
+msgstr "Εμφάνιση πλευÏικών πάνελ"
#: src/emu/ui/custui.cpp:164 src/emu/ui/custui.cpp:184
msgid "Custom UI Settings"
-msgstr "ΠÏοσαÏμοσμένες Ïυθμίσεις UI"
+msgstr "ΠÏοσαÏμοσμένες Ρυθμίσεις UI"
#: src/emu/ui/custui.cpp:268
msgid "default"
@@ -321,13 +320,10 @@ msgstr "ΕπαναφοÏά αÏχικών χÏωμάτων"
msgid "UI Colors Settings"
msgstr "Ρυθμίσεις χÏωμάτων UI"
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr "Κάντε διπλό κλικ ή πιέστε το πλήκτÏο "
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
-msgstr " για να αλλάξετε την τιμή του χÏώματος"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
+msgstr "Κάντε διπλό κλικ ή πατήστε %1$s για να αλλάξετε την τιμή του χÏώματος"
#: src/emu/ui/custui.cpp:617
msgid "Menu Preview"
@@ -386,7 +382,7 @@ msgstr "Λευκό"
#: src/emu/ui/custui.cpp:1027
msgid "Silver"
-msgstr "Ασιμί"
+msgstr "Ασημί"
#: src/emu/ui/custui.cpp:1028
msgid "Gray"
@@ -416,34 +412,34 @@ msgstr "ΙστοÏικό ΛογισμικοÏ"
msgid "Software Usage"
msgstr "ΧÏήση λογισμικοÏ"
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr "ΑναθεώÏηση: "
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
-msgstr "ΙστοÏικό"
+msgstr "ΙστοÏία"
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr "Mameinfo"
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr "Messinfo"
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr "Sysinfo"
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr "Mamescore"
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr "Εντολή"
@@ -553,15 +549,12 @@ msgstr "Versus"
#: src/emu/ui/dirmenu.cpp:116 src/emu/ui/dirmenu.cpp:136
msgid "Folders Setup"
-msgstr "ΡÏθμιση φακέλων"
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr "ΤÏέχοντες "
+msgstr "ΡÏθμιση Φακέλων"
#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
-msgstr " Φάκελοι"
+#, c-format
+msgid "Current %1$s Folders"
+msgstr "ΤÏέχοντες Φάκελοι για %1$s"
#: src/emu/ui/dirmenu.cpp:195
msgid "Change Folder"
@@ -575,33 +568,28 @@ msgstr "ΠÏοσθήκη φακέλου"
msgid "Remove Folder"
msgstr "ΑφαίÏεση φακέλου"
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr "Αλλαγή)"
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
-msgstr "ΠÏοσθήκη"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
+msgstr "Αλλαγή %1$s Φακέλου - Αναζήτηση: %2$s_"
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
-msgstr " Φάκελος - Αναζήτηση: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
+msgstr "ΠÏοσθήκη %1$s Φακέλου - Αναζήτηση: %2$s_"
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr "Πιέστε το πλήκτÏο TAB για να οÏίσετε"
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr "ΑφαίÏεση"
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
-msgstr " Φάκελος"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
+msgstr "ΑφαίÏεση %1$s Φακέλου"
#: src/emu/ui/dsplmenu.cpp:38
msgid "Video Mode"
-msgstr "ΛειτουÏγία βίντεο"
+msgstr "ΛειτουÏγία Βίντεο"
#: src/emu/ui/dsplmenu.cpp:40
msgid "Hardware Stretch"
@@ -633,56 +621,56 @@ msgstr "Multi-Threaded Rendering"
#: src/emu/ui/dsplmenu.cpp:48
msgid "Window Mode"
-msgstr "ΛειτουÏγία παÏαθÏÏου"
+msgstr "ΛειτουÏγία ΠαÏαθÏÏου"
#: src/emu/ui/dsplmenu.cpp:49
msgid "Enforce Aspect Ratio"
-msgstr "Επιβολή αναλογίας εικόνας"
+msgstr "Επιβολή Αναλογίας Εικόνας"
#: src/emu/ui/dsplmenu.cpp:50
msgid "Start Out Maximized"
-msgstr "Εκκίνηση μεγιστοποιημένο"
+msgstr "Εκκίνηση Μεγιστοποιημένο"
#: src/emu/ui/dsplmenu.cpp:51
msgid "Synchronized Refresh"
-msgstr "ΣυγχÏονισμένη ανανέωση"
+msgstr "ΣυγχÏονισμένη Ανανέωση"
#: src/emu/ui/dsplmenu.cpp:52
msgid "Wait Vertical Sync"
-msgstr "Αναμονή για κάθετο συγχÏονισμό"
+msgstr "Αναμονή για Κάθετο ΣυγχÏονισμό"
#: src/emu/ui/dsplmenu.cpp:204 src/emu/ui/dsplmenu.cpp:224
#: src/emu/ui/optsmenu.cpp:265
msgid "Display Options"
-msgstr "Επιλογές γÏαφικών"
+msgstr "Επιλογές ΓÏαφικών"
#: src/emu/ui/filesel.cpp:159
msgid "File Already Exists - Override?"
-msgstr "Το αÏχείο υπάÏχει ήδη - να αντικατασταθεί;"
+msgstr "Το ΑÏχείο ΥπάÏχει Ήδη - Îα Αντικατασταθεί;"
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr "Όχι"
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr "Îαι"
#: src/emu/ui/filesel.cpp:271
msgid "New Image Name:"
-msgstr "Îέο όνομα εικόνας:"
+msgstr "Îέο Όνομα Εικόνας:"
#: src/emu/ui/filesel.cpp:277
msgid "Image Format:"
-msgstr "ΜοÏφή εικόνας:"
+msgstr "ΜοÏφή Εικόνας:"
#: src/emu/ui/filesel.cpp:283
msgid "Create"
@@ -737,7 +725,7 @@ msgid ""
"The software selected is missing one or more required ROM or CHD images. "
"Please select a different one."
msgstr ""
-"Στο επιλεγμένο λογισμικό λείπει μία ή πεÏισσότεÏες ROMs ή εικόνες CHD. "
+"Στο επιλεγμένο λογισμικό λείπει μία ή πεÏισσότεÏες ROMs ή εικόνες CHD. "
"ΠαÏακαλοÏμε επιλέξτε ένα διαφοÏετικό."
#: src/emu/ui/info.cpp:98
@@ -762,11 +750,11 @@ msgstr "[απέτυχε]"
#: src/emu/ui/inputmap.cpp:52
msgid "User Interface"
-msgstr "ΠεÏιβάλλον χÏήστη"
+msgstr "ΠεÏιβάλλον ΧÏήστη"
#: src/emu/ui/inputmap.cpp:59
msgid "Other Controls"
-msgstr "Άλλα στοιχεία ελέγχου"
+msgstr "Άλλα Στοιχεία Ελέγχου"
#: src/emu/ui/inputmap.cpp:625 src/emu/ui/miscmenu.cpp:90
#: src/emu/ui/slotopt.cpp:172
@@ -779,7 +767,7 @@ msgstr "ΧειÏισμός (γενικά)"
#: src/emu/ui/mainmenu.cpp:55
msgid "Input (this Machine)"
-msgstr "ΧειÏισμός (Ï„Ïέχων μηχάνημα)"
+msgstr "ΧειÏισμός (Ï„Ïέχων Μηχάνημα)"
#: src/emu/ui/mainmenu.cpp:59
msgid "Analog Controls"
@@ -819,19 +807,19 @@ msgstr "Επιλογή BIOS"
#: src/emu/ui/mainmenu.cpp:99
msgid "Slot Devices"
-msgstr "Συσκευές υποδοχής"
+msgstr "Συσκευές Υποδοχής"
#: src/emu/ui/mainmenu.cpp:106
msgid "Barcode Reader"
-msgstr "Συσκευή ανάγνωσης γÏαμμοκώδικα"
+msgstr "Συσκευή Ανάγνωσης ΓÏÎ±Î¼Î¼Ï‰Ï„Î¿Ï ÎšÏŽÎ´Î¹ÎºÎ±"
#: src/emu/ui/mainmenu.cpp:113
msgid "Network Devices"
-msgstr "Συσκευές δικτÏου"
+msgstr "Συσκευές ΔικτÏου"
#: src/emu/ui/mainmenu.cpp:118
msgid "Keyboard Mode"
-msgstr "ΛειτουÏγία πληκτÏολογίου"
+msgstr "ΛειτουÏγία ΠληκτÏολογίου"
#: src/emu/ui/mainmenu.cpp:121
msgid "Slider Controls"
@@ -839,7 +827,7 @@ msgstr "Έλεγχος Slider "
#: src/emu/ui/mainmenu.cpp:124
msgid "Video Options"
-msgstr "Επιλογές βίντεο"
+msgstr "Επιλογές Βίντεο"
#: src/emu/ui/mainmenu.cpp:128
msgid "Crosshair Options"
@@ -851,23 +839,23 @@ msgstr "Cheat"
#: src/emu/ui/mainmenu.cpp:136
msgid "External DAT View"
-msgstr "ΠÏοβολή εξωτεÏÎ¹ÎºÎ¿Ï DAT"
+msgstr "ΠÏοβολή ΕξωτεÏÎ¹ÎºÎ¿Ï DAT"
#: src/emu/ui/mainmenu.cpp:142
msgid "Add To Favorites"
-msgstr "ΠÏοσθήκη στα αγαπημένα"
+msgstr "ΠÏοσθήκη Στα Αγαπημένα"
#: src/emu/ui/mainmenu.cpp:144
msgid "Remove From Favorites"
-msgstr "ΑφαίÏεση από τα αγαπημένα"
+msgstr "ΑφαίÏεση Από Τα Αγαπημένα"
#: src/emu/ui/mainmenu.cpp:151
msgid "Select New Machine"
-msgstr "Επιλέξτε νέο μηχάνημα"
+msgstr "Επιλέξτε Îέο Μηχάνημα"
#: src/emu/ui/menu.cpp:45
msgid "Control Panels"
-msgstr "Πίνακες ελέγχου"
+msgstr "Πίνακες Ελέγχου"
#: src/emu/ui/menu.cpp:50
msgid "Artwork Preview"
@@ -879,7 +867,7 @@ msgstr "Game Over"
#: src/emu/ui/menu.cpp:63
msgid "Add or remove favorites"
-msgstr "ΠÏοσθήκη ή αφαίÏεση στα αγαπημένα"
+msgstr "ΠÏοσθήκη ή αφαίÏεση από τα αγαπημένα"
#: src/emu/ui/menu.cpp:64
msgid "Export displayed list to file"
@@ -891,7 +879,7 @@ msgstr "Εμφάνιση Ï€Ïοβολής DATs"
#: src/emu/ui/menu.cpp:252
msgid "Return to Machine"
-msgstr "ΕπιστÏοφή στο μηχάνημα"
+msgstr "ΕπιστÏοφή στο Μηχάνημα"
#: src/emu/ui/menu.cpp:256 src/emu/ui/menu.cpp:258
msgid "Exit"
@@ -899,23 +887,23 @@ msgstr "Έξοδος"
#: src/emu/ui/menu.cpp:263 src/emu/ui/menu.cpp:265
msgid "Return to Previous Menu"
-msgstr "ΕπιστÏοφή στο Ï€ÏοηγοÏμενο μενοÏ"
+msgstr "ΕπιστÏοφή στο ΠÏοηγοÏμενο ΜενοÏ"
#: src/emu/ui/menu.cpp:680
msgid "Auto"
msgstr "Αυτόματο"
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr "Εικόνες"
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr "ΠληÏοφοÏίες"
#: src/emu/ui/miscmenu.cpp:36
msgid "Keyboard Mode:"
-msgstr "ΛειτουÏγία πληκτÏολογίου"
+msgstr "ΛειτουÏγία ΠληκτÏολογίου:"
#: src/emu/ui/miscmenu.cpp:36
msgid "Natural"
@@ -967,7 +955,7 @@ msgstr " (κλειδωμένο)"
#: src/emu/ui/miscmenu.cpp:518
msgid "Visible Delay"
-msgstr "ΟÏατή καθυστέÏηση"
+msgstr "ΟÏατή ΚαθυστέÏηση"
#: src/emu/ui/miscmenu.cpp:557
msgid "Re-select last machine played"
@@ -1009,38 +997,38 @@ msgstr "ΠαÏάλειψη Î¼ÎµÎ½Î¿Ï ÎµÏ€Î¹Î»Î¿Î³Î®Ï‚ bios"
msgid "Skip software parts selection menu"
msgstr "ΠαÏάλειψη Î¼ÎµÎ½Î¿Ï ÎµÏ€Î¹Î»Î¿Î³Î®Ï‚ τμημάτων λογισμικοÏ"
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
-msgstr "ΔιάφοÏες επιλογές"
+msgstr "ΔιάφοÏες Επιλογές"
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr "%s.XML αποθηκεÏτηκε στο φάκελο ui."
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr "Όνομα: ΠεÏιγÏαφή:\n"
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr "%s.txt αποθηκεÏτηκε στο φάκελο ui."
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
-msgstr "Εξαγωγή σε μοÏφή XML (like -listxml)"
+msgstr "Εξαγωγή σε μοÏφή XML (όπως -listxml)"
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
-msgstr "Εξαγωγή σε μοÏφή XML TXT(like -listfull)"
+msgstr "Εξαγωγή σε μοÏφή XML TXT(όπως -listfull)"
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr "Dummy"
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr "Αποθήκευση παÏαμετÏοποίησης μηχανήματος"
@@ -1066,12 +1054,12 @@ msgstr "ΠÏοσαÏμογή UI"
#: src/emu/ui/optsmenu.cpp:263
msgid "Configure Directories"
-msgstr "ΡÏθμιση φακέλων"
+msgstr "ΡÏθμιση Φακέλων"
#: src/emu/ui/optsmenu.cpp:266 src/emu/ui/sndmenu.cpp:150
#: src/emu/ui/sndmenu.cpp:170
msgid "Sound Options"
-msgstr "Επιλογές ήχου"
+msgstr "Επιλογές Ήχου"
#: src/emu/ui/optsmenu.cpp:269
msgid "General Inputs"
@@ -1086,17 +1074,12 @@ msgid "Settings"
msgstr "Ρυθμίσεις"
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
+msgid "**Error saving ui.ini**"
msgstr "** Σφάλμα αποθήκευσης ui.ini**"
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
-msgstr "**Σφάλμα φόÏτωσης %s.ini**"
-
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr "**Σφάλμα αποθήκευσης %s.ini**"
#: src/emu/ui/optsmenu.cpp:376
@@ -1111,17 +1094,18 @@ msgstr ""
#: src/emu/ui/selector.cpp:152
msgid "Selection List - Search: "
-msgstr "Λίστα επιλογής - Αναζήτηση: "
+msgstr "Λίστα Επιλογής- Αναζήτηση: "
#: src/emu/ui/selector.cpp:181
-msgid " to select"
-msgstr " για επιλογή"
+#, c-format
+msgid "Double click or press %1$s to select"
+msgstr "Κάντε διπλό κλικ ή πατήστε %1$s για να επιλέξετε"
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr "Γενικές ΠληÏοφοÏίες"
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
@@ -1130,8 +1114,8 @@ msgstr ""
"%s\n"
" Ï€Ïοστέθηκε στη λίστα αγαπημένων."
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
@@ -1140,289 +1124,285 @@ msgstr ""
"%s\n"
" αφαιÏέθηκε από τη λίστα αγαπημένων."
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
"\n"
"Press any key (except ESC) to continue."
msgstr ""
-"Στο επιλεγμένο μηχάνημα λείπει μία ή πεÏισσότεÏες ROMs ή εικόνες CHD. "
+"Στο επιλεγμένο μηχάνημα λείπει μία ή πεÏισσότεÏες ROMs ή εικόνες CHD. "
"ΠαÏακαλοÏμε επιλέξτε ένα άλλο μηχάνημα.\n"
"\n"
"Πιέστε οποιοδήποτε πλήκτÏο (εκτός από το ESC) για να συνεχίσετε."
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr "ΡÏθμιση Επιλογών"
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr "ΡÏθμιση Μηχανήματος"
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr "%1$s %2$s ( %3$d / %4$d μηχανήματα (%5$d BIOS) )"
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr "%1$s (%2$s - %3$s) - "
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr "%1$s (%2$s) - "
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr "%1$s Αναζήτηση: %2$s_"
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr "Romset: %1$-.100s"
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr "%1$s, %2$-.100s"
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
-msgstr "Το Ï€ÏόγÏαμμα οδήγησης είναι κλώνος του: %1$-.100s"
+msgstr "Ο Οδηγός είναι κλώνος του: %1$-.100s"
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
-msgstr "To ΠÏόγÏαμμα οδήγησης είναι γονικό"
+msgstr "Ο Οδηγός είναι γονικός"
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr "Συνολικά: ΔΕΠΛΕΙΤΟΥΡΓΕΙ"
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
-msgstr "Συνολικά: ΠÏοστασία μη εξομοιωμένη"
+msgstr "Συνολικά: ΠÏοστασία Μη Εξομοιωμένη"
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr "Συνολικά: ΛειτουÏγεί"
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
-msgstr "ΓÏαφικά: ατελή, "
+msgstr "ΓÏαφικά: Ατελή, "
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr "ΓÏαφικά: OK, "
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
-msgstr "Ήχος: δεν έχει υλοποιηθεί"
+msgstr "Ήχος: Δεν Έχει Υλοποιηθεί"
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
-msgstr "Ήχος: ατελής"
+msgstr "Ήχος: Ατελής"
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr "Ήχος: OK"
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr "ΣÏστημα: %1$-.100s"
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
-msgstr "Το Ï€ÏόγÏαμμα οδήγησης είναι κλώνος του: %1$-.100s"
+msgstr "Το Λογισμικό είναι κλώνος του: %1$-.100s"
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
-msgstr "Το λογισμικό είναι βασικό"
+msgstr "Το λογισμικό είναι γονικό"
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr "ΥποστηÏίζεται: Όχι"
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr "ΥποστηÏίζεται: ΜεÏικώς"
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr "ΥποστηÏίζεται: Îαι"
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr "romset: %1$-.100s"
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr "%1$s %2$s"
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr "Romset: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr "Έτος: %1$s\n"
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr "Κατασκευαστής: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
-msgstr "Το Ï€ÏόγÏαμμα οδήγησης είναι κλώνος του: %1$-.100s\n"
+msgstr "Ο Οδηγός είναι Κλώνος του: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
-msgstr "To ΠÏόγÏαμμα οδήγησης είναι βασικό\n"
+msgstr "Ο Οδηγός είναι Γονικός\n"
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr "Συνολικά: ΔΕΠΛΕΙΤΟΥΡΓΕΙ\n"
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
-msgstr "Συνολικά: ΠÏοστασία μη εξομοιωμένη\n"
+msgstr "Συνολικά: ΠÏοστασία Μη Εξομοιωμένη\n"
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr "Συνολικά: ΛειτουÏγεί\n"
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
-msgstr "ΓÏαφικά: Ατελή χÏώματα\n"
+msgstr "ΓÏαφικά: Ατελή ΧÏώματα\n"
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
-msgstr "ΓÏαφικά: ατελή\n"
+msgstr "ΓÏαφικά: Ατελή\n"
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr "ΓÏαφικά: OK\n"
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
-msgstr "Ήχος: δεν έχει υλοποιηθεί\n"
+msgstr "Ήχος: Δεν Έχει Υλοποιηθεί\n"
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
-msgstr "Ήχος: ατελής\n"
+msgstr "Ήχος: Ατελής\n"
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr "Ήχος: OK\n"
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
-msgstr "Το Ï€ÏόγÏαμμα οδήγησης είναι σκελετός: %1$s\n"
+msgstr "Ο Οδηγός είναι Σκελετός: %1$s\n"
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr "Το παιχνίδι είναι Μηχανικό: %1$s\n"
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr "Απαιτεί Artwork: %1$s\n"
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr "Απαιτεί Artwork για κλικ: %1$s\n"
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
-msgstr "ΥποστήÏιξη κοκτέιλ: %1$s\n"
+msgstr "ΥποστήÏιξη Κοκτέιλ: %1$s\n"
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
-msgstr "Το Ï€ÏόγÏαμμα οδήγησης είναι Bios: %1$s\n"
+msgstr "Ο Οδηγός είναι Bios: %1$s\n"
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr "ΥποστηÏίζει Αποθήκευση: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr "ΠÏοσανατολισμός Οθόνης %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr "Κάθετος"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr "ΟÏιζόντιος"
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
-msgstr ""
-"Απαιτεί CHD: %1$s\n"
-"\n"
+msgstr "Απαιτεί CHD: %1$s\n"
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr "Έλεγχος ROMs: OK\n"
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
-msgstr ""
-"Έλεγχος ROMs: Κακός\n"
-"\n"
+msgstr "Έλεγχος ROMs: Λάθος\n"
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr "Έλεγχος Δειγμάτων Ήχου: Δεν απαιτείται\n"
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr "Έλεγχος Δειγμάτων Ήχου: OK\n"
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr "Έλεγχος Δειγμάτων Ήχου: Λάθος\n"
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-"Έλεγχος ROMs: ΑπενεÏγοποιημένο\n"
-"Έλεγχος Δειγμάτων Ήχου: ΑπενεÏγοποιημένο\n"
+"Έλεγχος ROMs: ΑπενεÏγοποιημένος\n"
+"Έλεγχος Δειγμάτων Ήχου: ΑπενεÏγοποιημένος\n"
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr "Καμία διαθέσιμη πληÏοφοÏία"
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr "ΧÏήση"
@@ -1430,69 +1410,69 @@ msgstr "ΧÏήση"
msgid " (default)"
msgstr " (Ï€Ïοεπιλογή)"
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
"\n"
"Press any key (except ESC) to continue."
msgstr ""
-"Στο επιλεγμένο λογισμικό λείπει μία ή πεÏισσότεÏες ROMs ή εικόνες CHD. "
+"Στο επιλεγμένο λογισμικό λείπει μία ή πεÏισσότεÏες ROMs ή εικόνες CHD. "
"ΠαÏακαλοÏμε επιλέξτε ένα άλλο λογισμικό.\n"
"\n"
"Πιέστε οποιοδήποτε πλήκτÏο (εκτός από το ESC) για να συνεχίσετε."
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr "%1$s %2$s ( %3$d / %4$d λογισμικό )"
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr "Οδηγός: \"%1$s\" λίστα Î»Î¿Î³Î¹ÏƒÎ¼Î¹ÎºÎ¿Ï "
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr "ΠεÏιοχή: %1$s -"
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr "Εκδότης: %1$s -"
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr "Έτος: %1$s -"
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
-msgstr "Λίστα λογισμικοÏ: %1$s -"
+msgstr "Λίστα ΛογισμικοÏ: %1$s -"
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr "ΤÏπος συσκευής: %1$s -"
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr "%s Αναζήτηση: %s_"
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr "%1$-.100s"
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr "Επιλογή τμημάτων λογισμικοÏ:"
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr "Επιλογή BIOS:"
@@ -1507,7 +1487,7 @@ msgstr ""
"Δεν βÏέθηκαν μηχανήματα . ΠαÏακαλώ ελέγξτε τη διαδÏομή roms που καθοÏίζεται "
"στο αÏχείο %1$s.ini.\n"
"\n"
-"Αν αυτή είναι η Ï€Ïώτη φοÏά που χÏησιμοποιείτε %2$s., παÏακαλοÏμε δείτε το "
+"Αν αυτή είναι η Ï€Ïώτη φοÏά που χÏησιμοποιείτε %2$s., παÏακαλοÏμε δείτε το "
"αÏχείο config.txt στον κατάλογο docs για πληÏοφοÏίες σχετικά με τη "
"διαμόÏφωση %2$s.."
@@ -1552,11 +1532,11 @@ msgstr "Ήχος"
#: src/emu/ui/sndmenu.cpp:135
msgid "Sample Rate"
-msgstr "Ρυθμός δειγματοληψίας"
+msgstr "Ρυθμός Δειγματοληψίας"
#: src/emu/ui/sndmenu.cpp:136
msgid "Use External Samples"
-msgstr "ΧÏήση εξωτεÏικών δειγμάτων Ήχου"
+msgstr "ΧÏήση ΕξωτεÏικών Δειγμάτων Ήχου"
#: src/emu/ui/swlist.cpp:70
msgid "[file manager]"
@@ -1564,7 +1544,7 @@ msgstr "[ΔιαχείÏιση αÏχείων]"
#: src/emu/ui/swlist.cpp:235
msgid "Switch Item Ordering"
-msgstr "Εναλλαγή σειÏά στοιχείων"
+msgstr "Εναλλαγή σειÏάς στοιχείων"
#: src/emu/ui/swlist.cpp:268
#, c-format
@@ -1626,8 +1606,7 @@ msgstr "ΓÏήγοÏη ΠÏοώθηση"
#: src/emu/ui/ui.cpp:415
msgid "This driver requires images to be loaded in the following device(s): "
msgstr ""
-"Αυτό το Ï€ÏόγÏαμμα οδήγησης απαιτεί εικόνές να φοÏτωθοÏν στην ακόλουθη "
-"συσκευή (ες): "
+"Αυτός ο οδηγός απαιτεί εικόνες να φοÏτωθοÏν στην ακόλουθη συσκευή (ες): "
#: src/emu/ui/ui.cpp:1043
#, c-format
@@ -1661,7 +1640,9 @@ msgstr ""
msgid ""
"There are known problems with this machine\n"
"\n"
-msgstr "ΥπάÏχουν γνωστά Ï€Ïοβλήματα με αυτό το μηχάνημα\n"
+msgstr ""
+"ΥπάÏχουν γνωστά Ï€Ïοβλήματα με αυτό το μηχάνημα\n"
+"\n"
#: src/emu/ui/ui.cpp:1098
msgid ""
@@ -1673,12 +1654,12 @@ msgstr ""
#: src/emu/ui/ui.cpp:1102
#, c-format
msgid "The keyboard emulation may not be 100% accurate.\n"
-msgstr "Η εξομοίωση πληκτÏολογίου δεν είναι σωστή 100% a.\n"
+msgstr "Η εξομοίωση πληκτÏολογίου δεν είναι σωστή 100%.\n"
#: src/emu/ui/ui.cpp:1104
#, c-format
msgid "The colors aren't 100% accurate.\n"
-msgstr "Τα χÏώματα δεν είναι σωστά 100% a.\n"
+msgstr "Τα χÏώματα δεν είναι σωστά 100%.\n"
#: src/emu/ui/ui.cpp:1106
msgid "The colors are completely wrong.\n"
@@ -1687,12 +1668,12 @@ msgstr "Τα χÏώματα είναι εντελώς λάθος.\n"
#: src/emu/ui/ui.cpp:1108
#, c-format
msgid "The video emulation isn't 100% accurate.\n"
-msgstr "Η εξομοίωση βίντεο δεν είναι σωστή 100% a.\n"
+msgstr "Η εξομοίωση βίντεο δεν είναι σωστή 100%.\n"
#: src/emu/ui/ui.cpp:1110
#, c-format
msgid "The sound emulation isn't 100% accurate.\n"
-msgstr "Η εξομοίωση ήχου δεν είναι σωστή 100% a.\n"
+msgstr "Η εξομοίωση ήχου δεν είναι σωστή 100%.\n"
#: src/emu/ui/ui.cpp:1112
msgid "The machine lacks sound.\n"
@@ -1739,7 +1720,7 @@ msgstr ""
"ΑΥΤΟ ΤΟ ΜΗΧΑÎΗΜΑ ΔΕΠΛΕΙΤΟΥΡΓΕΙ. Η εξομοίωση για αυτό το μηχάνημα δεν είναι "
"ακόμα πλήÏης. Δεν υπάÏχει τίποτα που μποÏείτε να κάνετε για να διοÏθώσετε "
"αυτό το Ï€Ïόβλημα εκτός από την αναμονή για τους Ï€ÏογÏαμματιστές να "
-"βελτιώνουν την εξομοίωση.\n"
+"βελτιώσουν την εξομοίωση.\n"
#: src/emu/ui/ui.cpp:1144
msgid ""
@@ -1761,7 +1742,7 @@ msgid ""
msgstr ""
"\n"
"\n"
-"ΥπάÏχουν κλώνοι Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηχάνηματος που λειτουÏγοÏν: "
+"ΥπάÏχουν κλώνοι Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηχανήματος που λειτουÏγοÏν: "
#: src/emu/ui/ui.cpp:1177
msgid ""
@@ -1771,7 +1752,7 @@ msgid ""
msgstr ""
"\n"
"\n"
-"ΠληκτÏολογήστε OK ή μετακινήσετε το μοχλό αÏιστεÏά και στη συνέχεια, δεξιά "
+"ΠληκτÏολογήστε OK ή μετακινήσετε το μοχλό αÏιστεÏά και στη συνέχεια δεξιά "
"για να συνεχίσετε"
#: src/emu/ui/ui.cpp:1192
@@ -1832,19 +1813,19 @@ msgstr "%2$s\n"
#: src/emu/ui/ui.cpp:1577 src/emu/ui/ui.cpp:1587
msgid "Keyboard Emulation Status"
-msgstr "Κατάσταση εξομοίωσης πληκτÏολογίου"
+msgstr "Κατάσταση Εξομοίωσης ΠληκτÏολογίου"
#: src/emu/ui/ui.cpp:1579
msgid "Mode: PARTIAL Emulation"
-msgstr "ΛειτουÏγία: ΜεÏική εξομοίωση"
+msgstr "ΛειτουÏγία: ΜεÏική Εξομοίωση"
#: src/emu/ui/ui.cpp:1580
msgid "UI: Enabled"
-msgstr "UI: ΕνεÏγοποιημένο"
+msgstr "UI: ΕνεÏγοποιημένο"
#: src/emu/ui/ui.cpp:1582 src/emu/ui/ui.cpp:1592
msgid "**Use ScrLock to toggle**"
-msgstr "** ΧÏήση ScrLock να εναλλαγή **"
+msgstr "**ΧÏήση ScrLock να εναλλαγή**"
#: src/emu/ui/ui.cpp:1589
msgid "Mode: FULL Emulation"
@@ -1973,19 +1954,19 @@ msgstr "Laserdisc '%1$s' Κάθετη Θέση"
#: src/emu/ui/ui.cpp:2081
msgid "Vector Flicker"
-msgstr "ΤÏεμόπαιγμα Διάνυσματος"
+msgstr "ΤÏεμόπαιγμα ΔιανÏσματος"
#: src/emu/ui/ui.cpp:2083
msgid "Beam Width Minimum"
-msgstr "Ελάχιστο πλάτος ακτίνων"
+msgstr "Ελάχιστο Πλάτος Ακτινών"
#: src/emu/ui/ui.cpp:2085
msgid "Beam Width Maximum"
-msgstr "Μέγιστο πλάτος ακτίνων"
+msgstr "Μέγιστο Πλάτος Ακτινών"
#: src/emu/ui/ui.cpp:2087
msgid "Beam Intensity Weight"
-msgstr "ΒάÏος έντασης ακτίνας"
+msgstr "ΒάÏος Έντασης Ακτίνας"
#: src/emu/ui/ui.cpp:2099
#, c-format
@@ -2003,7 +1984,7 @@ msgstr "Y"
#: src/emu/ui/ui.cpp:2102
#, c-format
msgid "Crosshair Offset %1$s"
-msgstr "Μετατόπιση στοχάστÏου %1$s"
+msgstr "Μετατόπιση ΣτοχάστÏου %1$s"
#: src/emu/ui/ui.cpp:2121
#, c-format
@@ -2061,12 +2042,12 @@ msgstr "Κλίμακα ΣτόχαστÏου Y %1$1.3f"
#: src/emu/ui/ui.cpp:2563
#, c-format
msgid "Crosshair Offset X %1$1.3f"
-msgstr "Μετατόπιση στοχάστÏου X %1$1.3f"
+msgstr "Μετατόπιση ΣτοχάστÏου X %1$1.3f"
#: src/emu/ui/ui.cpp:2563
#, c-format
msgid "Crosshair Offset Y %1$1.3f"
-msgstr "Μετατόπιση στοχάστÏου Y %1$1.3f"
+msgstr "Μετατόπιση ΣτοχάστÏου Y %1$1.3f"
#: src/emu/ui/videoopt.cpp:55
#, c-format
diff --git a/language/Hebrew/strings.po b/language/Hebrew/strings.po
index 91d1028a2ef..53c91bedfa6 100644
--- a/language/Hebrew/strings.po
+++ b/language/Hebrew/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -317,12 +317,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -412,34 +409,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -552,11 +549,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -571,28 +565,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -656,19 +645,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -899,11 +888,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -997,38 +986,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1074,17 +1063,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1099,29 +1083,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1129,271 +1114,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1401,7 +1386,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1409,57 +1394,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Hindi/strings.po b/language/Hindi/strings.po
index 720e915af1d..eb4070938ea 100644
--- a/language/Hindi/strings.po
+++ b/language/Hindi/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -316,12 +316,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -411,34 +408,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -551,11 +548,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -570,28 +564,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -655,19 +644,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -898,11 +887,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -996,38 +985,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1073,17 +1062,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1098,29 +1082,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1128,271 +1113,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1400,7 +1385,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1408,57 +1393,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Hungarian/strings.po b/language/Hungarian/strings.po
index 75862998335..02e033f47a9 100644
--- a/language/Hungarian/strings.po
+++ b/language/Hungarian/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -317,12 +317,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -412,34 +409,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -552,11 +549,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -571,28 +565,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -656,19 +645,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -899,11 +888,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -997,38 +986,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1074,17 +1063,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1099,29 +1083,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1129,271 +1114,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1401,7 +1386,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1409,57 +1394,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Indonesian/strings.po b/language/Indonesian/strings.po
index 42267467455..bc50d0e789e 100644
--- a/language/Indonesian/strings.po
+++ b/language/Indonesian/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -317,12 +317,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -412,34 +409,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -552,11 +549,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -571,28 +565,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -656,19 +645,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -899,11 +888,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -997,38 +986,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1074,17 +1063,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1099,29 +1083,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1129,271 +1114,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1401,7 +1386,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1409,57 +1394,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Italian/strings.po b/language/Italian/strings.po
index 0438eae01f2..9b1f10ddd92 100644
--- a/language/Italian/strings.po
+++ b/language/Italian/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Angelo Salese,Antonio Paradossi,Fabio Priuli\n"
"Language-Team: MAME Language Team\n"
@@ -321,13 +321,10 @@ msgstr "Ripristina colori originali"
msgid "UI Colors Settings"
msgstr "Impostazione Colori UI"
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr "Doppio click o premi "
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
-msgstr " per cambiare il colore"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
+msgstr ""
#: src/emu/ui/custui.cpp:617
msgid "Menu Preview"
@@ -416,34 +413,34 @@ msgstr "History Software"
msgid "Software Usage"
msgstr "Utilizzo Software"
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr "Revisione: "
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -556,12 +553,9 @@ msgid "Folders Setup"
msgstr "Configura Cartelle"
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr "Attuale "
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
-msgstr " Cartelle"
+#, c-format
+msgid "Current %1$s Folders"
+msgstr ""
#: src/emu/ui/dirmenu.cpp:195
msgid "Change Folder"
@@ -575,29 +569,24 @@ msgstr "Aggiungi Cartella"
msgid "Remove Folder"
msgstr "Rimuovi Cartella"
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr "Cambia)"
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
-msgstr "Aggiungi"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
+msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
-msgstr " Cartella - Cerca: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
+msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr "Premi TAB per impostare"
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr "Rimuovi "
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
-msgstr " Cartella"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
+msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
msgid "Video Mode"
@@ -660,19 +649,19 @@ msgstr "Opzioni Display"
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr "Si"
@@ -903,11 +892,11 @@ msgstr "Torna al Menu Precedente"
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -1003,38 +992,38 @@ msgstr "Non mostrare il menu di selezione BIOS"
msgid "Skip software parts selection menu"
msgstr "Non mostrare il menu di selezione del software"
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr "Opzioni Varie"
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr "%s.xml salvato nella cartella UI."
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr "Nome: Descrizione:\n"
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr "%s.txt salvato nella cartella UI."
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr "Esporta in formato XML (come -listxml)"
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr "Esporta in formato TXT (come -listfull)"
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1080,18 +1069,13 @@ msgid "Settings"
msgstr "Impostazioni"
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
+msgid "**Error saving ui.ini**"
msgstr "**Errore nel salvataggio del file ui.ini**"
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
-msgstr ""
-
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
-msgstr ""
+msgid "**Error saving %s.ini**"
+msgstr "**Errore nel salvataggio del file %s.ini**"
#: src/emu/ui/optsmenu.cpp:376
msgid ""
@@ -1108,14 +1092,15 @@ msgid "Selection List - Search: "
msgstr "Lista Selezione - Cerca: "
#: src/emu/ui/selector.cpp:181
-msgid " to select"
-msgstr " per scegliere"
+#, c-format
+msgid "Double click or press %1$s to select"
+msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
@@ -1124,15 +1109,15 @@ msgstr ""
"%s\n"
" aggiunto alla lista dei preferiti."
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1144,260 +1129,260 @@ msgstr ""
"\n"
"Premi un tasto (tranne ESC) per continuare."
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr "Configura Opzioni"
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr "%1$s %2$s ( %3$d / %4$d macchine (%5$d BIOS) )"
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr "Il Driver è un clone di: %-.100s"
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr "Il Driver è un Parent\n"
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr "Complessivamente: NON FUNZIONANTE"
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr "Complessivamente: Protezione Non Emulata"
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr "Complessivamente: Funzionante"
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr "Sistema: %1$-.100s"
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr "Produttore: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr "Il Driver è un Clone di: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr "Il Driver è un Parent\n"
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr "Complessivamente: NON FUNZIONANTE\n"
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr "Complessivamente: Protezione Non Emulata\n"
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr "Complessivamente: Funzionante\n"
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr "Grafica: Colori Non Perfetti\n"
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr "Grafica: Non Perfetta\n"
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr "Grafica: OK\n"
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr "Audio: Non Implementato\n"
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr "Audio: Non Perfetto\n"
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr "Il Driver è Skeleton: %s\n"
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr "Il Driver è un Bios: %1$s\n"
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr "Verticale"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr "Orizzontale"
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr "Esito Audit Rom: OK\n"
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr "Esito Audit Rom: BAD\n"
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr "Esito Audit Sample: Non Necessario\n"
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr "Esito Audit Sample: OK\n"
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr "Esito Audit Sample: BAD\n"
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
@@ -1405,12 +1390,12 @@ msgstr ""
"Esito Audit Rom: Disabilitato\n"
"Esito Audit Sample: Disabilitato\n"
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr "Nessuna Informazione Disponibile"
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr "Utilizzo"
@@ -1418,7 +1403,7 @@ msgstr "Utilizzo"
msgid " (default)"
msgstr " (predefinito)"
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1426,57 +1411,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr "Selezione parte software:"
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr "Selezione BIOS:"
@@ -2082,6 +2067,36 @@ msgstr " COLORI"
msgid " PENS"
msgstr " PEN"
+#~ msgid "Double click or press "
+#~ msgstr "Doppio click o premi "
+
+#~ msgid " to change the color value"
+#~ msgstr " per cambiare il colore"
+
+#~ msgid " to select"
+#~ msgstr " per scegliere"
+
+#~ msgid "Current "
+#~ msgstr "Attuale "
+
+#~ msgid " Folders"
+#~ msgstr " Cartelle"
+
+#~ msgid "Change)"
+#~ msgstr "Cambia)"
+
+#~ msgid "Add"
+#~ msgstr "Aggiungi"
+
+#~ msgid " Folder - Search: "
+#~ msgstr " Cartella - Cerca: "
+
+#~ msgid "Remove "
+#~ msgstr "Rimuovi "
+
+#~ msgid " Folder"
+#~ msgstr " Cartella"
+
#~ msgid " Search: "
#~ msgstr " Cerca: "
diff --git a/language/Japanese/strings.po b/language/Japanese/strings.po
index e0360fc4d39..ad06243c659 100644
--- a/language/Japanese/strings.po
+++ b/language/Japanese/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-23 01:39+0900\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -144,7 +144,7 @@ msgstr "ä»–ã®ãƒ•ィルタ"
#: src/emu/ui/custmenu.cpp:174 src/emu/ui/optsmenu.cpp:239
msgid "^!Manufacturer"
-msgstr ""
+msgstr "^!製造元"
#: src/emu/ui/custmenu.cpp:183 src/emu/ui/custmenu.cpp:468
#: src/emu/ui/optsmenu.cpp:247
@@ -321,13 +321,10 @@ msgstr "å…ƒã®è‰²ã«æˆ»ã™"
msgid "UI Colors Settings"
msgstr "UIã®è‰²è¨­å®š"
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr "値を変更ã™ã‚‹ã«ã¯"
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
-msgstr "を押ã™ã‹ãƒ€ãƒ–ルクリックã—ã¦ãã ã•ã„"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
+msgstr "色ã®å€¤ã‚’変更ã™ã‚‹ã«ã¯%1$sを押ã™ã‹ãƒ€ãƒ–ルクリックã—ã¦ãã ã•ã„"
#: src/emu/ui/custui.cpp:617
msgid "Menu Preview"
@@ -374,7 +371,7 @@ msgstr "パレットã‹ã‚‰é¸ã¶"
#: src/emu/ui/custui.cpp:906
msgid " - ARGB Settings"
-msgstr " - ARGB設定"
+msgstr "ã®ARGB設定"
#: src/emu/ui/custui.cpp:930
msgid "Color preview ="
@@ -416,34 +413,34 @@ msgstr "ソフトウェアã®ãƒ’ストリ"
msgid "Software Usage"
msgstr "ソフトウェアã®ä½¿ã„æ–¹"
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr "リビジョン:"
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr "ヒストリファイル"
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr "Mameinfoファイル"
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr "Messinfoファイル"
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr "Sysinfoファイル"
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr "Mamescoreファイル"
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr "コマンドファイル"
@@ -556,12 +553,9 @@ msgid "Folders Setup"
msgstr "フォルダ設定"
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr "ç¾åœ¨ã®"
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
-msgstr " フォルダ"
+#, c-format
+msgid "Current %1$s Folders"
+msgstr "ç¾åœ¨ã®%1$sフォルダ"
#: src/emu/ui/dirmenu.cpp:195
msgid "Change Folder"
@@ -575,33 +569,28 @@ msgstr "フォルダを追加"
msgid "Remove Folder"
msgstr "フォルダを削除"
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr "変更)"
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
-msgstr "フォルダを"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
+msgstr "%1$sフォルダを変更 〜 検索:%2$s_"
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
-msgstr " 追加 - 検索:"
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
+msgstr "%1$sフォルダを追加 〜 検索:%2$s_"
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
-msgstr "TABを押ã—ã¦è¨­å®š"
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr "フォルダを"
+msgstr "TABキーを押ã—ã¦è¨­å®š"
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
-msgstr " 削除ã™ã‚‹"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
+msgstr "%1$sフォルダを削除"
#: src/emu/ui/dsplmenu.cpp:38
msgid "Video Mode"
-msgstr ""
+msgstr "ビデオモード"
#: src/emu/ui/dsplmenu.cpp:40
msgid "Hardware Stretch"
@@ -633,7 +622,7 @@ msgstr ""
#: src/emu/ui/dsplmenu.cpp:48
msgid "Window Mode"
-msgstr ""
+msgstr "ウィンドウモード"
#: src/emu/ui/dsplmenu.cpp:49
msgid "Enforce Aspect Ratio"
@@ -660,33 +649,33 @@ msgstr "表示オプション"
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
#: src/emu/ui/filesel.cpp:271
msgid "New Image Name:"
-msgstr ""
+msgstr "æ–°ã—ã„イメージå:"
#: src/emu/ui/filesel.cpp:277
msgid "Image Format:"
-msgstr ""
+msgstr "イメージ形å¼:"
#: src/emu/ui/filesel.cpp:283
msgid "Create"
-msgstr ""
+msgstr "作æˆ"
#: src/emu/ui/filesel.cpp:314
msgid "Please enter a file extension too"
@@ -694,23 +683,23 @@ msgstr ""
#: src/emu/ui/filesel.cpp:502 src/emu/ui/swlist.cpp:65
msgid "[empty slot]"
-msgstr ""
+msgstr "〔空ã®ã‚¹ãƒ­ãƒƒãƒˆã€•"
#: src/emu/ui/filesel.cpp:506
msgid "[create]"
-msgstr ""
+msgstr "〔作æˆã€•"
#: src/emu/ui/filesel.cpp:510 src/emu/ui/swlist.cpp:76
msgid "[software list]"
-msgstr "ã€ã‚½ãƒ•トウェアリスト】"
+msgstr "〔ソフトウェアリスト〕"
#: src/emu/ui/filesel.cpp:802
msgid "Select image format"
-msgstr ""
+msgstr "イメージ形å¼ã®é¸æŠž"
#: src/emu/ui/filesel.cpp:862
msgid "Select access mode"
-msgstr ""
+msgstr "アクセスモードã®é¸æŠž"
#: src/emu/ui/filesel.cpp:863
msgid "Read-only"
@@ -718,7 +707,7 @@ msgstr "読ã¿å–り専用"
#: src/emu/ui/filesel.cpp:865
msgid "Read-write"
-msgstr ""
+msgstr "読ã¿å–ã‚Šï¼æ›¸ãè¾¼ã¿"
#: src/emu/ui/filesel.cpp:866
msgid "Read this image, write to another image"
@@ -748,7 +737,7 @@ msgstr ""
#: src/emu/ui/info.cpp:109
msgid "[empty]"
-msgstr ""
+msgstr "〔空〕"
#: src/emu/ui/info_pty.cpp:26 src/emu/ui/mainmenu.cpp:90
msgid "Pseudo terminals"
@@ -756,7 +745,7 @@ msgstr "擬似ターミナル"
#: src/emu/ui/info_pty.cpp:35
msgid "[failed]"
-msgstr ""
+msgstr "ã€å¤±æ•—】"
#: src/emu/ui/inputmap.cpp:52
msgid "User Interface"
@@ -773,7 +762,7 @@ msgstr "リセット"
#: src/emu/ui/mainmenu.cpp:53
msgid "Input (general)"
-msgstr "入力(一般)"
+msgstr "入力(共通)"
#: src/emu/ui/mainmenu.cpp:55
msgid "Input (this Machine)"
@@ -877,7 +866,7 @@ msgstr "ゲームオーãƒãƒ¼"
#: src/emu/ui/menu.cpp:63
msgid "Add or remove favorites"
-msgstr ""
+msgstr "ãŠæ°—ã«å…¥ã‚Šã«è¿½åŠ ã¾ãŸã¯å‰Šé™¤"
#: src/emu/ui/menu.cpp:64
msgid "Export displayed list to file"
@@ -885,7 +874,7 @@ msgstr ""
#: src/emu/ui/menu.cpp:65
msgid "Show DATs view"
-msgstr ""
+msgstr "DATビューを表示"
#: src/emu/ui/menu.cpp:252
msgid "Return to Machine"
@@ -901,15 +890,15 @@ msgstr "å‰ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã«æˆ»ã‚‹"
#: src/emu/ui/menu.cpp:680
msgid "Auto"
-msgstr ""
+msgstr "自動"
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
-msgstr ""
+msgstr "ç”»åƒ"
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
-msgstr ""
+msgstr "情報"
#: src/emu/ui/miscmenu.cpp:36
msgid "Keyboard Mode:"
@@ -1005,38 +994,38 @@ msgstr "BIOSé¸æŠžãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’ã‚¹ã‚­ãƒƒãƒ—ã™ã‚‹"
msgid "Skip software parts selection menu"
msgstr "ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ãƒ‘ãƒ¼ãƒ„é¸æŠžãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’ã‚¹ã‚­ãƒƒãƒ—ã™ã‚‹"
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr "ãã®ä»–ã®è¨­å®š"
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
-msgstr ""
+msgstr "%s.xmlã‚’uiフォルダーã«ä¿å­˜ã—ã¾ã—ãŸã€‚"
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
-msgstr ""
+msgstr "%s.txtã‚’uiフォルダーã«ä¿å­˜ã—ã¾ã—ãŸã€‚"
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr "マシン設定をä¿å­˜ã™ã‚‹"
@@ -1050,7 +1039,7 @@ msgstr "^!ファイル"
#: src/emu/ui/optsmenu.cpp:231
msgid " ^!Category"
-msgstr ""
+msgstr " ^!カテゴリ"
#: src/emu/ui/optsmenu.cpp:254
msgid "^!Setup custom filter"
@@ -1062,7 +1051,7 @@ msgstr "UIをカスタマイズã™ã‚‹"
#: src/emu/ui/optsmenu.cpp:263
msgid "Configure Directories"
-msgstr "ディレクトリã®è¨­å®š"
+msgstr "フォルダ設定"
#: src/emu/ui/optsmenu.cpp:266 src/emu/ui/sndmenu.cpp:150
#: src/emu/ui/sndmenu.cpp:170
@@ -1082,17 +1071,12 @@ msgid "Settings"
msgstr "設定"
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
+msgid "**Error saving ui.ini**"
msgstr "*** ui.iniã®ä¿å­˜ã‚¨ãƒ©ãƒ¼ ***"
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
-msgstr "*** %s.iniã®ä¿å­˜ã‚¨ãƒ©ãƒ¼ ***"
-
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr "*** %s.iniã®ä¿å­˜ã‚¨ãƒ©ãƒ¼ ***"
#: src/emu/ui/optsmenu.cpp:376
@@ -1101,39 +1085,43 @@ msgid ""
" Configuration saved \n"
"\n"
msgstr ""
+"\n"
+" 設定をä¿å­˜ã—ã¾ã—㟠\n"
+"\n"
#: src/emu/ui/selector.cpp:152
msgid "Selection List - Search: "
msgstr "é¸æŠžãƒªã‚¹ãƒˆ - 検索:"
#: src/emu/ui/selector.cpp:181
-msgid " to select"
-msgstr "を押ã™ã‹ãƒ€ãƒ–ルクリックã§é¸æŠžã—ã¦ãã ã•ã„"
+#, c-format
+msgid "Double click or press %1$s to select"
+msgstr "%1$sを押ã™ã‹ãƒ€ãƒ–ルクリックã§é¸æŠžã—ã¦ãã ã•ã„"
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
-msgstr ""
+msgstr "一般情報"
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-"「%sã€ã¯\n"
-"ãŠæ°—ã«å…¥ã‚Šã«è¿½åŠ ã—ãŸã€‚"
+"「%sã€ã‚’\n"
+"ãŠæ°—ã«å…¥ã‚Šã«è¿½åŠ ã—ã¾ã—ãŸã€‚"
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-"「%sã€ã¯\n"
-"ãŠæ°—ã«å…¥ã‚Šã‹ã‚‰å‰Šé™¤ã—ãŸã€‚"
+"「%sã€ã‚’\n"
+"ãŠæ°—ã«å…¥ã‚Šã‹ã‚‰å‰Šé™¤ã—ã¾ã—ãŸã€‚"
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1141,271 +1129,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr "オプションã®è¨­å®š"
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr "マシンã®è¨­å®š"
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr "%1$s(%2$s〜%3$s)〜"
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr "%1$s(%2$s)〜"
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr "%1$s検索:%2$s_"
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
-msgstr ""
+msgstr "サウンド:未実装"
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr "年度: %1$s\n"
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
-msgstr ""
+msgstr "製造元: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
-msgstr ""
+msgstr "サウンド: 未実装\n"
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
-msgstr ""
+msgid "Screen Orientation: %1$s\n"
+msgstr "ç”»é¢ã®å‘ã: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
-msgstr ""
+msgstr "縦"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
-msgstr ""
+msgstr "横"
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr "利用å¯èƒ½ãªæƒ…å ±ã¯ã‚りã¾ã›ã‚“"
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr "ä½¿ã„æ–¹"
@@ -1413,7 +1401,7 @@ msgstr "ä½¿ã„æ–¹"
msgid " (default)"
msgstr "(デフォルト)"
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1421,59 +1409,59 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr "ドライãƒï¼šã€Œ%1$sã€ã€€ã‚½ãƒ•トウェアリスト"
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr "リージョン:%1$s〜"
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr "発売元:%1$s〜"
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr "年度:%1$s〜"
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr "ソフトウェアリスト:%1$s〜"
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr "デãƒã‚¤ã‚¹ã‚¿ã‚¤ãƒ—:%1$s〜"
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr "%1$s検索:%2$s_"
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr "%1$-.100s"
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr "é¸æŠžä¸­ã®ã‚½ãƒ•トウェアパーツ:"
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
-msgstr "BIOSé¸æŠž: "
+msgstr "BIOSé¸æŠžï¼š"
#: src/emu/ui/simpleselgame.cpp:232
#, c-format
@@ -1508,12 +1496,12 @@ msgstr ""
#: src/emu/ui/simpleselgame.cpp:345
msgid "Unimplemented"
-msgstr ""
+msgstr "未実装"
#: src/emu/ui/simpleselgame.cpp:351
#, c-format
msgid "Gfx: %s, Sound: %s"
-msgstr ""
+msgstr "グラフィックス:%s サウンド:%s"
#: src/emu/ui/slotopt.cpp:166
msgid " [internal]"
@@ -1546,15 +1534,15 @@ msgstr ""
#: src/emu/ui/swlist.cpp:268
msgid "shortname"
-msgstr ""
+msgstr "ソフト"
#: src/emu/ui/swlist.cpp:268
msgid "description"
-msgstr ""
+msgstr "åå‰"
#: src/emu/ui/swlist.cpp:436
msgid "[compatible lists]"
-msgstr ""
+msgstr "ã€äº’æ›ãƒªã‚¹ãƒˆã€‘"
#: src/emu/ui/tapectrl.cpp:84
msgid "stopped"
@@ -1586,7 +1574,7 @@ msgstr "å†ç”Ÿ"
#: src/emu/ui/tapectrl.cpp:100
msgid "Record"
-msgstr ""
+msgstr "録音"
#: src/emu/ui/tapectrl.cpp:103
msgid "Rewind"
@@ -1870,7 +1858,7 @@ msgstr "マスター音é‡"
#: src/emu/ui/ui.cpp:1977
#, c-format
msgid "%1$s Volume"
-msgstr "%1$s音é‡"
+msgstr "%1$sã®éŸ³é‡"
#: src/emu/ui/ui.cpp:1999
#, c-format
@@ -1880,7 +1868,7 @@ msgstr ""
#: src/emu/ui/ui.cpp:2019
#, c-format
msgid "%1$s Refresh Rate"
-msgstr ""
+msgstr "%1$sã®ãƒªãƒ•レッシュレート"
#: src/emu/ui/ui.cpp:2025
#, c-format
@@ -2078,3 +2066,6 @@ msgstr " 色"
#: src/emu/ui/viewgfx.cpp:391
msgid " PENS"
msgstr " ペン"
+
+#~ msgid "**Error loading %s.ini**"
+#~ msgstr "*** %s.iniã®èª­ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ ***"
diff --git a/language/Korean/strings.po b/language/Korean/strings.po
index ec094fb8c38..8d18024b6e9 100644
--- a/language/Korean/strings.po
+++ b/language/Korean/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -318,12 +318,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -413,34 +410,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -553,11 +550,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -572,28 +566,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -657,19 +646,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -900,11 +889,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -998,38 +987,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1075,17 +1064,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1100,29 +1084,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1130,271 +1115,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1402,7 +1387,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1410,57 +1395,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/LICENSE b/language/LICENSE
new file mode 100644
index 00000000000..670154e3538
--- /dev/null
+++ b/language/LICENSE
@@ -0,0 +1,116 @@
+CC0 1.0 Universal
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later
+claims of infringement build upon, modify, incorporate in other works, reuse
+and redistribute as freely as possible in any form whatsoever and for any
+purposes, including without limitation commercial purposes. These owners may
+contribute to the Commons to promote the ideal of a free culture and the
+further production of creative, cultural and scientific works, or to gain
+reputation or greater distribution for their Work in part through the use and
+efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with a
+Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not limited
+to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display, communicate,
+ and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or performer(s);
+
+ iii. publicity and privacy rights pertaining to a person's image or likeness
+ depicted in a Work;
+
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+
+ v. rights protecting the extraction, dissemination, use and reuse of data in
+ a Work;
+
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation thereof,
+ including any amended or successor version of such directive); and
+
+ vii. other similar, equivalent or corresponding rights throughout the world
+ based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time
+extensions), (iii) in any current or future medium and for any number of
+copies, and (iv) for any purpose whatsoever, including without limitation
+commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
+the Waiver for the benefit of each member of the public at large and to the
+detriment of Affirmer's heirs and successors, fully intending that such Waiver
+shall not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of the Work
+by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account
+Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
+is so judged Affirmer hereby grants to each affected person a royalty-free,
+non transferable, non sublicensable, non exclusive, irrevocable and
+unconditional license to exercise Affirmer's Copyright and Related Rights in
+the Work (i) in all territories worldwide, (ii) for the maximum duration
+provided by applicable law or treaty (including future time extensions), (iii)
+in any current or future medium and for any number of copies, and (iv) for any
+purpose whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed effective as
+of the date CC0 was applied by Affirmer to the Work. Should any part of the
+License for any reason be judged legally invalid or ineffective under
+applicable law, such partial invalidity or ineffectiveness shall not
+invalidate the remainder of the License, and in such case Affirmer hereby
+affirms that he or she will not (i) exercise any of his or her remaining
+Copyright and Related Rights in the Work or (ii) assert any associated claims
+and causes of action with respect to the Work, in either case contrary to
+Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+
+ b. Affirmer offers the Work as-is and makes no representations or warranties
+ of any kind concerning the Work, express, implied, statutory or otherwise,
+ including without limitation warranties of title, merchantability, fitness
+ for a particular purpose, non infringement, or the absence of latent or
+ other defects, accuracy, or the present or absence of errors, whether or not
+ discoverable, all to the greatest extent permissible under applicable law.
+
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without limitation
+ any person's Copyright and Related Rights in the Work. Further, Affirmer
+ disclaims responsibility for obtaining any necessary consents, permissions
+ or other rights required for any use of the Work.
+
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to this
+ CC0 or use of the Work.
+
+For more information, please see
+<http://creativecommons.org/publicdomain/zero/1.0/>
diff --git a/language/Latvian/strings.po b/language/Latvian/strings.po
index fc0748b6a20..64445608a27 100644
--- a/language/Latvian/strings.po
+++ b/language/Latvian/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -318,12 +318,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -413,34 +410,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -553,11 +550,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -572,28 +566,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -657,19 +646,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -900,11 +889,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -998,38 +987,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1075,17 +1064,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1100,29 +1084,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1130,271 +1115,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1402,7 +1387,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1410,57 +1395,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Lithuanian/strings.po b/language/Lithuanian/strings.po
index 5b59054dd38..b4f3bc9350f 100644
--- a/language/Lithuanian/strings.po
+++ b/language/Lithuanian/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -318,12 +318,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -413,34 +410,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -553,11 +550,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -572,28 +566,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -657,19 +646,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -900,11 +889,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -998,38 +987,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1075,17 +1064,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1100,29 +1084,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1130,271 +1115,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1402,7 +1387,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1410,57 +1395,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Macedonian/strings.po b/language/Macedonian/strings.po
index b020732264d..0481c5743a3 100644
--- a/language/Macedonian/strings.po
+++ b/language/Macedonian/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -316,12 +316,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -411,34 +408,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -551,11 +548,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -570,28 +564,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -655,19 +644,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -898,11 +887,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -996,38 +985,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1073,17 +1062,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1098,29 +1082,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1128,271 +1113,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1400,7 +1385,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1408,57 +1393,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Norwegian/strings.po b/language/Norwegian/strings.po
index 17a6ccc47e0..aa5e2ebd28a 100644
--- a/language/Norwegian/strings.po
+++ b/language/Norwegian/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -317,12 +317,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -412,34 +409,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -552,11 +549,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -571,28 +565,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -656,19 +645,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -899,11 +888,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -997,38 +986,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1074,17 +1063,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1099,29 +1083,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1129,271 +1114,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1401,7 +1386,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1409,57 +1394,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Persian/strings.po b/language/Persian/strings.po
index fec73606e4a..5a863199f49 100644
--- a/language/Persian/strings.po
+++ b/language/Persian/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -316,12 +316,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -411,34 +408,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -551,11 +548,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -570,28 +564,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -655,19 +644,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -898,11 +887,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -996,38 +985,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1073,17 +1062,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1098,29 +1082,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1128,271 +1113,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1400,7 +1385,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1408,57 +1393,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Polish/strings.po b/language/Polish/strings.po
index e41b685cb85..843635fed3d 100644
--- a/language/Polish/strings.po
+++ b/language/Polish/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -319,12 +319,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -414,34 +411,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -554,11 +551,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -573,28 +567,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -658,19 +647,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -901,11 +890,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -999,38 +988,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1076,17 +1065,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1101,29 +1085,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1131,271 +1116,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1403,7 +1388,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1411,57 +1396,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Portuguese/strings.po b/language/Portuguese/strings.po
index fbd1eec02ed..37f34271c78 100644
--- a/language/Portuguese/strings.po
+++ b/language/Portuguese/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -317,12 +317,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -412,34 +409,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -552,11 +549,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -571,28 +565,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -656,19 +645,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -899,11 +888,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -997,38 +986,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1074,17 +1063,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1099,29 +1083,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1129,271 +1114,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1401,7 +1386,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1409,57 +1394,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Portuguese_Brazil/strings.po b/language/Portuguese_Brazil/strings.po
index 11cff8229d7..154d1a1e4fd 100644
--- a/language/Portuguese_Brazil/strings.po
+++ b/language/Portuguese_Brazil/strings.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
-"PO-Revision-Date: 2016-02-27 08:52+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
+"PO-Revision-Date: 2016-03-02 14:00+0100\n"
"Last-Translator: Ashura-X\n"
"Language-Team: MAME Language Team\n"
"Language: pt_BR\n"
@@ -142,12 +142,12 @@ msgstr "Outro filtro"
#: src/emu/ui/custmenu.cpp:174 src/emu/ui/optsmenu.cpp:239
msgid "^!Manufacturer"
-msgstr ""
+msgstr "^!Fabricante"
#: src/emu/ui/custmenu.cpp:183 src/emu/ui/custmenu.cpp:468
#: src/emu/ui/optsmenu.cpp:247
msgid "^!Year"
-msgstr ""
+msgstr "^!Ano"
#: src/emu/ui/custmenu.cpp:192 src/emu/ui/custmenu.cpp:504
msgid "Remove last filter"
@@ -164,11 +164,11 @@ msgstr "Selecionar filtros customizáveis:"
#: src/emu/ui/custmenu.cpp:459
msgid "^!Publisher"
-msgstr ""
+msgstr "^!Editor"
#: src/emu/ui/custmenu.cpp:477
msgid "^!Software List"
-msgstr ""
+msgstr "^!Lista de Software"
#: src/emu/ui/custmenu.cpp:486
msgid "^!Device type"
@@ -216,7 +216,7 @@ msgstr "Configurações Customizadas do UI"
#: src/emu/ui/custui.cpp:268
msgid "default"
-msgstr ""
+msgstr "padrão"
#: src/emu/ui/custui.cpp:371
msgid "UI Font"
@@ -319,13 +319,10 @@ msgstr "Restaurar as cores originais"
msgid "UI Colors Settings"
msgstr "Configurações de cores do UI"
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr "Duplo-clique ou pressione"
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
-msgstr "para mudar o valor da cor"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
+msgstr "Duplo-clique ou pressione %1$s para mudar o valor da cor"
#: src/emu/ui/custui.cpp:617
msgid "Menu Preview"
@@ -349,22 +346,22 @@ msgstr "Mouse Over"
#: src/emu/ui/custui.cpp:860 src/emu/ui/custui.cpp:863
msgid "Alpha"
-msgstr ""
+msgstr "Opacidade"
#: src/emu/ui/custui.cpp:868 src/emu/ui/custui.cpp:871
#: src/emu/ui/custui.cpp:1030
msgid "Red"
-msgstr ""
+msgstr "Vermelho"
#: src/emu/ui/custui.cpp:876 src/emu/ui/custui.cpp:879
#: src/emu/ui/custui.cpp:1033
msgid "Green"
-msgstr ""
+msgstr "Verde"
#: src/emu/ui/custui.cpp:884 src/emu/ui/custui.cpp:887
#: src/emu/ui/custui.cpp:1034
msgid "Blue"
-msgstr ""
+msgstr "Azul"
#: src/emu/ui/custui.cpp:890
msgid "Choose from palette"
@@ -380,31 +377,31 @@ msgstr "Visualização da cor"
#: src/emu/ui/custui.cpp:1026
msgid "White"
-msgstr ""
+msgstr "Branco"
#: src/emu/ui/custui.cpp:1027
msgid "Silver"
-msgstr ""
+msgstr "Prata"
#: src/emu/ui/custui.cpp:1028
msgid "Gray"
-msgstr ""
+msgstr "Cinza"
#: src/emu/ui/custui.cpp:1029
msgid "Black"
-msgstr ""
+msgstr "Preto"
#: src/emu/ui/custui.cpp:1031
msgid "Orange"
-msgstr ""
+msgstr "Laranja"
#: src/emu/ui/custui.cpp:1032
msgid "Yellow"
-msgstr ""
+msgstr "Amarelo"
#: src/emu/ui/custui.cpp:1035
msgid "Violet"
-msgstr ""
+msgstr "Violeta"
#: src/emu/ui/datmenu.cpp:59
msgid "Software History"
@@ -414,34 +411,34 @@ msgstr "História do Software"
msgid "Software Usage"
msgstr "Uso do Software"
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr "Revisão: "
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr "História"
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr "Mameinfo"
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr "Messinfo"
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr "Sysinfo"
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr "Mamescore"
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr "Command"
@@ -554,12 +551,9 @@ msgid "Folders Setup"
msgstr "Configurar Pastas"
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr "Atual"
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
-msgstr "Pastas"
+#, c-format
+msgid "Current %1$s Folders"
+msgstr ""
#: src/emu/ui/dirmenu.cpp:195
msgid "Change Folder"
@@ -573,33 +567,28 @@ msgstr "Adicionar Pasta"
msgid "Remove Folder"
msgstr "Remover Pasta"
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr "Mudar)"
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
-msgstr "Adicionar"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
+msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
-msgstr " Busca - Pasta: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
+msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr "Pressione TAB para definir"
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr "Remover "
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
-msgstr " Pasta"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
+msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
msgid "Video Mode"
-msgstr ""
+msgstr "Modo do Vídeo"
#: src/emu/ui/dsplmenu.cpp:40
msgid "Hardware Stretch"
@@ -607,47 +596,47 @@ msgstr ""
#: src/emu/ui/dsplmenu.cpp:41
msgid "Triple Buffering"
-msgstr ""
+msgstr "Buffering Triplo"
#: src/emu/ui/dsplmenu.cpp:42
msgid "HLSL"
-msgstr ""
+msgstr "HLSL"
#: src/emu/ui/dsplmenu.cpp:44
msgid "GLSL"
-msgstr ""
+msgstr "GLSL"
#: src/emu/ui/dsplmenu.cpp:45
msgid "Bilinear Filtering"
-msgstr ""
+msgstr "Filtragem Bilinear"
#: src/emu/ui/dsplmenu.cpp:46
msgid "Bitmap Prescaling"
-msgstr ""
+msgstr "Pré-escala de Bitmap"
#: src/emu/ui/dsplmenu.cpp:47
msgid "Multi-Threaded Rendering"
-msgstr ""
+msgstr "Renderização em Múltiplas Threads"
#: src/emu/ui/dsplmenu.cpp:48
msgid "Window Mode"
-msgstr ""
+msgstr "Modo Janela"
#: src/emu/ui/dsplmenu.cpp:49
msgid "Enforce Aspect Ratio"
-msgstr ""
+msgstr "Forçar Razão de Aspecto"
#: src/emu/ui/dsplmenu.cpp:50
msgid "Start Out Maximized"
-msgstr ""
+msgstr "Iniciar Maximizado"
#: src/emu/ui/dsplmenu.cpp:51
msgid "Synchronized Refresh"
-msgstr ""
+msgstr "Atualização de Quadros Sincronizada"
#: src/emu/ui/dsplmenu.cpp:52
msgid "Wait Vertical Sync"
-msgstr ""
+msgstr "Aguardar Sincronismo Vertical"
#: src/emu/ui/dsplmenu.cpp:204 src/emu/ui/dsplmenu.cpp:224
#: src/emu/ui/optsmenu.cpp:265
@@ -656,21 +645,21 @@ msgstr "Opções de Tela"
#: src/emu/ui/filesel.cpp:159
msgid "File Already Exists - Override?"
-msgstr ""
+msgstr "Arquivo Já Existe - Sobrescrever?"
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -867,47 +856,47 @@ msgstr ""
#: src/emu/ui/menu.cpp:50
msgid "Artwork Preview"
-msgstr ""
+msgstr "Pré-Visualização da Arte"
#: src/emu/ui/menu.cpp:54
msgid "Game Over"
-msgstr ""
+msgstr "Fim de Jogo"
#: src/emu/ui/menu.cpp:63
msgid "Add or remove favorites"
-msgstr ""
+msgstr "Adicionar ou remover favoritos"
#: src/emu/ui/menu.cpp:64
msgid "Export displayed list to file"
-msgstr ""
+msgstr "Exportar lista exibida para arquivo"
#: src/emu/ui/menu.cpp:65
msgid "Show DATs view"
-msgstr ""
+msgstr "Exibir visualização de DATs"
#: src/emu/ui/menu.cpp:252
msgid "Return to Machine"
-msgstr ""
+msgstr "Voltar à Máquina"
#: src/emu/ui/menu.cpp:256 src/emu/ui/menu.cpp:258
msgid "Exit"
-msgstr ""
+msgstr "Sair"
#: src/emu/ui/menu.cpp:263 src/emu/ui/menu.cpp:265
msgid "Return to Previous Menu"
-msgstr ""
+msgstr "Voltar ao Menu Anterior"
#: src/emu/ui/menu.cpp:680
msgid "Auto"
-msgstr ""
+msgstr "Automático"
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
-msgstr ""
+msgstr "Imagens"
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
-msgstr ""
+msgstr "Informações"
#: src/emu/ui/miscmenu.cpp:36
msgid "Keyboard Mode:"
@@ -926,14 +915,14 @@ msgstr "Emulado"
msgid ""
"Uptime: %1$d:%2$02d:%3$02d\n"
"\n"
-msgstr ""
+msgstr "Tempo em execução: %1$d:%2$02d:%3$02d\n"
#: src/emu/ui/miscmenu.cpp:241
#, c-format
msgid ""
"Uptime: %1$d:%2$02d\n"
"\n"
-msgstr ""
+msgstr "Tempo em execução: %1$d:%2$02d\n"
#: src/emu/ui/miscmenu.cpp:245
#, c-format
@@ -944,12 +933,12 @@ msgstr ""
#: src/emu/ui/miscmenu.cpp:256
msgid "Coin %1$c: NA%3$s\n"
-msgstr ""
+msgstr "Ficha %1$c: NA%3$s\n"
#: src/emu/ui/miscmenu.cpp:256
#, c-format
msgid "Coin %1$c: %2$d%3$s\n"
-msgstr ""
+msgstr "Ficha %1$c: %2$d%3$s\n"
#: src/emu/ui/miscmenu.cpp:259
msgid " (locked)"
@@ -999,40 +988,40 @@ msgstr "Pular menu de seleção da bios"
msgid "Skip software parts selection menu"
msgstr "Pular menu de seleção para o software em partes"
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr "Opções Diversas"
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
-msgstr ""
+msgstr "%/.xml salvo no diretório ui."
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
-msgstr ""
+msgstr "Nome: Descrição:\n"
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
-msgstr ""
+msgstr "%s.txt salvo no diretório ui."
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
-msgstr ""
+msgstr "Exportar em formato XML (como -listxml)"
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
-msgstr ""
+msgstr "Exportar em formato TXT (como -listfull)"
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
-msgstr ""
+msgstr "Salvar Configuração da Máquina"
#: src/emu/ui/optsmenu.cpp:217
msgid "Filter"
@@ -1040,19 +1029,19 @@ msgstr "Filtro"
#: src/emu/ui/optsmenu.cpp:226
msgid " ^!File"
-msgstr ""
+msgstr " ^!Arquivo"
#: src/emu/ui/optsmenu.cpp:231
msgid " ^!Category"
-msgstr ""
+msgstr " ^!Categoria"
#: src/emu/ui/optsmenu.cpp:254
msgid "^!Setup custom filter"
-msgstr ""
+msgstr "^!Configurar filtro personalizado"
#: src/emu/ui/optsmenu.cpp:262
msgid "Customize UI"
-msgstr "Customizar UI"
+msgstr "Customizar Interface"
#: src/emu/ui/optsmenu.cpp:263
msgid "Configure Directories"
@@ -1076,18 +1065,13 @@ msgid "Settings"
msgstr "Configurações"
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr "**Erro salvando ui.ini**"
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
-msgstr ""
+msgid "**Error saving ui.ini**"
+msgstr "**Erro ao salvar ui.ini**"
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
-msgstr ""
+msgid "**Error saving %s.ini**"
+msgstr "**Erro ao salvar %s.ini**"
#: src/emu/ui/optsmenu.cpp:376
msgid ""
@@ -1101,301 +1085,306 @@ msgid "Selection List - Search: "
msgstr "Lista de Seleção - Busca: "
#: src/emu/ui/selector.cpp:181
-msgid " to select"
-msgstr " para selecionar"
+#, c-format
+msgid "Double click or press %1$s to select"
+msgstr "Pressione %1$s ou clique duas vezes para selecionar"
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
-msgstr ""
+msgstr "Informações Gerais"
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
-msgstr ""
+msgstr " adicionado à lista de favoritos."
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
-msgstr ""
+msgstr " removido da lista de favoritos."
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
"\n"
"Press any key (except ESC) to continue."
msgstr ""
+"Faltam arquivos ROM ou CHD correspondentes à máquina selecionada. Por favor, "
+"selecione uma outra máquina.\n"
+"\n"
+"Pressione qualquer tecla (exceto ESC) para continuar."
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr "Opções de configuração"
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
-msgstr ""
+msgstr "Configurar Máquina"
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
-msgstr ""
+msgstr "%1$s %2$s ( %3$d / %4$d máquinas (%5$d BIOS) )"
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
-msgstr ""
+msgstr "%1$s (%2$s - %3$s) -"
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
-msgstr ""
+msgstr "%1$s (%2$s) - "
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
-msgstr ""
+msgstr "%1$s Busca: %2$s_"
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
-msgstr ""
+msgstr "Romset: %1$-.100s"
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
-msgstr ""
+msgstr "%1$s, %2$-.100s"
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
-msgstr ""
+msgstr "Driver é clone de: %1$-.100s"
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
-msgstr ""
+msgstr "Driver é o principal"
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
-msgstr ""
+msgstr "Geral: NÃO FUNCIONA"
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
-msgstr ""
+msgstr "Geral: Proteção Não Emulada"
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
-msgstr ""
+msgstr "Geral: Funcionando"
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
-msgstr ""
+msgstr "Gráficos: Imperfeitos, "
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
-msgstr ""
+msgstr "Gráficos: OK, "
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
-msgstr ""
+msgstr "Som: Não Implementado"
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
-msgstr ""
+msgstr "Som: Imperfeito"
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
-msgstr ""
+msgstr "Som: OK"
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
-msgstr ""
+msgstr "Software é o principal"
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
-msgstr ""
+msgstr "Suportado: Não"
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
-msgstr ""
+msgstr "Suportado: Parcialmente"
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
-msgstr ""
+msgstr "Suportado: Sim"
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
-msgstr ""
+msgstr "romset: %1$-.100s"
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
-msgstr ""
+msgstr "%1$s %2$s"
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
-msgstr ""
+msgstr "Romset: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
-msgstr ""
+msgstr "Ano: %1$s\n"
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
-msgstr ""
+msgstr "Fabricante: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
-msgstr ""
+msgstr "Driver é Clone de: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
-msgstr ""
+msgstr "Driver é o Principal\n"
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
-msgstr ""
+msgstr "Geral: NÃO FUNCIONA\n"
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
-msgstr ""
+msgstr "Geral: Proteção Não Emulada\n"
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
-msgstr ""
+msgstr "Geral: Funcionando\n"
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
-msgstr ""
+msgstr "Gráficos: Cores Imperfeitas\n"
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
-msgstr ""
+msgstr "Gráficos: Imperfeitos\n"
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
-msgstr ""
+msgstr "Gráficos: OK\n"
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
-msgstr ""
+msgstr "Som: Não Implementado\n"
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
-msgstr ""
+msgstr "Som: Imperfeito\n"
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
-msgstr ""
+msgstr "Som: OK\n"
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
-msgstr ""
+msgstr "Driver é Preliminar: %1$s\n"
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
-msgstr ""
+msgstr "Jogo é Mecânico: %1$s\n"
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
-msgstr ""
+msgstr "Requer Arte: %1$s\n"
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
-msgstr ""
+msgstr "Requer Arte Clicável: %1$s\n"
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
-msgstr ""
+msgstr "Suporta Cocktail: %1$s\n"
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
-msgstr ""
+msgstr "Driver é Bios: %1$s\n"
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
-msgstr ""
+msgstr "Suporta Salvar: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
-msgstr ""
+msgid "Screen Orientation: %1$s\n"
+msgstr "Orientação da Tela: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
-msgstr ""
+msgstr "Horizontal"
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
-msgstr ""
+msgstr "Requer CHD: %1$s\n"
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
-msgstr ""
+msgstr "Checagem de Roms: OK\n"
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
-msgstr ""
+msgstr "Checagem de Roms: ERRO\n"
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
-msgstr ""
+msgstr "Checagem de Amostras Sonoras: Não Necessárias\n"
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
-msgstr ""
+msgstr "Checagem de Amostras Sonoras: OK\n"
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
-msgstr ""
+msgstr "Checagem de Amostras Sonoras: ERRO\n"
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr "Sem Informação Disponível"
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr "Uso"
@@ -1403,7 +1392,7 @@ msgstr "Uso"
msgid " (default)"
msgstr " (padrão)"
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1411,57 +1400,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
-msgstr ""
+msgstr "Região: %1$s -"
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
-msgstr ""
+msgstr "Editor: %1$s -"
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
-msgstr ""
+msgstr "Ano: %1$s -"
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
-msgstr ""
+msgstr "Lista de Software: %1$s -"
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
-msgstr ""
+msgstr "Tipo de Dispositivo"
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
-msgstr ""
+msgstr "%s Busca: %s_"
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr "Seleção por parte de Software"
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr "Seleção da Bios"
@@ -1523,68 +1512,68 @@ msgstr "Usar Amostras Externas"
#: src/emu/ui/swlist.cpp:70
msgid "[file manager]"
-msgstr ""
+msgstr "[gerenciador de arquivos]"
#: src/emu/ui/swlist.cpp:235
msgid "Switch Item Ordering"
-msgstr ""
+msgstr "Alterar Ordem dos Itens"
#: src/emu/ui/swlist.cpp:268
#, c-format
msgid "Switched Order: entries now ordered by %s"
-msgstr ""
+msgstr "Ordem Alterada: Entradas agora ordenadas por %s"
#: src/emu/ui/swlist.cpp:268
msgid "shortname"
-msgstr ""
+msgstr "nome curto"
#: src/emu/ui/swlist.cpp:268
msgid "description"
-msgstr ""
+msgstr "descrição"
#: src/emu/ui/swlist.cpp:436
msgid "[compatible lists]"
-msgstr ""
+msgstr "[listas compatíveis]"
#: src/emu/ui/tapectrl.cpp:84
msgid "stopped"
-msgstr ""
+msgstr "parado"
#: src/emu/ui/tapectrl.cpp:86
msgid "playing"
-msgstr ""
+msgstr "jogando"
#: src/emu/ui/tapectrl.cpp:86
msgid "(playing)"
-msgstr ""
+msgstr "(jogando)"
#: src/emu/ui/tapectrl.cpp:87
msgid "recording"
-msgstr ""
+msgstr "gravando"
#: src/emu/ui/tapectrl.cpp:87
msgid "(recording)"
-msgstr ""
+msgstr "(gravando)"
#: src/emu/ui/tapectrl.cpp:94
msgid "Pause/Stop"
-msgstr ""
+msgstr "Pausar/Parar"
#: src/emu/ui/tapectrl.cpp:97
msgid "Play"
-msgstr ""
+msgstr "Tocar"
#: src/emu/ui/tapectrl.cpp:100
msgid "Record"
-msgstr ""
+msgstr "Gravar"
#: src/emu/ui/tapectrl.cpp:103
msgid "Rewind"
-msgstr ""
+msgstr "Rebobinar"
#: src/emu/ui/tapectrl.cpp:106
msgid "Fast Forward"
-msgstr ""
+msgstr "Avanço Rápido"
#: src/emu/ui/ui.cpp:415
msgid "This driver requires images to be loaded in the following device(s): "
@@ -1603,6 +1592,14 @@ msgid ""
"\n"
"Otherwise, type OK or move the joystick left then right to continue"
msgstr ""
+"O uso de emuladores em conjunto com ROMs que você não possui é proibido por "
+"leis de direitos autorais\n"
+"\n"
+"SE VOCÊ NÃO ESTà LEGALMENTE ENTITULADO PARA JOGAR \"%1$s\" NESTE EMULADOR, "
+"PRESSIONE ESC.\n"
+"\n"
+"Caso contrário, digite OK ou mova o joystick para a esquerda e direita para "
+"continuar"
#: src/emu/ui/ui.cpp:1081
msgid ""
@@ -1730,11 +1727,11 @@ msgstr ""
#: src/emu/ui/ui.cpp:1228 src/emu/ui/ui.cpp:1267
msgid "MHz"
-msgstr ""
+msgstr "MHz"
#: src/emu/ui/ui.cpp:1228 src/emu/ui/ui.cpp:1267
msgid "kHz"
-msgstr ""
+msgstr "kHz"
#: src/emu/ui/ui.cpp:1242
msgid ""
@@ -1754,7 +1751,7 @@ msgstr "Nada"
#: src/emu/ui/ui.cpp:1282
msgid "Vector"
-msgstr ""
+msgstr "Vetorial"
#: src/emu/ui/ui.cpp:1293
#, c-format
@@ -1827,6 +1824,10 @@ msgid ""
"Press ''%1$s'' to quit,\n"
"Press ''%2$s'' to return to emulation."
msgstr ""
+"Tem certeza que deseja sair?\n"
+"\n"
+"Pressione ''%1$s'' para sair,\n"
+"Pressione ''%2$s'' para retornar à emulação."
#: src/emu/ui/ui.cpp:1967
msgid "Master Volume"
@@ -1835,72 +1836,72 @@ msgstr "Volume Mestre"
#: src/emu/ui/ui.cpp:1977
#, c-format
msgid "%1$s Volume"
-msgstr ""
+msgstr "%1$s Volume"
#: src/emu/ui/ui.cpp:1999
#, c-format
msgid "Overclock CPU %1$s"
-msgstr ""
+msgstr "Overclock CPU %1$s"
#: src/emu/ui/ui.cpp:2019
#, c-format
msgid "%1$s Refresh Rate"
-msgstr ""
+msgstr "Taxa de Atualização da %1$s"
#: src/emu/ui/ui.cpp:2025
#, c-format
msgid "%1$s Brightness"
-msgstr ""
+msgstr "Brilho da %1$s"
#: src/emu/ui/ui.cpp:2028
#, c-format
msgid "%1$s Contrast"
-msgstr ""
+msgstr "Contraste da %1$s"
#: src/emu/ui/ui.cpp:2031
#, c-format
msgid "%1$s Gamma"
-msgstr ""
+msgstr "Gama da %1$s"
#: src/emu/ui/ui.cpp:2036
#, c-format
msgid "%1$s Horiz Stretch"
-msgstr ""
+msgstr "Extensão Horizontal da %1$s"
#: src/emu/ui/ui.cpp:2039
#, c-format
msgid "%1$s Horiz Position"
-msgstr ""
+msgstr "Posição Horizontal %1$s"
#: src/emu/ui/ui.cpp:2042
#, c-format
msgid "%1$s Vert Stretch"
-msgstr ""
+msgstr "Extensão Vertical da %1$s"
#: src/emu/ui/ui.cpp:2045
#, c-format
msgid "%1$s Vert Position"
-msgstr ""
+msgstr "Posição Vertical da %1$s"
#: src/emu/ui/ui.cpp:2063
#, c-format
msgid "Laserdisc '%1$s' Horiz Stretch"
-msgstr ""
+msgstr "Laserdisc '%1$s' Extensão Horizontal"
#: src/emu/ui/ui.cpp:2066
#, c-format
msgid "Laserdisc '%1$s' Horiz Position"
-msgstr ""
+msgstr "Laserdisc '%1$s' Posição Horizontal"
#: src/emu/ui/ui.cpp:2069
#, c-format
msgid "Laserdisc '%1$s' Vert Stretch"
-msgstr ""
+msgstr "Laserdisc '%1$s' Extensão Vertical"
#: src/emu/ui/ui.cpp:2072
#, c-format
msgid "Laserdisc '%1$s' Vert Position"
-msgstr ""
+msgstr "Laserdisc '%1$s' Posição Vertical"
#: src/emu/ui/ui.cpp:2081
msgid "Vector Flicker"
@@ -1921,40 +1922,40 @@ msgstr "Intensidade do tamanho do Feixe de Luz"
#: src/emu/ui/ui.cpp:2099
#, c-format
msgid "Crosshair Scale %1$s"
-msgstr ""
+msgstr "Escala da Mira %1$s"
#: src/emu/ui/ui.cpp:2099 src/emu/ui/ui.cpp:2102
msgid "X"
-msgstr ""
+msgstr "X"
#: src/emu/ui/ui.cpp:2099 src/emu/ui/ui.cpp:2102
msgid "Y"
-msgstr ""
+msgstr "Y"
#: src/emu/ui/ui.cpp:2102
#, c-format
msgid "Crosshair Offset %1$s"
-msgstr ""
+msgstr "Ajuste da Mira"
#: src/emu/ui/ui.cpp:2121
#, c-format
msgid "%1$3ddB"
-msgstr ""
+msgstr "%1$3ddB"
#: src/emu/ui/ui.cpp:2165
#, c-format
msgid "%1$d%%"
-msgstr ""
+msgstr "%1$d%%"
#: src/emu/ui/ui.cpp:2181
#, c-format
msgid "%1$3.0f%%"
-msgstr ""
+msgstr "%1$3.0f%%"
#: src/emu/ui/ui.cpp:2204
#, c-format
msgid "%1$.3ffps"
-msgstr ""
+msgstr "%1$.3ffps"
#: src/emu/ui/ui.cpp:2227 src/emu/ui/ui.cpp:2249 src/emu/ui/ui.cpp:2270
#: src/emu/ui/ui.cpp:2292 src/emu/ui/ui.cpp:2314 src/emu/ui/ui.cpp:2336
@@ -1962,18 +1963,18 @@ msgstr ""
#: src/emu/ui/ui.cpp:2424 src/emu/ui/ui.cpp:2446
#, c-format
msgid "%1$.3f"
-msgstr ""
+msgstr "%1$.3f"
#: src/emu/ui/ui.cpp:2462 src/emu/ui/ui.cpp:2478 src/emu/ui/ui.cpp:2494
#: src/emu/ui/ui.cpp:2510
#, c-format
msgid "%1$1.2f"
-msgstr ""
+msgstr "%1$1.2f"
#: src/emu/ui/ui.cpp:2526
#, c-format
msgid "Screen '%1$s'"
-msgstr ""
+msgstr "Tela '%1$s'"
#: src/emu/ui/ui.cpp:2528
msgid "Screen"
@@ -1982,22 +1983,22 @@ msgstr "Tela"
#: src/emu/ui/ui.cpp:2544
#, c-format
msgid "Crosshair Scale X %1$1.3f"
-msgstr ""
+msgstr "Escala da Mira X %1$1.3f"
#: src/emu/ui/ui.cpp:2544
#, c-format
msgid "Crosshair Scale Y %1$1.3f"
-msgstr ""
+msgstr "Escala da Mira Y %1$1.3f"
#: src/emu/ui/ui.cpp:2563
#, c-format
msgid "Crosshair Offset X %1$1.3f"
-msgstr ""
+msgstr "Ajuste da Mira X %1$1.3f"
#: src/emu/ui/ui.cpp:2563
#, c-format
msgid "Crosshair Offset Y %1$1.3f"
-msgstr ""
+msgstr "Ajuste da Mira Y %1$1.3f"
#: src/emu/ui/videoopt.cpp:55
#, c-format
@@ -2044,26 +2045,32 @@ msgstr " CORES"
msgid " PENS"
msgstr " CANETAS"
+#~ msgid "**Error loading %s.ini**"
+#~ msgstr "**Erro ao carregar %s.ini**"
+
+#~ msgid "**Error loading ui.ini**"
+#~ msgstr "**Erro ao carregar ui.ini**"
+
+#~ msgid "Current "
+#~ msgstr "Atual"
+
+#~ msgid " Folders"
+#~ msgstr "Pastas"
+
+#~ msgid "Change)"
+#~ msgstr "Mudar)"
+
+#~ msgid "Add"
+#~ msgstr "Adicionar"
+
+#~ msgid " Folder - Search: "
+#~ msgstr " Busca - Pasta: "
+
+#~ msgid "Remove "
+#~ msgstr "Remover "
+
+#~ msgid " Folder"
+#~ msgstr " Pasta"
+
#~ msgid "Search: "
#~ msgstr "Busca: "
-
-#~ msgid ""
-#~ "Usage of emulators in conjunction with ROMs you don't own is forbidden by "
-#~ "copyright law.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "O uso de emuladores em conjunto com ROMs que você não possui é proibido "
-#~ "por leis de direitos autorais"
-
-#~ msgid ""
-#~ "IF YOU ARE NOT LEGALLY ENTITLED TO PLAY \"%s\" ON THIS EMULATOR, PRESS "
-#~ "ESC.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "SE VOCÊ NÃO ESTà LEGALMENTE ENTITULADO PARA JOGAR \"%s\" NESTE EMULADOR, "
-#~ "PRESSIONE ESC."
-
-#~ msgid "Otherwise, type OK or move the joystick left then right to continue"
-#~ msgstr ""
-#~ "Caso contrário, digite OK ou mova o joystick para a esquerda e direita "
-#~ "para continuar"
diff --git a/language/README.md b/language/README.md
new file mode 100644
index 00000000000..01449b222a2
--- /dev/null
+++ b/language/README.md
@@ -0,0 +1,5 @@
+# **Translations** #
+
+Translation files contains work of many authors used to localize MAME to more languages.
+
+Licensed under [CC0 1.0 Universal (CC0 1.0)](https://creativecommons.org/publicdomain/zero/1.0/) \ No newline at end of file
diff --git a/language/Romanian/strings.po b/language/Romanian/strings.po
index 580e4f26efa..7cfe5078d04 100644
--- a/language/Romanian/strings.po
+++ b/language/Romanian/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -319,12 +319,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -414,34 +411,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -554,11 +551,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -573,28 +567,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -658,19 +647,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -901,11 +890,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -999,38 +988,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1076,17 +1065,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1101,29 +1085,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1131,271 +1116,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1403,7 +1388,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1411,57 +1396,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Russian/strings.po b/language/Russian/strings.po
index 7dd70148d6c..60da52ae231 100644
--- a/language/Russian/strings.po
+++ b/language/Russian/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -321,13 +321,10 @@ msgstr "ВоÑÑтановить изначальные цвета"
msgid "UI Colors Settings"
msgstr "ÐаÑтройка цветов интерфейÑа"
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr "Кликните два раза или нажмите "
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
-msgstr " Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ†Ð²ÐµÑ‚Ð°"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
+msgstr ""
#: src/emu/ui/custui.cpp:617
msgid "Menu Preview"
@@ -416,34 +413,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr "РевизиÑ: "
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -556,12 +553,9 @@ msgid "Folders Setup"
msgstr "УÑтановки папок"
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr "Текущий "
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
-msgstr " Папки"
+#, c-format
+msgid "Current %1$s Folders"
+msgstr ""
#: src/emu/ui/dirmenu.cpp:195
msgid "Change Folder"
@@ -575,29 +569,24 @@ msgstr "Добавить папку"
msgid "Remove Folder"
msgstr "Удалить папку"
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr "Изменить)"
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
-msgstr "Добавить"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
+msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
-msgstr " Папка - ПоиÑк: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
+msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr "Ðажмите TAB Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð°"
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr "Убрать "
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
-msgstr " Папка"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
+msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
msgid "Video Mode"
@@ -660,19 +649,19 @@ msgstr "ÐаÑтройки видео"
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -903,11 +892,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -1001,38 +990,38 @@ msgstr "ПропуÑкать меню выбора BIOS"
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr "Дополнительные наÑтройки"
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1078,17 +1067,12 @@ msgid "Settings"
msgstr "ÐаÑтройки"
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
+msgid "**Error saving ui.ini**"
msgstr "**Ошибка при Ñохранении ui.ini**"
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
-msgstr ""
-
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1103,29 +1087,30 @@ msgid "Selection List - Search: "
msgstr "СпиÑок выбора - ПоиÑк: "
#: src/emu/ui/selector.cpp:181
-msgid " to select"
-msgstr " Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð°"
+#, c-format
+msgid "Double click or press %1$s to select"
+msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1133,271 +1118,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr "Изменение наÑтроек"
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr "Ðет информации"
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr "ИÑпользование"
@@ -1405,7 +1390,7 @@ msgstr "ИÑпользование"
msgid " (default)"
msgstr " (по-умолчанию)"
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1413,57 +1398,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr "Выбор BIOS:"
@@ -2050,6 +2035,36 @@ msgstr " ЦВЕТÐ"
msgid " PENS"
msgstr ""
+#~ msgid "Double click or press "
+#~ msgstr "Кликните два раза или нажмите "
+
+#~ msgid " to change the color value"
+#~ msgstr " Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ†Ð²ÐµÑ‚Ð°"
+
+#~ msgid " to select"
+#~ msgstr " Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð°"
+
+#~ msgid "Current "
+#~ msgstr "Текущий "
+
+#~ msgid " Folders"
+#~ msgstr " Папки"
+
+#~ msgid "Change)"
+#~ msgstr "Изменить)"
+
+#~ msgid "Add"
+#~ msgstr "Добавить"
+
+#~ msgid " Folder - Search: "
+#~ msgstr " Папка - ПоиÑк: "
+
+#~ msgid "Remove "
+#~ msgstr "Убрать "
+
+#~ msgid " Folder"
+#~ msgstr " Папка"
+
#~ msgid " Search: "
#~ msgstr " ПоиÑк: "
diff --git a/language/Serbian/strings.po b/language/Serbian/strings.po
index 4ae52cdf17f..abd1e58979a 100644
--- a/language/Serbian/strings.po
+++ b/language/Serbian/strings.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
-"PO-Revision-Date: 2016-02-20 18:03+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
+"PO-Revision-Date: 2016-03-02 21:46+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
"Language: sr\n"
@@ -17,22 +17,23 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Poedit 1.8.7\n"
#: src/emu/ui/auditmenu.cpp:111
msgid "Audit in progress..."
-msgstr ""
+msgstr "Provera u toku..."
#: src/emu/ui/barcode.cpp:72
msgid "New Barcode:"
-msgstr ""
+msgstr "Novi barkod:"
#: src/emu/ui/barcode.cpp:76
msgid "Enter Code"
-msgstr ""
+msgstr "Unesite barkod"
#: src/emu/ui/barcode.cpp:118
msgid "Barcode length invalid!"
-msgstr ""
+msgstr "Neodgovarajuća dužina barkoda!"
#: src/emu/ui/cheatopt.cpp:77
#, c-format
@@ -40,105 +41,107 @@ msgid ""
"Cheat Comment:\n"
"%s"
msgstr ""
+"Primedba za varanje:\n"
+"%s"
#: src/emu/ui/cheatopt.cpp:90
msgid "All cheats reloaded"
-msgstr ""
+msgstr "Sva varanja ponovo uÄitana"
#: src/emu/ui/cheatopt.cpp:121
msgid "Autofire Settings"
-msgstr ""
+msgstr "Podešenja automatskog pucanja"
#: src/emu/ui/cheatopt.cpp:139
msgid "Reset All"
-msgstr ""
+msgstr "Resetuji sve"
#: src/emu/ui/cheatopt.cpp:142
msgid "Reload All"
-msgstr ""
+msgstr "Ponovo uÄitaj sve"
#: src/emu/ui/cheatopt.cpp:258
msgid "Autofire Status"
-msgstr ""
+msgstr "Stanje automatskog pucanja"
#: src/emu/ui/cheatopt.cpp:258 src/emu/ui/ui.cpp:1742
#: src/emu/ui/videoopt.cpp:207 src/emu/ui/videoopt.cpp:211
#: src/emu/ui/videoopt.cpp:215 src/emu/ui/videoopt.cpp:219
#: src/emu/ui/videoopt.cpp:223
msgid "Disabled"
-msgstr ""
+msgstr "Onemogućeno"
#: src/emu/ui/cheatopt.cpp:258 src/emu/ui/ui.cpp:1742
#: src/emu/ui/videoopt.cpp:207 src/emu/ui/videoopt.cpp:211
#: src/emu/ui/videoopt.cpp:215 src/emu/ui/videoopt.cpp:219
#: src/emu/ui/videoopt.cpp:223
msgid "Enabled"
-msgstr ""
+msgstr "Omogućeno"
#: src/emu/ui/cheatopt.cpp:284 src/emu/ui/cheatopt.cpp:290
#: src/emu/ui/dsplmenu.cpp:184 src/emu/ui/menu.cpp:674
#: src/emu/ui/sndmenu.cpp:134 src/emu/ui/sndmenu.cpp:136
msgid "On"
-msgstr ""
+msgstr "UkljuÄeno"
#: src/emu/ui/cheatopt.cpp:284 src/emu/ui/cheatopt.cpp:290
#: src/emu/ui/dsplmenu.cpp:184 src/emu/ui/menu.cpp:677
#: src/emu/ui/sndmenu.cpp:134 src/emu/ui/sndmenu.cpp:136
msgid "Off"
-msgstr ""
+msgstr "IskljuÄeno"
#: src/emu/ui/cheatopt.cpp:301
msgid "No buttons found on this machine!"
-msgstr ""
+msgstr "Nema tastera na ovoj mašini!"
#: src/emu/ui/cheatopt.cpp:312 src/emu/ui/cheatopt.cpp:316
msgid "Autofire Delay"
-msgstr ""
+msgstr "Zadrška automatskog pucanja"
#: src/emu/ui/ctrlmenu.cpp:20
msgid "Lightgun Device Assignment"
-msgstr ""
+msgstr "Dodeljivanje Lightgun uređaja"
#: src/emu/ui/ctrlmenu.cpp:21
msgid "Trackball Device Assignment"
-msgstr ""
+msgstr "Dodeljivanje Trackball uređaja"
#: src/emu/ui/ctrlmenu.cpp:22
msgid "Pedal Device Assignment"
-msgstr ""
+msgstr "Dodeljivanje pedale"
#: src/emu/ui/ctrlmenu.cpp:23
msgid "Adstick Device Assignment"
-msgstr ""
+msgstr "Dodeljivanje analogne upravljaÄke palice (džojstika)"
#: src/emu/ui/ctrlmenu.cpp:24
msgid "Paddle Device Assignment"
-msgstr ""
+msgstr "Dodeljivanje rotacionog upravljaÄa s tasterom"
#: src/emu/ui/ctrlmenu.cpp:25
msgid "Dial Device Assignment"
-msgstr ""
+msgstr "Dodeljivanje rotacionog upravljaÄa"
#: src/emu/ui/ctrlmenu.cpp:26
msgid "Positional Device Assignment"
-msgstr ""
+msgstr "Dodeljivanje uređaja za pozicioniranje"
#: src/emu/ui/ctrlmenu.cpp:27
msgid "Mouse Device Assignment"
-msgstr ""
+msgstr "Dodeljivanje miša"
#: src/emu/ui/ctrlmenu.cpp:106 src/emu/ui/ctrlmenu.cpp:126
#: src/emu/ui/optsmenu.cpp:268
msgid "Device Mapping"
-msgstr ""
+msgstr "Mapiranje uređaja"
#: src/emu/ui/custmenu.cpp:156 src/emu/ui/custmenu.cpp:441
msgid "Main filter"
-msgstr ""
+msgstr "Glavni filter"
#: src/emu/ui/custmenu.cpp:165 src/emu/ui/custmenu.cpp:450
msgid "Other filter"
-msgstr ""
+msgstr "Drugi filter"
#: src/emu/ui/custmenu.cpp:174 src/emu/ui/optsmenu.cpp:239
msgid "^!Manufacturer"
@@ -151,16 +154,16 @@ msgstr ""
#: src/emu/ui/custmenu.cpp:192 src/emu/ui/custmenu.cpp:504
msgid "Remove last filter"
-msgstr ""
+msgstr "Ukloni poslednji filter"
#: src/emu/ui/custmenu.cpp:195 src/emu/ui/custmenu.cpp:507
msgid "Add filter"
-msgstr ""
+msgstr "Dodaj filter"
#: src/emu/ui/custmenu.cpp:210 src/emu/ui/custmenu.cpp:230
#: src/emu/ui/custmenu.cpp:523 src/emu/ui/custmenu.cpp:543
msgid "Select custom filters:"
-msgstr ""
+msgstr "Izbor proizvoljnih filtera"
#: src/emu/ui/custmenu.cpp:459
msgid "^!Publisher"
@@ -180,39 +183,39 @@ msgstr ""
#: src/emu/ui/custui.cpp:20
msgid "Show All"
-msgstr ""
+msgstr "Prikaži sve"
#: src/emu/ui/custui.cpp:21
msgid "Hide Filters"
-msgstr ""
+msgstr "Sakrij filtere"
#: src/emu/ui/custui.cpp:22
msgid "Hide Info/Image"
-msgstr ""
+msgstr "Sakrij Info/Sliku"
#: src/emu/ui/custui.cpp:23
msgid "Hide Both"
-msgstr ""
+msgstr "Sakrij oboje"
#: src/emu/ui/custui.cpp:139
msgid "Fonts"
-msgstr ""
+msgstr "Fontovi"
#: src/emu/ui/custui.cpp:140
msgid "Colors"
-msgstr ""
+msgstr "Boje"
#: src/emu/ui/custui.cpp:145 src/emu/ui/dirmenu.cpp:33
msgid "Language"
-msgstr ""
+msgstr "Jezici"
#: src/emu/ui/custui.cpp:149
msgid "Show side panels"
-msgstr ""
+msgstr "Prikaži boÄne panele"
#: src/emu/ui/custui.cpp:164 src/emu/ui/custui.cpp:184
msgid "Custom UI Settings"
-msgstr ""
+msgstr "Proizvoljna podeÅ¡enja korisniÄkog interfejsa"
#: src/emu/ui/custui.cpp:268
msgid "default"
@@ -220,75 +223,76 @@ msgstr ""
#: src/emu/ui/custui.cpp:371
msgid "UI Font"
-msgstr ""
+msgstr "Font korisniÄkog interfejsa"
#: src/emu/ui/custui.cpp:375
msgid "Bold"
-msgstr ""
+msgstr "Podebljano"
#: src/emu/ui/custui.cpp:376
msgid "Italic"
-msgstr ""
+msgstr "Ukošeno"
#: src/emu/ui/custui.cpp:381
msgid "Lines"
-msgstr ""
+msgstr "Linije"
#: src/emu/ui/custui.cpp:387
msgid "Infos text size"
-msgstr ""
+msgstr "Visina teksta za informacije"
#: src/emu/ui/custui.cpp:404
msgid "UI Fonts Settings"
-msgstr ""
+msgstr "PodeÅ¡enje fontova za korisniÄki interfejs"
#: src/emu/ui/custui.cpp:431
msgid "Sample text - Lorem ipsum dolor sit amet, consectetur adipiscing elit."
msgstr ""
+"Primer teksta - Lorem ipsum dolor sit amet, consectetur adipiscing elit."
#: src/emu/ui/custui.cpp:529
msgid "Normal text"
-msgstr ""
+msgstr "Normalni tekst"
#: src/emu/ui/custui.cpp:530
msgid "Selected color"
-msgstr ""
+msgstr "Boja izabranog"
#: src/emu/ui/custui.cpp:531
msgid "Normal text background"
-msgstr ""
+msgstr "Pozadina normalnog teksta"
#: src/emu/ui/custui.cpp:532
msgid "Selected background color"
-msgstr ""
+msgstr "Boja pozadine za izabranu stavku"
#: src/emu/ui/custui.cpp:533
msgid "Subitem color"
-msgstr ""
+msgstr "Boja podstavke"
#: src/emu/ui/custui.cpp:534 src/emu/ui/custui.cpp:629
msgid "Clone"
-msgstr ""
+msgstr "Kloniraj"
#: src/emu/ui/custui.cpp:535
msgid "Border"
-msgstr ""
+msgstr "Granica"
#: src/emu/ui/custui.cpp:536
msgid "Background"
-msgstr ""
+msgstr "Pozadina"
#: src/emu/ui/custui.cpp:537
msgid "Dipswitch"
-msgstr ""
+msgstr "DIP prekidaÄ"
#: src/emu/ui/custui.cpp:538
msgid "Unavailable color"
-msgstr ""
+msgstr "Boja za nedostupno"
#: src/emu/ui/custui.cpp:539
msgid "Slider color"
-msgstr ""
+msgstr "Boja klizaÄa"
#: src/emu/ui/custui.cpp:540
msgid "Gfx viewer background"
@@ -296,11 +300,11 @@ msgstr ""
#: src/emu/ui/custui.cpp:541
msgid "Mouse over color"
-msgstr ""
+msgstr "Boja pri prelasku miša"
#: src/emu/ui/custui.cpp:542
msgid "Mouse over background color"
-msgstr ""
+msgstr "Boja pozadine pri prelasku miša"
#: src/emu/ui/custui.cpp:543
msgid "Mouse down color"
@@ -312,39 +316,36 @@ msgstr ""
#: src/emu/ui/custui.cpp:547
msgid "Restore originals colors"
-msgstr ""
+msgstr "Vrati originalne boje"
#: src/emu/ui/custui.cpp:563
msgid "UI Colors Settings"
-msgstr ""
-
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
+msgstr "PodeÅ¡enje boja korisniÄkog interfejsa"
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
msgid "Menu Preview"
-msgstr ""
+msgstr "Probni prikaz menija"
#: src/emu/ui/custui.cpp:625
msgid "Normal"
-msgstr ""
+msgstr "Normalno"
#: src/emu/ui/custui.cpp:626
msgid "Subitem"
-msgstr ""
+msgstr "Podstavka"
#: src/emu/ui/custui.cpp:627
msgid "Selected"
-msgstr ""
+msgstr "Izabrano"
#: src/emu/ui/custui.cpp:628
msgid "Mouse Over"
-msgstr ""
+msgstr "Prelay mišem"
#: src/emu/ui/custui.cpp:860 src/emu/ui/custui.cpp:863
msgid "Alpha"
@@ -367,15 +368,15 @@ msgstr ""
#: src/emu/ui/custui.cpp:890
msgid "Choose from palette"
-msgstr ""
+msgstr "Izabrati iz palete"
#: src/emu/ui/custui.cpp:906
msgid " - ARGB Settings"
-msgstr ""
+msgstr " - ARGB podešenja"
#: src/emu/ui/custui.cpp:930
msgid "Color preview ="
-msgstr ""
+msgstr "Probni prikaz boja ="
#: src/emu/ui/custui.cpp:1026
msgid "White"
@@ -407,193 +408,185 @@ msgstr ""
#: src/emu/ui/datmenu.cpp:59
msgid "Software History"
-msgstr ""
+msgstr "Istorija softvera"
#: src/emu/ui/datmenu.cpp:61
msgid "Software Usage"
-msgstr ""
+msgstr "Upotreba softvera"
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
-msgstr ""
+msgstr "Revizija"
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
-msgstr ""
+msgstr "Istorija"
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
-msgstr ""
+msgstr "Mame - informacije"
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
-msgstr ""
+msgstr "Mess - informacije"
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
-msgstr ""
+msgstr "Systemske informacije"
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
-msgstr ""
+msgstr "Mamescore"
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
-msgstr ""
+msgstr "Komanda"
#: src/emu/ui/dirmenu.cpp:31
msgid "ROMs"
-msgstr ""
+msgstr "ROM-ovi"
#: src/emu/ui/dirmenu.cpp:32
msgid "UI"
-msgstr ""
+msgstr "KorisniÄki interfejs"
#: src/emu/ui/dirmenu.cpp:34
msgid "Samples"
-msgstr ""
+msgstr "Semplovi"
#: src/emu/ui/dirmenu.cpp:35
msgid "DATs"
-msgstr ""
+msgstr "DAT fajlovi"
#: src/emu/ui/dirmenu.cpp:36
msgid "INIs"
-msgstr ""
+msgstr "INI fajlovi"
#: src/emu/ui/dirmenu.cpp:37
msgid "Extra INIs"
-msgstr ""
+msgstr "Dodatni INI fajlovi"
#: src/emu/ui/dirmenu.cpp:38
msgid "Icons"
-msgstr ""
+msgstr "Ikone"
#: src/emu/ui/dirmenu.cpp:39 src/emu/ui/miscmenu.cpp:560
msgid "Cheats"
-msgstr ""
+msgstr "Varanja"
#: src/emu/ui/dirmenu.cpp:40 src/emu/ui/menu.cpp:43
msgid "Snapshots"
-msgstr ""
+msgstr "Snimci ekrana"
#: src/emu/ui/dirmenu.cpp:41 src/emu/ui/menu.cpp:44
msgid "Cabinets"
-msgstr ""
+msgstr "Kabineti"
#: src/emu/ui/dirmenu.cpp:42 src/emu/ui/menu.cpp:47
msgid "Flyers"
-msgstr ""
+msgstr "Letci"
#: src/emu/ui/dirmenu.cpp:43 src/emu/ui/menu.cpp:48
msgid "Titles"
-msgstr ""
+msgstr "Naslovni ekrani"
#: src/emu/ui/dirmenu.cpp:44 src/emu/ui/menu.cpp:49
msgid "Ends"
-msgstr ""
+msgstr "Ekrani završetka igre"
#: src/emu/ui/dirmenu.cpp:45 src/emu/ui/menu.cpp:46
msgid "PCBs"
-msgstr ""
+msgstr "PCB (Å¡tampane ploÄice)"
#: src/emu/ui/dirmenu.cpp:46 src/emu/ui/menu.cpp:58 src/emu/ui/videoopt.cpp:223
msgid "Marquees"
-msgstr ""
+msgstr "Posteri iznad kabineta"
#: src/emu/ui/dirmenu.cpp:47
msgid "Controls Panels"
-msgstr ""
+msgstr "UpravljaÄki paneli"
#: src/emu/ui/dirmenu.cpp:48
msgid "Crosshairs"
-msgstr ""
+msgstr "Nišani"
#: src/emu/ui/dirmenu.cpp:49
msgid "Artworks"
-msgstr ""
+msgstr "Ilustracije"
#: src/emu/ui/dirmenu.cpp:50 src/emu/ui/menu.cpp:51
msgid "Bosses"
-msgstr ""
+msgstr "Finalni protivnici"
#: src/emu/ui/dirmenu.cpp:51
msgid "Artworks Preview"
-msgstr ""
+msgstr "Umanjeni prikaz ilustracija"
#: src/emu/ui/dirmenu.cpp:52 src/emu/ui/menu.cpp:57
msgid "Select"
-msgstr ""
+msgstr "Izborni ekrani"
#: src/emu/ui/dirmenu.cpp:53
msgid "GameOver"
-msgstr ""
+msgstr "Neuspešan kraj igre"
#: src/emu/ui/dirmenu.cpp:54 src/emu/ui/menu.cpp:55
msgid "HowTo"
-msgstr ""
+msgstr "Uputstvo"
#: src/emu/ui/dirmenu.cpp:55 src/emu/ui/menu.cpp:52
msgid "Logos"
-msgstr ""
+msgstr "Logoi"
#: src/emu/ui/dirmenu.cpp:56 src/emu/ui/menu.cpp:56
msgid "Scores"
-msgstr ""
+msgstr "Najbolji rezultata"
#: src/emu/ui/dirmenu.cpp:57 src/emu/ui/menu.cpp:53
msgid "Versus"
-msgstr ""
+msgstr "Versus ekrani"
#: src/emu/ui/dirmenu.cpp:116 src/emu/ui/dirmenu.cpp:136
msgid "Folders Setup"
-msgstr ""
+msgstr "Podešenje direktorijuma"
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
msgid "Change Folder"
-msgstr ""
+msgstr "Promeni direktorijum"
#: src/emu/ui/dirmenu.cpp:195
msgid "Add Folder"
-msgstr ""
+msgstr "Dodaj direktorijum"
#: src/emu/ui/dirmenu.cpp:198
msgid "Remove Folder"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
+msgstr "Ukloni direktorijum"
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
-msgstr ""
+msgstr "Pritisnite TAB da podesite"
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -651,27 +644,27 @@ msgstr ""
#: src/emu/ui/dsplmenu.cpp:204 src/emu/ui/dsplmenu.cpp:224
#: src/emu/ui/optsmenu.cpp:265
msgid "Display Options"
-msgstr ""
+msgstr "Opcije prikaza"
#: src/emu/ui/filesel.cpp:159
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
-msgstr ""
+msgstr "Ne"
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
-msgstr ""
+msgstr "Da"
#: src/emu/ui/filesel.cpp:271
msgid "New Image Name:"
@@ -749,7 +742,7 @@ msgstr ""
#: src/emu/ui/info_pty.cpp:26 src/emu/ui/mainmenu.cpp:90
msgid "Pseudo terminals"
-msgstr ""
+msgstr "Pseudo terminali"
#: src/emu/ui/info_pty.cpp:35
msgid "[failed]"
@@ -766,51 +759,51 @@ msgstr ""
#: src/emu/ui/inputmap.cpp:625 src/emu/ui/miscmenu.cpp:90
#: src/emu/ui/slotopt.cpp:172
msgid "Reset"
-msgstr ""
+msgstr "Resetuj"
#: src/emu/ui/mainmenu.cpp:53
msgid "Input (general)"
-msgstr ""
+msgstr "Podešenje kontrola (globalno)"
#: src/emu/ui/mainmenu.cpp:55
msgid "Input (this Machine)"
-msgstr ""
+msgstr "Podešenje kontrola (ova mašina)"
#: src/emu/ui/mainmenu.cpp:59
msgid "Analog Controls"
-msgstr ""
+msgstr "Analogne kontrole"
#: src/emu/ui/mainmenu.cpp:61
msgid "Dip Switches"
-msgstr ""
+msgstr "DIP prekidaÄi"
#: src/emu/ui/mainmenu.cpp:64
msgid "Machine Configuration"
-msgstr ""
+msgstr "Konfiguracija mašine"
#: src/emu/ui/mainmenu.cpp:68
msgid "Bookkeeping Info"
-msgstr ""
+msgstr "Informacije o knjigovodstvu mašine"
#: src/emu/ui/mainmenu.cpp:71
msgid "Machine Information"
-msgstr ""
+msgstr "Informacije o mašini"
#: src/emu/ui/mainmenu.cpp:77
msgid "Image Information"
-msgstr ""
+msgstr "Informacije o slici"
#: src/emu/ui/mainmenu.cpp:80
msgid "File Manager"
-msgstr ""
+msgstr "Fajl menadžer"
#: src/emu/ui/mainmenu.cpp:85
msgid "Tape Control"
-msgstr ""
+msgstr "Kontrola trake"
#: src/emu/ui/mainmenu.cpp:93
msgid "Bios Selection"
-msgstr ""
+msgstr "Izbor BIOS-a"
#: src/emu/ui/mainmenu.cpp:99
msgid "Slot Devices"
@@ -818,47 +811,47 @@ msgstr ""
#: src/emu/ui/mainmenu.cpp:106
msgid "Barcode Reader"
-msgstr ""
+msgstr "Barkod ÄitaÄ"
#: src/emu/ui/mainmenu.cpp:113
msgid "Network Devices"
-msgstr ""
+msgstr "Mrežni uređaji"
#: src/emu/ui/mainmenu.cpp:118
msgid "Keyboard Mode"
-msgstr ""
+msgstr "Mod tastature"
#: src/emu/ui/mainmenu.cpp:121
msgid "Slider Controls"
-msgstr ""
+msgstr "Kontrole klizaÄa"
#: src/emu/ui/mainmenu.cpp:124
msgid "Video Options"
-msgstr ""
+msgstr "Video opcije"
#: src/emu/ui/mainmenu.cpp:128
msgid "Crosshair Options"
-msgstr ""
+msgstr "Opcije nišana"
#: src/emu/ui/mainmenu.cpp:132
msgid "Cheat"
-msgstr ""
+msgstr "Varanje"
#: src/emu/ui/mainmenu.cpp:136
msgid "External DAT View"
-msgstr ""
+msgstr "Prikaz spoljašnjeg DAT"
#: src/emu/ui/mainmenu.cpp:142
msgid "Add To Favorites"
-msgstr ""
+msgstr "Dodaj u listu omiljenih"
#: src/emu/ui/mainmenu.cpp:144
msgid "Remove From Favorites"
-msgstr ""
+msgstr "Izbriši iz liste omiljenih"
#: src/emu/ui/mainmenu.cpp:151
msgid "Select New Machine"
-msgstr ""
+msgstr "Izaberi novu mašinu"
#: src/emu/ui/menu.cpp:45
msgid "Control Panels"
@@ -886,39 +879,39 @@ msgstr ""
#: src/emu/ui/menu.cpp:252
msgid "Return to Machine"
-msgstr ""
+msgstr "Podešenje kontrola (ova mašina)"
#: src/emu/ui/menu.cpp:256 src/emu/ui/menu.cpp:258
msgid "Exit"
-msgstr ""
+msgstr "Izlaz"
#: src/emu/ui/menu.cpp:263 src/emu/ui/menu.cpp:265
msgid "Return to Previous Menu"
-msgstr ""
+msgstr "Povratak u prethodni meni"
#: src/emu/ui/menu.cpp:680
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
#: src/emu/ui/miscmenu.cpp:36
msgid "Keyboard Mode:"
-msgstr ""
+msgstr "Mod tastature:"
#: src/emu/ui/miscmenu.cpp:36
msgid "Natural"
-msgstr ""
+msgstr "Prirodni"
#: src/emu/ui/miscmenu.cpp:36
msgid "Emulated"
-msgstr ""
+msgstr "Emulirani"
#: src/emu/ui/miscmenu.cpp:239
#, c-format
@@ -926,6 +919,8 @@ msgid ""
"Uptime: %1$d:%2$02d:%3$02d\n"
"\n"
msgstr ""
+"Vreme rada: %1$d:%2$02d:%3$02d\n"
+"\n"
#: src/emu/ui/miscmenu.cpp:241
#, c-format
@@ -933,6 +928,8 @@ msgid ""
"Uptime: %1$d:%2$02d\n"
"\n"
msgstr ""
+"Vreme rada: %1$d:%2$02d\n"
+"\n"
#: src/emu/ui/miscmenu.cpp:245
#, c-format
@@ -940,102 +937,104 @@ msgid ""
"Tickets dispensed: %1$d\n"
"\n"
msgstr ""
+"Izdate karte: %1$d\n"
+"\n"
#: src/emu/ui/miscmenu.cpp:256
msgid "Coin %1$c: NA%3$s\n"
-msgstr ""
+msgstr "Žeton %1$c: NA%3$s\n"
#: src/emu/ui/miscmenu.cpp:256
#, c-format
msgid "Coin %1$c: %2$d%3$s\n"
-msgstr ""
+msgstr "Žeton %1$c: %2$d%3$s\n"
#: src/emu/ui/miscmenu.cpp:259
msgid " (locked)"
-msgstr ""
+msgstr " (zakljuÄano)"
#: src/emu/ui/miscmenu.cpp:518
msgid "Visible Delay"
-msgstr ""
+msgstr "Vidljivo kašnjenje"
#: src/emu/ui/miscmenu.cpp:557
msgid "Re-select last machine played"
-msgstr ""
+msgstr "Ponovo izaberi poslednju mašinu na kojoj se igralo"
#: src/emu/ui/miscmenu.cpp:558
msgid "Enlarge images in the right panel"
-msgstr ""
+msgstr "Uvećaj slike na desnom panelu"
#: src/emu/ui/miscmenu.cpp:559
msgid "DATs info"
-msgstr ""
+msgstr "Informacije o DAT-u"
#: src/emu/ui/miscmenu.cpp:561
msgid "Show mouse pointer"
-msgstr ""
+msgstr "Prikaži pokazivaÄ miÅ¡a"
#: src/emu/ui/miscmenu.cpp:562
msgid "Confirm quit from machines"
-msgstr ""
+msgstr "Potvrdite izlazak iz mašina"
#: src/emu/ui/miscmenu.cpp:563
msgid "Skip displaying information's screen at startup"
-msgstr ""
+msgstr "PreskoÄi prikazivanje informacionog ekrana na poÄetku"
#: src/emu/ui/miscmenu.cpp:564
msgid "Force 4:3 appearance for software snapshot"
-msgstr ""
+msgstr "Koristi 4:3 prikaz za snimke ekrana programa"
#: src/emu/ui/miscmenu.cpp:565
msgid "Use image as background"
-msgstr ""
+msgstr "Koristi sliku kao pozadinu"
#: src/emu/ui/miscmenu.cpp:566
msgid "Skip bios selection menu"
-msgstr ""
+msgstr "PreskoÄi meni sa izborom BIOS-a"
#: src/emu/ui/miscmenu.cpp:567
msgid "Skip software parts selection menu"
-msgstr ""
+msgstr "PreskoÄi meni sa izborom softverskih delova"
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
-msgstr ""
+msgstr "Razne opcije"
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
-msgstr ""
+msgstr "%s.xml saÄuvan u ui direktorijum."
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
-msgstr ""
+msgstr "Ime: Opis:\n"
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
-msgstr ""
+msgstr "%s.txt saÄuvan u ui direktorijum."
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
-msgstr ""
+msgstr "Izvezi XML format"
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
-msgstr ""
+msgstr "Izvezi TXT format"
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
-msgstr ""
+msgstr "SaÄuvaj konfiguraciju maÅ¡ine"
#: src/emu/ui/optsmenu.cpp:217
msgid "Filter"
-msgstr ""
+msgstr "Filter"
#: src/emu/ui/optsmenu.cpp:226
msgid " ^!File"
@@ -1051,42 +1050,37 @@ msgstr ""
#: src/emu/ui/optsmenu.cpp:262
msgid "Customize UI"
-msgstr ""
+msgstr "Prilagodi korisniÄki interfejs"
#: src/emu/ui/optsmenu.cpp:263
msgid "Configure Directories"
-msgstr ""
+msgstr "Konfiguracija direktorijuma"
#: src/emu/ui/optsmenu.cpp:266 src/emu/ui/sndmenu.cpp:150
#: src/emu/ui/sndmenu.cpp:170
msgid "Sound Options"
-msgstr ""
+msgstr "Opcije za zvuk"
#: src/emu/ui/optsmenu.cpp:269
msgid "General Inputs"
-msgstr ""
+msgstr "Globalne kontrole"
#: src/emu/ui/optsmenu.cpp:271
msgid "Save Configuration"
-msgstr ""
+msgstr "SaÄuvaj konfiguraciju"
#: src/emu/ui/optsmenu.cpp:285 src/emu/ui/optsmenu.cpp:305
msgid "Settings"
-msgstr ""
+msgstr "Podešenja"
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
-msgstr ""
+msgid "**Error saving ui.ini**"
+msgstr "**Greška prilikom snimanja ui.ini**"
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
-msgstr ""
+msgid "**Error saving %s.ini**"
+msgstr "**Greška prlikom zapisivanja %s.ini**"
#: src/emu/ui/optsmenu.cpp:376
msgid ""
@@ -1094,315 +1088,329 @@ msgid ""
" Configuration saved \n"
"\n"
msgstr ""
+"\n"
+" Konfiguracija saÄuvana \n"
+"\n"
#: src/emu/ui/selector.cpp:152
msgid "Selection List - Search: "
-msgstr ""
+msgstr "Izborna lista - pretraga:"
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
-msgstr ""
+msgstr "Opšte informacije"
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
+"%s\n"
+" dodato u listu omiljenih"
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
+"%s\n"
+" izbrisano iz liste omiljenih."
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
"\n"
"Press any key (except ESC) to continue."
msgstr ""
+"Izabrana mašina nestoaje jedan ili više neophodnih ROM ili CHD rezervnih "
+"kopija. Molimo Vas izaberiti drugu mašinu.\n"
+"\n"
+"Pritisnite bilo koji taster (osim ESC) za nastavak."
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
-msgstr ""
+msgstr "Konfiguracija opcija"
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
-msgstr ""
+msgstr "Konfiguracija mašine"
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
-msgstr ""
+msgstr "%1$s %2$s ( %3$d / %4$d mašine (%5$d BIOS) )"
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
-msgstr ""
+msgstr "%1$s (%2$s - %3$s) - "
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
-msgstr ""
+msgstr "%1$s (%2$s) - "
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
-msgstr ""
+msgstr "%1$s Pretraga: %2$s_"
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
-msgstr ""
+msgstr "ROM skup: %1$-.100s"
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
-msgstr ""
+msgstr "%1$s, %2$-.100s"
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
-msgstr ""
+msgstr "Drajver je klon od: %1$-.100s"
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
-msgstr ""
+msgstr "Drajver je predak"
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
-msgstr ""
+msgstr "Uopšteno: NE RADI"
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
-msgstr ""
+msgstr "Uopšteno: Zaštita nije emulirana"
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
-msgstr ""
+msgstr "Uopšteno: radi"
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
-msgstr ""
+msgstr "Grafika: nesavršena, "
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
-msgstr ""
+msgstr "Grafika: OK, "
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
-msgstr ""
+msgstr "Zvuk: nije implementiran"
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
-msgstr ""
+msgstr "Zvuk: nesavršen"
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
-msgstr ""
+msgstr "Zvuk: OK"
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
-msgstr ""
+msgstr "Sistem: %1$-.100s"
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
-msgstr ""
+msgstr "Softver je klon od: %1$-.100s"
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
-msgstr ""
+msgstr "Softver je predak"
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
-msgstr ""
+msgstr "Podržano: ne"
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
-msgstr ""
+msgstr "Podržano: delimiÄno"
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
-msgstr ""
+msgstr "Podržano: da"
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
-msgstr ""
+msgstr "ROM skup: %1$-.100s"
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
-msgstr ""
+msgstr "%1$s %2$s"
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
-msgstr ""
+msgstr "ROM skup: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
-msgstr ""
+msgstr "Godina: %1$s\n"
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
-msgstr ""
+msgstr "ProizvoÄ‘aÄ: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
-msgstr ""
+msgstr "Drajver je klon od: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
-msgstr ""
+msgstr "Drajver je predak\n"
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
-msgstr ""
+msgstr "Uopšteno: NE RADI\n"
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
-msgstr ""
+msgstr "Uopšteno: Zaštita nije emulirana\n"
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
-msgstr ""
+msgstr "Uopšteno: radi\n"
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
-msgstr ""
+msgstr "Grafika: nesavršene boje\n"
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
-msgstr ""
+msgstr "Grafika: nesavršena\n"
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
-msgstr ""
+msgstr "Grafika: OK\n"
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
-msgstr ""
+msgstr "Zvuk: nije implementiran\n"
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
-msgstr ""
+msgstr "Zvuk: nesavršen\n"
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
-msgstr ""
+msgstr "Zvuk: OK\n"
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
-msgstr ""
+msgstr "Drajver je okosnica: %s\n"
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
-msgstr ""
+msgstr "Igra je mehaniÄka: %1$s\n"
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
-msgstr ""
+msgstr "Zahteva ilustracije: %1$s\n"
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
-msgstr ""
+msgstr "Zahteva ilustracije na koje moze da se klikne: %1$s\n"
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
-msgstr ""
+msgstr "Podržava \"koktel\" mod: %1$s\n"
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
-msgstr ""
+msgstr "Drajver je BIOS: %1$s\n"
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
-msgstr ""
+msgstr "Podržava snimanje stanja igre: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
-msgstr ""
+msgid "Screen Orientation: %1$s\n"
+msgstr "Orijentacija ekrana: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
-msgstr ""
+msgstr "Vertikalno"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
-msgstr ""
+msgstr "Horizontalno"
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
-msgstr ""
+msgstr "Zahteva CHD: %1$s\n"
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
-msgstr ""
+msgstr "Provera ROM-ova: OK\n"
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
-msgstr ""
+msgstr "Provera ROM-ova: neuspešna\n"
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
-msgstr ""
+msgstr "Provera semplova: nije neophodna\n"
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
-msgstr ""
+msgstr "Provera semplova: OK\n"
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
-msgstr ""
+msgstr "Provera semplova: neuspešna\n"
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
+"Provera ROM-ova: onemogućena\n"
+"Provera semplova: onemogućena\n"
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
-msgstr ""
+msgstr "Informacije nisu dostupne"
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
-msgstr ""
+msgstr "Upotreba"
#: src/emu/ui/selsoft.cpp:109
msgid " (default)"
-msgstr ""
+msgstr " (uobiÄajeno)"
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1410,59 +1418,59 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
-msgstr ""
+msgstr "%1$s %2$s ( %3$d / %4$d softveri )"
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
-msgstr ""
+msgstr "Drajver: \"%1$s\" lista softvera "
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
-msgstr ""
+msgstr "Oblast: %1$s -"
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
-msgstr ""
+msgstr "IzdavaÄ: %1$s -"
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
-msgstr ""
+msgstr "Godina: %1$s -"
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
-msgstr ""
+msgstr "Lista softvera : %1$s -"
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
-msgstr ""
+msgstr "Tip uređaja: %1$s -"
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
-msgstr ""
+msgstr "%s Pretraga: %s_"
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
-msgstr ""
+msgstr "%1$-.100s"
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
-msgstr ""
+msgstr "Izbor dela softvera:"
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
-msgstr ""
+msgstr "Izbor BIOS-a:"
#: src/emu/ui/simpleselgame.cpp:232
#, c-format
@@ -1472,53 +1480,58 @@ msgid ""
"If this is your first time using %2$s, please see the config.txt file in the "
"docs directory for information on configuring %2$s."
msgstr ""
+"Nisu proanađene mašine. Molimo Vas, proverite putanju do ROM fajlova "
+"definisanu u %1$s.ini fajlu\n"
+"\n"
+"Ako je ovo Vaš prvi put da koristite %2$s, molimo Vas pogledajte config.txt "
+"fajl u docs direktorijumu za informacije o podešenju %2$s."
#: src/emu/ui/simpleselgame.cpp:287
#, c-format
msgid "Type name or select: %1$s_"
-msgstr ""
+msgstr "Otkucajte ime ili izaberite: %1$s_"
#: src/emu/ui/simpleselgame.cpp:289
msgid "Type name or select: (random)"
-msgstr ""
+msgstr "Otkucajte ime ili izaberite: (nasumiÄan izbor)"
#: src/emu/ui/simpleselgame.cpp:328
#, c-format
msgid "Driver: %1$-.100s"
-msgstr ""
+msgstr "Drajver: %1$-.100s"
#: src/emu/ui/simpleselgame.cpp:340 src/emu/ui/simpleselgame.cpp:347
msgid "Imperfect"
-msgstr ""
+msgstr "Nesavršeno"
#: src/emu/ui/simpleselgame.cpp:342 src/emu/ui/simpleselgame.cpp:349
msgid "OK"
-msgstr ""
+msgstr "OK"
#: src/emu/ui/simpleselgame.cpp:345
msgid "Unimplemented"
-msgstr ""
+msgstr "Nije implementirano"
#: src/emu/ui/simpleselgame.cpp:351
#, c-format
msgid "Gfx: %s, Sound: %s"
-msgstr ""
+msgstr "Grafika: %s, zvuk: %s"
#: src/emu/ui/slotopt.cpp:166
msgid " [internal]"
-msgstr ""
+msgstr " [interno]"
#: src/emu/ui/sndmenu.cpp:134
msgid "Sound"
-msgstr ""
+msgstr "Zvuk"
#: src/emu/ui/sndmenu.cpp:135
msgid "Sample Rate"
-msgstr ""
+msgstr "UÄestalost uzorkovanja"
#: src/emu/ui/sndmenu.cpp:136
msgid "Use External Samples"
-msgstr ""
+msgstr "Koristi dodatne semplove"
#: src/emu/ui/swlist.cpp:70
msgid "[file manager]"
@@ -1587,7 +1600,7 @@ msgstr ""
#: src/emu/ui/ui.cpp:415
msgid "This driver requires images to be loaded in the following device(s): "
-msgstr ""
+msgstr "Za ovaj drajver je neophodno da slike budu uÄitane u sledeće ureÄ‘aje:"
#: src/emu/ui/ui.cpp:1043
#, c-format
@@ -1600,75 +1613,92 @@ msgid ""
"\n"
"Otherwise, type OK or move the joystick left then right to continue"
msgstr ""
+"Upotreba emulatora u vezi sa ROM-ovima koje ne posedujete je zabranjena "
+"zakonom o autorskim pravima.\n"
+"\n"
+"AKO VAM NIJE DOZVOLJENO ZAKONOM DA IGRATE \"%1$s\" NA OVOM EMULATORU, "
+"PRITISNITE ESC.\n"
+"\n"
+"U suprotnom, otkucajte OK ili pomerite komandnu palicu (džojstik) levo, pa "
+"desno da nastavite"
#: src/emu/ui/ui.cpp:1081
msgid ""
"One or more ROMs/CHDs for this machine are incorrect. The machine may not "
"run correctly.\n"
msgstr ""
+"Jedan ili više ROM/CHD fajlova za ovu mašinu su neispravni. Mašina možda "
+"neće ispravno raditi.\n"
#: src/emu/ui/ui.cpp:1094
msgid ""
"There are known problems with this machine\n"
"\n"
msgstr ""
+"Postoje poznati problemi s ovom mašinom\n"
+"\n"
#: src/emu/ui/ui.cpp:1098
msgid ""
"One or more ROMs/CHDs for this machine have not been correctly dumped.\n"
msgstr ""
+"Jedan ili više ROM/CHD fajlova za ovu mašinu nisu ispravno napravljeni.\n"
#: src/emu/ui/ui.cpp:1102
#, c-format
msgid "The keyboard emulation may not be 100% accurate.\n"
-msgstr ""
+msgstr "Emulacija tastature možda nije 100% taÄna.\n"
#: src/emu/ui/ui.cpp:1104
#, c-format
msgid "The colors aren't 100% accurate.\n"
-msgstr ""
+msgstr "Boje nisu 100% taÄne.\n"
#: src/emu/ui/ui.cpp:1106
msgid "The colors are completely wrong.\n"
-msgstr ""
+msgstr "Boje su potpuno pogrešne.\n"
#: src/emu/ui/ui.cpp:1108
#, c-format
msgid "The video emulation isn't 100% accurate.\n"
-msgstr ""
+msgstr "Video emulacija nije 100% taÄna.\n"
#: src/emu/ui/ui.cpp:1110
#, c-format
msgid "The sound emulation isn't 100% accurate.\n"
-msgstr ""
+msgstr "Emulacija zvuka nije 100% taÄna.\n"
#: src/emu/ui/ui.cpp:1112
msgid "The machine lacks sound.\n"
-msgstr ""
+msgstr "Mašini nedostaje zvuk.\n"
#: src/emu/ui/ui.cpp:1115
msgid "Screen flipping in cocktail mode is not supported.\n"
-msgstr ""
+msgstr "Obrtanje ekrana u \"koktel\" modu nije podržano.\n"
#: src/emu/ui/ui.cpp:1119
msgid "The machine requires external artwork files\n"
-msgstr ""
+msgstr "Mašina zahteva dodatne ilustracione fajlove\n"
#: src/emu/ui/ui.cpp:1124
msgid ""
"This machine was never completed. It may exhibit strange behavior or missing "
"elements that are not bugs in the emulation.\n"
msgstr ""
+"MaÅ¡sina nije nikad zavrÅ¡ena. Može se javiti Äudno ponaÅ¡anje ili nedostatak "
+"elemenata sto ne predstavlja problem s emulacijom.\n"
#: src/emu/ui/ui.cpp:1129
msgid ""
"This machine has no sound hardware, MAME will produce no sounds, this is "
"expected behaviour.\n"
msgstr ""
+"MaÅ¡ina ne poseduje ureÄ‘aj za zvuk, MAME neće puÅ¡tati zvuk, ovo je oÄekivano "
+"ponašanje.\n"
#: src/emu/ui/ui.cpp:1137
msgid "The machine has protection which isn't fully emulated.\n"
-msgstr ""
+msgstr "Mašina ima zaštitu koja nije potpuno emulirana.\n"
#: src/emu/ui/ui.cpp:1140
msgid ""
@@ -1677,6 +1707,9 @@ msgid ""
"complete. There is nothing you can do to fix this problem except wait for "
"the developers to improve the emulation.\n"
msgstr ""
+"\n"
+"OVA MAŠINA NE RADI. Emulacija ove mašine još nije potpuna. Ne možete ništa "
+"uraditi u vezi s tim, osim da saÄekate programere da unaprede emulaciju.\n"
#: src/emu/ui/ui.cpp:1144
msgid ""
@@ -1685,6 +1718,10 @@ msgid ""
"physical interaction or consists of mechanical devices. It is not possible "
"to fully play this machine.\n"
msgstr ""
+"\n"
+"Pojedini elementi ove maÅ¡ine se ne mogu emulirati jer zahtevaju fiziÄku "
+"interakciju ili se sastoje od mehaniÄkih ureÄ‘aja. Nemoguće je igrati se na "
+"ovoj mašini u potpunosti.\n"
#: src/emu/ui/ui.cpp:1163
msgid ""
@@ -1692,6 +1729,9 @@ msgid ""
"\n"
"There are working clones of this machine: "
msgstr ""
+"\n"
+"\n"
+"Postoji klonovi ove mašine koji rade: "
#: src/emu/ui/ui.cpp:1177
msgid ""
@@ -1699,6 +1739,10 @@ msgid ""
"\n"
"Type OK or move the joystick left then right to continue"
msgstr ""
+"\n"
+"\n"
+"Otkucajte OK ili pomerite komandnu palicu (džojstik) levo, pa desno da "
+"nastavite"
#: src/emu/ui/ui.cpp:1192
#, c-format
@@ -1709,97 +1753,108 @@ msgid ""
"\n"
"CPU:\n"
msgstr ""
+"%1$s\n"
+"%2$s %3$s\n"
+"Drajver: %4$s\n"
+"\n"
+"CPU:\n"
#: src/emu/ui/ui.cpp:1228 src/emu/ui/ui.cpp:1267
msgid "MHz"
-msgstr ""
+msgstr "MHz"
#: src/emu/ui/ui.cpp:1228 src/emu/ui/ui.cpp:1267
msgid "kHz"
-msgstr ""
+msgstr "kHz"
#: src/emu/ui/ui.cpp:1242
msgid ""
"\n"
"Sound:\n"
msgstr ""
+"\n"
+"Zvuk:\n"
#: src/emu/ui/ui.cpp:1271
msgid ""
"\n"
"Video:\n"
msgstr ""
+"\n"
+"Video:\n"
#: src/emu/ui/ui.cpp:1275
msgid "None\n"
msgstr ""
+"Nijedan\n"
+"\n"
#: src/emu/ui/ui.cpp:1282
msgid "Vector"
-msgstr ""
+msgstr "Vektor"
#: src/emu/ui/ui.cpp:1293
#, c-format
msgid "%1$s: %2$s\n"
-msgstr ""
+msgstr "%1$s: %2$s\n"
#: src/emu/ui/ui.cpp:1293
msgid "%2$s\n"
-msgstr ""
+msgstr "%2$s\n"
#: src/emu/ui/ui.cpp:1577 src/emu/ui/ui.cpp:1587
msgid "Keyboard Emulation Status"
-msgstr ""
+msgstr "Stanje emulacije tastature"
#: src/emu/ui/ui.cpp:1579
msgid "Mode: PARTIAL Emulation"
-msgstr ""
+msgstr "Mod: DELIMIÄŒNA emulacija"
#: src/emu/ui/ui.cpp:1580
msgid "UI: Enabled"
-msgstr ""
+msgstr "KorisniÄki interfejs: omogućen"
#: src/emu/ui/ui.cpp:1582 src/emu/ui/ui.cpp:1592
msgid "**Use ScrLock to toggle**"
-msgstr ""
+msgstr "**Koristite ScrLock da promenite radno stanje**"
#: src/emu/ui/ui.cpp:1589
msgid "Mode: FULL Emulation"
-msgstr ""
+msgstr "Mod: POTPUNA emulacija"
#: src/emu/ui/ui.cpp:1590
msgid "UI: Disabled"
-msgstr ""
+msgstr "KorisniÄki interfejs: onesposobljen"
#: src/emu/ui/ui.cpp:1736
msgid "Autofire can't be enabled"
-msgstr ""
+msgstr "Automatsko pucanje ne može da se omogući"
#: src/emu/ui/ui.cpp:1775
msgid "Select position to save to"
-msgstr ""
+msgstr "Izaberite poziciju na koju želite da snimite"
#: src/emu/ui/ui.cpp:1777
msgid "Select position to load from"
-msgstr ""
+msgstr "Izaberite poziciju sa koje želite da uÄitate"
#: src/emu/ui/ui.cpp:1801
msgid "Save cancelled"
-msgstr ""
+msgstr "ÄŒuvanje stanja igre otkazano"
#: src/emu/ui/ui.cpp:1803
msgid "Load cancelled"
-msgstr ""
+msgstr "UÄitavanje stanja igre otkazano"
#: src/emu/ui/ui.cpp:1846
#, c-format
msgid "Save to position %s"
-msgstr ""
+msgstr "SaÄuvaj na poziciju %s"
#: src/emu/ui/ui.cpp:1851
#, c-format
msgid "Load from position %s"
-msgstr ""
+msgstr "UÄitaj sa pozicije %s"
#: src/emu/ui/ui.cpp:1891
#, c-format
@@ -1809,134 +1864,138 @@ msgid ""
"Press ''%1$s'' to quit,\n"
"Press ''%2$s'' to return to emulation."
msgstr ""
+"Da li ste sigurni da želite da napustite program?\n"
+"\n"
+"Pritisnite ''%s'' za napuštanje programa,\n"
+"Pritisnite ''%s'' za nastavak emulacije."
#: src/emu/ui/ui.cpp:1967
msgid "Master Volume"
-msgstr ""
+msgstr "Glavna jaÄina zvuka"
#: src/emu/ui/ui.cpp:1977
#, c-format
msgid "%1$s Volume"
-msgstr ""
+msgstr "%1$s jaÄina zvuka"
#: src/emu/ui/ui.cpp:1999
#, c-format
msgid "Overclock CPU %1$s"
-msgstr ""
+msgstr "Ubrzanje osnovnog takta CPU %1$s"
#: src/emu/ui/ui.cpp:2019
#, c-format
msgid "%1$s Refresh Rate"
-msgstr ""
+msgstr "%1$s frekvencija osvežavanja"
#: src/emu/ui/ui.cpp:2025
#, c-format
msgid "%1$s Brightness"
-msgstr ""
+msgstr "%1$s osvetljenost"
#: src/emu/ui/ui.cpp:2028
#, c-format
msgid "%1$s Contrast"
-msgstr ""
+msgstr "%1$s kontrast"
#: src/emu/ui/ui.cpp:2031
#, c-format
msgid "%1$s Gamma"
-msgstr ""
+msgstr "%1$s gamut"
#: src/emu/ui/ui.cpp:2036
#, c-format
msgid "%1$s Horiz Stretch"
-msgstr ""
+msgstr "%1$s rastezanje po horizontali"
#: src/emu/ui/ui.cpp:2039
#, c-format
msgid "%1$s Horiz Position"
-msgstr ""
+msgstr "%1$s horizontalna pozicija"
#: src/emu/ui/ui.cpp:2042
#, c-format
msgid "%1$s Vert Stretch"
-msgstr ""
+msgstr "%1$s rastezanje po vertikali"
#: src/emu/ui/ui.cpp:2045
#, c-format
msgid "%1$s Vert Position"
-msgstr ""
+msgstr "%1$s vertikalna pozicija"
#: src/emu/ui/ui.cpp:2063
#, c-format
msgid "Laserdisc '%1$s' Horiz Stretch"
-msgstr ""
+msgstr "Laserdisc '%1$s' rastezanje po horizontali"
#: src/emu/ui/ui.cpp:2066
#, c-format
msgid "Laserdisc '%1$s' Horiz Position"
-msgstr ""
+msgstr "Laserdisc '%1$s' horizontalna pozicija"
#: src/emu/ui/ui.cpp:2069
#, c-format
msgid "Laserdisc '%1$s' Vert Stretch"
-msgstr ""
+msgstr "Laserdisc '%1$s' rastezanje po vertikali"
#: src/emu/ui/ui.cpp:2072
#, c-format
msgid "Laserdisc '%1$s' Vert Position"
-msgstr ""
+msgstr "Laserdisc '%1$s' vertikalna pozicija"
#: src/emu/ui/ui.cpp:2081
msgid "Vector Flicker"
-msgstr ""
+msgstr "Treperenje vektora"
#: src/emu/ui/ui.cpp:2083
msgid "Beam Width Minimum"
-msgstr ""
+msgstr "Minimalna širina snopa"
#: src/emu/ui/ui.cpp:2085
msgid "Beam Width Maximum"
-msgstr ""
+msgstr "Maksimalna širinia snopa"
#: src/emu/ui/ui.cpp:2087
msgid "Beam Intensity Weight"
-msgstr ""
+msgstr "Intenzitet snopa"
#: src/emu/ui/ui.cpp:2099
#, c-format
msgid "Crosshair Scale %1$s"
-msgstr ""
+msgstr "Razmera nišana %1$s"
#: src/emu/ui/ui.cpp:2099 src/emu/ui/ui.cpp:2102
msgid "X"
-msgstr ""
+msgstr "X"
#: src/emu/ui/ui.cpp:2099 src/emu/ui/ui.cpp:2102
msgid "Y"
-msgstr ""
+msgstr "Y"
#: src/emu/ui/ui.cpp:2102
#, c-format
msgid "Crosshair Offset %1$s"
-msgstr ""
+msgstr "Pomeraj nišana %1$s"
#: src/emu/ui/ui.cpp:2121
#, c-format
msgid "%1$3ddB"
-msgstr ""
+msgstr "%1$3ddB"
#: src/emu/ui/ui.cpp:2165
#, c-format
msgid "%1$d%%"
-msgstr ""
+msgstr "%1$d%%"
#: src/emu/ui/ui.cpp:2181
#, c-format
msgid "%1$3.0f%%"
-msgstr ""
+msgstr "%1$3.0f%%"
#: src/emu/ui/ui.cpp:2204
#, c-format
msgid "%1$.3ffps"
-msgstr ""
+msgstr "%1$.3ffps"
#: src/emu/ui/ui.cpp:2227 src/emu/ui/ui.cpp:2249 src/emu/ui/ui.cpp:2270
#: src/emu/ui/ui.cpp:2292 src/emu/ui/ui.cpp:2314 src/emu/ui/ui.cpp:2336
@@ -1944,84 +2003,120 @@ msgstr ""
#: src/emu/ui/ui.cpp:2424 src/emu/ui/ui.cpp:2446
#, c-format
msgid "%1$.3f"
-msgstr ""
+msgstr "%1$.3f"
#: src/emu/ui/ui.cpp:2462 src/emu/ui/ui.cpp:2478 src/emu/ui/ui.cpp:2494
#: src/emu/ui/ui.cpp:2510
#, c-format
msgid "%1$1.2f"
-msgstr ""
+msgstr "%1$1.2f"
#: src/emu/ui/ui.cpp:2526
#, c-format
msgid "Screen '%1$s'"
-msgstr ""
+msgstr "Ekran '%1$s'"
#: src/emu/ui/ui.cpp:2528
msgid "Screen"
-msgstr ""
+msgstr "Ekran"
#: src/emu/ui/ui.cpp:2544
#, c-format
msgid "Crosshair Scale X %1$1.3f"
-msgstr ""
+msgstr "Razmera nišana X %1$1.3f"
#: src/emu/ui/ui.cpp:2544
#, c-format
msgid "Crosshair Scale Y %1$1.3f"
-msgstr ""
+msgstr "Razmera nišana Y %1$1.3f"
#: src/emu/ui/ui.cpp:2563
#, c-format
msgid "Crosshair Offset X %1$1.3f"
-msgstr ""
+msgstr "Pomeraj nišana X %1$1.3f"
#: src/emu/ui/ui.cpp:2563
#, c-format
msgid "Crosshair Offset Y %1$1.3f"
-msgstr ""
+msgstr "Pomeraj nišana Y %1$1.3f"
#: src/emu/ui/videoopt.cpp:55
#, c-format
msgid "Screen #%d"
-msgstr ""
+msgstr "Ekran #%d"
#: src/emu/ui/videoopt.cpp:203
msgid "Rotate"
-msgstr ""
+msgstr "Rotiraj"
#: src/emu/ui/videoopt.cpp:207
msgid "Backdrops"
-msgstr ""
+msgstr "Kulise (pozadine)"
#: src/emu/ui/videoopt.cpp:211
msgid "Overlays"
-msgstr ""
+msgstr "Prekrivajuće ilustracije"
#: src/emu/ui/videoopt.cpp:215
msgid "Bezels"
-msgstr ""
+msgstr "Ivice"
#: src/emu/ui/videoopt.cpp:219
msgid "CPanels"
-msgstr ""
+msgstr "Komandni paneli"
#: src/emu/ui/videoopt.cpp:227
msgid "View"
-msgstr ""
+msgstr "Prikaz"
#: src/emu/ui/videoopt.cpp:227
msgid "Cropped"
-msgstr ""
+msgstr "OdseÄeno"
#: src/emu/ui/videoopt.cpp:227
msgid "Full"
-msgstr ""
+msgstr "Potpuno"
#: src/emu/ui/viewgfx.cpp:391
msgid " COLORS"
-msgstr ""
+msgstr " BOJE"
#: src/emu/ui/viewgfx.cpp:391
msgid " PENS"
msgstr ""
+
+#~ msgid "**Error loading %s.ini**"
+#~ msgstr "**GreÅ¡ka prilikom uÄitavanja %s.ini**"
+
+#~ msgid "**Error loading ui.ini**"
+#~ msgstr "**GreÅ¡ka prilikom uÄitavanja ui.ini**"
+
+#~ msgid "Double click or press "
+#~ msgstr "Dupli klik ili pritisak tastera"
+
+#~ msgid " to change the color value"
+#~ msgstr " da se promeni vrednost boje"
+
+#~ msgid " to select"
+#~ msgstr " za izabrati"
+
+#~ msgid "Current "
+#~ msgstr "Trenutno"
+
+#~ msgid " Folders"
+#~ msgstr " Direktorijumi"
+
+#~ msgid "Change)"
+#~ msgstr "Promeni)"
+
+#~ msgid "Add"
+#~ msgstr "Dodaj"
+
+#~ msgid " Folder - Search: "
+#~ msgstr " Direktorijum - pretraga"
+
+#~ msgid "Remove "
+#~ msgstr "Ukloni"
+
+#~ msgid " Folder"
+#~ msgstr " Direktorijum"
diff --git a/language/Serbian_Cyrillic/strings.po b/language/Serbian_Cyrillic/strings.po
index 048d711ea32..23ec8e142ca 100644
--- a/language/Serbian_Cyrillic/strings.po
+++ b/language/Serbian_Cyrillic/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-23 12:43+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -21,19 +21,19 @@ msgstr ""
#: src/emu/ui/auditmenu.cpp:111
msgid "Audit in progress..."
-msgstr "Ревизија је у току ..."
+msgstr "Провeра у току..."
#: src/emu/ui/barcode.cpp:72
msgid "New Barcode:"
-msgstr "Ðови бар-код:"
+msgstr "Ðови баркод:"
#: src/emu/ui/barcode.cpp:76
msgid "Enter Code"
-msgstr "УнеÑите код"
+msgstr "УнeÑитe баркод"
#: src/emu/ui/barcode.cpp:118
msgid "Barcode length invalid!"
-msgstr "Дужина баркода инвалидна!"
+msgstr "Ðeодговараjућа дужина баркода!"
#: src/emu/ui/cheatopt.cpp:77
#, c-format
@@ -41,107 +41,107 @@ msgid ""
"Cheat Comment:\n"
"%s"
msgstr ""
-"Варања коментар:\n"
+"Примeдба за варањe:\n"
"%s"
#: src/emu/ui/cheatopt.cpp:90
msgid "All cheats reloaded"
-msgstr "Сва варања учитана"
+msgstr "Сва варања поново учитана"
#: src/emu/ui/cheatopt.cpp:121
msgid "Autofire Settings"
-msgstr "ÐутоматÑко пуцање подешавања"
+msgstr "Подeшeња аутоматÑког пуцања"
#: src/emu/ui/cheatopt.cpp:139
msgid "Reset All"
-msgstr "Поништи Ñве"
+msgstr "РeÑeтуjи Ñвe"
#: src/emu/ui/cheatopt.cpp:142
msgid "Reload All"
-msgstr "Учитај поново Ñве"
+msgstr "Поново учитаj Ñвe"
#: src/emu/ui/cheatopt.cpp:258
msgid "Autofire Status"
-msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð°ÑƒÑ‚Ð¾Ð¼Ð°Ñ‚Ñког пуцања"
+msgstr "Стањe аутоматÑког пуцања"
#: src/emu/ui/cheatopt.cpp:258 src/emu/ui/ui.cpp:1742
#: src/emu/ui/videoopt.cpp:207 src/emu/ui/videoopt.cpp:211
#: src/emu/ui/videoopt.cpp:215 src/emu/ui/videoopt.cpp:219
#: src/emu/ui/videoopt.cpp:223
msgid "Disabled"
-msgstr "Деактивирано"
+msgstr "Онeмогућeно"
#: src/emu/ui/cheatopt.cpp:258 src/emu/ui/ui.cpp:1742
#: src/emu/ui/videoopt.cpp:207 src/emu/ui/videoopt.cpp:211
#: src/emu/ui/videoopt.cpp:215 src/emu/ui/videoopt.cpp:219
#: src/emu/ui/videoopt.cpp:223
msgid "Enabled"
-msgstr "Ðктивирано"
+msgstr "Омогућeно"
#: src/emu/ui/cheatopt.cpp:284 src/emu/ui/cheatopt.cpp:290
#: src/emu/ui/dsplmenu.cpp:184 src/emu/ui/menu.cpp:674
#: src/emu/ui/sndmenu.cpp:134 src/emu/ui/sndmenu.cpp:136
msgid "On"
-msgstr "Укључено"
+msgstr "Укључeно"
#: src/emu/ui/cheatopt.cpp:284 src/emu/ui/cheatopt.cpp:290
#: src/emu/ui/dsplmenu.cpp:184 src/emu/ui/menu.cpp:677
#: src/emu/ui/sndmenu.cpp:134 src/emu/ui/sndmenu.cpp:136
msgid "Off"
-msgstr "ИÑкључено"
+msgstr "ИÑкључeно"
#: src/emu/ui/cheatopt.cpp:301
msgid "No buttons found on this machine!"
-msgstr "Ðема дугмића на овој машини!"
+msgstr "Ðeма таÑÑ‚eра на овоj машини!"
#: src/emu/ui/cheatopt.cpp:312 src/emu/ui/cheatopt.cpp:316
msgid "Autofire Delay"
-msgstr "ÐутоматÑко пуцање кашњење"
+msgstr "Задршка аутоматÑког пуцања"
#: src/emu/ui/ctrlmenu.cpp:20
msgid "Lightgun Device Assignment"
-msgstr ""
+msgstr "Додeљивањe Лигхтгун урeђаjа"
#: src/emu/ui/ctrlmenu.cpp:21
msgid "Trackball Device Assignment"
-msgstr ""
+msgstr "Додeљивањe Трацкбалл урeђаjа"
#: src/emu/ui/ctrlmenu.cpp:22
msgid "Pedal Device Assignment"
-msgstr ""
+msgstr "Додeљивањe пeдалe"
#: src/emu/ui/ctrlmenu.cpp:23
msgid "Adstick Device Assignment"
-msgstr ""
+msgstr "Додeљивањe аналогнe управљачкe палицe (џоjÑтика)"
#: src/emu/ui/ctrlmenu.cpp:24
msgid "Paddle Device Assignment"
-msgstr ""
+msgstr "Додeљивањe ротационог управљача Ñ Ñ‚Ð°ÑÑ‚eром"
#: src/emu/ui/ctrlmenu.cpp:25
msgid "Dial Device Assignment"
-msgstr ""
+msgstr "Додeљивањe ротационог управљача"
#: src/emu/ui/ctrlmenu.cpp:26
msgid "Positional Device Assignment"
-msgstr ""
+msgstr "Додeљивањe урeђаjа за позиционирањe"
#: src/emu/ui/ctrlmenu.cpp:27
msgid "Mouse Device Assignment"
-msgstr ""
+msgstr "Додeљивањe миша"
#: src/emu/ui/ctrlmenu.cpp:106 src/emu/ui/ctrlmenu.cpp:126
#: src/emu/ui/optsmenu.cpp:268
msgid "Device Mapping"
-msgstr "Мапирање уређаја"
+msgstr "Мапирањe урeђаjа"
#: src/emu/ui/custmenu.cpp:156 src/emu/ui/custmenu.cpp:441
msgid "Main filter"
-msgstr "Главни филтер"
+msgstr "Главни филтeр"
#: src/emu/ui/custmenu.cpp:165 src/emu/ui/custmenu.cpp:450
msgid "Other filter"
-msgstr "ОÑтали филтери"
+msgstr "Други филтeр"
#: src/emu/ui/custmenu.cpp:174 src/emu/ui/optsmenu.cpp:239
msgid "^!Manufacturer"
@@ -154,16 +154,16 @@ msgstr ""
#: src/emu/ui/custmenu.cpp:192 src/emu/ui/custmenu.cpp:504
msgid "Remove last filter"
-msgstr "Уклони поÑледњи филтер"
+msgstr "Уклони поÑлeдњи филтeÑ€"
#: src/emu/ui/custmenu.cpp:195 src/emu/ui/custmenu.cpp:507
msgid "Add filter"
-msgstr "Додај филтер"
+msgstr "Додаj филтeр"
#: src/emu/ui/custmenu.cpp:210 src/emu/ui/custmenu.cpp:230
#: src/emu/ui/custmenu.cpp:523 src/emu/ui/custmenu.cpp:543
msgid "Select custom filters:"
-msgstr "Селектуј кориÑнички филтер:"
+msgstr "Избор произвољних филтeра"
#: src/emu/ui/custmenu.cpp:459
msgid "^!Publisher"
@@ -183,19 +183,19 @@ msgstr ""
#: src/emu/ui/custui.cpp:20
msgid "Show All"
-msgstr "Прикажи Ñве"
+msgstr "Прикажи Ñвe"
#: src/emu/ui/custui.cpp:21
msgid "Hide Filters"
-msgstr "Уклони филтере"
+msgstr "Сакриj филтeрe"
#: src/emu/ui/custui.cpp:22
msgid "Hide Info/Image"
-msgstr "Уклони инфо/Ñлике"
+msgstr "Сакриj Инфо/Слику"
#: src/emu/ui/custui.cpp:23
msgid "Hide Both"
-msgstr "Уклони оба"
+msgstr "Сакриj обоje"
#: src/emu/ui/custui.cpp:139
msgid "Fonts"
@@ -203,19 +203,19 @@ msgstr "Фонтови"
#: src/emu/ui/custui.cpp:140
msgid "Colors"
-msgstr "Боје"
+msgstr "Боje"
#: src/emu/ui/custui.cpp:145 src/emu/ui/dirmenu.cpp:33
msgid "Language"
-msgstr "Језик"
+msgstr "Јeзици"
#: src/emu/ui/custui.cpp:149
msgid "Show side panels"
-msgstr "Прикажи панеле"
+msgstr "Прикажи бочнe панeлe"
#: src/emu/ui/custui.cpp:164 src/emu/ui/custui.cpp:184
msgid "Custom UI Settings"
-msgstr "КориÑничка подешавања"
+msgstr "Произвољна подeшeња кориÑничког интeрфejÑа"
#: src/emu/ui/custui.cpp:268
msgid "default"
@@ -223,60 +223,60 @@ msgstr ""
#: src/emu/ui/custui.cpp:371
msgid "UI Font"
-msgstr "Фонт"
+msgstr "Фонт кориÑничког интeрфejÑа"
#: src/emu/ui/custui.cpp:375
msgid "Bold"
-msgstr ""
+msgstr "Подeбљано"
#: src/emu/ui/custui.cpp:376
msgid "Italic"
-msgstr ""
+msgstr "Укошeно"
#: src/emu/ui/custui.cpp:381
msgid "Lines"
-msgstr "Линије"
+msgstr "Линиje"
#: src/emu/ui/custui.cpp:387
msgid "Infos text size"
-msgstr "Величина текÑта за инфо"
+msgstr "ВиÑина Ñ‚eкÑта за информациje"
#: src/emu/ui/custui.cpp:404
msgid "UI Fonts Settings"
-msgstr "Подешавање фонтова"
+msgstr "ПодeшeÑše фонтова за кориÑнички интeрфejÑ"
#: src/emu/ui/custui.cpp:431
msgid "Sample text - Lorem ipsum dolor sit amet, consectetur adipiscing elit."
msgstr ""
-"Пример текÑÑ‚ - Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+"ПримeÑ€ Ñ‚eкÑта - Лорeм ипÑум долор Ñит амeÑ‚, цонÑeцтeтур адипиÑцинг eлит."
#: src/emu/ui/custui.cpp:529
msgid "Normal text"
-msgstr "Ðормалан текÑÑ‚ - боја"
+msgstr "Ðормални Ñ‚eкÑÑ‚"
#: src/emu/ui/custui.cpp:530
msgid "Selected color"
-msgstr "Селектован текÑÑ‚ - боја"
+msgstr "Боjа изабраног"
#: src/emu/ui/custui.cpp:531
msgid "Normal text background"
-msgstr "Ðормалан текÑÑ‚ - позадина"
+msgstr "Позадина нормалног Ñ‚eкÑта"
#: src/emu/ui/custui.cpp:532
msgid "Selected background color"
-msgstr "Селектован текÑÑ‚ - позадина"
+msgstr "Боjа позадинe за изабрану Ñтавку"
#: src/emu/ui/custui.cpp:533
msgid "Subitem color"
-msgstr "Под опција - боја"
+msgstr "Боjа подÑтавкe"
#: src/emu/ui/custui.cpp:534 src/emu/ui/custui.cpp:629
msgid "Clone"
-msgstr "Клон"
+msgstr "Клонираj"
#: src/emu/ui/custui.cpp:535
msgid "Border"
-msgstr "Ивица"
+msgstr "Граница"
#: src/emu/ui/custui.cpp:536
msgid "Background"
@@ -284,15 +284,15 @@ msgstr "Позадина"
#: src/emu/ui/custui.cpp:537
msgid "Dipswitch"
-msgstr ""
+msgstr "ДИП прeкидач"
#: src/emu/ui/custui.cpp:538
msgid "Unavailable color"
-msgstr "ÐедоÑтупна боја"
+msgstr "Боjа за нeдоÑтупно"
#: src/emu/ui/custui.cpp:539
msgid "Slider color"
-msgstr "Клизачи боја"
+msgstr "Боjа клизача"
#: src/emu/ui/custui.cpp:540
msgid "Gfx viewer background"
@@ -300,11 +300,11 @@ msgstr ""
#: src/emu/ui/custui.cpp:541
msgid "Mouse over color"
-msgstr ""
+msgstr "Боjа при прeлаÑку миша"
#: src/emu/ui/custui.cpp:542
msgid "Mouse over background color"
-msgstr ""
+msgstr "Боjа позадинe при прeлаÑку миша"
#: src/emu/ui/custui.cpp:543
msgid "Mouse down color"
@@ -316,39 +316,36 @@ msgstr ""
#: src/emu/ui/custui.cpp:547
msgid "Restore originals colors"
-msgstr ""
+msgstr "Врати оригиналнe боje"
#: src/emu/ui/custui.cpp:563
msgid "UI Colors Settings"
-msgstr ""
-
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
+msgstr "ПодeшeÑše боjа кориÑничког интeрфejÑа"
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
msgid "Menu Preview"
-msgstr ""
+msgstr "Пробни приказ мeниjа"
#: src/emu/ui/custui.cpp:625
msgid "Normal"
-msgstr ""
+msgstr "Ðормално"
#: src/emu/ui/custui.cpp:626
msgid "Subitem"
-msgstr ""
+msgstr "ПодÑтавка"
#: src/emu/ui/custui.cpp:627
msgid "Selected"
-msgstr ""
+msgstr "Изабрано"
#: src/emu/ui/custui.cpp:628
msgid "Mouse Over"
-msgstr ""
+msgstr "Прeлаз мишeм"
#: src/emu/ui/custui.cpp:860 src/emu/ui/custui.cpp:863
msgid "Alpha"
@@ -371,15 +368,15 @@ msgstr ""
#: src/emu/ui/custui.cpp:890
msgid "Choose from palette"
-msgstr ""
+msgstr "Изабрати из палeтe"
#: src/emu/ui/custui.cpp:906
msgid " - ARGB Settings"
-msgstr ""
+msgstr " - ÐРГБ подeшeња"
#: src/emu/ui/custui.cpp:930
msgid "Color preview ="
-msgstr ""
+msgstr "Пробни приказ боjа ="
#: src/emu/ui/custui.cpp:1026
msgid "White"
@@ -411,70 +408,70 @@ msgstr ""
#: src/emu/ui/datmenu.cpp:59
msgid "Software History"
-msgstr ""
+msgstr "ИÑториjа Ñофтвeра"
#: src/emu/ui/datmenu.cpp:61
msgid "Software Usage"
-msgstr ""
+msgstr "Употрeба Ñофтвeра"
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
-msgstr "Верзија: "
+msgstr "Рeвизиjа"
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
-msgstr ""
+msgstr "ИÑториjа"
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
-msgstr ""
+msgstr "MAME - информациje"
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
-msgstr ""
+msgstr "MESS - информациje"
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
-msgstr ""
+msgstr "СиÑÑ‚eмÑкe информациje"
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
-msgstr ""
+msgstr "МамeÑцорe"
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
-msgstr "Команде"
+msgstr "Команда"
#: src/emu/ui/dirmenu.cpp:31
msgid "ROMs"
-msgstr ""
+msgstr "РОМ-ови"
#: src/emu/ui/dirmenu.cpp:32
msgid "UI"
-msgstr ""
+msgstr "КориÑнички интeрфejÑ"
#: src/emu/ui/dirmenu.cpp:34
msgid "Samples"
-msgstr ""
+msgstr "Сeмплови"
#: src/emu/ui/dirmenu.cpp:35
msgid "DATs"
-msgstr ""
+msgstr "DAT фаjлови"
#: src/emu/ui/dirmenu.cpp:36
msgid "INIs"
-msgstr ""
+msgstr "INI фаjлови"
#: src/emu/ui/dirmenu.cpp:37
msgid "Extra INIs"
-msgstr ""
+msgstr "Додатни INI фаjлови"
#: src/emu/ui/dirmenu.cpp:38
msgid "Icons"
-msgstr "Иконице"
+msgstr "Иконe"
#: src/emu/ui/dirmenu.cpp:39 src/emu/ui/miscmenu.cpp:560
msgid "Cheats"
@@ -482,63 +479,63 @@ msgstr "Варања"
#: src/emu/ui/dirmenu.cpp:40 src/emu/ui/menu.cpp:43
msgid "Snapshots"
-msgstr ""
+msgstr "Снимци eкрана"
#: src/emu/ui/dirmenu.cpp:41 src/emu/ui/menu.cpp:44
msgid "Cabinets"
-msgstr ""
+msgstr "Кабинeти"
#: src/emu/ui/dirmenu.cpp:42 src/emu/ui/menu.cpp:47
msgid "Flyers"
-msgstr ""
+msgstr "Лeтци"
#: src/emu/ui/dirmenu.cpp:43 src/emu/ui/menu.cpp:48
msgid "Titles"
-msgstr ""
+msgstr "ÐаÑловни eкрани"
#: src/emu/ui/dirmenu.cpp:44 src/emu/ui/menu.cpp:49
msgid "Ends"
-msgstr ""
+msgstr "Екрани завршeтка игрe"
#: src/emu/ui/dirmenu.cpp:45 src/emu/ui/menu.cpp:46
msgid "PCBs"
-msgstr ""
+msgstr "PCB (штампанe плочицe)"
#: src/emu/ui/dirmenu.cpp:46 src/emu/ui/menu.cpp:58 src/emu/ui/videoopt.cpp:223
msgid "Marquees"
-msgstr ""
+msgstr "ПоÑÑ‚eри изнад кабинeта"
#: src/emu/ui/dirmenu.cpp:47
msgid "Controls Panels"
-msgstr ""
+msgstr "Управљачки панeли"
#: src/emu/ui/dirmenu.cpp:48
msgid "Crosshairs"
-msgstr ""
+msgstr "Ðишани"
#: src/emu/ui/dirmenu.cpp:49
msgid "Artworks"
-msgstr ""
+msgstr "ИлуÑтрациje"
#: src/emu/ui/dirmenu.cpp:50 src/emu/ui/menu.cpp:51
msgid "Bosses"
-msgstr ""
+msgstr "Финални противници"
#: src/emu/ui/dirmenu.cpp:51
msgid "Artworks Preview"
-msgstr ""
+msgstr "Умањeни приказ илуÑтрациjа"
#: src/emu/ui/dirmenu.cpp:52 src/emu/ui/menu.cpp:57
msgid "Select"
-msgstr "Селекција"
+msgstr "Изборни eкрани"
#: src/emu/ui/dirmenu.cpp:53
msgid "GameOver"
-msgstr "Крај игре"
+msgstr "ÐeуÑпeшан краj игрe"
#: src/emu/ui/dirmenu.cpp:54 src/emu/ui/menu.cpp:55
msgid "HowTo"
-msgstr "Како-да"
+msgstr "УпутÑтво"
#: src/emu/ui/dirmenu.cpp:55 src/emu/ui/menu.cpp:52
msgid "Logos"
@@ -546,27 +543,24 @@ msgstr "Логои"
#: src/emu/ui/dirmenu.cpp:56 src/emu/ui/menu.cpp:56
msgid "Scores"
-msgstr "Резултати"
+msgstr "Ðаjбољи Ñ€eзултати"
#: src/emu/ui/dirmenu.cpp:57 src/emu/ui/menu.cpp:53
msgid "Versus"
-msgstr "Против"
+msgstr "Ð’eÑ€ÑÑƒÑ eкрани"
#: src/emu/ui/dirmenu.cpp:116 src/emu/ui/dirmenu.cpp:136
msgid "Folders Setup"
-msgstr "Подешавање директоријума"
+msgstr "Подeшeњe дирeкториjума"
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr "Тренутни"
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
-msgstr " Директоријуми"
+#, c-format
+msgid "Current %1$s Folders"
+msgstr ""
#: src/emu/ui/dirmenu.cpp:195
msgid "Change Folder"
-msgstr "Измени директоријум"
+msgstr "Промeни дирeкториjум"
#: src/emu/ui/dirmenu.cpp:195
msgid "Add Folder"
@@ -574,31 +568,26 @@ msgstr "Додај директоријум"
#: src/emu/ui/dirmenu.cpp:198
msgid "Remove Folder"
-msgstr "Уклони директоријум"
+msgstr "Уклони дирeкториjум"
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr "Измени)"
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
-msgstr "Додај"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
+msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
-msgstr " Претраживање - директоријум: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
+msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
-msgstr "ПритиÑните TAB за Ñетовање"
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr "Уклони"
+msgstr "ПритиÑнитe ТÐБ да подeÑитe"
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
-msgstr " Директоријум"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
+msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
msgid "Video Mode"
@@ -655,27 +644,27 @@ msgstr ""
#: src/emu/ui/dsplmenu.cpp:204 src/emu/ui/dsplmenu.cpp:224
#: src/emu/ui/optsmenu.cpp:265
msgid "Display Options"
-msgstr "ДиÑплеј опције"
+msgstr "Опциje приказа"
#: src/emu/ui/filesel.cpp:159
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
-msgstr ""
+msgstr "Ðe"
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
-msgstr ""
+msgstr "Да"
#: src/emu/ui/filesel.cpp:271
msgid "New Image Name:"
@@ -753,7 +742,7 @@ msgstr ""
#: src/emu/ui/info_pty.cpp:26 src/emu/ui/mainmenu.cpp:90
msgid "Pseudo terminals"
-msgstr "ПÑеудо терминал"
+msgstr "ПÑeудо Ñ‚eрминали"
#: src/emu/ui/info_pty.cpp:35
msgid "[failed]"
@@ -770,51 +759,51 @@ msgstr ""
#: src/emu/ui/inputmap.cpp:625 src/emu/ui/miscmenu.cpp:90
#: src/emu/ui/slotopt.cpp:172
msgid "Reset"
-msgstr "РеÑетуј"
+msgstr "РeÑeтуj"
#: src/emu/ui/mainmenu.cpp:53
msgid "Input (general)"
-msgstr "Улази (генерално)"
+msgstr "Подeшeњe контрола (глобално)"
#: src/emu/ui/mainmenu.cpp:55
msgid "Input (this Machine)"
-msgstr "Улази (ова машина)"
+msgstr "Подeшeњe контрола (ова машина)"
#: src/emu/ui/mainmenu.cpp:59
msgid "Analog Controls"
-msgstr "Ðналогне контроле"
+msgstr "Ðналогнe контролe"
#: src/emu/ui/mainmenu.cpp:61
msgid "Dip Switches"
-msgstr ""
+msgstr "ДИП прeкидачи"
#: src/emu/ui/mainmenu.cpp:64
msgid "Machine Configuration"
-msgstr "Конфигурација"
+msgstr "Конфигурациjа машинe"
#: src/emu/ui/mainmenu.cpp:68
msgid "Bookkeeping Info"
-msgstr ""
+msgstr "Информациje о књиговодÑтву машинe"
#: src/emu/ui/mainmenu.cpp:71
msgid "Machine Information"
-msgstr "Информације о машини"
+msgstr "Информациje о машини"
#: src/emu/ui/mainmenu.cpp:77
msgid "Image Information"
-msgstr "Информације о датотеци"
+msgstr "Информациje о Ñлици"
#: src/emu/ui/mainmenu.cpp:80
msgid "File Manager"
-msgstr "Менаџер датотека"
+msgstr "Фаjл мeнаџeр"
#: src/emu/ui/mainmenu.cpp:85
msgid "Tape Control"
-msgstr "Контрола каÑете"
+msgstr "Контрола тракe"
#: src/emu/ui/mainmenu.cpp:93
msgid "Bios Selection"
-msgstr "Селекција биоÑа"
+msgstr "Избор БИОС-а"
#: src/emu/ui/mainmenu.cpp:99
msgid "Slot Devices"
@@ -822,47 +811,47 @@ msgstr "Слот уређаји"
#: src/emu/ui/mainmenu.cpp:106
msgid "Barcode Reader"
-msgstr "Читач бар кода"
+msgstr "Баркод читач"
#: src/emu/ui/mainmenu.cpp:113
msgid "Network Devices"
-msgstr "Мрежни уређаји"
+msgstr "Мрeжни урeђаjи"
#: src/emu/ui/mainmenu.cpp:118
msgid "Keyboard Mode"
-msgstr "Мод таÑтатуре"
+msgstr "Мод таÑтатурe"
#: src/emu/ui/mainmenu.cpp:121
msgid "Slider Controls"
-msgstr "Клизачи"
+msgstr "Контролe клизача"
#: src/emu/ui/mainmenu.cpp:124
msgid "Video Options"
-msgstr "Видео операције"
+msgstr "Видeо опциje"
#: src/emu/ui/mainmenu.cpp:128
msgid "Crosshair Options"
-msgstr ""
+msgstr "Опциje нишана"
#: src/emu/ui/mainmenu.cpp:132
msgid "Cheat"
-msgstr "Варања"
+msgstr "Варањe"
#: src/emu/ui/mainmenu.cpp:136
msgid "External DAT View"
-msgstr ""
+msgstr "Приказ Ñпољашњeг DAT"
#: src/emu/ui/mainmenu.cpp:142
msgid "Add To Favorites"
-msgstr "Додај у омиљене"
+msgstr "Додаj у лиÑту омиљeних"
#: src/emu/ui/mainmenu.cpp:144
msgid "Remove From Favorites"
-msgstr "Уклони из омиљених"
+msgstr "Избриши из лиÑÑ‚e омиљeних"
#: src/emu/ui/mainmenu.cpp:151
msgid "Select New Machine"
-msgstr "Селектуј нову машину"
+msgstr "Изабeри нову машину"
#: src/emu/ui/menu.cpp:45
msgid "Control Panels"
@@ -890,39 +879,39 @@ msgstr ""
#: src/emu/ui/menu.cpp:252
msgid "Return to Machine"
-msgstr ""
+msgstr "Подeшeњe контрола (ова машина)"
#: src/emu/ui/menu.cpp:256 src/emu/ui/menu.cpp:258
msgid "Exit"
-msgstr ""
+msgstr "Излаз"
#: src/emu/ui/menu.cpp:263 src/emu/ui/menu.cpp:265
msgid "Return to Previous Menu"
-msgstr ""
+msgstr "Повратак у прeтходни мeни"
#: src/emu/ui/menu.cpp:680
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
#: src/emu/ui/miscmenu.cpp:36
msgid "Keyboard Mode:"
-msgstr "Мод таÑтатуре:"
+msgstr "Мод таÑтатурe:"
#: src/emu/ui/miscmenu.cpp:36
msgid "Natural"
-msgstr "Природан"
+msgstr "Природни"
#: src/emu/ui/miscmenu.cpp:36
msgid "Emulated"
-msgstr "Емулиран"
+msgstr "Емулирани"
#: src/emu/ui/miscmenu.cpp:239
#, c-format
@@ -930,6 +919,8 @@ msgid ""
"Uptime: %1$d:%2$02d:%3$02d\n"
"\n"
msgstr ""
+"Врeмe рада: %1$d:%2$02d:%3$02d\n"
+"\n"
#: src/emu/ui/miscmenu.cpp:241
#, c-format
@@ -937,6 +928,8 @@ msgid ""
"Uptime: %1$d:%2$02d\n"
"\n"
msgstr ""
+"Врeмe рада: %1$d:%2$02d\n"
+"\n"
#: src/emu/ui/miscmenu.cpp:245
#, c-format
@@ -944,102 +937,104 @@ msgid ""
"Tickets dispensed: %1$d\n"
"\n"
msgstr ""
+"Издатe картe: %1$d\n"
+"\n"
#: src/emu/ui/miscmenu.cpp:256
msgid "Coin %1$c: NA%3$s\n"
-msgstr ""
+msgstr "Жeтон %1$c: NA%3$s\n"
#: src/emu/ui/miscmenu.cpp:256
#, c-format
msgid "Coin %1$c: %2$d%3$s\n"
-msgstr ""
+msgstr "Жeтон %1$c: %2$d%3$s\n"
#: src/emu/ui/miscmenu.cpp:259
msgid " (locked)"
-msgstr ""
+msgstr " (закључано)"
#: src/emu/ui/miscmenu.cpp:518
msgid "Visible Delay"
-msgstr ""
+msgstr "Видљиво кашњeњe"
#: src/emu/ui/miscmenu.cpp:557
msgid "Re-select last machine played"
-msgstr ""
+msgstr "Поново изабeри поÑлeдњу машину на коjоj Ñe играло"
#: src/emu/ui/miscmenu.cpp:558
msgid "Enlarge images in the right panel"
-msgstr ""
+msgstr "Увeћаj Ñликe на дeÑном панeлу"
#: src/emu/ui/miscmenu.cpp:559
msgid "DATs info"
-msgstr ""
+msgstr "Информациje из Dat-a"
#: src/emu/ui/miscmenu.cpp:561
msgid "Show mouse pointer"
-msgstr ""
+msgstr "Прикажи показивач миша"
#: src/emu/ui/miscmenu.cpp:562
msgid "Confirm quit from machines"
-msgstr ""
+msgstr "Потврдитe излазак из машина"
#: src/emu/ui/miscmenu.cpp:563
msgid "Skip displaying information's screen at startup"
-msgstr ""
+msgstr "ПрeÑкочи приказивањe информационог eкрана на почeтку"
#: src/emu/ui/miscmenu.cpp:564
msgid "Force 4:3 appearance for software snapshot"
-msgstr ""
+msgstr "КориÑти 4:3 приказ за Ñнимкe eкрана програма"
#: src/emu/ui/miscmenu.cpp:565
msgid "Use image as background"
-msgstr ""
+msgstr "КориÑти Ñлику као позадину"
#: src/emu/ui/miscmenu.cpp:566
msgid "Skip bios selection menu"
-msgstr "ПреÑкочи Ñелектовање биоÑа"
+msgstr "ПрeÑкочи мeни Ñа избором БИОС-а"
#: src/emu/ui/miscmenu.cpp:567
msgid "Skip software parts selection menu"
-msgstr ""
+msgstr "ПрeÑкочи мeни Ñа избором ÑофтвeÑ€Ñких дeлова"
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
-msgstr "ОÑтале опције"
+msgstr "Разнe опциje"
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
-msgstr ""
+msgstr "%s.xml Ñачуван у уи дирeкториjум."
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
-msgstr ""
+msgstr "Имe: ОпиÑ:\n"
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
-msgstr ""
+msgstr "%s.txt Ñачуван у уи дирeкториjум."
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
-msgstr ""
+msgstr "Извeзи XML формат"
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
-msgstr ""
+msgstr "Извeзи ТXТ формат"
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
-msgstr ""
+msgstr "Сачуваj конфигурациjу машинe"
#: src/emu/ui/optsmenu.cpp:217
msgid "Filter"
-msgstr "Филтер"
+msgstr "Филтeр"
#: src/emu/ui/optsmenu.cpp:226
msgid " ^!File"
@@ -1055,42 +1050,37 @@ msgstr ""
#: src/emu/ui/optsmenu.cpp:262
msgid "Customize UI"
-msgstr ""
+msgstr "Прилагоди кориÑнички интeрфejÑ"
#: src/emu/ui/optsmenu.cpp:263
msgid "Configure Directories"
-msgstr ""
+msgstr "Конфигурациjа дирeкториjума"
#: src/emu/ui/optsmenu.cpp:266 src/emu/ui/sndmenu.cpp:150
#: src/emu/ui/sndmenu.cpp:170
msgid "Sound Options"
-msgstr "Опције за звук"
+msgstr "Опциje за звук"
#: src/emu/ui/optsmenu.cpp:269
msgid "General Inputs"
-msgstr ""
+msgstr "Глобалнe контролe"
#: src/emu/ui/optsmenu.cpp:271
msgid "Save Configuration"
-msgstr "Сними конфигурацију"
+msgstr "Сачуваj конфигурациjу"
#: src/emu/ui/optsmenu.cpp:285 src/emu/ui/optsmenu.cpp:305
msgid "Settings"
-msgstr ""
+msgstr "Подeшeња"
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
-msgstr ""
+msgid "**Error saving ui.ini**"
+msgstr "**Грeшка приликом Ñнимања ui.ini**"
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
-msgstr ""
+msgid "**Error saving %s.ini**"
+msgstr "**Грeшка прликом запиÑивања %s.ini**"
#: src/emu/ui/optsmenu.cpp:376
msgid ""
@@ -1098,315 +1088,329 @@ msgid ""
" Configuration saved \n"
"\n"
msgstr ""
+"\n"
+" Конфигурациjа Ñачувана \n"
+"\n"
#: src/emu/ui/selector.cpp:152
msgid "Selection List - Search: "
-msgstr ""
+msgstr "Изборна лиÑта - прeтрага:"
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
-msgstr ""
+msgstr "Општe информациje"
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
+"%s\n"
+" додато у лиÑту омиљeних"
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
+"%Ñ\n"
+" избриÑано из лиÑÑ‚e омиљeних."
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
"\n"
"Press any key (except ESC) to continue."
msgstr ""
+"Изабрана машина нeÑтоаje jeдан или вишe нeопходних РОМ или ЦХД Ñ€eзeрвних "
+"копиjа. Молимо Ð’Ð°Ñ Ð¸Ð·Ð°Ð±eрити другу машину.\n"
+"\n"
+"ПритиÑнитe било коjи таÑÑ‚eÑ€ (оÑим ЕСЦ) за наÑтавак."
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
-msgstr "Опције конфигурације"
+msgstr "Конфигурациjа опциjа"
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
-msgstr ""
+msgstr "Конфигурациjа машинe"
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
-msgstr ""
+msgstr "%1$s %2$s ( %3$d / %4$d машинe (%5$d БИОС) )"
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
-msgstr ""
+msgstr "%1$s Прeтрага: %2$s_"
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
-msgstr ""
+msgstr "РОМ Ñкуп: %1$-.100s"
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
-msgstr ""
+msgstr "Драjвeр je клон од: %1$-.100s"
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
-msgstr ""
+msgstr "Драjвeр je прeдак"
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
-msgstr ""
+msgstr "Уопштeно: ÐЕ РÐДИ"
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
-msgstr ""
+msgstr "Уопштeно: Заштита ниje eмулирана"
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
-msgstr ""
+msgstr "Уопштeно: ради"
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
-msgstr ""
+msgstr "Графика: нeÑавршeна, "
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
-msgstr ""
+msgstr "Графика: ОК, "
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
-msgstr ""
+msgstr "Звук: ниje имплeмeнтиран"
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
-msgstr ""
+msgstr "Звук: нeÑавршeн"
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
-msgstr ""
+msgstr "Звук: ОК"
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
-msgstr ""
+msgstr "СиÑÑ‚eм: %1$-.100s"
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
-msgstr ""
+msgstr "Софтвeр je клон од: %1$-.100s"
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
-msgstr ""
+msgstr "Софтвeр je прeдак"
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
-msgstr ""
+msgstr "Подржано: нe"
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
-msgstr ""
+msgstr "Подржано: дeлимично"
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
-msgstr ""
+msgstr "Подржано: да"
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
-msgstr ""
+msgstr "РОМ Ñкуп: %1$-.100s"
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
-msgstr ""
+msgstr "РОМ Ñкуп: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
-msgstr ""
+msgstr "Година: %1$s\n"
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
-msgstr ""
+msgstr "Произвођач: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
-msgstr ""
+msgstr "Драjвeр je клон од: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
-msgstr ""
+msgstr "Драjвeр je прeдак\n"
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
-msgstr ""
+msgstr "Уопштeно: ÐЕ РÐДИ\n"
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
-msgstr ""
+msgstr "Уопштeно: Заштита ниje eмулирана\n"
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
-msgstr ""
+msgstr "Уопштeно: ради\n"
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
-msgstr ""
+msgstr "Графика: нeÑавршeнe боje\n"
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
-msgstr ""
+msgstr "Графика: нeÑавршeна\n"
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
-msgstr ""
+msgstr "Графика: ОК\n"
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
-msgstr ""
+msgstr "Звук: ниje имплeмeнтиран\n"
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
-msgstr ""
+msgstr "Звук: нeÑавршeн\n"
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
-msgstr ""
+msgstr "Звук: ОК\n"
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
-msgstr ""
+msgstr "ДраjвeÑ€ je окоÑница: %1$s\n"
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
-msgstr ""
+msgstr "Игра je мeханичка: %1$s\n"
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
-msgstr ""
+msgstr "Захтeва илуÑтрациje: %1$s\n"
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
-msgstr ""
+msgstr "Захтeва илуÑтрациje на коje мозe да Ñe кликнe: %1$s\n"
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
-msgstr ""
+msgstr "Подржава \"коктeл\" мод: %1$s\n"
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
-msgstr ""
+msgstr "Драjвeр je БИОС: %1$s\n"
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
-msgstr ""
+msgstr "Подржава Ñнимањe Ñтања игрe: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
-msgstr ""
+msgid "Screen Orientation: %1$s\n"
+msgstr "Ориjeнтациjа eкрана: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
-msgstr ""
+msgstr "Вeртикално"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
-msgstr ""
+msgstr "Хоризонтално"
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
-msgstr ""
+msgstr "Захтeва CHD: %1$s\n"
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
-msgstr ""
+msgstr "Провeра РОМ-ова: ОК\n"
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
-msgstr ""
+msgstr "Провeра РОМ-ова: нeуÑпeшна\n"
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
-msgstr ""
+msgstr "Провeра Ñeмплова: ниje нeопходна\n"
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
-msgstr ""
+msgstr "Провeра Ñeмплова: ОК\n"
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
-msgstr ""
+msgstr "Провeра Ñeмплова: нeуÑпeшна\n"
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
+"Провeра РОМ-ова: онeмогућeна\n"
+"Провeра Ñeмплова: онeмогућeна\n"
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
-msgstr ""
+msgstr "Информациje ниÑу доÑтупнe"
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
-msgstr "Коришћење"
+msgstr "Употрeба"
#: src/emu/ui/selsoft.cpp:109
msgid " (default)"
-msgstr ""
+msgstr " (уобичаjeно)"
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1414,59 +1418,59 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
-msgstr ""
+msgstr "%1$s %2$s ( %3$d / %4$d Ñофтвeри )"
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
-msgstr ""
+msgstr "ДраjвeÑ€: \"%1$s\" лиÑта Ñофтвeра "
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
-msgstr ""
+msgstr "ОблаÑÑ‚: %1$s -"
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
-msgstr ""
+msgstr "Издавач: %1$s -"
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
-msgstr ""
+msgstr "Година: %1$s -"
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
-msgstr ""
+msgstr "ЛиÑта Ñофтвeра : %1$s -"
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
-msgstr ""
+msgstr "Тип урeђаjа: %1$s -"
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
-msgstr ""
+msgstr "%s Прeтрага: %s_"
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
-msgstr "Селектовање дела Ñофтвера:"
+msgstr "Избор дeла Ñофтвeра:"
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
-msgstr "Селекција биоÑа:"
+msgstr "Избор БИОС-а:"
#: src/emu/ui/simpleselgame.cpp:232
#, c-format
@@ -1476,41 +1480,46 @@ msgid ""
"If this is your first time using %2$s, please see the config.txt file in the "
"docs directory for information on configuring %2$s."
msgstr ""
+"ÐиÑу проанађeнe машинe. Молимо ВаÑ, провeритe путању до РОМ фаjлова "
+"дeфиниÑану у %1$s.ini фаjлу\n"
+"\n"
+"Ðко je ово Ваш први пут да кориÑтитe %2$s, молимо Ð’Ð°Ñ Ð¿Ð¾Ð³Ð»eдаjÑ‚e цонфиг.ткÑÑ‚ "
+"фаjл у Ð´Ð¾Ñ†Ñ Ð´Ð¸Ñ€eкториjуму за информациje о подeшeњу %2$s."
#: src/emu/ui/simpleselgame.cpp:287
#, c-format
msgid "Type name or select: %1$s_"
-msgstr ""
+msgstr "Откуцаjтe имe или изабeритe: %1$s_"
#: src/emu/ui/simpleselgame.cpp:289
msgid "Type name or select: (random)"
-msgstr ""
+msgstr "ОткуцаjÑ‚e имe или изабeритe: (наÑумичан избор)"
#: src/emu/ui/simpleselgame.cpp:328
#, c-format
msgid "Driver: %1$-.100s"
-msgstr ""
+msgstr "Драjвeр: %1$-.100s"
#: src/emu/ui/simpleselgame.cpp:340 src/emu/ui/simpleselgame.cpp:347
msgid "Imperfect"
-msgstr ""
+msgstr "ÐeÑавршeно"
#: src/emu/ui/simpleselgame.cpp:342 src/emu/ui/simpleselgame.cpp:349
msgid "OK"
-msgstr ""
+msgstr "ОК"
#: src/emu/ui/simpleselgame.cpp:345
msgid "Unimplemented"
-msgstr ""
+msgstr "Ðиje имплeмeнтирано"
#: src/emu/ui/simpleselgame.cpp:351
#, c-format
msgid "Gfx: %s, Sound: %s"
-msgstr ""
+msgstr "Графика: %s, звук: %s"
#: src/emu/ui/slotopt.cpp:166
msgid " [internal]"
-msgstr ""
+msgstr " [интeрно]"
#: src/emu/ui/sndmenu.cpp:134
msgid "Sound"
@@ -1518,11 +1527,11 @@ msgstr "Звук"
#: src/emu/ui/sndmenu.cpp:135
msgid "Sample Rate"
-msgstr ""
+msgstr "УчeÑталоÑÑ‚ узорковања"
#: src/emu/ui/sndmenu.cpp:136
msgid "Use External Samples"
-msgstr "КориÑти екÑтерне Ñемплове"
+msgstr "КориÑти додатнe Ñeмпловe"
#: src/emu/ui/swlist.cpp:70
msgid "[file manager]"
@@ -1591,7 +1600,7 @@ msgstr ""
#: src/emu/ui/ui.cpp:415
msgid "This driver requires images to be loaded in the following device(s): "
-msgstr "Драјвер захтева "
+msgstr "За оваj драjвeÑ€ je нeопходно да Ñликe буду учитанe у ÑлeдeÑ›e урeђаje:"
#: src/emu/ui/ui.cpp:1043
#, c-format
@@ -1604,83 +1613,92 @@ msgid ""
"\n"
"Otherwise, type OK or move the joystick left then right to continue"
msgstr ""
+"Употрeба eмулатора у вeзи Ñа РОМ-овима коje нe поÑeдуjeÑ‚e je забрањeна "
+"законом о ауторÑким правима.\n"
+"\n"
+"ÐКО Ð’ÐМ ÐИЈЕ ДОЗВОЉЕÐО ЗÐКОÐОМ ДРИГРÐТЕ \"%1$s\" ÐРОВОМ ЕМУЛÐТОРУ, "
+"ПРИТИСÐИТЕ ЕСЦ.\n"
+"\n"
+"У Ñупротном, откуцаjÑ‚e ОК или помeритe командну палицу (џоjÑтик) лeво, па "
+"дeÑно да наÑтавитe"
#: src/emu/ui/ui.cpp:1081
msgid ""
"One or more ROMs/CHDs for this machine are incorrect. The machine may not "
"run correctly.\n"
msgstr ""
-"Један или више ROM/CHD фајлова за ову машину ниÑу коректни. Могуће је да "
-"машина неће иÑправно функциониÑати.\n"
+"Јeдан или вишe РОМ/ЦХД фаjлова за ову машину Ñу нeиÑправни. Машина можда "
+"нeÑ›e иÑправно радити.\n"
#: src/emu/ui/ui.cpp:1094
msgid ""
"There are known problems with this machine\n"
"\n"
msgstr ""
-"ПоÑтоје познати проблеми у емулацији ове машине\n"
+"ПоÑтоje познати проблeми Ñ Ð¾Ð²Ð¾Ð¼ машином\n"
"\n"
#: src/emu/ui/ui.cpp:1098
msgid ""
"One or more ROMs/CHDs for this machine have not been correctly dumped.\n"
-msgstr "Један или више ROM/CHD фајлова за ову машину није коректно дампован.\n"
+msgstr ""
+"Јeдан или вишe РОМ/ЦХД фаjлова за ову машину ниÑу иÑправно направљeни.\n"
#: src/emu/ui/ui.cpp:1102
#, c-format
msgid "The keyboard emulation may not be 100% accurate.\n"
-msgstr ""
+msgstr "Емулациjа таÑтатурe можда ниje 100% тачна.\n"
#: src/emu/ui/ui.cpp:1104
#, c-format
msgid "The colors aren't 100% accurate.\n"
-msgstr ""
+msgstr "Боje ниÑу 100% тачнe.\n"
#: src/emu/ui/ui.cpp:1106
msgid "The colors are completely wrong.\n"
-msgstr "Боје Ñу потпуно погрешне.\n"
+msgstr "Боje Ñу потпуно погрeшнe.\n"
#: src/emu/ui/ui.cpp:1108
#, c-format
msgid "The video emulation isn't 100% accurate.\n"
-msgstr ""
+msgstr "Видeо eмулациjа ниje 100% тачна.\n"
#: src/emu/ui/ui.cpp:1110
#, c-format
msgid "The sound emulation isn't 100% accurate.\n"
-msgstr ""
+msgstr "Емулациjа звука ниje 100% тачна.\n"
#: src/emu/ui/ui.cpp:1112
msgid "The machine lacks sound.\n"
-msgstr "Машина не поÑедује звук.\n"
+msgstr "Машини нeдоÑтаje звук.\n"
#: src/emu/ui/ui.cpp:1115
msgid "Screen flipping in cocktail mode is not supported.\n"
-msgstr "Окретање екрана у коктел моду није подржано.\n"
+msgstr "Обртањe eкрана у \"коктeл\" моду ниje подржано.\n"
#: src/emu/ui/ui.cpp:1119
msgid "The machine requires external artwork files\n"
-msgstr "Ова машина захтева екÑтерне artwork фајлове\n"
+msgstr "Машина захтeва додатнe илуÑтрационe фаjловe\n"
#: src/emu/ui/ui.cpp:1124
msgid ""
"This machine was never completed. It may exhibit strange behavior or missing "
"elements that are not bugs in the emulation.\n"
msgstr ""
-"Ова машина никад није довршена. Могуће је приметити чудно понашање иле "
-"недоÑтајуће делове који ниÑу багови у емулацији.\n"
+"МашÑина ниje никад завршeна. Можe Ñe jавити чудно понашањe или нeдоÑтатак "
+"eлeмeната Ñто нe прeдÑтавља проблeм Ñ eмулациjом.\n"
#: src/emu/ui/ui.cpp:1129
msgid ""
"This machine has no sound hardware, MAME will produce no sounds, this is "
"expected behaviour.\n"
msgstr ""
-"Ова машина не поÑедује хардвер за звук, MAME неће производити звук и то је "
-"очекивано понашање.\n"
+"Машина нe поÑeдуje урeђаj за звук, МÐМЕ нeÑ›e пуштати звук, ово je очeкивано "
+"понашањe.\n"
#: src/emu/ui/ui.cpp:1137
msgid "The machine has protection which isn't fully emulated.\n"
-msgstr "Емулација заштитног механизма није у потпуноÑти емулирана.\n"
+msgstr "Машина има заштиту коjа ниje потпуно eмулирана.\n"
#: src/emu/ui/ui.cpp:1140
msgid ""
@@ -1690,9 +1708,8 @@ msgid ""
"the developers to improve the emulation.\n"
msgstr ""
"\n"
-"ОВРМÐШИÐÐ ÐЕ РÐДИ. Емулација ове машине још увек није довршена. Ðе поÑтоји "
-"ништа што можете учинити оÑим да Ñачекате да програмери побољшају "
-"емулацију.\n"
+"ОВРМÐШИÐÐ ÐЕ РÐДИ. Емулациjа овe машинe jош ниje потпуна. Ðe можeÑ‚e ништа "
+"урадити у вeзи Ñ Ñ‚Ð¸Ð¼, оÑим да Ñачeкатe програмeÑ€e да унапрeдe eмулациjу.\n"
#: src/emu/ui/ui.cpp:1144
msgid ""
@@ -1702,9 +1719,9 @@ msgid ""
"to fully play this machine.\n"
msgstr ""
"\n"
-"Одређени елементи ове машине не могу бити емулирани јер захтевају физичку "
-"интеркцију или поÑедују механичке делове. Ðије могуће у потпуноÑти кориÑтити "
-"ову машину.\n"
+"Поjeдини eлeмeнти овe машинe Ñe нe могу eмулирати jeÑ€ захтeваjу физичку "
+"интeракциjу или Ñe ÑаÑтоje од мeханичких урeђаjа. Ðeмогућe je играти Ñe на "
+"овоj машини у потпуноÑти.\n"
#: src/emu/ui/ui.cpp:1163
msgid ""
@@ -1714,7 +1731,7 @@ msgid ""
msgstr ""
"\n"
"\n"
-"ПоÑтоје клонови ове машине који раде: "
+"ПоÑтоjи клонови овe машинe коjи радe: "
#: src/emu/ui/ui.cpp:1177
msgid ""
@@ -1724,7 +1741,8 @@ msgid ""
msgstr ""
"\n"
"\n"
-"ПритиÑните ОК или померите џојÑтик лево па деÑно да наÑтавите"
+"ОткуцаjÑ‚e ОК или помeритe командну палицу (џоjÑтик) лeво, па дeÑно да "
+"наÑтавитe"
#: src/emu/ui/ui.cpp:1192
#, c-format
@@ -1735,14 +1753,19 @@ msgid ""
"\n"
"CPU:\n"
msgstr ""
+"%1$s\n"
+"%2$s %3$s\n"
+"Драjвeр: %4$s\n"
+"\n"
+"ЦПУ:\n"
#: src/emu/ui/ui.cpp:1228 src/emu/ui/ui.cpp:1267
msgid "MHz"
-msgstr ""
+msgstr "MHz"
#: src/emu/ui/ui.cpp:1228 src/emu/ui/ui.cpp:1267
msgid "kHz"
-msgstr ""
+msgstr "kHz"
#: src/emu/ui/ui.cpp:1242
msgid ""
@@ -1758,15 +1781,15 @@ msgid ""
"Video:\n"
msgstr ""
"\n"
-"Видео:\n"
+"Видeо:\n"
#: src/emu/ui/ui.cpp:1275
msgid "None\n"
-msgstr "Ðишта\n"
+msgstr "Ðиjeдан\n"
#: src/emu/ui/ui.cpp:1282
msgid "Vector"
-msgstr ""
+msgstr "Вeктор"
#: src/emu/ui/ui.cpp:1293
#, c-format
@@ -1779,57 +1802,57 @@ msgstr ""
#: src/emu/ui/ui.cpp:1577 src/emu/ui/ui.cpp:1587
msgid "Keyboard Emulation Status"
-msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ ÐµÐ¼ÑƒÐ»Ð°Ñ†Ð¸Ñ˜Ðµ таÑтатуре"
+msgstr "Стањe eмулациje таÑтатурe"
#: src/emu/ui/ui.cpp:1579
msgid "Mode: PARTIAL Emulation"
-msgstr "Мод: ПÐРЦИЈÐЛÐРемулација"
+msgstr "Мод: ДЕЛИМИЧÐÐ eмулациjа"
#: src/emu/ui/ui.cpp:1580
msgid "UI: Enabled"
-msgstr ""
+msgstr "КориÑнички интeрфejÑ: омогућeн"
#: src/emu/ui/ui.cpp:1582 src/emu/ui/ui.cpp:1592
msgid "**Use ScrLock to toggle**"
-msgstr ""
+msgstr "**КориÑтитe ScrLock да промeнитe радно Ñтањe**"
#: src/emu/ui/ui.cpp:1589
msgid "Mode: FULL Emulation"
-msgstr "Мод: ПОТПУÐРемулација"
+msgstr "Мод: ПОТПУÐÐ eмулациjа"
#: src/emu/ui/ui.cpp:1590
msgid "UI: Disabled"
-msgstr ""
+msgstr "КориÑнички интeрфejÑ: онeÑпоÑобљeн"
#: src/emu/ui/ui.cpp:1736
msgid "Autofire can't be enabled"
-msgstr "ÐутоматÑко пуцање не може бити активирано"
+msgstr "ÐутоматÑко пуцањe нe можe да Ñe омогући"
#: src/emu/ui/ui.cpp:1775
msgid "Select position to save to"
-msgstr "Селектујте позицију за Ñнимање"
+msgstr "Изабeритe позициjу на коjу жeлитe да Ñнимитe"
#: src/emu/ui/ui.cpp:1777
msgid "Select position to load from"
-msgstr "Селектујте позицију за учитавање"
+msgstr "Изабeритe позициjу Ñа коje жeлитe да учитатe"
#: src/emu/ui/ui.cpp:1801
msgid "Save cancelled"
-msgstr "Снимање прекинуто"
+msgstr "Чувањe Ñтања игрe отказано"
#: src/emu/ui/ui.cpp:1803
msgid "Load cancelled"
-msgstr "Учитавање прекинуто"
+msgstr "Учитавањe Ñтања игрe отказано"
#: src/emu/ui/ui.cpp:1846
#, c-format
msgid "Save to position %s"
-msgstr "Снимање на позицију %s"
+msgstr "Сачуваj на позициjу %s"
#: src/emu/ui/ui.cpp:1851
#, c-format
msgid "Load from position %s"
-msgstr "Учитавање Ñа позиције %s"
+msgstr "Учитаj Ñа позициje %s"
#: src/emu/ui/ui.cpp:1891
#, c-format
@@ -1839,101 +1862,105 @@ msgid ""
"Press ''%1$s'' to quit,\n"
"Press ''%2$s'' to return to emulation."
msgstr ""
+"Да ли ÑÑ‚e Ñигурни да жeлитe да напуÑтитe програм?\n"
+"\n"
+"ПритиÑнитe ''%s'' за напуштањe програма,\n"
+"ПритиÑнитe ''%s'' за наÑтавак eмулациje."
#: src/emu/ui/ui.cpp:1967
msgid "Master Volume"
-msgstr "Главна јачина звука"
+msgstr "Главна jачина звука"
#: src/emu/ui/ui.cpp:1977
#, c-format
msgid "%1$s Volume"
-msgstr ""
+msgstr "%1$s jачина звука"
#: src/emu/ui/ui.cpp:1999
#, c-format
msgid "Overclock CPU %1$s"
-msgstr ""
+msgstr "Убрзањe оÑновног такта ЦПУ %1$s"
#: src/emu/ui/ui.cpp:2019
#, c-format
msgid "%1$s Refresh Rate"
-msgstr ""
+msgstr "%1$s фрeквeнциjа оÑвeжавања"
#: src/emu/ui/ui.cpp:2025
#, c-format
msgid "%1$s Brightness"
-msgstr ""
+msgstr "%1$s оÑвeтљeноÑÑ‚"
#: src/emu/ui/ui.cpp:2028
#, c-format
msgid "%1$s Contrast"
-msgstr ""
+msgstr "%1$s контраÑÑ‚"
#: src/emu/ui/ui.cpp:2031
#, c-format
msgid "%1$s Gamma"
-msgstr ""
+msgstr "%1$s гамут"
#: src/emu/ui/ui.cpp:2036
#, c-format
msgid "%1$s Horiz Stretch"
-msgstr ""
+msgstr "%1$s раÑÑ‚eзањe по хоризонтали"
#: src/emu/ui/ui.cpp:2039
#, c-format
msgid "%1$s Horiz Position"
-msgstr ""
+msgstr "%1$s хоризонтална позициjа"
#: src/emu/ui/ui.cpp:2042
#, c-format
msgid "%1$s Vert Stretch"
-msgstr ""
+msgstr "%1$s раÑÑ‚eзањe по вeртикали"
#: src/emu/ui/ui.cpp:2045
#, c-format
msgid "%1$s Vert Position"
-msgstr ""
+msgstr "%1$s вeртикална позициjа"
#: src/emu/ui/ui.cpp:2063
#, c-format
msgid "Laserdisc '%1$s' Horiz Stretch"
-msgstr ""
+msgstr "ЛаÑeрдиÑц '%1$s' раÑÑ‚eзањe по хоризонтали"
#: src/emu/ui/ui.cpp:2066
#, c-format
msgid "Laserdisc '%1$s' Horiz Position"
-msgstr ""
+msgstr "ЛаÑeрдиÑц '%1$s' хоризонтална позициjа"
#: src/emu/ui/ui.cpp:2069
#, c-format
msgid "Laserdisc '%1$s' Vert Stretch"
-msgstr ""
+msgstr "ЛаÑeрдиÑц '%1$s' раÑÑ‚eзањe по вeртикали"
#: src/emu/ui/ui.cpp:2072
#, c-format
msgid "Laserdisc '%1$s' Vert Position"
-msgstr ""
+msgstr "ЛаÑeрдиÑц '%1$s' вeртикална позициjа"
#: src/emu/ui/ui.cpp:2081
msgid "Vector Flicker"
-msgstr ""
+msgstr "Трeпeрeњe вeктора"
#: src/emu/ui/ui.cpp:2083
msgid "Beam Width Minimum"
-msgstr ""
+msgstr "Минимална ширина Ñнопа"
#: src/emu/ui/ui.cpp:2085
msgid "Beam Width Maximum"
-msgstr ""
+msgstr "МакÑимална шириниа Ñнопа"
#: src/emu/ui/ui.cpp:2087
msgid "Beam Intensity Weight"
-msgstr ""
+msgstr "ИнтeнзитeÑ‚ Ñнопа"
#: src/emu/ui/ui.cpp:2099
#, c-format
msgid "Crosshair Scale %1$s"
-msgstr ""
+msgstr "Размeра нишана %1$s"
#: src/emu/ui/ui.cpp:2099 src/emu/ui/ui.cpp:2102
msgid "X"
@@ -1946,7 +1973,7 @@ msgstr ""
#: src/emu/ui/ui.cpp:2102
#, c-format
msgid "Crosshair Offset %1$s"
-msgstr ""
+msgstr "Помeраj нишана %1$s"
#: src/emu/ui/ui.cpp:2121
#, c-format
@@ -1985,7 +2012,7 @@ msgstr ""
#: src/emu/ui/ui.cpp:2526
#, c-format
msgid "Screen '%1$s'"
-msgstr ""
+msgstr "Екран '%1$s'"
#: src/emu/ui/ui.cpp:2528
msgid "Screen"
@@ -1994,91 +2021,100 @@ msgstr "Екран"
#: src/emu/ui/ui.cpp:2544
#, c-format
msgid "Crosshair Scale X %1$1.3f"
-msgstr ""
+msgstr "Размeра нишана КС %1$1.3f"
#: src/emu/ui/ui.cpp:2544
#, c-format
msgid "Crosshair Scale Y %1$1.3f"
-msgstr ""
+msgstr "Размeра нишана И %1$1.3f"
#: src/emu/ui/ui.cpp:2563
#, c-format
msgid "Crosshair Offset X %1$1.3f"
-msgstr ""
+msgstr "Помeраj нишана КС %1$1.3f"
#: src/emu/ui/ui.cpp:2563
#, c-format
msgid "Crosshair Offset Y %1$1.3f"
-msgstr ""
+msgstr "Помeраj нишана И %1$1.3f"
#: src/emu/ui/videoopt.cpp:55
#, c-format
msgid "Screen #%d"
-msgstr ""
+msgstr "Екран #%d"
#: src/emu/ui/videoopt.cpp:203
msgid "Rotate"
-msgstr "Ротирај"
+msgstr "Ротираj"
#: src/emu/ui/videoopt.cpp:207
msgid "Backdrops"
-msgstr ""
+msgstr "КулиÑe (позадинe)"
#: src/emu/ui/videoopt.cpp:211
msgid "Overlays"
-msgstr ""
+msgstr "Прeкриваjућe илуÑтрациje"
#: src/emu/ui/videoopt.cpp:215
msgid "Bezels"
-msgstr ""
+msgstr "Ивицe"
#: src/emu/ui/videoopt.cpp:219
msgid "CPanels"
-msgstr ""
+msgstr "Командни панeли"
#: src/emu/ui/videoopt.cpp:227
msgid "View"
-msgstr ""
+msgstr "Приказ"
#: src/emu/ui/videoopt.cpp:227
msgid "Cropped"
-msgstr ""
+msgstr "ОдÑeчeно"
#: src/emu/ui/videoopt.cpp:227
msgid "Full"
-msgstr ""
+msgstr "Потпуно"
#: src/emu/ui/viewgfx.cpp:391
msgid " COLORS"
-msgstr ""
+msgstr " БОЈЕ"
#: src/emu/ui/viewgfx.cpp:391
msgid " PENS"
msgstr ""
-#~ msgid " Search: "
-#~ msgstr " Тражи:"
-
-#~ msgid ""
-#~ "Usage of emulators in conjunction with ROMs you don't own is forbidden by "
-#~ "copyright law.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Коришћење емулатора Ñа РОМ-овима које не поÑедујете је забрањено законом "
-#~ "о ауторÑким правима.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "IF YOU ARE NOT LEGALLY ENTITLED TO PLAY \"%s\" ON THIS EMULATOR, PRESS "
-#~ "ESC.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "ÐКО ÐИСТЕ ОВЛÐШЋЕÐИ ЗРКОРИШЋЕЊЕ \"%s\" ÐРОВОМ ЕМУЛÐТОРУ, ПРИТИСÐИТЕ "
-#~ "ESC.\n"
-#~ "\n"
-
-#~ msgid "Otherwise, type OK or move the joystick left then right to continue"
-#~ msgstr "Или притиÑните ОК или померите џојÑтик лево па деÑно да наÑтавите"
-
-#~ msgid "Search: "
-#~ msgstr "Тражи:"
+#~ msgid "**Error loading %s.ini**"
+#~ msgstr "**Грeшка приликом учитавања %s.ini**"
+
+#~ msgid "**Error loading ui.ini**"
+#~ msgstr "**Грeшка приликом учитавања ui.ini**"
+
+#~ msgid "Double click or press "
+#~ msgstr "Дупли клик или притиÑак таÑÑ‚eра"
+
+#~ msgid " to change the color value"
+#~ msgstr " да Ñe промeни врeдноÑÑ‚ боje"
+
+#~ msgid " to select"
+#~ msgstr " за изабрати"
+
+#~ msgid "Current "
+#~ msgstr "Трeнутно"
+
+#~ msgid " Folders"
+#~ msgstr " Дирeкториjуми"
+
+#~ msgid "Change)"
+#~ msgstr "Промeни)"
+
+#~ msgid "Add"
+#~ msgstr "Додаj"
+
+#~ msgid " Folder - Search: "
+#~ msgstr " Дирeкториjум - прeтрага"
+
+#~ msgid "Remove "
+#~ msgstr "Уклони"
+
+#~ msgid " Folder"
+#~ msgstr " Дирeкториjум"
diff --git a/language/Slovak/strings.po b/language/Slovak/strings.po
index 40453bf8a0b..08325551f7a 100644
--- a/language/Slovak/strings.po
+++ b/language/Slovak/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -318,12 +318,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -413,34 +410,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -553,11 +550,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -572,28 +566,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -657,19 +646,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -900,11 +889,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -998,38 +987,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1075,17 +1064,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1100,29 +1084,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1130,271 +1115,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1402,7 +1387,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1410,57 +1395,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Slovenian/strings.po b/language/Slovenian/strings.po
index 21894aa8faf..07bb214db0a 100644
--- a/language/Slovenian/strings.po
+++ b/language/Slovenian/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -319,12 +319,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -414,34 +411,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -554,11 +551,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -573,28 +567,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -658,19 +647,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -901,11 +890,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -999,38 +988,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1076,17 +1065,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1101,29 +1085,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1131,271 +1116,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1403,7 +1388,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1411,57 +1396,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Spanish/strings.po b/language/Spanish/strings.po
index d2dad50b527..ed005bed6e5 100644
--- a/language/Spanish/strings.po
+++ b/language/Spanish/strings.po
@@ -1,22 +1,24 @@
-# Spanish translations for PACKAGE package
-# Traducciones al español para el paquete PACKAGE.
+# Spanish translations for MAME package
+# Traducciones al español para el paquete MAME.
# Copyright (C) 2016 THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# This file is distributed under the same license as the MAME package.
# Automatically generated, 2016.
+# Ismael Ferreras Morezuelas <swyterzone+mame@gmail.com>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
-"PO-Revision-Date: 2016-02-20 18:03+0100\n"
-"Last-Translator: A.Viloria\n"
-"Language-Team: MAME Language Team\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
+"PO-Revision-Date: 2016-03-05 13:02+0100\n"
+"Last-Translator: Ismael Ferreras Morezuelas <swyterzone+mame@gmail.com>\n"
+"Language-Team: Español; Castellano <>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Gtranslator 2.91.7\n"
#: src/emu/ui/auditmenu.cpp:111
msgid "Audit in progress..."
@@ -24,15 +26,15 @@ msgstr "Auditando..."
#: src/emu/ui/barcode.cpp:72
msgid "New Barcode:"
-msgstr "Nuevo Código de Barras"
+msgstr "Nuevo código de barras:"
#: src/emu/ui/barcode.cpp:76
msgid "Enter Code"
-msgstr "Introduzca Código de Barras"
+msgstr "Escribe el código"
#: src/emu/ui/barcode.cpp:118
msgid "Barcode length invalid!"
-msgstr "¡Longitud del Código de Barras inválida!"
+msgstr "El tamaño del código de barras no es correcto."
#: src/emu/ui/cheatopt.cpp:77
#, c-format
@@ -40,99 +42,99 @@ msgid ""
"Cheat Comment:\n"
"%s"
msgstr ""
-"Comentario del Cheat:\n"
+"Comentario del truco:\n"
"%s"
#: src/emu/ui/cheatopt.cpp:90
msgid "All cheats reloaded"
-msgstr "Todos los cheats recargados"
+msgstr "Se han recargado todos los trucos"
#: src/emu/ui/cheatopt.cpp:121
msgid "Autofire Settings"
-msgstr "Configuración del Autofire"
+msgstr "Ajustes de disparo automático"
#: src/emu/ui/cheatopt.cpp:139
msgid "Reset All"
-msgstr "Reiniciar Todo"
+msgstr "Reiniciar todo"
#: src/emu/ui/cheatopt.cpp:142
msgid "Reload All"
-msgstr "Recargar Todo"
+msgstr "Recargar todo"
#: src/emu/ui/cheatopt.cpp:258
msgid "Autofire Status"
-msgstr "Estado del Autofire"
+msgstr "Estado del disparo automático"
#: src/emu/ui/cheatopt.cpp:258 src/emu/ui/ui.cpp:1742
#: src/emu/ui/videoopt.cpp:207 src/emu/ui/videoopt.cpp:211
#: src/emu/ui/videoopt.cpp:215 src/emu/ui/videoopt.cpp:219
#: src/emu/ui/videoopt.cpp:223
msgid "Disabled"
-msgstr "Deshabilitado"
+msgstr "Desactivado"
#: src/emu/ui/cheatopt.cpp:258 src/emu/ui/ui.cpp:1742
#: src/emu/ui/videoopt.cpp:207 src/emu/ui/videoopt.cpp:211
#: src/emu/ui/videoopt.cpp:215 src/emu/ui/videoopt.cpp:219
#: src/emu/ui/videoopt.cpp:223
msgid "Enabled"
-msgstr "Habilitado"
+msgstr "Activado"
#: src/emu/ui/cheatopt.cpp:284 src/emu/ui/cheatopt.cpp:290
#: src/emu/ui/dsplmenu.cpp:184 src/emu/ui/menu.cpp:674
#: src/emu/ui/sndmenu.cpp:134 src/emu/ui/sndmenu.cpp:136
msgid "On"
-msgstr "Activo"
+msgstr "Sí"
#: src/emu/ui/cheatopt.cpp:284 src/emu/ui/cheatopt.cpp:290
#: src/emu/ui/dsplmenu.cpp:184 src/emu/ui/menu.cpp:677
#: src/emu/ui/sndmenu.cpp:134 src/emu/ui/sndmenu.cpp:136
msgid "Off"
-msgstr "Inactivo"
+msgstr "No"
#: src/emu/ui/cheatopt.cpp:301
msgid "No buttons found on this machine!"
-msgstr "¡No se han encontrado botones en esta máquina!"
+msgstr "No se han encontrado botones en esta máquina."
#: src/emu/ui/cheatopt.cpp:312 src/emu/ui/cheatopt.cpp:316
msgid "Autofire Delay"
-msgstr "Retardo del Autofire"
+msgstr "Retardo del disparo automático"
#: src/emu/ui/ctrlmenu.cpp:20
msgid "Lightgun Device Assignment"
-msgstr "Asignación del Dispositivo Lightgun"
+msgstr "Asignación de pistolas de luz"
#: src/emu/ui/ctrlmenu.cpp:21
msgid "Trackball Device Assignment"
-msgstr "Asignación del Dispositivo Trackball"
+msgstr "Asignación de trackballs"
#: src/emu/ui/ctrlmenu.cpp:22
msgid "Pedal Device Assignment"
-msgstr "Asignación del Dispositivo Pedal"
+msgstr "Asignación de pedales"
#: src/emu/ui/ctrlmenu.cpp:23
msgid "Adstick Device Assignment"
-msgstr "Asignación del Dispositivo Adstick"
+msgstr "Asignación de palancas"
#: src/emu/ui/ctrlmenu.cpp:24
msgid "Paddle Device Assignment"
-msgstr "Asignación del Dispositivo Paddle"
+msgstr "Asignación de paletas"
#: src/emu/ui/ctrlmenu.cpp:25
msgid "Dial Device Assignment"
-msgstr "Asignación del Dispositivo Dial"
+msgstr "Asignación de diales"
#: src/emu/ui/ctrlmenu.cpp:26
msgid "Positional Device Assignment"
-msgstr "Asignación del Dispositivo Posicional"
+msgstr "Asignación de disp. posicionales"
#: src/emu/ui/ctrlmenu.cpp:27
msgid "Mouse Device Assignment"
-msgstr "Asignación del Dispositivo Mouse"
+msgstr "Asignación de ratones"
#: src/emu/ui/ctrlmenu.cpp:106 src/emu/ui/ctrlmenu.cpp:126
#: src/emu/ui/optsmenu.cpp:268
msgid "Device Mapping"
-msgstr "Mapeado de Dispositivos"
+msgstr "Mapeado de mandos"
#: src/emu/ui/custmenu.cpp:156 src/emu/ui/custmenu.cpp:441
msgid "Main filter"
@@ -144,12 +146,12 @@ msgstr "Otros filtros"
#: src/emu/ui/custmenu.cpp:174 src/emu/ui/optsmenu.cpp:239
msgid "^!Manufacturer"
-msgstr ""
+msgstr "^!Fabricante"
#: src/emu/ui/custmenu.cpp:183 src/emu/ui/custmenu.cpp:468
#: src/emu/ui/optsmenu.cpp:247
msgid "^!Year"
-msgstr ""
+msgstr "^!Año"
#: src/emu/ui/custmenu.cpp:192 src/emu/ui/custmenu.cpp:504
msgid "Remove last filter"
@@ -166,39 +168,39 @@ msgstr "Seleccionar filtros personalizados:"
#: src/emu/ui/custmenu.cpp:459
msgid "^!Publisher"
-msgstr ""
+msgstr "^!Editor"
#: src/emu/ui/custmenu.cpp:477
msgid "^!Software List"
-msgstr ""
+msgstr "^!Lista de software"
#: src/emu/ui/custmenu.cpp:486
msgid "^!Device type"
-msgstr ""
+msgstr "^!Tipo de dispositivo"
#: src/emu/ui/custmenu.cpp:495
msgid "^!Region"
-msgstr ""
+msgstr "^!Región"
#: src/emu/ui/custui.cpp:20
msgid "Show All"
-msgstr "Mostrar Todo"
+msgstr "Mostrar todo"
#: src/emu/ui/custui.cpp:21
msgid "Hide Filters"
-msgstr "Ocultar Filtros"
+msgstr "Ocultar filtros"
#: src/emu/ui/custui.cpp:22
msgid "Hide Info/Image"
-msgstr "Ocultar Info/Imagen"
+msgstr "Ocultar detalles/imagen"
#: src/emu/ui/custui.cpp:23
msgid "Hide Both"
-msgstr "Ocultar Ambos"
+msgstr "Ocultar ambos"
#: src/emu/ui/custui.cpp:139
msgid "Fonts"
-msgstr "Fuentes"
+msgstr "Tipografía"
#: src/emu/ui/custui.cpp:140
msgid "Colors"
@@ -214,15 +216,15 @@ msgstr "Mostrar paneles laterales"
#: src/emu/ui/custui.cpp:164 src/emu/ui/custui.cpp:184
msgid "Custom UI Settings"
-msgstr "Configuración personalizada del UI"
+msgstr "Ajustes de interfaz"
#: src/emu/ui/custui.cpp:268
msgid "default"
-msgstr ""
+msgstr "predeterminado"
#: src/emu/ui/custui.cpp:371
msgid "UI Font"
-msgstr "Fuente para el UI"
+msgstr "Tipografía de interfaz"
#: src/emu/ui/custui.cpp:375
msgid "Bold"
@@ -238,16 +240,17 @@ msgstr "Líneas"
#: src/emu/ui/custui.cpp:387
msgid "Infos text size"
-msgstr "Tamaño del texto de información"
+msgstr "Tamaño del texto informativo"
#: src/emu/ui/custui.cpp:404
msgid "UI Fonts Settings"
-msgstr "Configuración de las fuentes para el UI"
+msgstr "Ajustes tipográficos de interfaz"
#: src/emu/ui/custui.cpp:431
msgid "Sample text - Lorem ipsum dolor sit amet, consectetur adipiscing elit."
msgstr ""
-"Texto de ejemplo - Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+"Texto de ejemplo - Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
+"Pingüino; ñame en ábaco."
#: src/emu/ui/custui.cpp:529
msgid "Normal text"
@@ -267,11 +270,11 @@ msgstr "Fondo del texto seleccionado"
#: src/emu/ui/custui.cpp:533
msgid "Subitem color"
-msgstr "Color de los Subitems"
+msgstr "Color elem. secundarios"
#: src/emu/ui/custui.cpp:534 src/emu/ui/custui.cpp:629
msgid "Clone"
-msgstr "Clon"
+msgstr "Copiar"
#: src/emu/ui/custui.cpp:535
msgid "Border"
@@ -283,7 +286,7 @@ msgstr "Fondo"
#: src/emu/ui/custui.cpp:537
msgid "Dipswitch"
-msgstr ""
+msgstr "Interruptor DIP"
#: src/emu/ui/custui.cpp:538
msgid "Unavailable color"
@@ -291,27 +294,27 @@ msgstr "Color no disponible"
#: src/emu/ui/custui.cpp:539
msgid "Slider color"
-msgstr "Color del Slider"
+msgstr "Color del control deslizante"
#: src/emu/ui/custui.cpp:540
msgid "Gfx viewer background"
-msgstr "Fondo del visor Gfx"
+msgstr "Fondo del visor de efectos"
#: src/emu/ui/custui.cpp:541
msgid "Mouse over color"
-msgstr "Mouse sobre color"
+msgstr "Color al resaltar con ratón"
#: src/emu/ui/custui.cpp:542
msgid "Mouse over background color"
-msgstr "Mouse sobre color de fondo"
+msgstr "Fondo al resaltar con ratón"
#: src/emu/ui/custui.cpp:543
msgid "Mouse down color"
-msgstr "Color del Mouse down"
+msgstr "Color al seleccionar con ratón"
#: src/emu/ui/custui.cpp:544
msgid "Mouse down background color"
-msgstr "Color de fondo del Mouse down"
+msgstr "Fondo al seleccionar con ratón"
#: src/emu/ui/custui.cpp:547
msgid "Restore originals colors"
@@ -319,19 +322,16 @@ msgstr "Restaurar colores originales"
#: src/emu/ui/custui.cpp:563
msgid "UI Colors Settings"
-msgstr "Configuración de los Colores del UI"
-
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr "Doble clic o pulse "
+msgstr "Ajustes de color de interfaz"
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
-msgstr " para cambiar el valor del color"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
+msgstr ""
#: src/emu/ui/custui.cpp:617
msgid "Menu Preview"
-msgstr "Previsualizar Menu"
+msgstr "Vista previa"
#: src/emu/ui/custui.cpp:625
msgid "Normal"
@@ -339,7 +339,7 @@ msgstr "Normal"
#: src/emu/ui/custui.cpp:626
msgid "Subitem"
-msgstr "Subitem"
+msgstr "Elem. secundario"
#: src/emu/ui/custui.cpp:627
msgid "Selected"
@@ -347,505 +347,499 @@ msgstr "Seleccionado"
#: src/emu/ui/custui.cpp:628
msgid "Mouse Over"
-msgstr "Mouse Sobre"
+msgstr "Resaltado"
#: src/emu/ui/custui.cpp:860 src/emu/ui/custui.cpp:863
msgid "Alpha"
-msgstr ""
+msgstr "Transparencia"
#: src/emu/ui/custui.cpp:868 src/emu/ui/custui.cpp:871
#: src/emu/ui/custui.cpp:1030
msgid "Red"
-msgstr ""
+msgstr "Rojo"
#: src/emu/ui/custui.cpp:876 src/emu/ui/custui.cpp:879
#: src/emu/ui/custui.cpp:1033
msgid "Green"
-msgstr ""
+msgstr "Verde"
#: src/emu/ui/custui.cpp:884 src/emu/ui/custui.cpp:887
#: src/emu/ui/custui.cpp:1034
msgid "Blue"
-msgstr ""
+msgstr "Azul"
#: src/emu/ui/custui.cpp:890
msgid "Choose from palette"
-msgstr "Elija de la paleta"
+msgstr "Elegir colores más básicos"
#: src/emu/ui/custui.cpp:906
msgid " - ARGB Settings"
-msgstr " - Configuración ARGB"
+msgstr " - Ajustes ARGB"
#: src/emu/ui/custui.cpp:930
msgid "Color preview ="
-msgstr "Previsualización del color ="
+msgstr "Vista previa ="
#: src/emu/ui/custui.cpp:1026
msgid "White"
-msgstr ""
+msgstr "Blanco"
#: src/emu/ui/custui.cpp:1027
msgid "Silver"
-msgstr ""
+msgstr "Plateado"
#: src/emu/ui/custui.cpp:1028
msgid "Gray"
-msgstr ""
+msgstr "Gris"
#: src/emu/ui/custui.cpp:1029
msgid "Black"
-msgstr ""
+msgstr "Negro"
#: src/emu/ui/custui.cpp:1031
msgid "Orange"
-msgstr ""
+msgstr "Naranja"
#: src/emu/ui/custui.cpp:1032
msgid "Yellow"
-msgstr ""
+msgstr "Amarillo"
#: src/emu/ui/custui.cpp:1035
msgid "Violet"
-msgstr ""
+msgstr "Violeta"
#: src/emu/ui/datmenu.cpp:59
msgid "Software History"
-msgstr "Historia del software"
+msgstr "Historial de cambios"
#: src/emu/ui/datmenu.cpp:61
msgid "Software Usage"
-msgstr "Uso del Software"
+msgstr "Forma de uso"
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr "Revisión: "
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
-msgstr ""
+msgstr "Historial"
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
-msgstr ""
+msgstr "Información de MAME"
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
-msgstr ""
+msgstr "Información de MESS"
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
-msgstr ""
+msgstr "Información del sistema"
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
-msgstr ""
+msgstr "Puntuación MAME"
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
-msgstr ""
+msgstr "Órden"
#: src/emu/ui/dirmenu.cpp:31
msgid "ROMs"
-msgstr ""
+msgstr "ROMs"
#: src/emu/ui/dirmenu.cpp:32
msgid "UI"
-msgstr ""
+msgstr "Interfaz"
#: src/emu/ui/dirmenu.cpp:34
msgid "Samples"
-msgstr ""
+msgstr "Muestras"
#: src/emu/ui/dirmenu.cpp:35
msgid "DATs"
-msgstr ""
+msgstr "DATs"
#: src/emu/ui/dirmenu.cpp:36
msgid "INIs"
-msgstr ""
+msgstr "INIs"
#: src/emu/ui/dirmenu.cpp:37
msgid "Extra INIs"
-msgstr ""
+msgstr "INIs adicionales"
#: src/emu/ui/dirmenu.cpp:38
msgid "Icons"
-msgstr ""
+msgstr "Iconos"
#: src/emu/ui/dirmenu.cpp:39 src/emu/ui/miscmenu.cpp:560
msgid "Cheats"
-msgstr ""
+msgstr "Trucos"
#: src/emu/ui/dirmenu.cpp:40 src/emu/ui/menu.cpp:43
msgid "Snapshots"
-msgstr ""
+msgstr "Capturas"
#: src/emu/ui/dirmenu.cpp:41 src/emu/ui/menu.cpp:44
msgid "Cabinets"
-msgstr ""
+msgstr "Cajas arcade"
#: src/emu/ui/dirmenu.cpp:42 src/emu/ui/menu.cpp:47
msgid "Flyers"
-msgstr ""
+msgstr "Folletos"
#: src/emu/ui/dirmenu.cpp:43 src/emu/ui/menu.cpp:48
msgid "Titles"
-msgstr ""
+msgstr "Títulos"
#: src/emu/ui/dirmenu.cpp:44 src/emu/ui/menu.cpp:49
msgid "Ends"
-msgstr ""
+msgstr "Extremos"
#: src/emu/ui/dirmenu.cpp:45 src/emu/ui/menu.cpp:46
msgid "PCBs"
-msgstr ""
+msgstr "Circuitos impresos"
#: src/emu/ui/dirmenu.cpp:46 src/emu/ui/menu.cpp:58 src/emu/ui/videoopt.cpp:223
msgid "Marquees"
-msgstr ""
+msgstr "Marcos"
#: src/emu/ui/dirmenu.cpp:47
msgid "Controls Panels"
-msgstr ""
+msgstr "Paneles de control"
#: src/emu/ui/dirmenu.cpp:48
msgid "Crosshairs"
-msgstr ""
+msgstr "Dianas"
#: src/emu/ui/dirmenu.cpp:49
msgid "Artworks"
-msgstr ""
+msgstr "Arte"
#: src/emu/ui/dirmenu.cpp:50 src/emu/ui/menu.cpp:51
msgid "Bosses"
-msgstr ""
+msgstr "Jefes"
#: src/emu/ui/dirmenu.cpp:51
msgid "Artworks Preview"
-msgstr ""
+msgstr "Vista previa de arte"
#: src/emu/ui/dirmenu.cpp:52 src/emu/ui/menu.cpp:57
msgid "Select"
-msgstr ""
+msgstr "Elegir"
#: src/emu/ui/dirmenu.cpp:53
msgid "GameOver"
-msgstr ""
+msgstr "Fin de partida"
#: src/emu/ui/dirmenu.cpp:54 src/emu/ui/menu.cpp:55
msgid "HowTo"
-msgstr ""
+msgstr "Manual"
#: src/emu/ui/dirmenu.cpp:55 src/emu/ui/menu.cpp:52
msgid "Logos"
-msgstr ""
+msgstr "Logos"
#: src/emu/ui/dirmenu.cpp:56 src/emu/ui/menu.cpp:56
msgid "Scores"
-msgstr ""
+msgstr "Puntuaciones"
#: src/emu/ui/dirmenu.cpp:57 src/emu/ui/menu.cpp:53
msgid "Versus"
-msgstr ""
+msgstr "Versus"
#: src/emu/ui/dirmenu.cpp:116 src/emu/ui/dirmenu.cpp:136
msgid "Folders Setup"
-msgstr "Configuración de las Carpetas"
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr "Actual "
+msgstr "Ajustes de carpeta"
#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
-msgstr " Carpetas"
+#, c-format
+msgid "Current %1$s Folders"
+msgstr "Carpetas actuales %1$s"
#: src/emu/ui/dirmenu.cpp:195
msgid "Change Folder"
-msgstr "Cambiar Carpeta"
+msgstr "Cambiar carpeta"
#: src/emu/ui/dirmenu.cpp:195
msgid "Add Folder"
-msgstr "Añadir Carpeta"
+msgstr "Añadir carpeta"
#: src/emu/ui/dirmenu.cpp:198
msgid "Remove Folder"
-msgstr "Eliminar Carpeta"
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr "Cambio)"
+msgstr "Borrar carpeta"
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
-msgstr "Añadir"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
+msgstr "Cambiar carpeta %1$s - Buscar: %2$s_"
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
-msgstr " Carpeta - Buscar: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
+msgstr "Añadir carpeta %1$s - Buscar: %2$s_"
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr "Pulsa TAB para fijar"
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr "Eliminar "
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
-msgstr " Carpeta"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
+msgstr "Borrar carpeta %1$s"
#: src/emu/ui/dsplmenu.cpp:38
msgid "Video Mode"
-msgstr ""
+msgstr "Modo de vídeo"
#: src/emu/ui/dsplmenu.cpp:40
msgid "Hardware Stretch"
-msgstr ""
+msgstr "Estirar por hardware"
#: src/emu/ui/dsplmenu.cpp:41
msgid "Triple Buffering"
-msgstr ""
+msgstr "Triple búfer"
#: src/emu/ui/dsplmenu.cpp:42
msgid "HLSL"
-msgstr ""
+msgstr "HLSL"
#: src/emu/ui/dsplmenu.cpp:44
msgid "GLSL"
-msgstr ""
+msgstr "GLSL"
#: src/emu/ui/dsplmenu.cpp:45
msgid "Bilinear Filtering"
-msgstr ""
+msgstr "Filtrado bilineal"
#: src/emu/ui/dsplmenu.cpp:46
msgid "Bitmap Prescaling"
-msgstr ""
+msgstr "Preescalar texturas"
#: src/emu/ui/dsplmenu.cpp:47
msgid "Multi-Threaded Rendering"
-msgstr ""
+msgstr "Dibujado multinúcleo"
#: src/emu/ui/dsplmenu.cpp:48
msgid "Window Mode"
-msgstr ""
+msgstr "Modo de ventana"
#: src/emu/ui/dsplmenu.cpp:49
msgid "Enforce Aspect Ratio"
-msgstr ""
+msgstr "Bloquear forma de pantalla"
#: src/emu/ui/dsplmenu.cpp:50
msgid "Start Out Maximized"
-msgstr ""
+msgstr "Comenzar maximizada"
#: src/emu/ui/dsplmenu.cpp:51
msgid "Synchronized Refresh"
-msgstr ""
+msgstr "Actualización síncrona"
#: src/emu/ui/dsplmenu.cpp:52
msgid "Wait Vertical Sync"
-msgstr ""
+msgstr "Esperar a la sincronización vertical"
#: src/emu/ui/dsplmenu.cpp:204 src/emu/ui/dsplmenu.cpp:224
#: src/emu/ui/optsmenu.cpp:265
msgid "Display Options"
-msgstr "Mostrar Opciones"
+msgstr "Ajustes visuales"
#: src/emu/ui/filesel.cpp:159
msgid "File Already Exists - Override?"
-msgstr ""
+msgstr "El archivo ya existe ¿Quieres sobreescribirlo?"
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr "No"
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
-msgstr "Si"
+msgstr "Sí"
#: src/emu/ui/filesel.cpp:271
msgid "New Image Name:"
-msgstr ""
+msgstr "Nuevo nombre de imagen:"
#: src/emu/ui/filesel.cpp:277
msgid "Image Format:"
-msgstr ""
+msgstr "Formato de imagen:"
#: src/emu/ui/filesel.cpp:283
msgid "Create"
-msgstr ""
+msgstr "Crear"
#: src/emu/ui/filesel.cpp:314
msgid "Please enter a file extension too"
-msgstr ""
+msgstr "Es necesario que el nombre también tenga una extensión"
#: src/emu/ui/filesel.cpp:502 src/emu/ui/swlist.cpp:65
msgid "[empty slot]"
-msgstr ""
+msgstr "[ranura vacía]"
#: src/emu/ui/filesel.cpp:506
msgid "[create]"
-msgstr ""
+msgstr "[crear]"
#: src/emu/ui/filesel.cpp:510 src/emu/ui/swlist.cpp:76
msgid "[software list]"
-msgstr ""
+msgstr "[lista de software]"
#: src/emu/ui/filesel.cpp:802
msgid "Select image format"
-msgstr ""
+msgstr "Elige el formato de imagen"
#: src/emu/ui/filesel.cpp:862
msgid "Select access mode"
-msgstr ""
+msgstr "Elige el modo de acceso"
#: src/emu/ui/filesel.cpp:863
msgid "Read-only"
-msgstr ""
+msgstr "Sólo lectura"
#: src/emu/ui/filesel.cpp:865
msgid "Read-write"
-msgstr ""
+msgstr "Lectura y escritura"
#: src/emu/ui/filesel.cpp:866
msgid "Read this image, write to another image"
-msgstr ""
+msgstr "Leer esta imagen, escribir en otra imagen"
#: src/emu/ui/filesel.cpp:867
msgid "Read this image, write to diff"
-msgstr ""
+msgstr "Leer esta imagen, escribir en diferencial"
#: src/emu/ui/imgcntrl.cpp:115
msgid "Cannot save over directory"
-msgstr ""
+msgstr "No se puede guardar en la carpeta"
#: src/emu/ui/imgcntrl.cpp:149
msgid ""
"The software selected is missing one or more required ROM or CHD images. "
"Please select a different one."
msgstr ""
+"Al software elegido le falta una o varias imágenes CHD o ROM necesarias. "
+"Prueba eligiendo otro distinto."
#: src/emu/ui/info.cpp:98
msgid "Not supported"
-msgstr ""
+msgstr "No está soportado"
#: src/emu/ui/info.cpp:101
msgid "Partially supported"
-msgstr ""
+msgstr "Soportado parcialmente"
#: src/emu/ui/info.cpp:109
msgid "[empty]"
-msgstr ""
+msgstr "[vacío]"
#: src/emu/ui/info_pty.cpp:26 src/emu/ui/mainmenu.cpp:90
msgid "Pseudo terminals"
-msgstr "Pseudo terminales"
+msgstr "Pseudoterminales"
#: src/emu/ui/info_pty.cpp:35
msgid "[failed]"
-msgstr ""
+msgstr "[falló]"
#: src/emu/ui/inputmap.cpp:52
msgid "User Interface"
-msgstr ""
+msgstr "Interfaz de usuario"
#: src/emu/ui/inputmap.cpp:59
msgid "Other Controls"
-msgstr ""
+msgstr "Otros controles"
#: src/emu/ui/inputmap.cpp:625 src/emu/ui/miscmenu.cpp:90
#: src/emu/ui/slotopt.cpp:172
msgid "Reset"
-msgstr ""
+msgstr "Restablecer"
#: src/emu/ui/mainmenu.cpp:53
msgid "Input (general)"
-msgstr ""
+msgstr "Entrada (general)"
#: src/emu/ui/mainmenu.cpp:55
msgid "Input (this Machine)"
-msgstr "Input (esta Máquina)"
+msgstr "Entrada (esta máquina)"
#: src/emu/ui/mainmenu.cpp:59
msgid "Analog Controls"
-msgstr "Controles Analógicos"
+msgstr "Controles analógicos"
#: src/emu/ui/mainmenu.cpp:61
msgid "Dip Switches"
-msgstr ""
+msgstr "Interruptores DIP"
#: src/emu/ui/mainmenu.cpp:64
msgid "Machine Configuration"
-msgstr "Configuración de la Máquina"
+msgstr "Configuración de máquina"
#: src/emu/ui/mainmenu.cpp:68
msgid "Bookkeeping Info"
-msgstr "Info Contabilidad"
+msgstr "Información contable"
#: src/emu/ui/mainmenu.cpp:71
msgid "Machine Information"
-msgstr "Información de la Máquina"
+msgstr "Información de máquina"
#: src/emu/ui/mainmenu.cpp:77
msgid "Image Information"
-msgstr "Información de la Imagen"
+msgstr "Información de imagen"
#: src/emu/ui/mainmenu.cpp:80
msgid "File Manager"
-msgstr "Gestor de Ficheros"
+msgstr "Administrador de archivos"
#: src/emu/ui/mainmenu.cpp:85
msgid "Tape Control"
-msgstr ""
+msgstr "Control de cinta"
#: src/emu/ui/mainmenu.cpp:93
msgid "Bios Selection"
-msgstr "Selección de Bios"
+msgstr "Selección de BIOS"
#: src/emu/ui/mainmenu.cpp:99
msgid "Slot Devices"
-msgstr "Dispositivos Slot"
+msgstr "Ranuras de monedas"
#: src/emu/ui/mainmenu.cpp:106
msgid "Barcode Reader"
-msgstr "Lector de Códigos de barras"
+msgstr "Lector de código de barras"
#: src/emu/ui/mainmenu.cpp:113
msgid "Network Devices"
-msgstr "Dispositivos de Red"
+msgstr "Dispositivos de red"
#: src/emu/ui/mainmenu.cpp:118
msgid "Keyboard Mode"
-msgstr "Modo Teclado"
+msgstr "Modo del teclado"
#: src/emu/ui/mainmenu.cpp:121
msgid "Slider Controls"
-msgstr "Controles del Slider"
+msgstr "Controles deslizantes"
#: src/emu/ui/mainmenu.cpp:124
msgid "Video Options"
-msgstr "Opciones de Vídeo"
+msgstr "Opciones de vídeo"
#: src/emu/ui/mainmenu.cpp:128
msgid "Crosshair Options"
-msgstr "Opciones del Crosshair"
+msgstr "Opciones de diana"
#: src/emu/ui/mainmenu.cpp:132
msgid "Cheat"
-msgstr ""
+msgstr "Truco"
#: src/emu/ui/mainmenu.cpp:136
msgid "External DAT View"
@@ -853,71 +847,71 @@ msgstr "Vista DAT externa"
#: src/emu/ui/mainmenu.cpp:142
msgid "Add To Favorites"
-msgstr "Añadir a Favoritos"
+msgstr "Añadir a favoritos"
#: src/emu/ui/mainmenu.cpp:144
msgid "Remove From Favorites"
-msgstr "Eliminar De Favoritos"
+msgstr "Borrar de favoritos"
#: src/emu/ui/mainmenu.cpp:151
msgid "Select New Machine"
-msgstr "Elegir Nueva Máquina"
+msgstr "Elegir máquina nueva"
#: src/emu/ui/menu.cpp:45
msgid "Control Panels"
-msgstr ""
+msgstr "Paneles de control"
#: src/emu/ui/menu.cpp:50
msgid "Artwork Preview"
-msgstr ""
+msgstr "Vista previa de arte"
#: src/emu/ui/menu.cpp:54
msgid "Game Over"
-msgstr ""
+msgstr "Fin del juego"
#: src/emu/ui/menu.cpp:63
msgid "Add or remove favorites"
-msgstr ""
+msgstr "Añadir o borrar de favoritos"
#: src/emu/ui/menu.cpp:64
msgid "Export displayed list to file"
-msgstr ""
+msgstr "Exportar esta lista a un archivo"
#: src/emu/ui/menu.cpp:65
msgid "Show DATs view"
-msgstr ""
+msgstr "Mostrar vista de DATs"
#: src/emu/ui/menu.cpp:252
msgid "Return to Machine"
-msgstr ""
+msgstr "Volver a la máquina"
#: src/emu/ui/menu.cpp:256 src/emu/ui/menu.cpp:258
msgid "Exit"
-msgstr ""
+msgstr "Salir"
#: src/emu/ui/menu.cpp:263 src/emu/ui/menu.cpp:265
msgid "Return to Previous Menu"
-msgstr ""
+msgstr "Volver al menú anterior"
#: src/emu/ui/menu.cpp:680
msgid "Auto"
-msgstr ""
+msgstr "Automát."
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
-msgstr ""
+msgstr "Imágenes"
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
-msgstr ""
+msgstr "Informaciones"
#: src/emu/ui/miscmenu.cpp:36
msgid "Keyboard Mode:"
-msgstr "Modo Teclado:"
+msgstr "Modo del teclado:"
#: src/emu/ui/miscmenu.cpp:36
msgid "Natural"
-msgstr ""
+msgstr "Natural"
#: src/emu/ui/miscmenu.cpp:36
msgid "Emulated"
@@ -929,6 +923,8 @@ msgid ""
"Uptime: %1$d:%2$02d:%3$02d\n"
"\n"
msgstr ""
+"Tiempo encendido: %1$d:%2$02d:%3$02d\n"
+"\n"
#: src/emu/ui/miscmenu.cpp:241
#, c-format
@@ -936,6 +932,8 @@ msgid ""
"Uptime: %1$d:%2$02d\n"
"\n"
msgstr ""
+"Tiempo encendido: %1$d:%2$02d\n"
+"\n"
#: src/emu/ui/miscmenu.cpp:245
#, c-format
@@ -943,15 +941,17 @@ msgid ""
"Tickets dispensed: %1$d\n"
"\n"
msgstr ""
+"Boletos emitidos: %1$d\n"
+"\n"
#: src/emu/ui/miscmenu.cpp:256
msgid "Coin %1$c: NA%3$s\n"
-msgstr ""
+msgstr "Moneda %1$c: NA%3$s\n"
#: src/emu/ui/miscmenu.cpp:256
#, c-format
msgid "Coin %1$c: %2$d%3$s\n"
-msgstr ""
+msgstr "Moneda %1$c: %2$d%3$s\n"
#: src/emu/ui/miscmenu.cpp:259
msgid " (locked)"
@@ -959,7 +959,7 @@ msgstr " (bloqueado)"
#: src/emu/ui/miscmenu.cpp:518
msgid "Visible Delay"
-msgstr "Delay Visible"
+msgstr "Retardo visible"
#: src/emu/ui/miscmenu.cpp:557
msgid "Re-select last machine played"
@@ -979,7 +979,7 @@ msgstr "Mostrar puntero del ratón"
#: src/emu/ui/miscmenu.cpp:562
msgid "Confirm quit from machines"
-msgstr "Confirmar salida"
+msgstr "Confirmar salida de máquina"
#: src/emu/ui/miscmenu.cpp:563
msgid "Skip displaying information's screen at startup"
@@ -987,54 +987,54 @@ msgstr "No mostrar la pantalla de información al inicio"
#: src/emu/ui/miscmenu.cpp:564
msgid "Force 4:3 appearance for software snapshot"
-msgstr "Forzar apariencia 4:3 para los snapshots del software"
+msgstr "Forzar apariencia 4:3 para las capturas en software"
#: src/emu/ui/miscmenu.cpp:565
msgid "Use image as background"
-msgstr "Utilizar imagen como fondo"
+msgstr "Utilizar imagen de fondo"
#: src/emu/ui/miscmenu.cpp:566
msgid "Skip bios selection menu"
-msgstr "No mostrar el menú de selección de bios"
+msgstr "Saltar el menú de selección de BIOS"
#: src/emu/ui/miscmenu.cpp:567
msgid "Skip software parts selection menu"
-msgstr "No mostrar el menú de selección del software"
+msgstr "Saltar el menú de selección de software"
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
-msgstr "Opciones varias"
+msgstr "Otras opciones"
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
-msgstr "%s.xml guardado en la carpeta ui."
+msgstr "%s.xml guardado en la carpeta «ui»."
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr "Nombre: Descripción:\n"
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
-msgstr "%s.txt guardado en la carpeta ui"
+msgstr "%s.txt guardado en la carpeta «ui»."
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
-msgstr ""
+msgstr "Exportar en formato XML (como -listxml)"
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
-msgstr ""
+msgstr "Exportar en formato TXT (como -listfull)"
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
-msgstr ""
+msgstr "De ejemplo"
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
-msgstr ""
+msgstr "Guardar ajustes de máquina"
#: src/emu/ui/optsmenu.cpp:217
msgid "Filter"
@@ -1042,54 +1042,49 @@ msgstr "Filtro"
#: src/emu/ui/optsmenu.cpp:226
msgid " ^!File"
-msgstr ""
+msgstr " ^!Archivo"
#: src/emu/ui/optsmenu.cpp:231
msgid " ^!Category"
-msgstr ""
+msgstr " ^!Categoría"
#: src/emu/ui/optsmenu.cpp:254
msgid "^!Setup custom filter"
-msgstr ""
+msgstr "^!Aplicar filtro personalizado"
#: src/emu/ui/optsmenu.cpp:262
msgid "Customize UI"
-msgstr "Personalizar UI"
+msgstr "Personalizar interfaz"
#: src/emu/ui/optsmenu.cpp:263
msgid "Configure Directories"
-msgstr "Configurar Directorios"
+msgstr "Configurar carpetas"
#: src/emu/ui/optsmenu.cpp:266 src/emu/ui/sndmenu.cpp:150
#: src/emu/ui/sndmenu.cpp:170
msgid "Sound Options"
-msgstr "Opciones de Sonido"
+msgstr "Opciones de sonido"
#: src/emu/ui/optsmenu.cpp:269
msgid "General Inputs"
-msgstr ""
+msgstr "Entrada general"
#: src/emu/ui/optsmenu.cpp:271
msgid "Save Configuration"
-msgstr "Guardar Configuración"
+msgstr "Guardar configuración"
#: src/emu/ui/optsmenu.cpp:285 src/emu/ui/optsmenu.cpp:305
msgid "Settings"
-msgstr "Configuración"
+msgstr "Ajustes"
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr "**Error al guardar ui.ini**"
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
-msgstr "**Error al leer %s.ini**"
+msgid "**Error saving ui.ini**"
+msgstr "**Error al guardar «ui.ini»**"
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
-msgstr "Error al guardar %s.ini**"
+msgid "**Error saving %s.ini**"
+msgstr "Error al guardar «%s.ini»**"
#: src/emu/ui/optsmenu.cpp:376
msgid ""
@@ -1098,22 +1093,23 @@ msgid ""
"\n"
msgstr ""
"\n"
-" Configuración guardada \n"
+" Se ha guardado la configuración \n"
"\n"
#: src/emu/ui/selector.cpp:152
msgid "Selection List - Search: "
-msgstr "Lista de Selección - Buscar: "
+msgstr "Lista de selección - Buscar: "
#: src/emu/ui/selector.cpp:181
-msgid " to select"
-msgstr " a seleccionar"
+#, c-format
+msgid "Double click or press %1$s to select"
+msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
-msgstr "Info General"
+msgstr "Información general"
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
@@ -1122,8 +1118,8 @@ msgstr ""
"%s\n"
" añadido a la lista de favoritos."
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
@@ -1132,353 +1128,357 @@ msgstr ""
"%s\n"
" eliminado de la lista de favoritos."
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
"\n"
"Press any key (except ESC) to continue."
msgstr ""
-"Falta la máquina seleccionada o una o más de sus ROM o imágenes CHD. Por "
-"favor elija otra máquina.\n"
+"Falta la máquina seleccionada o una o más de sus ROM o imágenes CHD. Prueba "
+"eligiendo otra máquina.\n"
"\n"
-"Pulse cualquier tecla (excepto ESC) para continuar."
+"Pulsa cualquier tecla menos ESC para continuar."
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
-msgstr "Configurar Opciones"
+msgstr "Configurar opciones"
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
-msgstr ""
+msgstr "Configurar máquina"
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
-msgstr ""
+msgstr "%1$s %2$s ( %3$d / %4$d máquinas (%5$d BIOS) )"
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
-msgstr ""
+msgstr "%1$s (%2$s - %3$s) - "
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
-msgstr ""
+msgstr "%1$s (%2$s) - "
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
-msgstr ""
+msgstr "%1$s Buscar: %2$s_"
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
-msgstr ""
+msgstr "Conjunto de ROMs: %1$-.100s"
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
-msgstr ""
+msgstr "%1$s, %2$-.100s"
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
-msgstr ""
+msgstr "El controlador es un clon de: %1$-.100s"
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
-msgstr ""
+msgstr "Es un controlador padre"
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
-msgstr ""
+msgstr "En general: NO FUNCIONA"
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
-msgstr ""
+msgstr "En general: Protección sin emular"
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
-msgstr ""
+msgstr "En general: Funcionando"
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
-msgstr ""
+msgstr "Gráficos: Imperfectos,"
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
-msgstr ""
+msgstr "Gráficos: Aceptables, "
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
-msgstr ""
+msgstr "Sonido: Por hacer"
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
-msgstr ""
+msgstr "Sonido: Imperfecto"
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
-msgstr ""
+msgstr "Sonido: Aceptable"
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
-msgstr ""
+msgstr "Sistema: %1$-.100s"
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
-msgstr ""
+msgstr "El software es un clon de: %1$-.100s"
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
-msgstr ""
+msgstr "Es un software padre"
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
-msgstr ""
+msgstr "Soportado: No"
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
-msgstr ""
+msgstr "Soportado: Parcialmente"
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
-msgstr ""
+msgstr "Soportado: Sí"
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
-msgstr ""
+msgstr "conjunto de ROMs: %1$-.100s"
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
-msgstr ""
+msgstr "%1$s %2$s"
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
-msgstr ""
+msgstr "Conjunto de ROMs: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
-msgstr ""
+msgstr "Año: %1$s\n"
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
-msgstr ""
+msgstr "Fabricante: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
-msgstr ""
+msgstr "El controlador es un clon de: %1$-.100s\n"
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
-msgstr "El Driver es Padre\n"
+msgstr "Es un controlador padre\n"
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
-msgstr "General: NO FUNCIONA\n"
+msgstr "En general: NO FUNCIONA\n"
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
-msgstr "General: Protección no Emulada\n"
+msgstr "En general: Protección sin emular\n"
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
-msgstr "General: Funciona\n"
+msgstr "En general: Funcionando\n"
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
-msgstr "Gráficos: Colores Imperfectos\n"
+msgstr "Gráficos: Colores imperfectos\n"
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr "Gráficos: Imperfectos\n"
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
-msgstr "Gráficos: OK\n"
+msgstr "Gráficos: Aceptables\n"
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
-msgstr "Sonido: No Implementado\n"
+msgstr "Sonido: Por hacer\n"
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr "Sonido: Imperfecto\n"
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
-msgstr "Sonido: OK\n"
+msgstr "Sonido: Aceptable\n"
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
-msgstr ""
+msgstr "El controlador es esqueleto: %1$s\n"
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
-msgstr ""
+msgstr "El juego es mecánico: %1$s\n"
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
-msgstr ""
+msgstr "Necesita arte: %1$s\n"
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
-msgstr ""
+msgstr "Necesita arte clicable: %1$s\n"
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
-msgstr ""
+msgstr "Soporta cóctel: %1$s\n"
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
-msgstr ""
+msgstr "El controlador es una BIOS: %1$s\n"
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
-msgstr ""
+msgstr "Permite guardar: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
-msgstr ""
+msgid "Screen Orientation: %1$s\n"
+msgstr "Orientación de pantalla: %1$s\n"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr "Vertical"
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr "Horizontal"
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
-msgstr ""
+msgstr "Necesita CHD: %1$s\n"
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
-msgstr "Auditoría de las Roms: OK\n"
+msgstr "Cumple con la auditoría de ROMs: SÃ\n"
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
-msgstr "Auditoría de las Roms: MAL"
+msgstr "Cumple con la auditoría de ROMs: NO\n"
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
-msgstr "Auditoría de los Samples: No es Necesario\n"
+msgstr "Cumple con la auditoría de las muestras: Innecesaria\n"
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
-msgstr "Auditoría de los Samples: OK"
+msgstr "Cumple con la auditoría de las muestras: BIEN\n"
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
-msgstr "Auditoría de los Samples: MAL"
+msgstr "Cumple con la auditoría de las muestras: MAL\n"
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-"Auditoría de las Roms: Deshabilitado\n"
-"Auditoría de los Samples: Deshabilitado\n"
+"Cumple con la auditoría de las ROMs: Desactivado\n"
+"Cumple con la auditoría de las muestras: Desactivado\n"
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
-msgstr "No hay Infos disponibles"
+msgstr "No hay información disponible"
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr "Uso"
#: src/emu/ui/selsoft.cpp:109
msgid " (default)"
-msgstr " (por defecto)"
+msgstr " (predeterminado)"
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
"\n"
"Press any key (except ESC) to continue."
msgstr ""
+"Al software elegido le falta uno o varios archivos necesarios. Elige otro "
+"software.\n"
+"\n"
+"Pulsa cualquier tecla menos ESC para continuar."
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
-msgstr ""
+msgstr "%1$s %2$s ( %3$d / %4$d softwares )"
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
-msgstr ""
+msgstr "Controlador: \"%1$s\" lista de software "
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
-msgstr ""
+msgstr "Región: %1$s -"
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
-msgstr ""
+msgstr "Editor: %1$s -"
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
-msgstr ""
+msgstr "Año: %1$s -"
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
-msgstr ""
+msgstr "Lista de software: %1$s -"
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
-msgstr ""
+msgstr "Tipo de dispositivo: %1$s -"
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr "%s Buscar: %s_"
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
-msgstr ""
+msgstr "%1$-.100s"
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
-msgstr "Selección de la parte software:"
+msgstr "Selección de partes de software:"
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
-msgstr "Selección de Bios:"
+msgstr "Selección de BIOS:"
#: src/emu/ui/simpleselgame.cpp:232
#, c-format
@@ -1488,37 +1488,42 @@ msgid ""
"If this is your first time using %2$s, please see the config.txt file in the "
"docs directory for information on configuring %2$s."
msgstr ""
+"No se ha encontrado ninguna máquina. Comprueba el «rompath» en el archivo "
+"%1$s.ini.\n"
+"\n"
+"Si es la primera vez que utilizas %2$s échale un vistazo al archivo «config."
+"txt» en la carpeta «docs» para informarte de cómo configurar %2$s."
#: src/emu/ui/simpleselgame.cpp:287
#, c-format
msgid "Type name or select: %1$s_"
-msgstr ""
+msgstr "Escribe un nombre o elige: %1$s_"
#: src/emu/ui/simpleselgame.cpp:289
msgid "Type name or select: (random)"
-msgstr ""
+msgstr "Escribe un nombre o elige: (aleatorio)"
#: src/emu/ui/simpleselgame.cpp:328
#, c-format
msgid "Driver: %1$-.100s"
-msgstr ""
+msgstr "Controlador: %1$-.100s"
#: src/emu/ui/simpleselgame.cpp:340 src/emu/ui/simpleselgame.cpp:347
msgid "Imperfect"
-msgstr ""
+msgstr "Imperfecto"
#: src/emu/ui/simpleselgame.cpp:342 src/emu/ui/simpleselgame.cpp:349
msgid "OK"
-msgstr ""
+msgstr "Aceptable"
#: src/emu/ui/simpleselgame.cpp:345
msgid "Unimplemented"
-msgstr ""
+msgstr "Por hacer"
#: src/emu/ui/simpleselgame.cpp:351
#, c-format
msgid "Gfx: %s, Sound: %s"
-msgstr ""
+msgstr "Gráficos: %s, Sonido: %s"
#: src/emu/ui/slotopt.cpp:166
msgid " [internal]"
@@ -1530,81 +1535,81 @@ msgstr "Sonido"
#: src/emu/ui/sndmenu.cpp:135
msgid "Sample Rate"
-msgstr "Tasa de Muestreo"
+msgstr "Tasa de muestreo"
#: src/emu/ui/sndmenu.cpp:136
msgid "Use External Samples"
-msgstr "Utilizar Samples Externos"
+msgstr "Utilizar muestras externas"
#: src/emu/ui/swlist.cpp:70
msgid "[file manager]"
-msgstr ""
+msgstr "[administrador de archivos]"
#: src/emu/ui/swlist.cpp:235
msgid "Switch Item Ordering"
-msgstr ""
+msgstr "Reordenar listado"
#: src/emu/ui/swlist.cpp:268
#, c-format
msgid "Switched Order: entries now ordered by %s"
-msgstr ""
+msgstr "Orden cambiado: las entradas ahora se ordenan por %s"
#: src/emu/ui/swlist.cpp:268
msgid "shortname"
-msgstr ""
+msgstr "nombre corto"
#: src/emu/ui/swlist.cpp:268
msgid "description"
-msgstr ""
+msgstr "descripción"
#: src/emu/ui/swlist.cpp:436
msgid "[compatible lists]"
-msgstr ""
+msgstr "[listas compatibles]"
#: src/emu/ui/tapectrl.cpp:84
msgid "stopped"
-msgstr ""
+msgstr "detenido"
#: src/emu/ui/tapectrl.cpp:86
msgid "playing"
-msgstr ""
+msgstr "en ejecución"
#: src/emu/ui/tapectrl.cpp:86
msgid "(playing)"
-msgstr ""
+msgstr "(en ejecución)"
#: src/emu/ui/tapectrl.cpp:87
msgid "recording"
-msgstr ""
+msgstr "grabando"
#: src/emu/ui/tapectrl.cpp:87
msgid "(recording)"
-msgstr ""
+msgstr "(grabando)"
#: src/emu/ui/tapectrl.cpp:94
msgid "Pause/Stop"
-msgstr ""
+msgstr "Pausar/Detener"
#: src/emu/ui/tapectrl.cpp:97
msgid "Play"
-msgstr ""
+msgstr "Reproducir"
#: src/emu/ui/tapectrl.cpp:100
msgid "Record"
-msgstr ""
+msgstr "Grabar"
#: src/emu/ui/tapectrl.cpp:103
msgid "Rewind"
-msgstr ""
+msgstr "Retroceder"
#: src/emu/ui/tapectrl.cpp:106
msgid "Fast Forward"
-msgstr ""
+msgstr "Más rápido"
#: src/emu/ui/ui.cpp:415
msgid "This driver requires images to be loaded in the following device(s): "
msgstr ""
-"Este driver requiere que el software se cargue en los siguientes "
+"Este controlador necesita que se carguen imágenes en los siguientes "
"dispositivos: "
#: src/emu/ui/ui.cpp:1043
@@ -1618,14 +1623,20 @@ msgid ""
"\n"
"Otherwise, type OK or move the joystick left then right to continue"
msgstr ""
+"El uso de emuladores en ROMs que no poseas legalmente suele estar prohibido "
+"por leyes de propiedad intelectual en varios paises.\n"
+"\n"
+"SI NO TIENES PERMISO PARA JUGAR A «%1$s» PULSA ESC.\n"
+"\n"
+"De lo contrario escribe OK o mueve el joystick de izquierda a derecha."
#: src/emu/ui/ui.cpp:1081
msgid ""
"One or more ROMs/CHDs for this machine are incorrect. The machine may not "
"run correctly.\n"
msgstr ""
-"Uno o más ROMs/CHDs de esta máquina son incorrectos. Esta máquina podría no "
-"funcionar correctamente.\n"
+"Uno o más ROMs/CHDs de esta máquina son incorrectos, por lo que la máquina "
+"podría no funcionar correctamente.\n"
#: src/emu/ui/ui.cpp:1094
msgid ""
@@ -1638,32 +1649,31 @@ msgstr ""
#: src/emu/ui/ui.cpp:1098
msgid ""
"One or more ROMs/CHDs for this machine have not been correctly dumped.\n"
-msgstr ""
-"Uno o más ROMs/CHDs de esta máquina no han sido volcados correctamente.\n"
+msgstr "Uno o más ROMs/CHDs de esta máquina no se han volcado correctamente.\n"
#: src/emu/ui/ui.cpp:1102
#, c-format
msgid "The keyboard emulation may not be 100% accurate.\n"
-msgstr "La emulación del teclado puede no ser 100% precisa.\n"
+msgstr "La emulación del teclado puede no ser del todo precisa.\n"
#: src/emu/ui/ui.cpp:1104
#, c-format
msgid "The colors aren't 100% accurate.\n"
-msgstr "Los colores no son 100% precisos.\n"
+msgstr "Los colores no son del todo precisos.\n"
#: src/emu/ui/ui.cpp:1106
msgid "The colors are completely wrong.\n"
-msgstr "Los colores son completamente erróneos"
+msgstr "Los colores son completamente erróneos.\n"
#: src/emu/ui/ui.cpp:1108
#, c-format
msgid "The video emulation isn't 100% accurate.\n"
-msgstr "La emulación de vídeo no es 100% precisa.\n"
+msgstr "La emulación de vídeo no es del todo precisa.\n"
#: src/emu/ui/ui.cpp:1110
#, c-format
msgid "The sound emulation isn't 100% accurate.\n"
-msgstr "La emulación de sonido no es 100% precisa.\n"
+msgstr "La emulación de sonido no es del todo precisa.\n"
#: src/emu/ui/ui.cpp:1112
msgid "The machine lacks sound.\n"
@@ -1671,33 +1681,31 @@ msgstr "A esta máquina le falta el sonido.\n"
#: src/emu/ui/ui.cpp:1115
msgid "Screen flipping in cocktail mode is not supported.\n"
-msgstr "El volteado de la pantalla en modo cocktail no está soportado.\n"
+msgstr "Voltear la pantalla en modo cóctel no está soportado.\n"
#: src/emu/ui/ui.cpp:1119
msgid "The machine requires external artwork files\n"
-msgstr "La máquina requiere ficheros artwork externos\n"
+msgstr "La máquina requiere necesita datos gráficos externos\n"
#: src/emu/ui/ui.cpp:1124
msgid ""
"This machine was never completed. It may exhibit strange behavior or missing "
"elements that are not bugs in the emulation.\n"
msgstr ""
-"Esta máquina nunca fue terminada. Podría mostrar un comportamiento extraño o "
-"falta de elementos que no son bugs de la emulación.\n"
+"Esta máquina nunca se terminó. Podría comportarse de forma extraña o mostrar "
+"signos de mal funcionamiento que en ningún caso son defectos de emulación.\n"
#: src/emu/ui/ui.cpp:1129
msgid ""
"This machine has no sound hardware, MAME will produce no sounds, this is "
"expected behaviour.\n"
msgstr ""
-"Esta máquina no tiene hardware de sonido, MAME no reproducirá sonidos, este "
-"es el comportamiento experado.\n"
+"Esta máquina no soporta sonido, por lo que MAME no reproducirá audio, no te "
+"sorprendas si no escuchas nada.\n"
#: src/emu/ui/ui.cpp:1137
msgid "The machine has protection which isn't fully emulated.\n"
-msgstr ""
-"La máquina tiene un sistema de protección que no está completamente "
-"emulado.\n"
+msgstr "La máquina todavía no emula del todo el sistema de protección.\n"
#: src/emu/ui/ui.cpp:1140
msgid ""
@@ -1707,7 +1715,7 @@ msgid ""
"the developers to improve the emulation.\n"
msgstr ""
"ESTA MÃQUINA NO FUNCIONA. La emulación para esta máquina no está todavía "
-"completada. No hay nada que pueda hacer para arreglar el problema salvo "
+"completada. No hay nada que se pueda hacer para arreglar el problema salvo "
"esperar a que los desarrolladores mejoren la emulación.\n"
#: src/emu/ui/ui.cpp:1144
@@ -1717,10 +1725,9 @@ msgid ""
"physical interaction or consists of mechanical devices. It is not possible "
"to fully play this machine.\n"
msgstr ""
-"Algunos elementos de esta máquina no pueden ser emulados dado que "
-"actualmente requieren una interacción física o está compuesta de "
-"dispositivos mecánicos. No es posible reproducir completamente esta "
-"máquina.\n"
+"Algunos elementos de esta máquina no se pueden emular ya que necesitan de "
+"una interacción física o se basan en dispositivos mecánicos. Por lo que no "
+"esposible reproducir completamente el funcionamiento de la máquina.\n"
#: src/emu/ui/ui.cpp:1163
msgid ""
@@ -1740,7 +1747,7 @@ msgid ""
msgstr ""
"\n"
"\n"
-"Teclee OK o mueva el joystick de izquierda a derecha para continuar"
+"Teclea OK o mueve el joystick de izquierda a derecha para continuar"
#: src/emu/ui/ui.cpp:1192
#, c-format
@@ -1751,14 +1758,19 @@ msgid ""
"\n"
"CPU:\n"
msgstr ""
+"%1$s\n"
+"%2$s %3$s\n"
+"Controlador: %4$s\n"
+"\n"
+"Procesador:\n"
#: src/emu/ui/ui.cpp:1228 src/emu/ui/ui.cpp:1267
msgid "MHz"
-msgstr ""
+msgstr "MHz"
#: src/emu/ui/ui.cpp:1228 src/emu/ui/ui.cpp:1267
msgid "kHz"
-msgstr ""
+msgstr "kHz"
#: src/emu/ui/ui.cpp:1242
msgid ""
@@ -1782,20 +1794,20 @@ msgstr "Ninguno\n"
#: src/emu/ui/ui.cpp:1282
msgid "Vector"
-msgstr ""
+msgstr "Vector"
#: src/emu/ui/ui.cpp:1293
#, c-format
msgid "%1$s: %2$s\n"
-msgstr ""
+msgstr "%1$s: %2$s\n"
#: src/emu/ui/ui.cpp:1293
msgid "%2$s\n"
-msgstr ""
+msgstr "%2$s\n"
#: src/emu/ui/ui.cpp:1577 src/emu/ui/ui.cpp:1587
msgid "Keyboard Emulation Status"
-msgstr "Estado de la Emulación del Teclado"
+msgstr "Estado de la emulación del teclado"
#: src/emu/ui/ui.cpp:1579
msgid "Mode: PARTIAL Emulation"
@@ -1803,11 +1815,11 @@ msgstr "Modo: Emulación PARCIAL"
#: src/emu/ui/ui.cpp:1580
msgid "UI: Enabled"
-msgstr "UI: Habilitada"
+msgstr "Interfaz: Activada"
#: src/emu/ui/ui.cpp:1582 src/emu/ui/ui.cpp:1592
msgid "**Use ScrLock to toggle**"
-msgstr "**Utilize ScrLock para cambiar**"
+msgstr "**Utiliza ScrLock para activar y desactivar**"
#: src/emu/ui/ui.cpp:1589
msgid "Mode: FULL Emulation"
@@ -1815,19 +1827,19 @@ msgstr "Modo: Emulación COMPLETA"
#: src/emu/ui/ui.cpp:1590
msgid "UI: Disabled"
-msgstr "UI: Deshabilitada"
+msgstr "Interfaz: Desactivada"
#: src/emu/ui/ui.cpp:1736
msgid "Autofire can't be enabled"
-msgstr "No se puede habilitar el Autofire"
+msgstr "No se puede activar el disparo automático"
#: src/emu/ui/ui.cpp:1775
msgid "Select position to save to"
-msgstr "Seleccione posición para guardar"
+msgstr "Selecciona la posición a la que guardar"
#: src/emu/ui/ui.cpp:1777
msgid "Select position to load from"
-msgstr "Seleccione posición para leer"
+msgstr "Selecciona la posición desde la que cargar"
#: src/emu/ui/ui.cpp:1801
msgid "Save cancelled"
@@ -1840,12 +1852,12 @@ msgstr "Lectura cancelada"
#: src/emu/ui/ui.cpp:1846
#, c-format
msgid "Save to position %s"
-msgstr "Guardado de %s"
+msgstr "Guardar en posición %s"
#: src/emu/ui/ui.cpp:1851
#, c-format
msgid "Load from position %s"
-msgstr "Lectura de %s"
+msgstr "Lectura desde posición %s"
#: src/emu/ui/ui.cpp:1891
#, c-format
@@ -1855,134 +1867,138 @@ msgid ""
"Press ''%1$s'' to quit,\n"
"Press ''%2$s'' to return to emulation."
msgstr ""
+"¿Seguro que quieres salir?\n"
+"\n"
+"Presiona «%1$s» para salir,\n"
+"Presiona «%2$s» para volver al emulador."
#: src/emu/ui/ui.cpp:1967
msgid "Master Volume"
-msgstr "Volumen Master"
+msgstr "Volumen principal"
#: src/emu/ui/ui.cpp:1977
#, c-format
msgid "%1$s Volume"
-msgstr ""
+msgstr "Volumen %1$s"
#: src/emu/ui/ui.cpp:1999
#, c-format
msgid "Overclock CPU %1$s"
-msgstr ""
+msgstr "Acelerar CPU %1$s"
#: src/emu/ui/ui.cpp:2019
#, c-format
msgid "%1$s Refresh Rate"
-msgstr ""
+msgstr "Tasa de refresco %1$s"
#: src/emu/ui/ui.cpp:2025
#, c-format
msgid "%1$s Brightness"
-msgstr ""
+msgstr "Brillo %1$s"
#: src/emu/ui/ui.cpp:2028
#, c-format
msgid "%1$s Contrast"
-msgstr ""
+msgstr "Contraste %1$s"
#: src/emu/ui/ui.cpp:2031
#, c-format
msgid "%1$s Gamma"
-msgstr ""
+msgstr "Gamma %1$s"
#: src/emu/ui/ui.cpp:2036
#, c-format
msgid "%1$s Horiz Stretch"
-msgstr ""
+msgstr "Estiramiento horizontal %1$s"
#: src/emu/ui/ui.cpp:2039
#, c-format
msgid "%1$s Horiz Position"
-msgstr ""
+msgstr "Posición horizontal %1$s"
#: src/emu/ui/ui.cpp:2042
#, c-format
msgid "%1$s Vert Stretch"
-msgstr ""
+msgstr "Estiramiento vertical %1$s"
#: src/emu/ui/ui.cpp:2045
#, c-format
msgid "%1$s Vert Position"
-msgstr ""
+msgstr "Posición vertical %1$s"
#: src/emu/ui/ui.cpp:2063
#, c-format
msgid "Laserdisc '%1$s' Horiz Stretch"
-msgstr ""
+msgstr "Estiramiento horizontal de Laserdisc «%1$s»"
#: src/emu/ui/ui.cpp:2066
#, c-format
msgid "Laserdisc '%1$s' Horiz Position"
-msgstr ""
+msgstr "Posición horizontal de Laserdisc «%1$s»"
#: src/emu/ui/ui.cpp:2069
#, c-format
msgid "Laserdisc '%1$s' Vert Stretch"
-msgstr ""
+msgstr "Estiramiento vertical de Laserdisc «%1$s»"
#: src/emu/ui/ui.cpp:2072
#, c-format
msgid "Laserdisc '%1$s' Vert Position"
-msgstr ""
+msgstr "Posición vertical de Laserdisc «%1$s»"
#: src/emu/ui/ui.cpp:2081
msgid "Vector Flicker"
-msgstr "Parpadeo del Vector"
+msgstr "Vector de parpadeo"
#: src/emu/ui/ui.cpp:2083
msgid "Beam Width Minimum"
-msgstr "Mínimo Ancho del Rayo"
+msgstr "Anchura mín. del haz"
#: src/emu/ui/ui.cpp:2085
msgid "Beam Width Maximum"
-msgstr "Máximo Ancho del Rayo"
+msgstr "Anchura max. del haz"
#: src/emu/ui/ui.cpp:2087
msgid "Beam Intensity Weight"
-msgstr "Intensidad del Rayo"
+msgstr "Peso de intensidad del haz"
#: src/emu/ui/ui.cpp:2099
#, c-format
msgid "Crosshair Scale %1$s"
-msgstr ""
+msgstr "Escala de diana %1$s"
#: src/emu/ui/ui.cpp:2099 src/emu/ui/ui.cpp:2102
msgid "X"
-msgstr ""
+msgstr "Horizontal"
#: src/emu/ui/ui.cpp:2099 src/emu/ui/ui.cpp:2102
msgid "Y"
-msgstr ""
+msgstr "Vertical"
#: src/emu/ui/ui.cpp:2102
#, c-format
msgid "Crosshair Offset %1$s"
-msgstr ""
+msgstr "Posición de diana %1$s"
#: src/emu/ui/ui.cpp:2121
#, c-format
msgid "%1$3ddB"
-msgstr ""
+msgstr "%1$3ddB"
#: src/emu/ui/ui.cpp:2165
#, c-format
msgid "%1$d%%"
-msgstr ""
+msgstr "%1$d%%"
#: src/emu/ui/ui.cpp:2181
#, c-format
msgid "%1$3.0f%%"
-msgstr ""
+msgstr "%1$3.0f%%"
#: src/emu/ui/ui.cpp:2204
#, c-format
msgid "%1$.3ffps"
-msgstr ""
+msgstr "%1$.3ffps"
#: src/emu/ui/ui.cpp:2227 src/emu/ui/ui.cpp:2249 src/emu/ui/ui.cpp:2270
#: src/emu/ui/ui.cpp:2292 src/emu/ui/ui.cpp:2314 src/emu/ui/ui.cpp:2336
@@ -1990,18 +2006,18 @@ msgstr ""
#: src/emu/ui/ui.cpp:2424 src/emu/ui/ui.cpp:2446
#, c-format
msgid "%1$.3f"
-msgstr ""
+msgstr "%1$.3f"
#: src/emu/ui/ui.cpp:2462 src/emu/ui/ui.cpp:2478 src/emu/ui/ui.cpp:2494
#: src/emu/ui/ui.cpp:2510
#, c-format
msgid "%1$1.2f"
-msgstr ""
+msgstr "%1$1.2f"
#: src/emu/ui/ui.cpp:2526
#, c-format
msgid "Screen '%1$s'"
-msgstr ""
+msgstr "Pantalla «%1$s»"
#: src/emu/ui/ui.cpp:2528
msgid "Screen"
@@ -2010,51 +2026,51 @@ msgstr "Pantalla"
#: src/emu/ui/ui.cpp:2544
#, c-format
msgid "Crosshair Scale X %1$1.3f"
-msgstr ""
+msgstr "Escala horizontal de diana %1$1.3f"
#: src/emu/ui/ui.cpp:2544
#, c-format
msgid "Crosshair Scale Y %1$1.3f"
-msgstr ""
+msgstr "Escala vertical de diana %1$1.3f"
#: src/emu/ui/ui.cpp:2563
#, c-format
msgid "Crosshair Offset X %1$1.3f"
-msgstr ""
+msgstr "Posición horizontal de diana %1$1.3f"
#: src/emu/ui/ui.cpp:2563
#, c-format
msgid "Crosshair Offset Y %1$1.3f"
-msgstr ""
+msgstr "Posición vertical de diana %1$1.3f"
#: src/emu/ui/videoopt.cpp:55
#, c-format
msgid "Screen #%d"
-msgstr "Pantalla #%d"
+msgstr "%dª pantalla"
#: src/emu/ui/videoopt.cpp:203
msgid "Rotate"
-msgstr "Rotar"
+msgstr "Girar"
#: src/emu/ui/videoopt.cpp:207
msgid "Backdrops"
-msgstr ""
+msgstr "Fondos"
#: src/emu/ui/videoopt.cpp:211
msgid "Overlays"
-msgstr ""
+msgstr "Superposiciones"
#: src/emu/ui/videoopt.cpp:215
msgid "Bezels"
-msgstr ""
+msgstr "Marcos"
#: src/emu/ui/videoopt.cpp:219
msgid "CPanels"
-msgstr ""
+msgstr "Paneles de control"
#: src/emu/ui/videoopt.cpp:227
msgid "View"
-msgstr ""
+msgstr "Ver"
#: src/emu/ui/videoopt.cpp:227
msgid "Cropped"
@@ -2066,17 +2082,53 @@ msgstr "Completo"
#: src/emu/ui/viewgfx.cpp:391
msgid " COLORS"
-msgstr ""
+msgstr " COLORES"
#: src/emu/ui/viewgfx.cpp:391
msgid " PENS"
-msgstr ""
+msgstr " PLUMAS"
+
+#~ msgid "**Error loading %s.ini**"
+#~ msgstr "**Error al leer «%s.ini»**"
+
+#~ msgid "**Error loading ui.ini**"
+#~ msgstr "**Error al leer «ui.ini»**"
+
+#~ msgid "Double click or press "
+#~ msgstr "Haz doble clic o pulsa "
+
+#~ msgid " to change the color value"
+#~ msgstr " para cambiar el color"
+
+#~ msgid " to select"
+#~ msgstr " para seleccionar"
+
+#~ msgid "Current "
+#~ msgstr "Actual "
+
+#~ msgid " Folders"
+#~ msgstr " Carpetas"
+
+#~ msgid "Change)"
+#~ msgstr "Cambio)"
+
+#~ msgid "Add"
+#~ msgstr "Añadir"
+
+#~ msgid " Folder - Search: "
+#~ msgstr " Carpeta - Buscar: "
+
+#~ msgid "Remove "
+#~ msgstr "Borrar "
+
+#~ msgid " Folder"
+#~ msgstr " Carpeta"
#~ msgid " Search: "
#~ msgstr " Buscar: "
#~ msgid "Graphics: Wrong Colors\n"
-#~ msgstr "Gráficos: Colores Erróneos\n"
+#~ msgstr "Gráficos: Colores erróneos\n"
#~ msgid ""
#~ "Usage of emulators in conjunction with ROMs you don't own is forbidden by "
diff --git a/language/Spanish_Mexico/strings.po b/language/Spanish_Mexico/strings.po
index 8797184ee6f..2beb269b927 100644
--- a/language/Spanish_Mexico/strings.po
+++ b/language/Spanish_Mexico/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -318,12 +318,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -413,34 +410,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -553,11 +550,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -572,28 +566,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -657,19 +646,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -900,11 +889,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -998,38 +987,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1075,17 +1064,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1100,29 +1084,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1130,271 +1115,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1402,7 +1387,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1410,57 +1395,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Swedish/strings.po b/language/Swedish/strings.po
index fa980ed5cac..042d80c412f 100644
--- a/language/Swedish/strings.po
+++ b/language/Swedish/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -317,12 +317,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -412,34 +409,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -552,11 +549,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -571,28 +565,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -656,19 +645,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -899,11 +888,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -997,38 +986,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1074,17 +1063,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1099,29 +1083,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1129,271 +1114,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1401,7 +1386,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1409,57 +1394,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Thai/strings.po b/language/Thai/strings.po
index a6f34d59360..a55affa283c 100644
--- a/language/Thai/strings.po
+++ b/language/Thai/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -316,12 +316,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -411,34 +408,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -551,11 +548,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -570,28 +564,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -655,19 +644,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -898,11 +887,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -996,38 +985,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1073,17 +1062,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1098,29 +1082,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1128,271 +1113,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1400,7 +1385,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1408,57 +1393,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Turkish/strings.po b/language/Turkish/strings.po
index 887665c6158..be82b1e3102 100644
--- a/language/Turkish/strings.po
+++ b/language/Turkish/strings.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -318,12 +318,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -413,34 +410,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -553,11 +550,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -572,28 +566,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -657,19 +646,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -900,11 +889,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -998,38 +987,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1075,17 +1064,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1100,29 +1084,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1130,271 +1115,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1402,7 +1387,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1410,57 +1395,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Ukrainian/strings.po b/language/Ukrainian/strings.po
index 82c13f3f02b..5a620b87e8a 100644
--- a/language/Ukrainian/strings.po
+++ b/language/Ukrainian/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -318,12 +318,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -413,34 +410,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -553,11 +550,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -572,28 +566,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -657,19 +646,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -900,11 +889,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -998,38 +987,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1075,17 +1064,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1100,29 +1084,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1130,271 +1115,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1402,7 +1387,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1410,57 +1395,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/language/Vietnamese/strings.po b/language/Vietnamese/strings.po
index a42b7a27587..6a5166694d2 100644
--- a/language/Vietnamese/strings.po
+++ b/language/Vietnamese/strings.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: MAME\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-03-02 07:55+0100\n"
+"POT-Creation-Date: 2016-03-08 02:22+0100\n"
"PO-Revision-Date: 2016-02-20 18:03+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: MAME Language Team\n"
@@ -317,12 +317,9 @@ msgstr ""
msgid "UI Colors Settings"
msgstr ""
-#: src/emu/ui/custui.cpp:591 src/emu/ui/selector.cpp:181
-msgid "Double click or press "
-msgstr ""
-
#: src/emu/ui/custui.cpp:591
-msgid " to change the color value"
+#, c-format
+msgid "Double click or press %1$s to change the color value"
msgstr ""
#: src/emu/ui/custui.cpp:617
@@ -412,34 +409,34 @@ msgstr ""
msgid "Software Usage"
msgstr ""
-#: src/emu/ui/datmenu.cpp:195
+#: src/emu/ui/datmenu.cpp:187
msgid "Revision: "
msgstr ""
-#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:39
-#: src/emu/ui/selgame.cpp:2127 src/emu/ui/selgame.cpp:2136
-#: src/emu/ui/selsoft.cpp:1565 src/emu/ui/selsoft.cpp:1583
-#: src/emu/ui/selsoft.cpp:1592
+#: src/emu/ui/datmenu.cpp:277 src/emu/ui/selgame.cpp:39
+#: src/emu/ui/selgame.cpp:2173 src/emu/ui/selgame.cpp:2182
+#: src/emu/ui/selsoft.cpp:1563 src/emu/ui/selsoft.cpp:1581
+#: src/emu/ui/selsoft.cpp:1590
msgid "History"
msgstr ""
-#: src/emu/ui/datmenu.cpp:289 src/emu/ui/selgame.cpp:40
+#: src/emu/ui/datmenu.cpp:279 src/emu/ui/selgame.cpp:40
msgid "Mameinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:291 src/emu/ui/selgame.cpp:42
+#: src/emu/ui/datmenu.cpp:281 src/emu/ui/selgame.cpp:42
msgid "Messinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:293 src/emu/ui/selgame.cpp:41
+#: src/emu/ui/datmenu.cpp:283 src/emu/ui/selgame.cpp:41
msgid "Sysinfo"
msgstr ""
-#: src/emu/ui/datmenu.cpp:295 src/emu/ui/selgame.cpp:44
+#: src/emu/ui/datmenu.cpp:285 src/emu/ui/selgame.cpp:44
msgid "Mamescore"
msgstr ""
-#: src/emu/ui/datmenu.cpp:297 src/emu/ui/selgame.cpp:43
+#: src/emu/ui/datmenu.cpp:287 src/emu/ui/selgame.cpp:43
msgid "Command"
msgstr ""
@@ -552,11 +549,8 @@ msgid "Folders Setup"
msgstr ""
#: src/emu/ui/dirmenu.cpp:183
-msgid "Current "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:183
-msgid " Folders"
+#, c-format
+msgid "Current %1$s Folders"
msgstr ""
#: src/emu/ui/dirmenu.cpp:195
@@ -571,28 +565,23 @@ msgstr ""
msgid "Remove Folder"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Change)"
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:497
-msgid "Add"
+#: src/emu/ui/dirmenu.cpp:499
+#, c-format
+msgid "Change %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:498
-msgid " Folder - Search: "
+#: src/emu/ui/dirmenu.cpp:500
+#, c-format
+msgid "Add %1$s Folder - Search: %2$s_"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:533
+#: src/emu/ui/dirmenu.cpp:537
msgid "Press TAB to set"
msgstr ""
-#: src/emu/ui/dirmenu.cpp:639
-msgid "Remove "
-msgstr ""
-
-#: src/emu/ui/dirmenu.cpp:639
-msgid " Folder"
+#: src/emu/ui/dirmenu.cpp:643
+#, c-format
+msgid "Remove %1$s Folder"
msgstr ""
#: src/emu/ui/dsplmenu.cpp:38
@@ -656,19 +645,19 @@ msgstr ""
msgid "File Already Exists - Override?"
msgstr ""
-#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:161 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "No"
msgstr ""
-#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1552
-#: src/emu/ui/selgame.cpp:1553 src/emu/ui/selgame.cpp:1554
-#: src/emu/ui/selgame.cpp:1555 src/emu/ui/selgame.cpp:1556
-#: src/emu/ui/selgame.cpp:1557 src/emu/ui/selgame.cpp:1558
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/filesel.cpp:162 src/emu/ui/selgame.cpp:1598
+#: src/emu/ui/selgame.cpp:1599 src/emu/ui/selgame.cpp:1600
+#: src/emu/ui/selgame.cpp:1601 src/emu/ui/selgame.cpp:1602
+#: src/emu/ui/selgame.cpp:1603 src/emu/ui/selgame.cpp:1604
+#: src/emu/ui/selgame.cpp:1613
msgid "Yes"
msgstr ""
@@ -899,11 +888,11 @@ msgstr ""
msgid "Auto"
msgstr ""
-#: src/emu/ui/menu.cpp:2073
+#: src/emu/ui/menu.cpp:2090
msgid "Images"
msgstr ""
-#: src/emu/ui/menu.cpp:2074
+#: src/emu/ui/menu.cpp:2091
msgid "Infos"
msgstr ""
@@ -997,38 +986,38 @@ msgstr ""
msgid "Skip software parts selection menu"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:648 src/emu/ui/miscmenu.cpp:668
+#: src/emu/ui/miscmenu.cpp:652 src/emu/ui/miscmenu.cpp:672
#: src/emu/ui/optsmenu.cpp:267
msgid "Miscellaneous Options"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:733
+#: src/emu/ui/miscmenu.cpp:737
#, c-format
msgid "%s.xml saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:761
+#: src/emu/ui/miscmenu.cpp:765
msgid "Name: Description:\n"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:773
+#: src/emu/ui/miscmenu.cpp:777
#, c-format
msgid "%s.txt saved under ui folder."
msgstr ""
-#: src/emu/ui/miscmenu.cpp:791
+#: src/emu/ui/miscmenu.cpp:795
msgid "Export XML format (like -listxml)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:792
+#: src/emu/ui/miscmenu.cpp:796
msgid "Export TXT format (like -listfull)"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:850
+#: src/emu/ui/miscmenu.cpp:854
msgid "Dummy"
msgstr ""
-#: src/emu/ui/miscmenu.cpp:852
+#: src/emu/ui/miscmenu.cpp:856
msgid "Save machine configuration"
msgstr ""
@@ -1074,17 +1063,12 @@ msgid "Settings"
msgstr ""
#: src/emu/ui/optsmenu.cpp:325
-msgid "**Error to save ui.ini**"
-msgstr ""
-
-#: src/emu/ui/optsmenu.cpp:347
-#, c-format
-msgid "**Error to load %s.ini**"
+msgid "**Error saving ui.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:372
#, c-format
-msgid "**Error to save %s.ini**"
+msgid "**Error saving %s.ini**"
msgstr ""
#: src/emu/ui/optsmenu.cpp:376
@@ -1099,29 +1083,30 @@ msgid "Selection List - Search: "
msgstr ""
#: src/emu/ui/selector.cpp:181
-msgid " to select"
+#, c-format
+msgid "Double click or press %1$s to select"
msgstr ""
#: src/emu/ui/selgame.cpp:38
msgid "General Info"
msgstr ""
-#: src/emu/ui/selgame.cpp:388 src/emu/ui/selsoft.cpp:280
+#: src/emu/ui/selgame.cpp:432 src/emu/ui/selsoft.cpp:278
#, c-format
msgid ""
"%s\n"
" added to favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:394 src/emu/ui/selgame.cpp:403
-#: src/emu/ui/selsoft.cpp:285
+#: src/emu/ui/selgame.cpp:438 src/emu/ui/selgame.cpp:447
+#: src/emu/ui/selsoft.cpp:283
#, c-format
msgid ""
"%s\n"
" removed from favorites list."
msgstr ""
-#: src/emu/ui/selgame.cpp:464
+#: src/emu/ui/selgame.cpp:508
msgid ""
"The selected machine is missing one or more required ROM or CHD images. "
"Please select a different machine.\n"
@@ -1129,271 +1114,271 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selgame.cpp:601 src/emu/ui/simpleselgame.cpp:262
+#: src/emu/ui/selgame.cpp:647 src/emu/ui/simpleselgame.cpp:262
msgid "Configure Options"
msgstr ""
-#: src/emu/ui/selgame.cpp:602
+#: src/emu/ui/selgame.cpp:648
msgid "Configure Machine"
msgstr ""
-#: src/emu/ui/selgame.cpp:758
+#: src/emu/ui/selgame.cpp:804
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"
msgstr ""
-#: src/emu/ui/selgame.cpp:768
+#: src/emu/ui/selgame.cpp:814
#, c-format
msgid "%1$s (%2$s - %3$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:775 src/emu/ui/selgame.cpp:781
+#: src/emu/ui/selgame.cpp:821 src/emu/ui/selgame.cpp:827
#, c-format
msgid "%1$s (%2$s) - "
msgstr ""
-#: src/emu/ui/selgame.cpp:790
+#: src/emu/ui/selgame.cpp:836
#, c-format
msgid "%1$s Search: %2$s_"
msgstr ""
-#: src/emu/ui/selgame.cpp:838
+#: src/emu/ui/selgame.cpp:884
#, c-format
msgid "Romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:841 src/emu/ui/selgame.cpp:890
-#: src/emu/ui/selsoft.cpp:744 src/emu/ui/selsoft.cpp:794
+#: src/emu/ui/selgame.cpp:887 src/emu/ui/selgame.cpp:936
+#: src/emu/ui/selsoft.cpp:742 src/emu/ui/selsoft.cpp:792
#: src/emu/ui/simpleselgame.cpp:325
#, c-format
msgid "%1$s, %2$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:847 src/emu/ui/selsoft.cpp:750
+#: src/emu/ui/selgame.cpp:893 src/emu/ui/selsoft.cpp:748
#, c-format
msgid "Driver is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:849 src/emu/ui/selsoft.cpp:752
+#: src/emu/ui/selgame.cpp:895 src/emu/ui/selsoft.cpp:750
msgid "Driver is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:853 src/emu/ui/selsoft.cpp:756
+#: src/emu/ui/selgame.cpp:899 src/emu/ui/selsoft.cpp:754
#: src/emu/ui/simpleselgame.cpp:332
msgid "Overall: NOT WORKING"
msgstr ""
-#: src/emu/ui/selgame.cpp:855 src/emu/ui/selsoft.cpp:758
+#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:756
#: src/emu/ui/simpleselgame.cpp:334
msgid "Overall: Unemulated Protection"
msgstr ""
-#: src/emu/ui/selgame.cpp:857 src/emu/ui/selsoft.cpp:760
+#: src/emu/ui/selgame.cpp:903 src/emu/ui/selsoft.cpp:758
#: src/emu/ui/simpleselgame.cpp:336
msgid "Overall: Working"
msgstr ""
-#: src/emu/ui/selgame.cpp:861 src/emu/ui/selsoft.cpp:764
+#: src/emu/ui/selgame.cpp:907 src/emu/ui/selsoft.cpp:762
msgid "Graphics: Imperfect, "
msgstr ""
-#: src/emu/ui/selgame.cpp:863 src/emu/ui/selsoft.cpp:766
+#: src/emu/ui/selgame.cpp:909 src/emu/ui/selsoft.cpp:764
msgid "Graphics: OK, "
msgstr ""
-#: src/emu/ui/selgame.cpp:866 src/emu/ui/selsoft.cpp:769
+#: src/emu/ui/selgame.cpp:912 src/emu/ui/selsoft.cpp:767
msgid "Sound: Unimplemented"
msgstr ""
-#: src/emu/ui/selgame.cpp:868 src/emu/ui/selsoft.cpp:771
+#: src/emu/ui/selgame.cpp:914 src/emu/ui/selsoft.cpp:769
msgid "Sound: Imperfect"
msgstr ""
-#: src/emu/ui/selgame.cpp:870 src/emu/ui/selsoft.cpp:773
+#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:771
msgid "Sound: OK"
msgstr ""
-#: src/emu/ui/selgame.cpp:887
+#: src/emu/ui/selgame.cpp:933
#, c-format
msgid "System: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:894 src/emu/ui/selsoft.cpp:798
+#: src/emu/ui/selgame.cpp:940 src/emu/ui/selsoft.cpp:796
#, c-format
msgid "Software is clone of: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:896 src/emu/ui/selsoft.cpp:800
+#: src/emu/ui/selgame.cpp:942 src/emu/ui/selsoft.cpp:798
msgid "Software is parent"
msgstr ""
-#: src/emu/ui/selgame.cpp:901 src/emu/ui/selsoft.cpp:805
+#: src/emu/ui/selgame.cpp:947 src/emu/ui/selsoft.cpp:803
msgid "Supported: No"
msgstr ""
-#: src/emu/ui/selgame.cpp:906 src/emu/ui/selsoft.cpp:810
+#: src/emu/ui/selgame.cpp:952 src/emu/ui/selsoft.cpp:808
msgid "Supported: Partial"
msgstr ""
-#: src/emu/ui/selgame.cpp:911 src/emu/ui/selsoft.cpp:815
+#: src/emu/ui/selgame.cpp:957 src/emu/ui/selsoft.cpp:813
msgid "Supported: Yes"
msgstr ""
-#: src/emu/ui/selgame.cpp:916 src/emu/ui/selsoft.cpp:820
+#: src/emu/ui/selgame.cpp:962 src/emu/ui/selsoft.cpp:818
#, c-format
msgid "romset: %1$-.100s"
msgstr ""
-#: src/emu/ui/selgame.cpp:923
+#: src/emu/ui/selgame.cpp:969
#, c-format
msgid "%1$s %2$s"
msgstr ""
-#: src/emu/ui/selgame.cpp:1519
+#: src/emu/ui/selgame.cpp:1565
#, c-format
msgid "Romset: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1520
+#: src/emu/ui/selgame.cpp:1566
#, c-format
msgid "Year: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1521
+#: src/emu/ui/selgame.cpp:1567
#, c-format
msgid "Manufacturer: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1525
+#: src/emu/ui/selgame.cpp:1571
#, c-format
msgid "Driver is Clone of: %1$-.100s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1527
+#: src/emu/ui/selgame.cpp:1573
msgid "Driver is Parent\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1530
+#: src/emu/ui/selgame.cpp:1576
msgid "Overall: NOT WORKING\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1532
+#: src/emu/ui/selgame.cpp:1578
msgid "Overall: Unemulated Protection\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1534
+#: src/emu/ui/selgame.cpp:1580
msgid "Overall: Working\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1537
+#: src/emu/ui/selgame.cpp:1583
msgid "Graphics: Imperfect Colors\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1541
+#: src/emu/ui/selgame.cpp:1587
msgid "Graphics: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1543
+#: src/emu/ui/selgame.cpp:1589
msgid "Graphics: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1546
+#: src/emu/ui/selgame.cpp:1592
msgid "Sound: Unimplemented\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1548
+#: src/emu/ui/selgame.cpp:1594
msgid "Sound: Imperfect\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1550
+#: src/emu/ui/selgame.cpp:1596
msgid "Sound: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1552
+#: src/emu/ui/selgame.cpp:1598
#, c-format
msgid "Driver is Skeleton: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1553
+#: src/emu/ui/selgame.cpp:1599
#, c-format
msgid "Game is Mechanical: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1554
+#: src/emu/ui/selgame.cpp:1600
#, c-format
msgid "Requires Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1555
+#: src/emu/ui/selgame.cpp:1601
#, c-format
msgid "Requires Clickable Artwork: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1556
+#: src/emu/ui/selgame.cpp:1602
#, c-format
msgid "Support Cocktail: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1557
+#: src/emu/ui/selgame.cpp:1603
#, c-format
msgid "Driver is Bios: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1558
+#: src/emu/ui/selgame.cpp:1604
#, c-format
msgid "Support Save: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
#, c-format
-msgid "Screen Orentation: %1$s\n"
+msgid "Screen Orientation: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Vertical"
msgstr ""
-#: src/emu/ui/selgame.cpp:1559
+#: src/emu/ui/selgame.cpp:1605
msgid "Horizontal"
msgstr ""
-#: src/emu/ui/selgame.cpp:1567
+#: src/emu/ui/selgame.cpp:1613
#, c-format
msgid "Requires CHD: %1$s\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1580
+#: src/emu/ui/selgame.cpp:1626
msgid "Roms Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1582
+#: src/emu/ui/selgame.cpp:1628
msgid "Roms Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1585
+#: src/emu/ui/selgame.cpp:1631
msgid "Samples Audit Pass: None Needed\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1587
+#: src/emu/ui/selgame.cpp:1633
msgid "Samples Audit Pass: OK\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1589
+#: src/emu/ui/selgame.cpp:1635
msgid "Samples Audit Pass: BAD\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:1592
+#: src/emu/ui/selgame.cpp:1638
msgid ""
"Roms Audit Pass: Disabled\n"
"Samples Audit Pass: Disabled\n"
msgstr ""
-#: src/emu/ui/selgame.cpp:2024 src/emu/ui/selgame.cpp:2185
-#: src/emu/ui/selsoft.cpp:1641
+#: src/emu/ui/selgame.cpp:2070 src/emu/ui/selgame.cpp:2231
+#: src/emu/ui/selsoft.cpp:1639
msgid "No Infos Available"
msgstr ""
-#: src/emu/ui/selgame.cpp:2137 src/emu/ui/selsoft.cpp:1593
+#: src/emu/ui/selgame.cpp:2183 src/emu/ui/selsoft.cpp:1591
msgid "Usage"
msgstr ""
@@ -1401,7 +1386,7 @@ msgstr ""
msgid " (default)"
msgstr ""
-#: src/emu/ui/selsoft.cpp:380
+#: src/emu/ui/selsoft.cpp:378
msgid ""
"The selected software is missing one or more required files. Please select a "
"different software.\n"
@@ -1409,57 +1394,57 @@ msgid ""
"Press any key (except ESC) to continue."
msgstr ""
-#: src/emu/ui/selsoft.cpp:683
+#: src/emu/ui/selsoft.cpp:681
#, c-format
msgid "%1$s %2$s ( %3$d / %4$d softwares )"
msgstr ""
-#: src/emu/ui/selsoft.cpp:684
+#: src/emu/ui/selsoft.cpp:682
#, c-format
msgid "Driver: \"%1$s\" software list "
msgstr ""
-#: src/emu/ui/selsoft.cpp:687
+#: src/emu/ui/selsoft.cpp:685
#, c-format
msgid "Region: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:689
+#: src/emu/ui/selsoft.cpp:687
#, c-format
msgid "Publisher: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:691
+#: src/emu/ui/selsoft.cpp:689
#, c-format
msgid "Year: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:693
+#: src/emu/ui/selsoft.cpp:691
#, c-format
msgid "Software List: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:695
+#: src/emu/ui/selsoft.cpp:693
#, c-format
msgid "Device type: %1$s -"
msgstr ""
-#: src/emu/ui/selsoft.cpp:697
+#: src/emu/ui/selsoft.cpp:695
#, c-format
msgid "%s Search: %s_"
msgstr ""
-#: src/emu/ui/selsoft.cpp:741 src/emu/ui/selsoft.cpp:791
+#: src/emu/ui/selsoft.cpp:739 src/emu/ui/selsoft.cpp:789
#: src/emu/ui/simpleselgame.cpp:322
#, c-format
msgid "%1$-.100s"
msgstr ""
-#: src/emu/ui/selsoft.cpp:1978 src/emu/ui/selsoft.cpp:1998
+#: src/emu/ui/selsoft.cpp:1976 src/emu/ui/selsoft.cpp:1996
msgid "Software part selection:"
msgstr ""
-#: src/emu/ui/selsoft.cpp:2116 src/emu/ui/selsoft.cpp:2136
+#: src/emu/ui/selsoft.cpp:2114 src/emu/ui/selsoft.cpp:2134
msgid "Bios selection:"
msgstr ""
diff --git a/makefile b/makefile
index dc19443e627..42bfb7e236d 100644
--- a/makefile
+++ b/makefile
@@ -25,7 +25,6 @@
# USE_DISPATCH_GL = 0
# MODERN_WIN_API = 0
-# USE_XAUDIO2 = 0
# DIRECTINPUT = 7
# USE_SDL = 1
# SDL_INI_PATH = .;$HOME/.mame/;ini;
@@ -137,6 +136,12 @@ endif
ifneq ($(filter arm%,$(UNAME_P)),)
PLATFORM := arm
endif
+ifneq ($(filter aarch64%,$(UNAME_M)),)
+PLATFORM := arm64
+endif
+ifneq ($(filter aarch64%,$(UNAME_P)),)
+PLATFORM := arm64
+endif
ifneq ($(filter powerpc,$(UNAME_P)),)
PLATFORM := powerpc
endif
@@ -280,6 +285,13 @@ ifndef NOASM
endif
endif
+ifeq ($(findstring aarch64,$(UNAME)),aarch64)
+ARCHITECTURE :=
+ifndef NOASM
+ NOASM := 1
+endif
+endif
+
# Emscripten
ifeq ($(findstring emcc,$(CC)),emcc)
TARGETOS := asmjs
@@ -577,10 +589,6 @@ ifdef MODERN_WIN_API
PARAMS += --MODERN_WIN_API='$(MODERN_WIN_API)'
endif
-ifdef USE_XAUDIO2
-PARAMS += --USE_XAUDIO2='$(USE_XAUDIO2)'
-endif
-
ifdef DIRECTINPUT
PARAMS += --DIRECTINPUT='$(DIRECTINPUT)'
endif
@@ -804,16 +812,20 @@ CLANG_VERSION := $(shell $(TOOLCHAIN)$(subst @,,$(CC)) --version 2> /dev/nu
endif
PYTHON_AVAILABLE := $(shell $(PYTHON) --version > /dev/null 2>&1 && echo python)
endif
+
ifeq ($(CLANG_VERSION),)
$(info GCC $(GCC_VERSION) detected)
else
$(info Clang $(CLANG_VERSION) detected)
+ifneq ($(TARGETOS),asmjs)
ifeq ($(ARCHITECTURE),_x64)
ARCHITECTURE := _x64_clang
else
ARCHITECTURE := _x86_clang
endif
endif
+endif
+
ifneq ($(PYTHON_AVAILABLE),python)
$(error Python is not available in path)
endif
@@ -950,7 +962,7 @@ endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
endif
- $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm --gcc_version=3.6.0 --osd=osdmini --targetos=android-arm --targetos=android --PLATFORM=arm --NOASM=1 gmake
+ $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm --gcc_version=3.8.0 --osd=osdmini --targetos=android-arm --targetos=android --PLATFORM=arm --NOASM=1 gmake
.PHONY: android-arm
android-arm: generate $(PROJECTDIR_MINI)/gmake-android-arm/Makefile
@@ -974,7 +986,7 @@ endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
endif
- $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm64 --gcc_version=3.6.0 --osd=osdmini --targetos=android-arm64 --targetos=android --PLATFORM=arm64 --NOASM=1 gmake
+ $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm64 --gcc_version=3.8.0 --osd=osdmini --targetos=android-arm64 --targetos=android --PLATFORM=arm64 --NOASM=1 gmake
.PHONY: android-arm64
android-arm64: generate $(PROJECTDIR_MINI)/gmake-android-arm64/Makefile
@@ -998,7 +1010,7 @@ endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
endif
- $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips --gcc_version=3.6.0 --osd=osdmini --targetos=android-mips --targetos=android --PLATFORM=mips --NOASM=1 gmake
+ $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips --gcc_version=3.8.0 --osd=osdmini --targetos=android-mips --targetos=android --PLATFORM=mips --NOASM=1 gmake
.PHONY: android-mips
android-mips: generate $(PROJECTDIR_MINI)/gmake-android-mips/Makefile
@@ -1022,7 +1034,7 @@ endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
endif
- $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips64 --gcc_version=3.6.0 --osd=osdmini --targetos=android-mips64 --targetos=android --PLATFORM=mips64 --NOASM=1 gmake
+ $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips64 --gcc_version=3.8.0 --osd=osdmini --targetos=android-mips64 --targetos=android --PLATFORM=mips64 --NOASM=1 gmake
.PHONY: android-mips64
android-mips64: generate $(PROJECTDIR_MINI)/gmake-android-mips64/Makefile
@@ -1046,7 +1058,7 @@ endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
endif
- $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x86 --gcc_version=3.6.0 --osd=osdmini --targetos=android-x86 --targetos=android --PLATFORM=x86 gmake
+ $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x86 --gcc_version=3.8.0 --osd=osdmini --targetos=android-x86 --targetos=android --PLATFORM=x86 gmake
.PHONY: android-x86
android-x86: generate $(PROJECTDIR_MINI)/gmake-android-x86/Makefile
@@ -1070,7 +1082,7 @@ endif
ifndef ANDROID_NDK_ROOT
$(error ANDROID_NDK_ROOT is not set)
endif
- $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x64 --gcc_version=3.6.0 --osd=osdmini --targetos=android-x64 --targetos=android --PLATFORM=x64 gmake
+ $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x64 --gcc_version=3.8.0 --osd=osdmini --targetos=android-x64 --targetos=android --PLATFORM=x64 gmake
.PHONY: android-x64
android-x64: generate $(PROJECTDIR_MINI)/gmake-android-x64/Makefile
diff --git a/nl_examples/7400_astable.c b/nl_examples/7400_astable.c
index 87e925b4a97..07748a0816a 100644
--- a/nl_examples/7400_astable.c
+++ b/nl_examples/7400_astable.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* 7400_astable.c
*
diff --git a/nl_examples/74123_mstable.c b/nl_examples/74123_mstable.c
index ddb8955e033..fd2bfd85871 100644
--- a/nl_examples/74123_mstable.c
+++ b/nl_examples/74123_mstable.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* 74123_mstable.c
*
diff --git a/nl_examples/9602_mstable.c b/nl_examples/9602_mstable.c
index 5db2df04d0e..8e482c8dfb3 100644
--- a/nl_examples/9602_mstable.c
+++ b/nl_examples/9602_mstable.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* 9602_mstable.c
*
diff --git a/nl_examples/bjt.c b/nl_examples/bjt.c
index fc5b72f3d02..7222ced4445 100644
--- a/nl_examples/bjt.c
+++ b/nl_examples/bjt.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* bjt.c
*
diff --git a/nl_examples/bjt_eb.c b/nl_examples/bjt_eb.c
index bc35345a44d..f21735c36ec 100644
--- a/nl_examples/bjt_eb.c
+++ b/nl_examples/bjt_eb.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* bjt.c
*
diff --git a/nl_examples/bjt_eb_pnp.c b/nl_examples/bjt_eb_pnp.c
index a4a0b8f566f..10169b6bd3f 100644
--- a/nl_examples/bjt_eb_pnp.c
+++ b/nl_examples/bjt_eb_pnp.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* bjt.c
*
diff --git a/nl_examples/breakout.c b/nl_examples/breakout.c
index 2c8d9f3ccae..591ffaf3414 100644
--- a/nl_examples/breakout.c
+++ b/nl_examples/breakout.c
@@ -1,4 +1,5 @@
-
+// license:GPL-2.0+
+// copyright-holders:Couriersud
#define NETLIST_DEVELOPMENT 1
#include "netlist/nl_dice_compat.h"
diff --git a/nl_examples/cd4066.c b/nl_examples/cd4066.c
index 1db59b670ed..c77e6438c0f 100644
--- a/nl_examples/cd4066.c
+++ b/nl_examples/cd4066.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* bjt.c
*
diff --git a/nl_examples/cdelay.c b/nl_examples/cdelay.c
index 9a6bdcc1aff..6f396e8ca07 100644
--- a/nl_examples/cdelay.c
+++ b/nl_examples/cdelay.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* cdelay.c
*
diff --git a/nl_examples/congo_bongo.c b/nl_examples/congo_bongo.c
index facd4054c00..4256d364d17 100644
--- a/nl_examples/congo_bongo.c
+++ b/nl_examples/congo_bongo.c
@@ -1,4 +1,5 @@
-
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/* € */ // ABC
#include "netlist/devices/net_lib.h"
diff --git a/nl_examples/kidniki.c b/nl_examples/kidniki.c
index 9e2b0052dae..661f94ca72d 100644
--- a/nl_examples/kidniki.c
+++ b/nl_examples/kidniki.c
@@ -1,4 +1,5 @@
-
+// license:GPL-2.0+
+// copyright-holders:Couriersud
#include "netlist/devices/net_lib.h"
#include "netlist/devices/nld_system.h"
#include "netlist/analog/nld_bjt.h"
diff --git a/nl_examples/mm5837_noise.c b/nl_examples/mm5837_noise.c
index 7afe2b6e54d..dff1966e1eb 100644
--- a/nl_examples/mm5837_noise.c
+++ b/nl_examples/mm5837_noise.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* mm5837_noise.c
*
diff --git a/nl_examples/msx_mixer_stage.c b/nl_examples/msx_mixer_stage.c
index ddc1cd70cfd..445777eb9cf 100644
--- a/nl_examples/msx_mixer_stage.c
+++ b/nl_examples/msx_mixer_stage.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* bjt.c
*
diff --git a/nl_examples/ne555_astable.c b/nl_examples/ne555_astable.c
index 0ab323d3c2d..d5a77b9b8fa 100644
--- a/nl_examples/ne555_astable.c
+++ b/nl_examples/ne555_astable.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* ne555_astable.c
*
diff --git a/nl_examples/opamp.c b/nl_examples/opamp.c
index ce347c21c64..40c04a5d4f2 100644
--- a/nl_examples/opamp.c
+++ b/nl_examples/opamp.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* opamp.c
*
diff --git a/nl_examples/sn74ls629_osc.c b/nl_examples/sn74ls629_osc.c
index 8e697e0855f..f40c464f55c 100644
--- a/nl_examples/sn74ls629_osc.c
+++ b/nl_examples/sn74ls629_osc.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* ne555_astable.c
*
diff --git a/nl_examples/test.c b/nl_examples/test.c
index aee7bf9ec86..9a75dd3ad91 100644
--- a/nl_examples/test.c
+++ b/nl_examples/test.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* bjt.c
*
diff --git a/nl_examples/todo.c b/nl_examples/todo.c
index 1c9815864ed..62c713e86fd 100644
--- a/nl_examples/todo.c
+++ b/nl_examples/todo.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* todo.c
*
diff --git a/nl_examples/vccs.c b/nl_examples/vccs.c
index 3945734a5da..27ebf5a64e0 100644
--- a/nl_examples/vccs.c
+++ b/nl_examples/vccs.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* vccs.c
*
diff --git a/nl_examples/vccs1.c b/nl_examples/vccs1.c
index 72db7467d84..7e6dd1ea48c 100644
--- a/nl_examples/vccs1.c
+++ b/nl_examples/vccs1.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* vccs.c
*
diff --git a/nl_examples/vs_cs.c b/nl_examples/vs_cs.c
index 4e6bb9615fe..9b39106a540 100644
--- a/nl_examples/vs_cs.c
+++ b/nl_examples/vs_cs.c
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
/*
* vs_cs.c
*
diff --git a/plugins/README.md b/plugins/README.md
new file mode 100644
index 00000000000..bb222b77f68
--- /dev/null
+++ b/plugins/README.md
@@ -0,0 +1,3 @@
+# **Plugins** #
+
+LUA plugins contains code from various sources so license is per file. \ No newline at end of file
diff --git a/plugins/boot.lua b/plugins/boot.lua
index 4f8c6a0ee96..03b82c1dbba 100644
--- a/plugins/boot.lua
+++ b/plugins/boot.lua
@@ -1,6 +1,7 @@
+-- license:BSD-3-Clause
+-- copyright-holders:Miodrag Milanovic
require('lfs')
-local uv = require('luv')
-local cwd = uv.cwd()
+local cwd = lfs.currentdir()
package.path = cwd .. "/plugins/?.lua;" .. cwd .. "/plugins/?/init.lua"
local json = require('json')
diff --git a/plugins/coro-channel/LICENSE b/plugins/coro-channel/LICENSE
deleted file mode 100644
index 5789b767285..00000000000
--- a/plugins/coro-channel/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Tim Caswell
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/plugins/coro-channel/README.md b/plugins/coro-channel/README.md
deleted file mode 100644
index 3f5bb397c69..00000000000
--- a/plugins/coro-channel/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# luv-coro-channel
-A luv port of creationix/coro-channel from lit.luvit.io
diff --git a/plugins/coro-channel/init.lua b/plugins/coro-channel/init.lua
deleted file mode 100644
index 0b715a0d470..00000000000
--- a/plugins/coro-channel/init.lua
+++ /dev/null
@@ -1,128 +0,0 @@
-local exports = {}
-exports.name = "creationix/coro-channel"
-exports.version = "1.2.0"
-exports.homepage = "https://github.com/luvit/lit/blob/master/deps/coro-channel.lua"
-exports.description = "An adapter for wrapping uv streams as coro-streams and chaining filters."
-exports.tags = {"coro", "adapter"}
-exports.license = "MIT"
-exports.author = { name = "Tim Caswell" }
-
-local function wrapRead(socket)
- local paused = true
- local queue = {}
- local waiting
- local onRead
-
- function onRead(err, chunk)
- local data = err and {nil, err} or {chunk}
- if waiting then
- local thread = waiting
- waiting = nil
- assert(coroutine.resume(thread, unpack(data)))
- else
- queue[#queue + 1] = data
- if not paused then
- paused = true
- assert(socket:read_stop())
- end
- end
- end
-
- return function ()
- if #queue > 0 then
- return unpack(table.remove(queue, 1))
- end
- if paused then
- paused = false
- assert(socket:read_start(onRead))
- end
- waiting = coroutine.running()
- return coroutine.yield()
- end
-
-end
-
-local function wrapWrite(socket)
-
- local function wait()
- local thread = coroutine.running()
- return function (err)
- assert(coroutine.resume(thread, err))
- end
- end
-
- local function shutdown()
- socket:shutdown(wait())
- coroutine.yield()
- if not socket:is_closing() then
- socket:close()
- end
- end
-
- return function (chunk)
- if chunk == nil then
- return shutdown()
- end
- assert(socket:write(chunk, wait()))
- local err = coroutine.yield()
- return not err, err
- end
-
-end
-
-exports.wrapRead = wrapRead
-exports.wrapWrite = wrapWrite
-
--- Given a raw uv_stream_t userdata, return coro-friendly read/write functions.
-function exports.wrapStream(socket)
- return wrapRead(socket), wrapWrite(socket)
-end
-
-
-function exports.chain(...)
- local args = {...}
- local nargs = select("#", ...)
- return function (read, write)
- local threads = {} -- coroutine thread for each item
- local waiting = {} -- flag when waiting to pull from upstream
- local boxes = {} -- storage when waiting to write to downstream
- for i = 1, nargs do
- threads[i] = coroutine.create(args[i])
- waiting[i] = false
- local r, w
- if i == 1 then
- r = read
- else
- function r()
- local j = i - 1
- if boxes[j] then
- local data = boxes[j]
- boxes[j] = nil
- assert(coroutine.resume(threads[j]))
- return unpack(data)
- else
- waiting[i] = true
- return coroutine.yield()
- end
- end
- end
- if i == nargs then
- w = write
- else
- function w(...)
- local j = i + 1
- if waiting[j] then
- waiting[j] = false
- assert(coroutine.resume(threads[j], ...))
- else
- boxes[i] = {...}
- coroutine.yield()
- end
- end
- end
- assert(coroutine.resume(threads[i], r, w))
- end
- end
-end
-
-return exports
diff --git a/plugins/coro-channel/plugin.json b/plugins/coro-channel/plugin.json
deleted file mode 100644
index 5a3f5af8813..00000000000
--- a/plugins/coro-channel/plugin.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "plugin": {
- "name": "coro-channel",
- "version": "1.2.0",
- "author": "Tim Caswell",
- "type": "library",
- }
-} \ No newline at end of file
diff --git a/plugins/coro-fs/LICENSE b/plugins/coro-fs/LICENSE
deleted file mode 100644
index 5789b767285..00000000000
--- a/plugins/coro-fs/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Tim Caswell
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/plugins/coro-fs/README.md b/plugins/coro-fs/README.md
deleted file mode 100644
index 79ef57330a0..00000000000
--- a/plugins/coro-fs/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# luv-coro-fs
-A luv port of lit's coro-fs module
diff --git a/plugins/coro-fs/init.lua b/plugins/coro-fs/init.lua
deleted file mode 100644
index f4be5bff832..00000000000
--- a/plugins/coro-fs/init.lua
+++ /dev/null
@@ -1,222 +0,0 @@
-local exports = {}
-exports.name = "creationix/coro-fs"
-exports.version = "1.3.0"
-exports.homepage = "https://github.com/luvit/lit/blob/master/deps/coro-fs.lua"
-exports.description = "A coro style interface to the filesystem."
-exports.tags = {"coro", "fs"}
-exports.license = "MIT"
-exports.author = { name = "Tim Caswell" }
-
-local uv = require('luv')
-local fs = exports
-local pathJoin = require('path').join
-
-local function noop() end
-
-local function makeCallback()
- local thread = coroutine.running()
- return function (err, value, ...)
- if err then
- assert(coroutine.resume(thread, nil, err))
- else
- assert(coroutine.resume(thread, value == nil and true or value, ...))
- end
- end
-end
-
-function fs.mkdir(path, mode)
- uv.fs_mkdir(path, mode or 511, makeCallback())
- return coroutine.yield()
-end
-function fs.open(path, flags, mode)
- uv.fs_open(path, flags or "r", mode or 438, makeCallback())
- return coroutine.yield()
-end
-function fs.unlink(path)
- uv.fs_unlink(path, makeCallback())
- return coroutine.yield()
-end
-function fs.stat(path)
- uv.fs_stat(path, makeCallback())
- return coroutine.yield()
-end
-function fs.lstat(path)
- uv.fs_lstat(path, makeCallback())
- return coroutine.yield()
-end
-function fs.symlink(target, path)
- uv.fs_symlink(target, path, makeCallback())
- return coroutine.yield()
-end
-function fs.readlink(path)
- uv.fs_readlink(path, makeCallback())
- return coroutine.yield()
-end
-function fs.fstat(fd)
- uv.fs_fstat(fd, makeCallback())
- return coroutine.yield()
-end
-function fs.chmod(fd, path)
- uv.fs_chmod(fd, path, makeCallback())
- return coroutine.yield()
-end
-function fs.fchmod(fd, mode)
- uv.fs_fchmod(fd, mode, makeCallback())
- return coroutine.yield()
-end
-function fs.read(fd, length, offset)
- uv.fs_read(fd, length or 1024*48, offset or -1, makeCallback())
- return coroutine.yield()
-end
-function fs.write(fd, data, offset)
- uv.fs_write(fd, data, offset or -1, makeCallback())
- return coroutine.yield()
-end
-function fs.close(fd)
- uv.fs_close(fd, makeCallback())
- return coroutine.yield()
-end
-function fs.access(path, flags)
- uv.fs_access(path, flags or "", makeCallback())
- return coroutine.yield()
-end
-function fs.rename(path, newPath)
- uv.fs_rename(path, newPath, makeCallback())
- return coroutine.yield()
-end
-function fs.rmdir(path)
- uv.fs_rmdir(path, makeCallback())
- return coroutine.yield()
-end
-function fs.rmrf(path)
- local success, err
- success, err = fs.rmdir(path)
- if success then return success end
- if err:match("^ENOTDIR:") then return fs.unlink(path) end
- if not err:match("^ENOTEMPTY:") then return success, err end
- for entry in assert(fs.scandir(path)) do
- local subPath = pathJoin(path, entry.name)
- if entry.type == "directory" then
- success, err = fs.rmrf(pathJoin(path, entry.name))
- else
- success, err = fs.unlink(subPath)
- end
- if not success then return success, err end
- end
- return fs.rmdir(path)
-end
-function fs.scandir(path)
- uv.fs_scandir(path, makeCallback())
- local req, err = coroutine.yield()
- if not req then return nil, err end
- return function ()
- return uv.fs_scandir_next(req)
- end
-end
-
-function fs.readFile(path)
- local fd, stat, data, err
- fd, err = fs.open(path)
- if err then return nil, err end
- stat, err = fs.fstat(fd)
- if stat then
- data, err = fs.read(fd, stat.size)
- end
- uv.fs_close(fd, noop)
- return data, err
-end
-
-function fs.writeFile(path, data, mkdir)
- local fd, success, err
- fd, err = fs.open(path, "w")
- if err then
- if mkdir and string.match(err, "^ENOENT:") then
- success, err = fs.mkdirp(pathJoin(path, ".."))
- if success then return fs.writeFile(path, data) end
- end
- return nil, err
- end
- success, err = fs.write(fd, data)
- uv.fs_close(fd, noop)
- return success, err
-end
-
-function fs.mkdirp(path, mode)
- local success, err = fs.mkdir(path, mode)
- if success or string.match(err, "^EEXIST") then
- return true
- end
- if string.match(err, "^ENOENT:") then
- success, err = fs.mkdirp(pathJoin(path, ".."), mode)
- if not success then return nil, err end
- return fs.mkdir(path, mode)
- end
- return nil, err
-end
-
-function fs.chroot(base)
- local chroot = {
- base = base,
- fstat = fs.fstat,
- fchmod = fs.fchmod,
- read = fs.read,
- write = fs.write,
- close = fs.close,
- }
- local function resolve(path)
- assert(path, "path missing")
- return pathJoin(base, pathJoin(path))
- end
- function chroot.mkdir(path, mode)
- return fs.mkdir(resolve(path), mode)
- end
- function chroot.mkdirp(path, mode)
- return fs.mkdirp(resolve(path), mode)
- end
- function chroot.open(path, flags, mode)
- return fs.open(resolve(path), flags, mode)
- end
- function chroot.unlink(path)
- return fs.unlink(resolve(path))
- end
- function chroot.stat(path)
- return fs.stat(resolve(path))
- end
- function chroot.lstat(path)
- return fs.lstat(resolve(path))
- end
- function chroot.symlink(target, path)
- -- TODO: should we resolve absolute target paths or treat it as opaque data?
- return fs.symlink(target, resolve(path))
- end
- function chroot.readlink(path)
- return fs.readlink(resolve(path))
- end
- function chroot.chmod(path, mode)
- return fs.chmod(resolve(path), mode)
- end
- function chroot.access(path, flags)
- return fs.access(resolve(path), flags)
- end
- function chroot.rename(path, newPath)
- return fs.rename(resolve(path), resolve(newPath))
- end
- function chroot.rmdir(path)
- return fs.rmdir(resolve(path))
- end
- function chroot.rmrf(path)
- return fs.rmrf(resolve(path))
- end
- function chroot.scandir(path, iter)
- return fs.scandir(resolve(path), iter)
- end
- function chroot.readFile(path)
- return fs.readFile(resolve(path))
- end
- function chroot.writeFile(path, data, mkdir)
- return fs.writeFile(resolve(path), data, mkdir)
- end
- return chroot
-end
-
-return exports
diff --git a/plugins/coro-fs/plugin.json b/plugins/coro-fs/plugin.json
deleted file mode 100644
index c35d9e27315..00000000000
--- a/plugins/coro-fs/plugin.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "plugin": {
- "name": "coro-fs",
- "version": "1.3.0",
- "author": "Tim Caswell",
- "type": "library",
- }
-} \ No newline at end of file
diff --git a/plugins/coro-http/LICENSE b/plugins/coro-http/LICENSE
deleted file mode 100644
index 5789b767285..00000000000
--- a/plugins/coro-http/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Tim Caswell
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/plugins/coro-http/README.md b/plugins/coro-http/README.md
deleted file mode 100644
index 271b6698f5d..00000000000
--- a/plugins/coro-http/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# luv-coro-http
-A luv port of lit's coro-http library.
diff --git a/plugins/coro-http/init.lua b/plugins/coro-http/init.lua
deleted file mode 100644
index 49613403eaf..00000000000
--- a/plugins/coro-http/init.lua
+++ /dev/null
@@ -1,187 +0,0 @@
-local exports = {}
-exports.name = "creationix/coro-http"
-exports.version = "1.2.1-1"
-exports.dependencies = {
- "creationix/coro-net@1.1.1",
- "creationix/coro-tls@1.2.1",
- "creationix/coro-wrapper@1.0.0",
- "luvit/http-codec@1.0.0"
-}
-exports.homepage = "https://github.com/luvit/lit/blob/master/deps/coro-http.lua"
-exports.description = "An coro style http(s) client and server helper."
-exports.tags = {"coro", "http"}
-exports.license = "MIT"
-exports.author = { name = "Tim Caswell" }
-
-local httpCodec = require('http-codec')
-local net = require('coro-net')
-local connect = net.connect
-local createServer = net.createServer
---local tlsWrap = require('coro-tls').wrap
-local wrapper = require('coro-wrapper')
-
-function exports.createServer(options, onConnect)
- createServer(options, function (rawRead, rawWrite, socket)
- local read = wrapper.reader(rawRead, httpCodec.decoder())
- local write = wrapper.writer(rawWrite, httpCodec.encoder())
- for head in read do
- local parts = {}
- for part in read do
- if #part > 0 then
- parts[#parts + 1] = part
- else
- break
- end
- end
- local body = table.concat(parts)
- head, body = onConnect(head, body, socket)
- write(head)
- if body then write(body) end
- write("")
- if not head.keepAlive then break end
- end
- end)
-end
-
-local function parseUrl(url)
- local protocol, host, hostname, port, path = url:match("^(https?:)//(([^/:]+):?([0-9]*))(/?.*)$")
- if not protocol then error("Not a valid http url: " .. url) end
- local tls = protocol == "https:"
- port = port and tonumber(port) or (tls and 443 or 80)
- if path == "" then path = "/" end
- return {
- tls = tls,
- host = host,
- hostname = hostname,
- port = port,
- path = path
- }
-end
-exports.parseUrl = parseUrl
-
-local connections = {}
-
-local function getConnection(host, port, tls)
- for i = #connections, 1, -1 do
- local connection = connections[i]
- if connection.host == host and connection.port == port and connection.tls == tls then
- table.remove(connections, i)
- -- Make sure the connection is still alive before reusing it.
- if not connection.socket:is_closing() then
- connection.reused = true
- connection.socket:ref()
- return connection
- end
- end
- end
- local read, write, socket = assert(connect({host=host,port=port}))
- --if tls then
- --read, write = tlsWrap(read, write)
- --end
- local httpRead, updateRead = wrapper.reader(read, httpCodec.decoder())
- return {
- socket = socket,
- host = host,
- port = port,
- tls = tls,
- read = httpRead,
- write = wrapper.writer(write, httpCodec.encoder()),
- reset = function ()
- -- This is called after parsing the response head from a HEAD request.
- -- If you forget, the codec might hang waiting for a body that doesn't exist.
- updateRead(httpCodec.decoder())
- end
- }
-end
-exports.getConnection = getConnection
-
-local function saveConnection(connection)
- if connection.socket:is_closing() then return end
- connections[#connections + 1] = connection
- connection.socket:unref()
-end
-exports.saveConnection = saveConnection
-
-function exports.request(method, url, headers, body)
- local uri = parseUrl(url)
- local connection = getConnection(uri.hostname, uri.port, uri.tls)
- local read = connection.read
- local write = connection.write
-
- local req = {
- method = method,
- path = uri.path,
- {"Host", uri.host}
- }
- local contentLength
- local chunked
- if headers then
- for i = 1, #headers do
- local key, value = unpack(headers[i])
- key = key:lower()
- if key == "content-length" then
- contentLength = value
- elseif key == "content-encoding" and value:lower() == "chunked" then
- chunked = true
- end
- req[#req + 1] = headers[i]
- end
- end
-
- if type(body) == "string" then
- if not chunked and not contentLength then
- req[#req + 1] = {"Content-Length", #body}
- end
- end
-
- write(req)
- if body then write(body) end
- local res = read()
- if not res then
- write()
- -- If we get an immediate close on a reused socket, try again with a new socket.
- -- TODO: think about if this could resend requests with side effects and cause
- -- them to double execute in the remote server.
- if connection.reused then
- return exports.request(method, url, headers, body)
- end
- error("Connection closed")
- end
-
- body = {}
- if req.method == "HEAD" then
- connection.reset()
- else
- while true do
- local item = read()
- if not item then
- res.keepAlive = false
- break
- end
- if #item == 0 then
- break
- end
- body[#body + 1] = item
- end
- end
-
- if res.keepAlive then
- saveConnection(connection)
- else
- write()
- end
-
- -- Follow redirects
- if method == "GET" and (res.code == 302 or res.code == 307) then
- for i = 1, #res do
- local key, location = unpack(res[i])
- if key:lower() == "location" then
- return exports.request(method, location, headers)
- end
- end
- end
-
- return res, table.concat(body)
-end
-
-return exports
diff --git a/plugins/coro-http/plugin.json b/plugins/coro-http/plugin.json
deleted file mode 100644
index 0c8047c9ebe..00000000000
--- a/plugins/coro-http/plugin.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "plugin": {
- "name": "coro-http",
- "version": "1.2.1-1",
- "author": "Tim Caswell",
- "type": "library",
- }
-} \ No newline at end of file
diff --git a/plugins/coro-net/LICENSE b/plugins/coro-net/LICENSE
deleted file mode 100644
index 5789b767285..00000000000
--- a/plugins/coro-net/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Tim Caswell
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/plugins/coro-net/README.md b/plugins/coro-net/README.md
deleted file mode 100644
index c8a94b9980a..00000000000
--- a/plugins/coro-net/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# luv-coro-net
-A luv port of creationix/coro-net from lit.luvit.io
diff --git a/plugins/coro-net/init.lua b/plugins/coro-net/init.lua
deleted file mode 100644
index 3ae6c2ad824..00000000000
--- a/plugins/coro-net/init.lua
+++ /dev/null
@@ -1,113 +0,0 @@
-local exports = {}
-exports.name = "creationix/coro-net"
-exports.version = "1.1.1-1"
-exports.dependencies = {
- "creationix/coro-channel@1.2.0"
-}
-exports.homepage = "https://github.com/luvit/lit/blob/master/deps/coro-net.lua"
-exports.description = "An coro style client and server helper for tcp and pipes."
-exports.tags = {"coro", "tcp", "pipe", "net"}
-exports.license = "MIT"
-exports.author = { name = "Tim Caswell" }
-
-local uv = require('luv')
-local wrapStream = require('coro-channel').wrapStream
-
-local function makeCallback(timeout)
- local thread = coroutine.running()
- local timer, done
- if timeout then
- timer = uv.new_timer()
- timer:start(timeout, 0, function ()
- if done then return end
- done = true
- timer:close()
- return assert(coroutine.resume(thread, nil, "timeout"))
- end)
- end
- return function (err, data)
- if done then return end
- done = true
- if timer then timer:close() end
- if err then
- return assert(coroutine.resume(thread, nil, err))
- end
- return assert(coroutine.resume(thread, data or true))
- end
-end
-exports.makeCallback = makeCallback
-
-local function normalize(options)
- local t = type(options)
- if t == "string" then
- options = {path=options}
- elseif t == "number" then
- options = {port=options}
- elseif t ~= "table" then
- assert("Net options must be table, string, or number")
- end
- if options.port or options.host then
- return true,
- options.host or "127.0.0.1",
- assert(options.port, "options.port is required for tcp connections")
- elseif options.path then
- return false, options.path
- else
- error("Must set either options.path or options.port")
- end
-end
-
-function exports.connect(options)
- local socket, success, err
- local isTcp, host, port = normalize(options)
- if isTcp then
- assert(uv.getaddrinfo(host, port, {
- socktype = options.socktype or "stream",
- family = options.family or "inet",
- }, makeCallback(options.timeout)))
- local res
- res, err = coroutine.yield()
- if not res then return nil, err end
- socket = uv.new_tcp()
- socket:connect(res[1].addr, res[1].port, makeCallback(options.timeout))
- else
- socket = uv.new_pipe(false)
- socket:connect(host, makeCallback(options.timeout))
- end
- success, err = coroutine.yield()
- if not success then return nil, err end
- local read, write = wrapStream(socket)
- return read, write, socket
-end
-
-function exports.createServer(options, onConnect)
- local server
- local isTcp, host, port = normalize(options)
- if isTcp then
- server = uv.new_tcp()
- assert(server:bind(host, port))
- else
- server = uv.new_pipe(false)
- assert(server:bind(host))
- end
- assert(server:listen(256, function (err)
- assert(not err, err)
- local socket = isTcp and uv.new_tcp() or uv.new_pipe(false)
- server:accept(socket)
- coroutine.wrap(function ()
- local success, failure = xpcall(function ()
- local read, write = wrapStream(socket)
- return onConnect(read, write, socket)
- end, debug.traceback)
- if not success then
- print(failure)
- end
- if not socket:is_closing() then
- socket:close()
- end
- end)()
- end))
- return server
-end
-
-return exports
diff --git a/plugins/coro-net/plugin.json b/plugins/coro-net/plugin.json
deleted file mode 100644
index cf839aad881..00000000000
--- a/plugins/coro-net/plugin.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "plugin": {
- "name": "coro-net",
- "version": "1.1.1-1",
- "author": "Tim Caswell",
- "type": "library",
- }
-} \ No newline at end of file
diff --git a/plugins/coro-tls/LICENSE b/plugins/coro-tls/LICENSE
deleted file mode 100644
index 5789b767285..00000000000
--- a/plugins/coro-tls/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Tim Caswell
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/plugins/coro-tls/README.md b/plugins/coro-tls/README.md
deleted file mode 100644
index 50aae3f7657..00000000000
--- a/plugins/coro-tls/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# luv-coro-tls
-A luv port of lit's coro-tls module
diff --git a/plugins/coro-tls/init.lua b/plugins/coro-tls/init.lua
deleted file mode 100644
index 03d6e1c3f76..00000000000
--- a/plugins/coro-tls/init.lua
+++ /dev/null
@@ -1,122 +0,0 @@
-local exports = {}
-exports.name = "creationix/coro-tls"
-exports.version = "1.2.1"
-exports.homepage = "https://github.com/luvit/lit/blob/master/deps/coro-tls.lua"
-exports.description = "A coro-stream wrapper implementing tls sessions."
-exports.tags = {"coro", "tls", "ssl"}
-exports.license = "MIT"
-exports.author = { name = "Tim Caswell" }
-
-local openssl = require('openssl')
-local bit = require('bit')
-
-local DEFAULT_CIPHERS = 'ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:' .. -- TLS 1.2
- 'RC4:HIGH:!MD5:!aNULL:!EDH' -- TLS 1.0
-
--- Given a read/write pair, return a new read/write pair for plaintext
-exports.wrap = function (read, write, options)
- if not options then
- options = {}
- end
-
- local ctx = openssl.ssl.ctx_new(options.protocol or 'TLSv1_2', options.ciphers or DEFAULT_CIPHERS)
-
- local key, cert, ca
- if options.key then
- key = assert(openssl.pkey.read(options.key, true, 'pem'))
- end
- if options.cert then
- cert = assert(openssl.x509.read(options.cert))
- end
- if options.ca then
- if type(options.ca) == "string" then
- ca = { assert(openssl.x509.read(options.ca)) }
- elseif type(options.ca) == "table" then
- ca = {}
- for i = 1, #options.ca do
- ca[i] = assert(openssl.x509.read(options.ca[i]))
- end
- else
- error("options.ca must be string or table of strings")
- end
- end
- if key and cert then
- assert(ctx:use(key, cert))
- end
- if ca then
- local store = openssl.x509.store:new()
- for i = 1, #ca do
- assert(store:add(ca[i]))
- end
- ctx:cert_store(store)
- else
- ctx:verify_mode({"none"})
- end
-
- ctx:options(bit.bor(
- openssl.ssl.no_sslv2,
- openssl.ssl.no_sslv3,
- openssl.ssl.no_compression))
- local bin, bout = openssl.bio.mem(8192), openssl.bio.mem(8192)
- local ssl = ctx:ssl(bin, bout, options.server)
-
- local function flush()
- while bout:pending() > 0 do
- write(bout:read())
- end
- end
-
- -- Do handshake
- while true do
- if ssl:handshake() then break end
- flush()
- local chunk = read()
- if chunk then
- bin:write(chunk)
- else
- error("disconnect while handshaking")
- end
- end
- flush()
-
- local done = false
- local function shutdown()
- if done then return end
- done = true
- while true do
- if ssl:shutdown() then break end
- flush()
- local chunk = read()
- if chunk then
- bin:write(chunk)
- else
- break
- end
- end
- flush()
- write()
- end
-
- local function plainRead()
- while true do
- local chunk = ssl:read()
- if chunk then return chunk end
- local cipher = read()
- if not cipher then return end
- bin:write(cipher)
- end
- end
-
- local function plainWrite(plain)
- if not plain then
- return shutdown()
- end
- ssl:write(plain)
- flush()
- end
-
- return plainRead, plainWrite
-
-end
-
-return exports
diff --git a/plugins/coro-tls/plugin.json b/plugins/coro-tls/plugin.json
deleted file mode 100644
index 257224e2ea3..00000000000
--- a/plugins/coro-tls/plugin.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "plugin": {
- "name": "coro-tls",
- "version": "1.2.1",
- "author": "Tim Caswell",
- "type": "library",
- }
-} \ No newline at end of file
diff --git a/plugins/coro-wrapper/LICENSE b/plugins/coro-wrapper/LICENSE
deleted file mode 100644
index 5789b767285..00000000000
--- a/plugins/coro-wrapper/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Tim Caswell
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/plugins/coro-wrapper/README.md b/plugins/coro-wrapper/README.md
deleted file mode 100644
index a9351a7f531..00000000000
--- a/plugins/coro-wrapper/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# luv-coro-wrapper
-A luv port of lit's coro-wrapper module
diff --git a/plugins/coro-wrapper/init.lua b/plugins/coro-wrapper/init.lua
deleted file mode 100644
index aab2683baf3..00000000000
--- a/plugins/coro-wrapper/init.lua
+++ /dev/null
@@ -1,41 +0,0 @@
-local exports = {}
-exports.name = "creationix/coro-wrapper"
-exports.version = "1.0.0-1"
-exports.homepage = "https://github.com/luvit/lit/blob/master/deps/coro-wrapper.lua"
-exports.description = "An adapter for applying decoders to coro-streams."
-exports.tags = {"coro", "decoder", "adapter"}
-exports.license = "MIT"
-exports.author = { name = "Tim Caswell" }
-
-function exports.reader(read, decode)
- local buffer = ""
- return function ()
- while true do
- local item, extra = decode(buffer)
- if item then
- buffer = extra
- return item
- end
- local chunk = read()
- if not chunk then return end
- buffer = buffer .. chunk
- end
- end,
- function (newDecode)
- decode = newDecode
- end
-end
-
-function exports.writer(write, encode)
- return function (item)
- if not item then
- return write()
- end
- return write(encode(item))
- end,
- function (newEncode)
- encode = newEncode
- end
-end
-
-return exports
diff --git a/plugins/coro-wrapper/plugin.json b/plugins/coro-wrapper/plugin.json
deleted file mode 100644
index 6075edba1fa..00000000000
--- a/plugins/coro-wrapper/plugin.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "plugin": {
- "name": "coro-wrapper",
- "version": "1.0.0-1",
- "author": "Tim Caswell",
- "type": "library",
- }
-} \ No newline at end of file
diff --git a/plugins/dummy/init.lua b/plugins/dummy/init.lua
index 8c4fbe6a0f5..3ef8fe3fc0b 100644
--- a/plugins/dummy/init.lua
+++ b/plugins/dummy/init.lua
@@ -1,8 +1,10 @@
+-- license:BSD-3-Clause
+-- copyright-holders:Miodrag Milanovic
local exports = {}
exports.name = "dummy"
exports.version = "0.0.1"
exports.description = "A dummy example"
-exports.license = "MIT"
+exports.license = "The BSD 3-Clause License"
exports.author = { name = "Miodrag Milanovic" }
local dummy = exports
diff --git a/plugins/http-codec/LICENSE b/plugins/http-codec/LICENSE
deleted file mode 100644
index 8f71f43fee3..00000000000
--- a/plugins/http-codec/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
diff --git a/plugins/http-codec/README.md b/plugins/http-codec/README.md
deleted file mode 100644
index 80d050416ae..00000000000
--- a/plugins/http-codec/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# luv-http-codec
-A luv port of luvit's http-codec
diff --git a/plugins/http-codec/init.lua b/plugins/http-codec/init.lua
deleted file mode 100644
index 11a32945729..00000000000
--- a/plugins/http-codec/init.lua
+++ /dev/null
@@ -1,291 +0,0 @@
---[[
-
-Copyright 2014-2015 The Luvit Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS-IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
---]]
-
-local exports = {}
-
-exports.name = "luvit/http-codec"
-exports.version = "1.0.0-1"
-exports.homepage = "https://github.com/luvit/luvit/blob/master/deps/http-codec.lua"
-exports.description = "A simple pair of functions for converting between hex and raw strings."
-exports.tags = {"codec", "http"}
-exports.license = "Apache 2"
-exports.author = { name = "Tim Caswell" }
-
-local sub = string.sub
-local gsub = string.gsub
-local lower = string.lower
-local find = string.find
-local format = string.format
-local concat = table.concat
-local match = string.match
-
-local STATUS_CODES = {
- [100] = 'Continue',
- [101] = 'Switching Protocols',
- [102] = 'Processing', -- RFC 2518, obsoleted by RFC 4918
- [200] = 'OK',
- [201] = 'Created',
- [202] = 'Accepted',
- [203] = 'Non-Authoritative Information',
- [204] = 'No Content',
- [205] = 'Reset Content',
- [206] = 'Partial Content',
- [207] = 'Multi-Status', -- RFC 4918
- [300] = 'Multiple Choices',
- [301] = 'Moved Permanently',
- [302] = 'Moved Temporarily',
- [303] = 'See Other',
- [304] = 'Not Modified',
- [305] = 'Use Proxy',
- [307] = 'Temporary Redirect',
- [400] = 'Bad Request',
- [401] = 'Unauthorized',
- [402] = 'Payment Required',
- [403] = 'Forbidden',
- [404] = 'Not Found',
- [405] = 'Method Not Allowed',
- [406] = 'Not Acceptable',
- [407] = 'Proxy Authentication Required',
- [408] = 'Request Time-out',
- [409] = 'Conflict',
- [410] = 'Gone',
- [411] = 'Length Required',
- [412] = 'Precondition Failed',
- [413] = 'Request Entity Too Large',
- [414] = 'Request-URI Too Large',
- [415] = 'Unsupported Media Type',
- [416] = 'Requested Range Not Satisfiable',
- [417] = 'Expectation Failed',
- [418] = "I'm a teapot", -- RFC 2324
- [422] = 'Unprocessable Entity', -- RFC 4918
- [423] = 'Locked', -- RFC 4918
- [424] = 'Failed Dependency', -- RFC 4918
- [425] = 'Unordered Collection', -- RFC 4918
- [426] = 'Upgrade Required', -- RFC 2817
- [500] = 'Internal Server Error',
- [501] = 'Not Implemented',
- [502] = 'Bad Gateway',
- [503] = 'Service Unavailable',
- [504] = 'Gateway Time-out',
- [505] = 'HTTP Version not supported',
- [506] = 'Variant Also Negotiates', -- RFC 2295
- [507] = 'Insufficient Storage', -- RFC 4918
- [509] = 'Bandwidth Limit Exceeded',
- [510] = 'Not Extended' -- RFC 2774
-}
-
-exports.encoder = function ()
-
- local mode
- local encodeHead, encodeRaw, encodeChunked
-
- function encodeHead(item)
- if not item or item == "" then
- return item
- elseif not (type(item) == "table") then
- error("expected a table but got a " .. type(item) .. " when encoding data")
- end
- local head, chunkedEncoding
- local version = item.version or 1.1
- if item.method then
- local path = item.path
- assert(path and #path > 0, "expected non-empty path")
- head = { item.method .. ' ' .. item.path .. ' HTTP/' .. version .. '\r\n' }
- else
- local reason = item.reason or STATUS_CODES[item.code]
- head = { 'HTTP/' .. version .. ' ' .. item.code .. ' ' .. reason .. '\r\n' }
- end
- for i = 1, #item do
- local key, value = unpack(item[i])
- local lowerKey = lower(key)
- if lowerKey == "transfer-encoding" then
- chunkedEncoding = lower(value) == "chunked"
- end
- value = gsub(tostring(value), "[\r\n]+", " ")
- head[#head + 1] = key .. ': ' .. tostring(value) .. '\r\n'
- end
- head[#head + 1] = '\r\n'
-
- mode = chunkedEncoding and encodeChunked or encodeRaw
- return concat(head)
- end
-
- function encodeRaw(item)
- if type(item) ~= "string" then
- mode = encodeHead
- return encodeHead(item)
- end
- return item
- end
-
- function encodeChunked(item)
- if type(item) ~= "string" then
- mode = encodeHead
- local extra = encodeHead(item)
- if extra then
- return "0\r\n\r\n" .. extra
- else
- return "0\r\n\r\n"
- end
- end
- if #item == 0 then
- mode = encodeHead
- end
- return format("%x", #item) .. "\r\n" .. item .. "\r\n"
- end
-
- mode = encodeHead
- return function (item)
- return mode(item)
- end
-end
-
-exports.decoder = function ()
-
- -- This decoder is somewhat stateful with 5 different parsing states.
- local decodeHead, decodeEmpty, decodeRaw, decodeChunked, decodeCounted
- local mode -- state variable that points to various decoders
- local bytesLeft -- For counted decoder
-
- -- This state is for decoding the status line and headers.
- function decodeHead(chunk)
- if not chunk then return end
-
- local _, length = find(chunk, "\r?\n\r?\n", 1)
- -- First make sure we have all the head before continuing
- if not length then
- if #chunk < 8 * 1024 then return end
- -- But protect against evil clients by refusing heads over 8K long.
- error("entity too large")
- end
-
- -- Parse the status/request line
- local head = {}
- local _, offset
- local version
- _, offset, version, head.code, head.reason =
- find(chunk, "^HTTP/(%d%.%d) (%d+) ([^\r\n]+)\r?\n")
- if offset then
- head.code = tonumber(head.code)
- else
- _, offset, head.method, head.path, version =
- find(chunk, "^(%u+) ([^ ]+) HTTP/(%d%.%d)\r?\n")
- if not offset then
- error("expected HTTP data")
- end
- end
- version = tonumber(version)
- head.version = version
- head.keepAlive = version > 1.0
-
- -- We need to inspect some headers to know how to parse the body.
- local contentLength
- local chunkedEncoding
-
- -- Parse the header lines
- while true do
- local key, value
- _, offset, key, value = find(chunk, "^([^:\r\n]+): *([^\r\n]+)\r?\n", offset + 1)
- if not offset then break end
- local lowerKey = lower(key)
-
- -- Inspect a few headers and remember the values
- if lowerKey == "content-length" then
- contentLength = tonumber(value)
- elseif lowerKey == "transfer-encoding" then
- chunkedEncoding = lower(value) == "chunked"
- elseif lowerKey == "connection" then
- head.keepAlive = lower(value) == "keep-alive"
- end
- head[#head + 1] = {key, value}
- end
-
- if head.keepAlive and (not (chunkedEncoding or (contentLength and contentLength > 0)))
- or (head.method == "GET" or head.method == "HEAD") then
- mode = decodeEmpty
- elseif chunkedEncoding then
- mode = decodeChunked
- elseif contentLength then
- bytesLeft = contentLength
- mode = decodeCounted
- elseif not head.keepAlive then
- mode = decodeRaw
- end
-
- return head, sub(chunk, length + 1)
-
- end
-
- -- This is used for inserting a single empty string into the output string for known empty bodies
- function decodeEmpty(chunk)
- mode = decodeHead
- return "", chunk or ""
- end
-
- function decodeRaw(chunk)
- if not chunk then return "", "" end
- if #chunk == 0 then return end
- return chunk, ""
- end
-
- function decodeChunked(chunk)
- local len, term
- len, term = match(chunk, "^(%x+)(..)")
- if not len then return end
- assert(term == "\r\n")
- local length = tonumber(len, 16)
- if #chunk < length + 4 + #len then return end
- if length == 0 then
- mode = decodeHead
- end
- chunk = sub(chunk, #len + 3)
- assert(sub(chunk, length + 1, length + 2) == "\r\n")
- return sub(chunk, 1, length), sub(chunk, length + 3)
- end
-
- function decodeCounted(chunk)
- if bytesLeft == 0 then
- mode = decodeEmpty
- return mode(chunk)
- end
- local length = #chunk
- -- Make sure we have at least one byte to process
- if length == 0 then return end
-
- if length >= bytesLeft then
- mode = decodeEmpty
- end
-
- -- If the entire chunk fits, pass it all through
- if length <= bytesLeft then
- bytesLeft = bytesLeft - length
- return chunk, ""
- end
-
- return sub(chunk, 1, bytesLeft), sub(chunk, bytesLeft + 1)
- end
-
- -- Switch between states by changing which decoder mode points to
- mode = decodeHead
- return function (chunk)
- return mode(chunk)
- end
-
-end
-
-return exports
diff --git a/plugins/http-codec/plugin.json b/plugins/http-codec/plugin.json
deleted file mode 100644
index ce511afa785..00000000000
--- a/plugins/http-codec/plugin.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "plugin": {
- "name": "http-codec",
- "version": "1.0.0-1",
- "author": "Tim Caswell",
- "type": "library",
- }
-} \ No newline at end of file
diff --git a/plugins/json/init.lua b/plugins/json/init.lua
index d49352cc6ff..39f211c8e11 100644
--- a/plugins/json/init.lua
+++ b/plugins/json/init.lua
@@ -1,3 +1,6 @@
+-- license:MIT
+-- copyright-holders:David Kolf
+
local exports = {}
exports.name = "luvit/json"
exports.version = "2.5.0"
diff --git a/plugins/mime/LICENSE b/plugins/mime/LICENSE
deleted file mode 100644
index 5789b767285..00000000000
--- a/plugins/mime/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Tim Caswell
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/plugins/mime/README.md b/plugins/mime/README.md
deleted file mode 100644
index 550ba582b69..00000000000
--- a/plugins/mime/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# luv-mime
-A luv port of weblit's mime module
diff --git a/plugins/mime/init.lua b/plugins/mime/init.lua
deleted file mode 100644
index ac41dad1cfc..00000000000
--- a/plugins/mime/init.lua
+++ /dev/null
@@ -1,194 +0,0 @@
-local exports = {}
-exports.name = "creationix/mime"
-exports.version = "0.1.2-1"
-exports.description = "A simple mime type database useful for serving static files over http."
-exports.tags = {"mime", "static"}
-exports.license = "MIT"
-exports.author = { name = "Tim Caswell" }
-exports.homepage = "https://github.com/creationix/weblit/blob/master/libs/mime.lua"
-
-local mime = exports
-local table = {
- ["3gp"] = "video/3gpp",
- a = "application/octet-stream",
- ai = "application/postscript",
- aif = "audio/x-aiff",
- aiff = "audio/x-aiff",
- asc = "application/pgp-signature",
- asf = "video/x-ms-asf",
- asm = "text/x-asm",
- asx = "video/x-ms-asf",
- atom = "application/atom+xml",
- au = "audio/basic",
- avi = "video/x-msvideo",
- bat = "application/x-msdownload",
- bin = "application/octet-stream",
- bmp = "image/bmp",
- bz2 = "application/x-bzip2",
- c = "text/x-c",
- cab = "application/vnd.ms-cab-compressed",
- cc = "text/x-c",
- chm = "application/vnd.ms-htmlhelp",
- class = "application/octet-stream",
- com = "application/x-msdownload",
- conf = "text/plain",
- cpp = "text/x-c",
- crt = "application/x-x509-ca-cert",
- css = "text/css",
- csv = "text/csv",
- cxx = "text/x-c",
- deb = "application/x-debian-package",
- der = "application/x-x509-ca-cert",
- diff = "text/x-diff",
- djv = "image/vnd.djvu",
- djvu = "image/vnd.djvu",
- dll = "application/x-msdownload",
- dmg = "application/octet-stream",
- doc = "application/msword",
- dot = "application/msword",
- dtd = "application/xml-dtd",
- dvi = "application/x-dvi",
- ear = "application/java-archive",
- eml = "message/rfc822",
- eps = "application/postscript",
- exe = "application/x-msdownload",
- f = "text/x-fortran",
- f77 = "text/x-fortran",
- f90 = "text/x-fortran",
- flv = "video/x-flv",
- ["for"] = "text/x-fortran",
- gem = "application/octet-stream",
- gemspec = "text/x-script.ruby",
- gif = "image/gif",
- gz = "application/x-gzip",
- h = "text/x-c",
- hh = "text/x-c",
- htm = "text/html",
- html = "text/html",
- ico = "image/vnd.microsoft.icon",
- ics = "text/calendar",
- ifb = "text/calendar",
- iso = "application/octet-stream",
- jar = "application/java-archive",
- java = "text/x-java-source",
- jnlp = "application/x-java-jnlp-file",
- jpeg = "image/jpeg",
- jpg = "image/jpeg",
- js = "application/javascript",
- json = "application/json",
- less = "text/css",
- log = "text/plain",
- lua = "text/x-lua",
- luac = "application/x-lua-bytecode",
- m3u = "audio/x-mpegurl",
- m4v = "video/mp4",
- man = "text/troff",
- manifest = "text/cache-manifest",
- markdown = "text/markdown",
- mathml = "application/mathml+xml",
- mbox = "application/mbox",
- mdoc = "text/troff",
- md = "text/markdown",
- me = "text/troff",
- mid = "audio/midi",
- midi = "audio/midi",
- mime = "message/rfc822",
- mml = "application/mathml+xml",
- mng = "video/x-mng",
- mov = "video/quicktime",
- mp3 = "audio/mpeg",
- mp4 = "video/mp4",
- mp4v = "video/mp4",
- mpeg = "video/mpeg",
- mpg = "video/mpeg",
- ms = "text/troff",
- msi = "application/x-msdownload",
- odp = "application/vnd.oasis.opendocument.presentation",
- ods = "application/vnd.oasis.opendocument.spreadsheet",
- odt = "application/vnd.oasis.opendocument.text",
- ogg = "application/ogg",
- p = "text/x-pascal",
- pas = "text/x-pascal",
- pbm = "image/x-portable-bitmap",
- pdf = "application/pdf",
- pem = "application/x-x509-ca-cert",
- pgm = "image/x-portable-graymap",
- pgp = "application/pgp-encrypted",
- pkg = "application/octet-stream",
- pl = "text/x-script.perl",
- pm = "text/x-script.perl-module",
- png = "image/png",
- pnm = "image/x-portable-anymap",
- ppm = "image/x-portable-pixmap",
- pps = "application/vnd.ms-powerpoint",
- ppt = "application/vnd.ms-powerpoint",
- ps = "application/postscript",
- psd = "image/vnd.adobe.photoshop",
- py = "text/x-script.python",
- qt = "video/quicktime",
- ra = "audio/x-pn-realaudio",
- rake = "text/x-script.ruby",
- ram = "audio/x-pn-realaudio",
- rar = "application/x-rar-compressed",
- rb = "text/x-script.ruby",
- rdf = "application/rdf+xml",
- roff = "text/troff",
- rpm = "application/x-redhat-package-manager",
- rss = "application/rss+xml",
- rtf = "application/rtf",
- ru = "text/x-script.ruby",
- s = "text/x-asm",
- sgm = "text/sgml",
- sgml = "text/sgml",
- sh = "application/x-sh",
- sig = "application/pgp-signature",
- snd = "audio/basic",
- so = "application/octet-stream",
- svg = "image/svg+xml",
- svgz = "image/svg+xml",
- swf = "application/x-shockwave-flash",
- t = "text/troff",
- tar = "application/x-tar",
- tbz = "application/x-bzip-compressed-tar",
- tci = "application/x-topcloud",
- tcl = "application/x-tcl",
- tex = "application/x-tex",
- texi = "application/x-texinfo",
- texinfo = "application/x-texinfo",
- text = "text/plain",
- tif = "image/tiff",
- tiff = "image/tiff",
- torrent = "application/x-bittorrent",
- tr = "text/troff",
- ttf = "application/x-font-ttf",
- txt = "text/plain",
- vcf = "text/x-vcard",
- vcs = "text/x-vcalendar",
- vrml = "model/vrml",
- war = "application/java-archive",
- wav = "audio/x-wav",
- webm = "video/webm",
- wma = "audio/x-ms-wma",
- wmv = "video/x-ms-wmv",
- wmx = "video/x-ms-wmx",
- wrl = "model/vrml",
- wsdl = "application/wsdl+xml",
- xbm = "image/x-xbitmap",
- xhtml = "application/xhtml+xml",
- xls = "application/vnd.ms-excel",
- xml = "application/xml",
- xpm = "image/x-xpixmap",
- xsl = "application/xml",
- xslt = "application/xslt+xml",
- yaml = "text/yaml",
- yml = "text/yaml",
- zip = "application/zip",
-}
-mime.table = table
-mime.default = "application/octet-stream"
-
-function mime.getType(path)
- return mime.table[path:lower():match("[^.]*$")] or mime.default
-end
-
-return mime
diff --git a/plugins/mime/plugin.json b/plugins/mime/plugin.json
deleted file mode 100644
index ee55fd559b3..00000000000
--- a/plugins/mime/plugin.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "plugin": {
- "name": "mime",
- "version": "0.1.2-1",
- "author": "Tim Caswell",
- "type": "library",
- }
-} \ No newline at end of file
diff --git a/plugins/path/LICENSE b/plugins/path/LICENSE
deleted file mode 100644
index 8f71f43fee3..00000000000
--- a/plugins/path/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
diff --git a/plugins/path/README.md b/plugins/path/README.md
deleted file mode 100644
index 75d881e35e3..00000000000
--- a/plugins/path/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# luv-path
-A luv port of luvi's path module
diff --git a/plugins/path/init.lua b/plugins/path/init.lua
deleted file mode 100644
index d0e427d02ee..00000000000
--- a/plugins/path/init.lua
+++ /dev/null
@@ -1,139 +0,0 @@
---[[
-
-Copyright 2014 The Luvit Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS-IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
---]]
-
--- Extracted from https://github.com/luvit/luvi/blob/master/src/lua/init.lua
-
-local isWindows
-if jit and jit.os then
- -- Luajit provides explicit platform detection
- isWindows = jit.os == "Windows"
-else
- -- Normal lua will only have \ for path separator on windows.
- isWindows = package.config:find("\\") and true or false
-end
-
-local uv = require('luv')
-
-local getPrefix, splitPath, joinParts
-
-if isWindows then
- -- Windows aware path utilities
- function getPrefix(path)
- return path:match("^%a:\\") or
- path:match("^/") or
- path:match("^\\+")
- end
- function splitPath(path)
- local parts = {}
- for part in string.gmatch(path, '([^/\\]+)') do
- table.insert(parts, part)
- end
- return parts
- end
- function joinParts(prefix, parts, i, j)
- if not prefix then
- return table.concat(parts, '/', i, j)
- elseif prefix ~= '/' then
- return prefix .. table.concat(parts, '\\', i, j)
- else
- return prefix .. table.concat(parts, '/', i, j)
- end
- end
-else
- -- Simple optimized versions for UNIX systems
- function getPrefix(path)
- return path:match("^/")
- end
- function splitPath(path)
- local parts = {}
- for part in string.gmatch(path, '([^/]+)') do
- table.insert(parts, part)
- end
- return parts
- end
- function joinParts(prefix, parts, i, j)
- if prefix then
- return prefix .. table.concat(parts, '/', i, j)
- end
- return table.concat(parts, '/', i, j)
- end
-end
-
-local function pathJoin(...)
- local inputs = {...}
- local l = #inputs
-
- -- Find the last segment that is an absolute path
- -- Or if all are relative, prefix will be nil
- local i = l
- local prefix
- while true do
- prefix = getPrefix(inputs[i])
- if prefix or i <= 1 then break end
- i = i - 1
- end
-
- -- If there was one, remove its prefix from its segment
- if prefix then
- inputs[i] = inputs[i]:sub(#prefix)
- end
-
- -- Split all the paths segments into one large list
- local parts = {}
- while i <= l do
- local sub = splitPath(inputs[i])
- for j = 1, #sub do
- parts[#parts + 1] = sub[j]
- end
- i = i + 1
- end
-
- -- Evaluate special segments in reverse order.
- local skip = 0
- local reversed = {}
- for idx = #parts, 1, -1 do
- local part = parts[idx]
- if part == '.' then
- -- Ignore
- elseif part == '..' then
- skip = skip + 1
- elseif skip > 0 then
- skip = skip - 1
- else
- reversed[#reversed + 1] = part
- end
- end
-
- -- Reverse the list again to get the correct order
- parts = reversed
- for idx = 1, #parts / 2 do
- local j = #parts - idx + 1
- parts[idx], parts[j] = parts[j], parts[idx]
- end
-
- local path = joinParts(prefix, parts)
- return path
-end
-
-return {
- isWindows = isWindows,
- join = pathJoin,
- getPrefix = getPrefix,
- splitPath = splitPath,
- joinparts = joinParts,
-}
diff --git a/plugins/path/plugin.json b/plugins/path/plugin.json
deleted file mode 100644
index c88de67d77c..00000000000
--- a/plugins/path/plugin.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "plugin": {
- "name": "path",
- "version": "1.0.0",
- "author": "Tim Caswell",
- "type": "library",
- }
-} \ No newline at end of file
diff --git a/plugins/pretty-print/LICENSE b/plugins/pretty-print/LICENSE
deleted file mode 100644
index 8f71f43fee3..00000000000
--- a/plugins/pretty-print/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
diff --git a/plugins/pretty-print/README.md b/plugins/pretty-print/README.md
deleted file mode 100644
index 82372160e09..00000000000
--- a/plugins/pretty-print/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# luv-pretty-print
-luvit's pretty-print module re-packaged as a luv submodule.
diff --git a/plugins/pretty-print/init.lua b/plugins/pretty-print/init.lua
deleted file mode 100644
index f1c112d6e4f..00000000000
--- a/plugins/pretty-print/init.lua
+++ /dev/null
@@ -1,362 +0,0 @@
---[[
-
-Copyright 2014-2015 The Luvit Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS-IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
---]]
-
--- Luv port by Tim Caswell <tim@creationix.com>
-
-local exports = {}
-exports.name = "luvit/pretty-print"
-exports.version = "1.0.3"
-exports.homepage = "https://github.com/luvit/luvit/blob/master/deps/pretty-print.lua"
-exports.description = "A lua value pretty printer and colorizer for terminals."
-exports.tags = {"colors", "tty"}
-exports.license = "Apache 2"
-exports.author = { name = "Tim Caswell" }
-
-local uv = require('luv')
-
-local prettyPrint, dump, strip, color, colorize, loadColors
-local theme = {}
-local useColors = false
-local defaultTheme
-
-local stdout, stdin, stderr, width
-
-local quote, quote2, dquote, dquote2, obracket, cbracket, obrace, cbrace, comma, equals, controls
-
-local themes = {
- -- nice color theme using 16 ansi colors
- [16] = {
- property = "0;37", -- white
- sep = "1;30", -- bright-black
- braces = "1;30", -- bright-black
-
- ["nil"] = "1;30", -- bright-black
- boolean = "0;33", -- yellow
- number = "1;33", -- bright-yellow
- string = "0;32", -- green
- quotes = "1;32", -- bright-green
- escape = "1;32", -- bright-green
- ["function"] = "0;35", -- purple
- thread = "1;35", -- bright-purple
-
- table = "1;34", -- bright blue
- userdata = "1;36", -- bright cyan
- cdata = "0;36", -- cyan
-
- err = "1;31", -- bright red
- success = "1;33;42", -- bright-yellow on green
- failure = "1;33;41", -- bright-yellow on red
- highlight = "1;36;44", -- bright-cyan on blue
- },
- -- nice color theme using ansi 256-mode colors
- [256] = {
- property = "38;5;253",
- braces = "38;5;247",
- sep = "38;5;240",
-
- ["nil"] = "38;5;244",
- boolean = "38;5;220", -- yellow-orange
- number = "38;5;202", -- orange
- string = "38;5;34", -- darker green
- quotes = "38;5;40", -- green
- escape = "38;5;46", -- bright green
- ["function"] = "38;5;129", -- purple
- thread = "38;5;199", -- pink
-
- table = "38;5;27", -- blue
- userdata = "38;5;39", -- blue2
- cdata = "38;5;69", -- teal
-
- err = "38;5;196", -- bright red
- success = "38;5;120;48;5;22", -- bright green on dark green
- failure = "38;5;215;48;5;52", -- bright red on dark red
- highlight = "38;5;45;48;5;236", -- bright teal on dark grey
- },
-}
-
-local special = {
- [7] = 'a',
- [8] = 'b',
- [9] = 't',
- [10] = 'n',
- [11] = 'v',
- [12] = 'f',
- [13] = 'r'
-}
-
-function strip(str)
- return string.gsub(str, '\027%[[^m]*m', '')
-end
-
-
-function loadColors(index)
- if index == nil then index = defaultTheme end
-
- -- Remove the old theme
- for key in pairs(theme) do
- theme[key] = nil
- end
-
- if index then
- local new = themes[index]
- if not new then error("Invalid theme index: " .. tostring(index)) end
- -- Add the new theme
- for key in pairs(new) do
- theme[key] = new[key]
- end
- useColors = true
- else
- useColors = false
- end
-
- quote = colorize('quotes', "'", 'string')
- quote2 = colorize('quotes', "'")
- dquote = colorize('quotes', '"', 'string')
- dquote2 = colorize('quotes', '"')
- obrace = colorize('braces', '{ ')
- cbrace = colorize('braces', '}')
- obracket = colorize('property', '[')
- cbracket = colorize('property', ']')
- comma = colorize('sep', ', ')
- equals = colorize('sep', ' = ')
-
- controls = {}
- for i = 0, 31 do
- local c = special[i]
- if not c then
- if i < 10 then
- c = "00" .. tostring(i)
- else
- c = "0" .. tostring(i)
- end
- end
- controls[i] = colorize('escape', '\\' .. c, 'string')
- end
- controls[92] = colorize('escape', '\\\\', 'string')
- controls[34] = colorize('escape', '\\"', 'string')
- controls[39] = colorize('escape', "\\'", 'string')
- for i = 128, 255 do
- local c
- if i < 100 then
- c = "0" .. tostring(i)
- else
- c = tostring(i)
- end
- controls[i] = colorize('escape', '\\' .. c, 'string')
- end
-
-end
-
-function color(colorName)
- return '\27[' .. (theme[colorName] or '0') .. 'm'
-end
-
-function colorize(colorName, string, resetName)
- return useColors and
- (color(colorName) .. tostring(string) .. color(resetName)) or
- tostring(string)
-end
-
-local function stringEscape(c)
- return controls[string.byte(c, 1)]
-end
-
-function dump(value, recurse, nocolor)
- local seen = {}
- local output = {}
- local offset = 0
- local stack = {}
-
- local function recalcOffset(index)
- for i = index + 1, #output do
- local m = string.match(output[i], "\n([^\n]*)$")
- if m then
- offset = #(strip(m))
- else
- offset = offset + #(strip(output[i]))
- end
- end
- end
-
- local function write(text, length)
- if not length then length = #(strip(text)) end
- -- Create room for data by opening parent blocks
- -- Start at the root and go down.
- local i = 1
- while offset + length > width and stack[i] do
- local entry = stack[i]
- if not entry.opened then
- entry.opened = true
- table.insert(output, entry.index + 1, "\n" .. string.rep(" ", i))
- -- Recalculate the offset
- recalcOffset(entry.index)
- -- Bump the index of all deeper entries
- for j = i + 1, #stack do
- stack[j].index = stack[j].index + 1
- end
- end
- i = i + 1
- end
- output[#output + 1] = text
- offset = offset + length
- if offset > width then
- return dump(stack)
- end
- end
-
- local function indent()
- stack[#stack + 1] = {
- index = #output,
- opened = false,
- }
- end
-
- local function unindent()
- stack[#stack] = nil
- end
-
- local function process(value)
- local typ = type(value)
- if typ == 'string' then
- if string.match(value, "'") and not string.match(value, '"') then
- write(dquote .. string.gsub(value, '[%c\\\128-\255]', stringEscape) .. dquote2)
- else
- write(quote .. string.gsub(value, "[%c\\'\128-\255]", stringEscape) .. quote2)
- end
- elseif typ == 'table' and not seen[value] then
- if not recurse then seen[value] = true end
- write(obrace)
- local i = 1
- -- Count the number of keys so we know when to stop adding commas
- local total = 0
- for _ in pairs(value) do total = total + 1 end
-
- local nextIndex = 1
- for k, v in pairs(value) do
- indent()
- if k == nextIndex then
- -- if the key matches the last numerical index + 1
- -- This is how lists print without keys
- nextIndex = k + 1
- process(v)
- else
- if type(k) == "string" and string.find(k,"^[%a_][%a%d_]*$") then
- write(colorize("property", k) .. equals)
- else
- write(obracket)
- process(k)
- write(cbracket .. equals)
- end
- if type(v) == "table" then
- process(v)
- else
- indent()
- process(v)
- unindent()
- end
- end
- if i < total then
- write(comma)
- else
- write(" ")
- end
- i = i + 1
- unindent()
- end
- write(cbrace)
- else
- write(colorize(typ, tostring(value)))
- end
- end
-
- process(value)
- local s = table.concat(output, "")
- return nocolor and strip(s) or s
-end
-
--- Print replacement that goes through libuv. This is useful on windows
--- to use libuv's code to translate ansi escape codes to windows API calls.
-function _G.print(...)
- local n = select('#', ...)
- local arguments = {...}
- for i = 1, n do
- arguments[i] = tostring(arguments[i])
- end
- uv.write(stdout, table.concat(arguments, "\t") .. "\n")
-end
-
-function prettyPrint(...)
- local n = select('#', ...)
- local arguments = { ... }
-
- for i = 1, n do
- arguments[i] = dump(arguments[i])
- end
-
- print(table.concat(arguments, "\t"))
-end
-
-function strip(str)
- return string.gsub(str, '\027%[[^m]*m', '')
-end
-
-if uv.guess_handle(0) == 'tty' then
- stdin = assert(uv.new_tty(0, true))
-else
- stdin = uv.new_pipe(false)
- uv.pipe_open(stdin, 0)
-end
-
-if uv.guess_handle(1) == 'tty' then
- stdout = assert(uv.new_tty(1, false))
- width = uv.tty_get_winsize(stdout)
- if width == 0 then width = 80 end
- -- auto-detect when 16 color mode should be used
- local term = os.getenv("TERM")
- if term == 'xterm' or term == 'xterm-256color' then
- defaultTheme = 256
- else
- defaultTheme = 16
- end
-else
- stdout = uv.new_pipe(false)
- uv.pipe_open(stdout, 1)
- width = 80
-end
-loadColors()
-
-if uv.guess_handle(2) == 'tty' then
- stderr = assert(uv.new_tty(2, false))
-else
- stderr = uv.new_pipe(false)
- uv.pipe_open(stderr, 2)
-end
-
-exports.loadColors = loadColors
-exports.theme = theme
-exports.print = print
-exports.prettyPrint = prettyPrint
-exports.dump = dump
-exports.color = color
-exports.colorize = colorize
-exports.stdin = stdin
-exports.stdout = stdout
-exports.stderr = stderr
-exports.strip = strip
-
-return exports
diff --git a/plugins/pretty-print/plugin.json b/plugins/pretty-print/plugin.json
deleted file mode 100644
index 556608c8dd6..00000000000
--- a/plugins/pretty-print/plugin.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "plugin": {
- "name": "pretty-print",
- "version": "1.0.3",
- "author": "Tim Caswell",
- "type": "library",
- }
-} \ No newline at end of file
diff --git a/plugins/querystring/LICENSE b/plugins/querystring/LICENSE
deleted file mode 100644
index 8f71f43fee3..00000000000
--- a/plugins/querystring/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
diff --git a/plugins/querystring/README.md b/plugins/querystring/README.md
deleted file mode 100644
index 7f3437312bb..00000000000
--- a/plugins/querystring/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# luv-querystring
-A luv port of luvit's querystring
diff --git a/plugins/querystring/init.lua b/plugins/querystring/init.lua
deleted file mode 100644
index 0e2675f9252..00000000000
--- a/plugins/querystring/init.lua
+++ /dev/null
@@ -1,105 +0,0 @@
---[[
-
-Copyright 2015 The Luvit Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS-IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
---]]
-
-local exports = {}
-exports.name = "luvit/querystring"
-exports.version = "1.0.2"
-exports.license = "Apache 2"
-exports.homepage = "https://github.com/luvit/luvit/blob/master/deps/querystring.lua"
-exports.description = "Node-style query-string codec for luvit"
-exports.tags = {"luvit", "url", "codec"}
-
-local find = string.find
-local gsub = string.gsub
-local char = string.char
-local byte = string.byte
-local format = string.format
-local match = string.match
-local gmatch = string.gmatch
-
-function exports.urldecode(str)
- str = gsub(str, '+', ' ')
- str = gsub(str, '%%(%x%x)', function(h)
- return char(tonumber(h, 16))
- end)
- str = gsub(str, '\r\n', '\n')
- return str
-end
-
-function exports.urlencode(str)
- if str then
- str = gsub(str, '\n', '\r\n')
- str = gsub(str, '([^%w])', function(c)
- return format('%%%02X', byte(c))
- end)
- end
- return str
-end
-
-local function stringifyPrimitive(v)
- return tostring(v)
-end
-
-function exports.stringify(params, sep, eq)
- if not sep then sep = '&' end
- if not eq then eq = '=' end
- if type(params) == "table" then
- local fields = {}
- for key,value in pairs(params) do
- local keyString = exports.urlencode(stringifyPrimitive(key)) .. eq
- if type(value) == "table" then
- for _, v in ipairs(value) do
- table.insert(fields, keyString .. exports.urlencode(stringifyPrimitive(v)))
- end
- else
- table.insert(fields, keyString .. exports.urlencode(stringifyPrimitive(value)))
- end
- end
- return table.concat(fields, sep)
- end
- return ''
-end
-
--- parse querystring into table. urldecode tokens
-function exports.parse(str, sep, eq)
- if not sep then sep = '&' end
- if not eq then eq = '=' end
- local vars = {}
- for pair in gmatch(tostring(str), '[^' .. sep .. ']+') do
- if not find(pair, eq) then
- vars[exports.urldecode(pair)] = ''
- else
- local key, value = match(pair, '([^' .. eq .. ']*)' .. eq .. '(.*)')
- if key then
- key = exports.urldecode(key)
- value = exports.urldecode(value)
- local type = type(vars[key])
- if type=='nil' then
- vars[key] = value
- elseif type=='table' then
- table.insert(vars[key], value)
- else
- vars[key] = {vars[key],value}
- end
- end
- end
- end
- return vars
-end
-
-return exports
diff --git a/plugins/querystring/plugin.json b/plugins/querystring/plugin.json
deleted file mode 100644
index ddd3cc4291e..00000000000
--- a/plugins/querystring/plugin.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "plugin": {
- "name": "querystring",
- "version": "1.0.2",
- "author": "Tim Caswell",
- "type": "library",
- }
-} \ No newline at end of file
diff --git a/plugins/weblit/LICENSE b/plugins/weblit/LICENSE
deleted file mode 100644
index 5789b767285..00000000000
--- a/plugins/weblit/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Tim Caswell
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/plugins/weblit/README.md b/plugins/weblit/README.md
deleted file mode 100644
index 55d6085d22b..00000000000
--- a/plugins/weblit/README.md
+++ /dev/null
@@ -1,239 +0,0 @@
-# weblit
-
-A web framework for luv (ported from luvit/lit)
-
-Weblit is a collection of lit packages that together form a nice web framework.
-
-## weblit/app
-
-This is the core of the framework. It's export value is the app itself. The
-config functions can be chained off this config for super terse syntax.
-
-```lua
-require('weblit/app')
-
- .bind({
- host = "0.0.0.0",
- port = 8080
- })
-
- .use(require('weblit/logger'))
- .use(require('weblit/auto-headers'))
- .use(require('weblit/etag-cache'))
-
- .route({
- method = "GET",
- path = "/do/:user/:action",
- domain = "*.myapp.io"
- }, function (req, res, go)
- -- Handle route
- end)
-
- .start()
-
-```
-
-### bind(options)
-
-Use this to configure your server. You can bind to multiple addresses and
-ports. For example, the same server can listen on port `8080` using normal HTTP
-while also listening on port `8443` using HTTPS.
-
-```lua
--- Listen on port 8080 internally using plain HTTP.
-.bind({
- host = "127.0.0.1",
- port = 8080
-})
-
--- Also listen on port 8443 externally using encrypted HTTPS.
-.bind({
- host = "0.0.0.0",
- port = 8443,
- tls = {
- cert = module:load("cert.pem"),
- key = module:load("key.pem",
- }
-})
-```
-
-The `host` option defaults to `"127.0.0.1"`. The default port depends on if
-you're running as root and if the connection is TLS encrypted.
-
- | Root | User
-------|-----:|------:
-HTTP | 80 | 8080
-HTTPS | 442 | 8443
-
-
-### use(middleware)
-
-This adds a raw middleware to the chain. It's signature is:
-
-```lua
-.use(function (req, res, go)
- -- Log the request table
- p("request", req)
- -- Hand off to the next layer.
- return go()
-end)
-```
-
-The `req` table will contain information about the HTTP request. This includes
-several fields:
-
- - `socket` - The raw libuv `uv_tty_t` socket.
- - `method` - The HTTP request method verb like `GET` or `POST`.
- - `path` - The raw HTTP request path (including query string).
- - `headers` - A list of headers. Each header is a table with two entries for
- key and value. For convenience, there are special `__index` and
- `__newindex` metamethods that let you treat this like a case insensitive
- key/value store.
- - `version` - The HTTP version (Usually either `1.0` or `1.1`).
- - `keepAlive` - A flag telling you if this should be a keepalive connection.
- - `body` - The request body as a string. In the future, this may also be a stream.
-
-The `res` table also has some conventions used to form the response a piece at a
-time. Initially it contains:
-
- - `code` - The response status code. Initially contains `404`.
- - `headers` - Another special headers table like in `req`.
- - `body` - The response body to send. Initially contains `"Not Found\n"`.
-
-The `go` function is to be called if you wish to not handle a request. This
-allows other middleware layers to get a chance to respond to the request. Use a
-tail call if there is nothing more to do.
-
-Otherwise do further processing after `go` returns. At this point, all inner
-layers have finished and a response is ready in `res`.
-
-### route(options, middleware)
-
-Route is like use, but allows you to pre-filter the requests before the middleware
-is called.
-
-```lua
-.route({
- method = "PUT",
- path = "/upload/:username"
-}, function (req, res, go)
- local url = saveFile(req.params.username, req.body)
- res.code = 201
- res.headers.Location = url
-end)
-```
-
-The route options accept several parameters:
-
- - `method` - This is a simple filter on a specific HTTP method verb.
- - `path` - This is either an exact match or can contain patterns. Segments
- looking like `:name` will match single path segments while `:name:` will
- match multiple segments. The matches will go into `req.params`. Also any
- query string will be stripped off, parsed out, and stored in `req.query`.
- - `host` - Will filter against the `Host` header. This can be an exact match
- or a glob match like `*.mydomain.org`.
- - `filter` - Filter is a custom lua function that accepts `req` and returns
- `true` or `false`.
-
-If the request matches all the requirements, then the middleware is called the
-same as with `use`.
-
-### start
-
-Bind to the port(s), listen on the socket(s) and start accepting connections.
-
-## weblit/logger
-
-This is a simple middleware that logs the request method, url and user agent.
-It also includes the response status code.
-
-Make sure to use it at the top of your middleware chain so that it's able to see
-the final response code sent to the client.
-
-```lua
-.use(require('weblit/logger'))
-```
-
-## weblit/auto-headers
-
-This implements lots of conventions and useful defaults that help your app
-implement a proper HTTP server.
-
-You should always use this near the top of the list. The only middleware that
-goes before this is the logger.
-
-
-```lua
-.use(require('weblit/auto-headers'))
-```
-
-## weblit/etag-cache
-
-This caches responses in memory keyed by etag. If there is no etag, but there
-is a response body, it will use the body to generate an etag.
-
-Put this in your list after auto-headers, but before custom server logic.
-
-```lua
-.use(require('weblit/etag-cache'))
-```
-
-## weblit/static
-
-This middleware serves static files to the user. Use this to serve your client-
-side web assets.
-
-Usage is pretty simplistic for now.
-
-```lua
-local static = require('weblit/static')
-app.use(static("path/to/static/assets"))
-```
-
-If you want to only match a sub-path, use the router.
-
-```lua
-app.route({
- path = "/blog/:path:"
-}, static(pathJoin(module.dir, "articles")))
-```
-
-The `path` param will be used if it exists and the full path will be used
-otherwise.
-
-## weblit/websocket
-
-This implements a websocket upgrade handler. You can choose the subprotocol and
-other routing information.
-
-```lua
-app.websocket({
- path = "/v2/socket", -- Prefix for matching
- protocol = "virgo/2.0", -- Restrict to a websocket sub-protocol
-}, function (req, read, write)
- -- Log the request headers
- p(req)
- -- Log and echo all messages
- for message in read do
- write(message)
- end
- -- End the stream
- write()
-end)
-```
-
-
-## weblit
-
-This is the metapackage that simply includes the other modules.
-
-It exposes the other modules as a single exports table.
-
-```lua
-exports.app = require('weblit/app')
-exports.autoHeaders = require('weblit/auto-headers')
-exports.etagCache = require('weblit/etag-cache')
-exports.logger = require('weblit/logger')
-exports.static = require('weblit/static')
-exports.websocket = require('weblit/websocket')
-```
diff --git a/plugins/weblit/app.lua b/plugins/weblit/app.lua
deleted file mode 100644
index d3839c1df8e..00000000000
--- a/plugins/weblit/app.lua
+++ /dev/null
@@ -1,261 +0,0 @@
-
-
-local createServer = require('coro-net').createServer
-local wrapper = require('coro-wrapper')
-local readWrap, writeWrap = wrapper.reader, wrapper.writer
-local httpCodec = require('http-codec')
---local tlsWrap = require('coro-tls').wrap
-local parseQuery = require('querystring').parse
-
--- Ignore SIGPIPE if it exists on platform
-local uv = require('luv')
-if uv.constants.SIGPIPE then
- uv.new_signal():start("sigpipe")
-end
-
-local server = {}
-local handlers = {}
-local bindings = {}
-
--- Provide a nice case insensitive interface to headers.
-local headerMeta = {
- __index = function (list, name)
- if type(name) ~= "string" then
- return rawget(list, name)
- end
- name = name:lower()
- for i = 1, #list do
- local key, value = unpack(list[i])
- if key:lower() == name then return value end
- end
- end,
- __newindex = function (list, name, value)
- -- non-string keys go through as-is.
- if type(name) ~= "string" then
- return rawset(list, name, value)
- end
- -- First remove any existing pairs with matching key
- local lowerName = name:lower()
- for i = #list, 1, -1 do
- if list[i][1]:lower() == lowerName then
- table.remove(list, i)
- end
- end
- -- If value is nil, we're done
- if value == nil then return end
- -- Otherwise, set the key(s)
- if (type(value) == "table") then
- -- We accept a table of strings
- for i = 1, #value do
- rawset(list, #list + 1, {name, tostring(value[i])})
- end
- else
- -- Or a single value interperted as string
- rawset(list, #list + 1, {name, tostring(value)})
- end
- end,
-}
-
-local function handleRequest(head, input, socket)
- local req = {
- socket = socket,
- method = head.method,
- path = head.path,
- headers = setmetatable({}, headerMeta),
- version = head.version,
- keepAlive = head.keepAlive,
- body = input
- }
- for i = 1, #head do
- req.headers[i] = head[i]
- end
-
- local res = {
- code = 404,
- headers = setmetatable({}, headerMeta),
- body = "Not Found\n",
- }
-
- local function run(i)
- local success, err = pcall(function ()
- i = i or 1
- local go = i < #handlers
- and function ()
- return run(i + 1)
- end
- or function () end
- return handlers[i](req, res, go)
- end)
- if not success then
- res.code = 500
- res.headers = setmetatable({}, headerMeta)
- res.body = err
- print(err)
- end
- end
- run(1)
-
- local out = {
- code = res.code,
- keepAlive = res.keepAlive,
- }
- for i = 1, #res.headers do
- out[i] = res.headers[i]
- end
- return out, res.body, res.upgrade
-end
-
-local function handleConnection(rawRead, rawWrite, socket)
-
- -- Speak in HTTP events
- local read, updateDecoder = readWrap(rawRead, httpCodec.decoder())
- local write, updateEncoder = writeWrap(rawWrite, httpCodec.encoder())
-
- for head in read do
- local parts = {}
- for chunk in read do
- if #chunk > 0 then
- parts[#parts + 1] = chunk
- else
- break
- end
- end
- local res, body, upgrade = handleRequest(head, #parts > 0 and table.concat(parts) or nil, socket)
- write(res)
- if upgrade then
- return upgrade(read, write, updateDecoder, updateEncoder, socket)
- end
- write(body)
- if not (res.keepAlive and head.keepAlive) then
- break
- end
- end
- write()
-
-end
-
-function server.bind(options)
- if not options.host then
- options.host = "127.0.0.1"
- end
- if not options.port then
- options.port = require('uv').getuid() == 0 and
- (options.tls and 443 or 80) or
- (options.tls and 8443 or 8080)
- end
- bindings[#bindings + 1] = options
- return server
-end
-
-function server.use(handler)
- handlers[#handlers + 1] = handler
- return server
-end
-
-
-function server.start()
- if #bindings == 0 then
- server.bind({})
- end
- for i = 1, #bindings do
- local options = bindings[i]
- createServer(options, function (rawRead, rawWrite, socket)
- --local tls = options.tls
- --if tls then
- --rawRead, rawWrite = tlsWrap(rawRead, rawWrite, {
- -- server = true,
- --key = assert(tls.key, "tls key required"),
- --cert = assert(tls.cert, "tls cert required"),
- --})
- --end
- return handleConnection(rawRead, rawWrite, socket)
- end)
- print("HTTP server listening at http" .. (options.tls and "s" or "") .. "://" .. options.host .. (options.port == (options.tls and 443 or 80) and "" or ":" .. options.port) .. "/")
- end
- return server
-end
-
-local quotepattern = '(['..("%^$().[]*+-?"):gsub("(.)", "%%%1")..'])'
-local function escape(str)
- return str:gsub(quotepattern, "%%%1")
-end
-
-local function compileGlob(glob)
- local parts = {"^"}
- for a, b in glob:gmatch("([^*]*)(%**)") do
- if #a > 0 then
- parts[#parts + 1] = escape(a)
- end
- if #b > 0 then
- parts[#parts + 1] = "(.*)"
- end
- end
- parts[#parts + 1] = "$"
- local pattern = table.concat(parts)
- return function (string)
- return string and string:match(pattern)
- end
-end
-
-local function compileRoute(route)
- local parts = {"^"}
- local names = {}
- for a, b, c, d in route:gmatch("([^:]*):([_%a][_%w]*)(:?)([^:]*)") do
- if #a > 0 then
- parts[#parts + 1] = escape(a)
- end
- if #c > 0 then
- parts[#parts + 1] = "(.*)"
- else
- parts[#parts + 1] = "([^/]*)"
- end
- names[#names + 1] = b
- if #d > 0 then
- parts[#parts + 1] = escape(d)
- end
- end
- if #parts == 1 then
- return function (string)
- if string == route then return {} end
- end
- end
- parts[#parts + 1] = "$"
- local pattern = table.concat(parts)
- return function (string)
- local matches = {string:match(pattern)}
- if #matches > 0 then
- local results = {}
- for i = 1, #matches do
- results[i] = matches[i]
- results[names[i]] = matches[i]
- end
- return results
- end
- end
-end
-
-function server.route(options, handler)
- local method = options.method
- local path = options.path and compileRoute(options.path)
- local host = options.host and compileGlob(options.host)
- local filter = options.filter
- server.use(function (req, res, go)
- if method and req.method ~= method then return go() end
- if host and not host(req.headers.host) then return go() end
- if filter and not filter(req) then return go() end
- local params
- if path then
- local pathname, query = req.path:match("^([^?]*)%??(.*)")
- params = path(pathname)
- if not params then return go() end
- if #query > 0 then
- req.query = parseQuery(query)
- end
- end
- req.params = params or {}
- return handler(req, res, go)
- end)
- return server
-end
-
-return server
diff --git a/plugins/weblit/auto-headers.lua b/plugins/weblit/auto-headers.lua
deleted file mode 100644
index 44ad65779e9..00000000000
--- a/plugins/weblit/auto-headers.lua
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
---[[
-
-Response automatic values:
- - Auto Server header
- - Auto Date Header
- - code defaults to 404 with body "Not Found\n"
- - if there is a string body add Content-Length and ETag if missing
- - if string body and no Content-Type, use text/plain for valid utf-8, application/octet-stream otherwise
- - Auto add "; charset=utf-8" to Content-Type when body is known to be valid utf-8
- - Auto 304 responses for if-none-match requests
- - Auto strip body with HEAD requests
- - Auto chunked encoding if body with unknown length
- - if Connection header set and not keep-alive, set res.keepAlive to false
- - Add Connection Keep-Alive/Close if not found based on res.keepAlive
-
---TODO: utf8 scanning
-
-]]
-
---local digest = require('openssl').digest.digest
-local date = require('os').date
-
-return function (req, res, go)
- local isHead = false
- if req.method == "HEAD" then
- req.method = "GET"
- isHead = true
- end
-
- local requested = req.headers["if-none-match"]
-
- go()
-
- -- We could use the fancy metatable, but this is much faster
- local lowerHeaders = {}
- local headers = res.headers
- for i = 1, #headers do
- local key, value = unpack(headers[i])
- lowerHeaders[key:lower()] = value
- end
-
-
- if not lowerHeaders.server then
- headers[#headers + 1] = {"Server", serverName}
- end
- if not lowerHeaders.date then
- headers[#headers + 1] = {"Date", date("!%a, %d %b %Y %H:%M:%S GMT")}
- end
-
- if not lowerHeaders.connection then
- if req.keepAlive then
- lowerHeaders.connection = "Keep-Alive"
- headers[#headers + 1] = {"Connection", "Keep-Alive"}
- else
- headers[#headers + 1] = {"Connection", "Close"}
- end
- end
- res.keepAlive = lowerHeaders.connection and lowerHeaders.connection:lower() == "keep-alive"
-
- local body = res.body
- if body then
- local needLength = not lowerHeaders["content-length"] and not lowerHeaders["transfer-encoding"]
- if type(body) == "string" then
- if needLength then
- headers[#headers + 1] = {"Content-Length", #body}
- end
- -- if not lowerHeaders.etag then
- -- local etag = '"' .. digest("sha1", body) .. '"'
- -- lowerHeaders.etag = etag
- --headers[#headers + 1] = {"ETag", etag}
- -- end
- else
- if needLength then
- headers[#headers + 1] = {"Transfer-Encoding", "chunked"}
- end
- end
- if not lowerHeaders["content-type"] then
- headers[#headers + 1] = {"Content-Type", "text/plain"}
- end
- end
-
- local etag = lowerHeaders.etag
- if requested and res.code >= 200 and res.code < 300 and requested == etag then
- res.code = 304
- body = nil
- end
-
- if isHead then body = nil end
- res.body = body
-end
diff --git a/plugins/weblit/etag-cache.lua b/plugins/weblit/etag-cache.lua
deleted file mode 100644
index e8c5d149b35..00000000000
--- a/plugins/weblit/etag-cache.lua
+++ /dev/null
@@ -1,39 +0,0 @@
-
-local function clone(headers)
- local copy = setmetatable({}, getmetatable(headers))
- for i = 1, #headers do
- copy[i] = headers[i]
- end
- return copy
-end
-
-local cache = {}
-return function (req, res, go)
- local requested = req.headers["If-None-Match"]
- local host = req.headers.Host
- local key = host and host .. "|" .. req.path or req.path
- local cached = cache[key]
- if not requested and cached then
- req.headers["If-None-Match"] = cached.etag
- end
- go()
- local etag = res.headers.ETag
- if not etag then return end
- if res.code >= 200 and res.code < 300 then
- local body = res.body
- if not body or type(body) == "string" then
- cache[key] = {
- etag = etag,
- code = res.code,
- headers = clone(res.headers),
- body = body
- }
- end
- elseif res.code == 304 then
- if not requested and cached and etag == cached.etag then
- res.code = cached.code
- res.headers = clone(cached.headers)
- res.body = cached.body
- end
- end
-end
diff --git a/plugins/weblit/init.lua b/plugins/weblit/init.lua
deleted file mode 100644
index f9224b7880c..00000000000
--- a/plugins/weblit/init.lua
+++ /dev/null
@@ -1,8 +0,0 @@
-local exports = {}
-exports.app = require('weblit/app')
-exports.autoHeaders = require('weblit/auto-headers')
-exports.etagCache = require('weblit/etag-cache')
-exports.logger = require('weblit/logger')
-exports.static = require('weblit/static')
-exports.websocket = require('weblit/websocket')
-return exports
diff --git a/plugins/weblit/logger.lua b/plugins/weblit/logger.lua
deleted file mode 100644
index 912b4eed768..00000000000
--- a/plugins/weblit/logger.lua
+++ /dev/null
@@ -1,10 +0,0 @@
-
-return function (req, res, go)
- -- Skip this layer for clients who don't send User-Agent headers.
- local userAgent = req.headers["user-agent"]
- if not userAgent then return go() end
- -- Run all inner layers first.
- go()
- -- And then log after everything is done
- --print(string.format("%s %s %s %s", req.method, req.path, userAgent, res.code))
-end
diff --git a/plugins/weblit/plugin.json b/plugins/weblit/plugin.json
deleted file mode 100644
index 69dd45ccc0e..00000000000
--- a/plugins/weblit/plugin.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "plugin": {
- "name": "weblit",
- "version": "1.0.0",
- "author": "Tim Caswell",
- "type": "library",
- }
-} \ No newline at end of file
diff --git a/plugins/weblit/static.lua b/plugins/weblit/static.lua
deleted file mode 100644
index b34ea638fa1..00000000000
--- a/plugins/weblit/static.lua
+++ /dev/null
@@ -1,62 +0,0 @@
-
-local getType = require("mime").getType
-local jsonStringify = require('json').stringify
-
-local makeChroot = require('coro-fs').chroot
-
-return function (rootPath)
-
- local fs = makeChroot(rootPath)
-
- return function (req, res, go)
- if req.method ~= "GET" then return go() end
- local path = (req.params and req.params.path) or req.path
- path = path:match("^[^?#]*")
- if path:byte(1) == 47 then
- path = path:sub(2)
- end
- local stat = fs.stat(path)
- if not stat then return go() end
-
- local function renderFile()
- local body = assert(fs.readFile(path))
- res.code = 200
- res.headers["Content-Type"] = getType(path)
- res.body = body
- return
- end
-
- local function renderDirectory()
- if req.path:byte(-1) ~= 47 then
- res.code = 301
- res.headers.Location = req.path .. '/'
- return
- end
- local files = {}
- for entry in fs.scandir(path) do
- if entry.name == "index.html" and entry.type == "file" then
- path = (#path > 0 and path .. "/" or "") .. "index.html"
- return renderFile()
- end
- files[#files + 1] = entry
- entry.url = "http://" .. req.headers.host .. req.path .. entry.name
- end
- local body = jsonStringify(files) .. "\n"
- res.code = 200
- res.headers["Content-Type"] = "application/json"
- res.body = body
- return
- end
-
- if stat.type == "directory" then
- return renderDirectory()
- elseif stat.type == "file" then
- if req.path:byte(-1) == 47 then
- res.code = 301
- res.headers.Location = req.path:match("^(.*[^/])/+$")
- return
- end
- return renderFile()
- end
- end
-end
diff --git a/plugins/weblit/websocket.lua b/plugins/weblit/websocket.lua
deleted file mode 100644
index d5dfe572ea6..00000000000
--- a/plugins/weblit/websocket.lua
+++ /dev/null
@@ -1,82 +0,0 @@
-
-local websocketCodec = require('websocket-codec')
-
-local function websocketHandler(options, handler)
- return function (req, res, go)
- -- Websocket connections must be GET requests
- -- with 'Upgrade: websocket'
- -- and 'Connection: Upgrade' headers
- local headers = req.headers
- local connection = headers.connection
- local upgrade = headers.upgrade
- if not (
- req.method == "GET" and
- upgrade and upgrade:lower():find("websocket", 1, true) and
- connection and connection:lower():find("upgrade", 1, true)
- ) then
- return go()
- end
-
- if options.filter and not options.filter(req) then
- return go()
- end
-
- -- If there is a sub-protocol specified, filter on it.
- local protocol = options.protocol
- if protocol then
- local list = headers["sec-websocket-protocol"]
- local foundProtocol
- if list then
- for item in list:gmatch("[^, ]+") do
- if item == protocol then
- foundProtocol = true
- break
- end
- end
- end
- if not foundProtocol then
- return go()
- end
- end
-
- -- Make sure it's a new client speaking v13 of the protocol
- assert(tonumber(headers["sec-websocket-version"]) >= 13, "only websocket protocol v13 supported")
-
- -- Get the security key
- local key = assert(headers["sec-websocket-key"], "websocket security required")
-
- res.code = 101
- headers = res.headers
- headers.Upgrade = "websocket"
- headers.Connection = "Upgrade"
- headers["Sec-WebSocket-Accept"] = websocketCodec.acceptKey(key)
- if protocol then
- headers["Sec-WebSocket-Protocol"] = protocol
- end
- function res.upgrade(read, write, updateDecoder, updateEncoder)
- updateDecoder(websocketCodec.decode)
- updateEncoder(websocketCodec.encode)
- local success, err = pcall(handler, req, read, write)
- if not success then
- print(err)
- write({
- opcode = 1,
- payload = err,
- })
- return write()
- end
- end
- end
-end
-
-local server = require('weblit-app')
-function server.websocket(options, handler)
- server.route({
- method = "GET",
- path = options.path,
- host = options.host,
- }, websocketHandler(options, handler))
- return server
-end
-
-return websocketHandler
diff --git a/plugins/webserver/init.lua b/plugins/webserver/init.lua
deleted file mode 100644
index 3d68b01e6d5..00000000000
--- a/plugins/webserver/init.lua
+++ /dev/null
@@ -1,34 +0,0 @@
-local exports = {}
-exports.name = "webserver"
-exports.version = "1.0.0"
-exports.description = "A simple web server"
-exports.license = "MIT"
-exports.author = { name = "Miodrag Milanovic" }
-
-local ws = exports
-
-local app = require('weblit/app')
-
-function ws.startplugin()
- app.bind({
- host = "0.0.0.0",
- port = 8080
- })
-
- app.use(require('weblit/logger'))
- app.use(require('weblit/auto-headers'))
- app.use(require('weblit/etag-cache'))
-
- app.route({
- method = "GET",
- path = "/",
- }, function (req, res, go)
- res.code = 200
- res.headers["Content-Type"] = "text/html"
- res.body = "<h1>Hello!</h1>\n"
- end)
-
- app.start()
-end
-
-return exports
diff --git a/plugins/webserver/plugin.json b/plugins/webserver/plugin.json
deleted file mode 100644
index e420a5d5485..00000000000
--- a/plugins/webserver/plugin.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "plugin": {
- "name": "webserver",
- "version": "1.0.0",
- "author": "Miodrag Milanovic",
- "type": "plugin",
- "start": "false",
- }
-} \ No newline at end of file
diff --git a/plugins/websocket-codec/LICENSE b/plugins/websocket-codec/LICENSE
deleted file mode 100644
index 5789b767285..00000000000
--- a/plugins/websocket-codec/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Tim Caswell
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/plugins/websocket-codec/README.md b/plugins/websocket-codec/README.md
deleted file mode 100644
index 50f41340dce..00000000000
--- a/plugins/websocket-codec/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# luv-websocket-codec
-A luv port of lit's websocket codec
diff --git a/plugins/websocket-codec/init.lua b/plugins/websocket-codec/init.lua
deleted file mode 100644
index 8a7da7f9190..00000000000
--- a/plugins/websocket-codec/init.lua
+++ /dev/null
@@ -1,261 +0,0 @@
-local exports = {}
-
-exports.name = "creationix/websocket-codec"
-exports.version = "1.0.7"
-exports.homepage = "https://github.com/luvit/lit/blob/master/deps/websocket-codec.lua"
-exports.description = "A codec implementing websocket framing and helpers for handshakeing"
-exports.tags = {"http", "websocket", "codec"}
-exports.license = "MIT"
-exports.author = { name = "Tim Caswell" }
-
-local digest = require('openssl').digest.digest
-local base64 = require('openssl').base64
-local random = require('openssl').random
-local bit = require('bit')
-
-local band = bit.band
-local bor = bit.bor
-local bxor = bit.bxor
-local rshift = bit.rshift
-local lshift = bit.lshift
-local char = string.char
-local byte = string.byte
-local sub = string.sub
-local gmatch = string.gmatch
-local lower = string.lower
-local gsub = string.gsub
-local concat = table.concat
-
-local function applyMask(data, mask)
- local bytes = {
- [0] = byte(mask, 1),
- [1] = byte(mask, 2),
- [2] = byte(mask, 3),
- [3] = byte(mask, 4)
- }
- local out = {}
- for i = 1, #data do
- out[i] = char(
- bxor(byte(data, i), bytes[(i - 1) % 4])
- )
- end
- return concat(out)
-end
-
-function exports.decode(chunk)
- if #chunk < 2 then return end
- local second = byte(chunk, 2)
- local len = band(second, 0x7f)
- local offset
- if len == 126 then
- if #chunk < 4 then return end
- len = bor(
- lshift(byte(chunk, 3), 8),
- byte(chunk, 4))
- offset = 4
- elseif len == 127 then
- if #chunk < 10 then return end
- len = bor(
- lshift(byte(chunk, 3), 56),
- lshift(byte(chunk, 4), 48),
- lshift(byte(chunk, 5), 40),
- lshift(byte(chunk, 6), 32),
- lshift(byte(chunk, 7), 24),
- lshift(byte(chunk, 8), 16),
- lshift(byte(chunk, 9), 8),
- byte(chunk, 10))
- offset = 10
- else
- offset = 2
- end
- local mask = band(second, 0x80) > 0
- if mask then
- offset = offset + 4
- end
- if #chunk < offset + len then return end
-
- local first = byte(chunk, 1)
- local payload = sub(chunk, offset + 1, offset + len)
- assert(#payload == len, "Length mismatch")
- if mask then
- payload = applyMask(payload, sub(chunk, offset - 3, offset))
- end
- local extra = sub(chunk, offset + len + 1)
- return {
- fin = band(first, 0x80) > 0,
- rsv1 = band(first, 0x40) > 0,
- rsv2 = band(first, 0x20) > 0,
- rsv3 = band(first, 0x10) > 0,
- opcode = band(first, 0xf),
- mask = mask,
- len = len,
- payload = payload
- }, extra
-end
-
-function exports.encode(item)
- if type(item) == "string" then
- item = {
- opcode = 2,
- payload = item
- }
- end
- local payload = item.payload
- assert(type(payload) == "string", "payload must be string")
- local len = #payload
- local fin = item.fin
- if fin == nil then fin = true end
- local rsv1 = item.rsv1
- local rsv2 = item.rsv2
- local rsv3 = item.rsv3
- local opcode = item.opcode or 2
- local mask = item.mask
- local chars = {
- char(bor(
- fin and 0x80 or 0,
- rsv1 and 0x40 or 0,
- rsv2 and 0x20 or 0,
- rsv3 and 0x10 or 0,
- opcode
- )),
- char(bor(
- mask and 0x80 or 0,
- len < 126 and len or (len < 0x10000) and 126 or 127
- ))
- }
- if len >= 0x10000 then
- chars[3] = char(band(rshift(len, 56), 0xff))
- chars[4] = char(band(rshift(len, 48), 0xff))
- chars[5] = char(band(rshift(len, 40), 0xff))
- chars[6] = char(band(rshift(len, 32), 0xff))
- chars[7] = char(band(rshift(len, 24), 0xff))
- chars[8] = char(band(rshift(len, 16), 0xff))
- chars[9] = char(band(rshift(len, 8), 0xff))
- chars[10] = char(band(len, 0xff))
- elseif len >= 126 then
- chars[3] = char(band(rshift(len, 8), 0xff))
- chars[4] = char(band(len, 0xff))
- end
- if mask then
- local key = random(4)
- return concat(chars) .. key .. applyMask(payload, key)
- end
- return concat(chars) .. payload
-end
-
-local websocketGuid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
-
-function exports.acceptKey(key)
- return gsub(base64(digest("sha1", key .. websocketGuid, true)), "\n", "")
-end
-local acceptKey = exports.acceptKey
-
--- Make a client handshake connection
-function exports.handshake(options, request)
- local key = gsub(base64(random(20)), "\n", "")
- local host = options.host
- local path = options.path or "/"
- local protocol = options.protocol
- local req = {
- method = "GET",
- path = path,
- {"Connection", "Upgrade"},
- {"Upgrade", "websocket"},
- {"Sec-WebSocket-Version", "13"},
- {"Sec-WebSocket-Key", key},
- }
- for i = 1, #options do
- req[#req + 1] = options[i]
- end
- if host then
- req[#req + 1] = {"Host", host}
- end
- if protocol then
- req[#req + 1] = {"Sec-WebSocket-Protocol", protocol}
- end
- local res = request(req)
- if not res then
- return nil, "Missing response from server"
- end
- -- Parse the headers for quick reading
- if res.code ~= 101 then
- return nil, "response must be code 101"
- end
-
- local headers = {}
- for i = 1, #res do
- local name, value = unpack(res[i])
- headers[lower(name)] = value
- end
-
- if not headers.connection or lower(headers.connection) ~= "upgrade" then
- return nil, "Invalid or missing connection upgrade header in response"
- end
- if headers["sec-websocket-accept"] ~= acceptKey(key) then
- return nil, "challenge key missing or mismatched"
- end
- if protocol and headers["sec-websocket-protocol"] ~= protocol then
- return nil, "protocol missing or mistmatched"
- end
- return true
-end
-
-function exports.handleHandshake(head, protocol)
-
- -- WebSocket connections must be GET requests
- if not head.method == "GET" then return end
-
- -- Parse the headers for quick reading
- local headers = {}
- for i = 1, #head do
- local name, value = unpack(head[i])
- headers[lower(name)] = value
- end
-
- -- Must have 'Upgrade: websocket' and 'Connection: Upgrade' headers
- if not (headers.connection and headers.upgrade and
- headers.connection:lower():find("upgrade", 1, true) and
- headers.upgrade:lower():find("websocket", 1, true)) then return end
-
- -- Make sure it's a new client speaking v13 of the protocol
- if tonumber(headers["sec-websocket-version"]) < 13 then
- return nil, "only websocket protocol v13 supported"
- end
-
- local key = headers["sec-websocket-key"]
- if not key then
- return nil, "websocket security key missing"
- end
-
- -- If the server wants a specified protocol, check for it.
- if protocol then
- local foundProtocol = false
- local list = headers["sec-websocket-protocol"]
- if list then
- for item in gmatch(list, "[^, ]+") do
- if item == protocol then
- foundProtocol = true
- break
- end
- end
- end
- if not foundProtocol then
- return nil, "specified protocol missing in request"
- end
- end
-
- local accept = acceptKey(key)
-
- local res = {
- code = 101,
- {"Upgrade", "websocket"},
- {"Connection", "Upgrade"},
- {"Sec-WebSocket-Accept", accept},
- }
- if protocol then
- res[#res + 1] = {"Sec-WebSocket-Protocol", protocol}
- end
-
- return res
-end
-return exports
diff --git a/plugins/websocket-codec/plugin.json b/plugins/websocket-codec/plugin.json
deleted file mode 100644
index 00a49dbcba3..00000000000
--- a/plugins/websocket-codec/plugin.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "plugin": {
- "name": "websocket-codec",
- "version": "1.0.7",
- "author": "Tim Caswell",
- "type": "library",
- }
-} \ No newline at end of file
diff --git a/regtests/LICENSE b/regtests/LICENSE
new file mode 100644
index 00000000000..4d9210d10e1
--- /dev/null
+++ b/regtests/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2016, MAME Development Team
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of bsd3 nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/regtests/README.md b/regtests/README.md
new file mode 100644
index 00000000000..c358bb20186
--- /dev/null
+++ b/regtests/README.md
@@ -0,0 +1,5 @@
+# **Regression tests** #
+
+Cointains code by various developers and it is used to test MAME tools
+
+Licensed under [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause)
diff --git a/samples/LICENSE b/samples/LICENSE
new file mode 100644
index 00000000000..670154e3538
--- /dev/null
+++ b/samples/LICENSE
@@ -0,0 +1,116 @@
+CC0 1.0 Universal
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later
+claims of infringement build upon, modify, incorporate in other works, reuse
+and redistribute as freely as possible in any form whatsoever and for any
+purposes, including without limitation commercial purposes. These owners may
+contribute to the Commons to promote the ideal of a free culture and the
+further production of creative, cultural and scientific works, or to gain
+reputation or greater distribution for their Work in part through the use and
+efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with a
+Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not limited
+to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display, communicate,
+ and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or performer(s);
+
+ iii. publicity and privacy rights pertaining to a person's image or likeness
+ depicted in a Work;
+
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+
+ v. rights protecting the extraction, dissemination, use and reuse of data in
+ a Work;
+
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation thereof,
+ including any amended or successor version of such directive); and
+
+ vii. other similar, equivalent or corresponding rights throughout the world
+ based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time
+extensions), (iii) in any current or future medium and for any number of
+copies, and (iv) for any purpose whatsoever, including without limitation
+commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
+the Waiver for the benefit of each member of the public at large and to the
+detriment of Affirmer's heirs and successors, fully intending that such Waiver
+shall not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of the Work
+by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account
+Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
+is so judged Affirmer hereby grants to each affected person a royalty-free,
+non transferable, non sublicensable, non exclusive, irrevocable and
+unconditional license to exercise Affirmer's Copyright and Related Rights in
+the Work (i) in all territories worldwide, (ii) for the maximum duration
+provided by applicable law or treaty (including future time extensions), (iii)
+in any current or future medium and for any number of copies, and (iv) for any
+purpose whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed effective as
+of the date CC0 was applied by Affirmer to the Work. Should any part of the
+License for any reason be judged legally invalid or ineffective under
+applicable law, such partial invalidity or ineffectiveness shall not
+invalidate the remainder of the License, and in such case Affirmer hereby
+affirms that he or she will not (i) exercise any of his or her remaining
+Copyright and Related Rights in the Work or (ii) assert any associated claims
+and causes of action with respect to the Work, in either case contrary to
+Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+
+ b. Affirmer offers the Work as-is and makes no representations or warranties
+ of any kind concerning the Work, express, implied, statutory or otherwise,
+ including without limitation warranties of title, merchantability, fitness
+ for a particular purpose, non infringement, or the absence of latent or
+ other defects, accuracy, or the present or absence of errors, whether or not
+ discoverable, all to the greatest extent permissible under applicable law.
+
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without limitation
+ any person's Copyright and Related Rights in the Work. Further, Affirmer
+ disclaims responsibility for obtaining any necessary consents, permissions
+ or other rights required for any use of the Work.
+
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to this
+ CC0 or use of the Work.
+
+For more information, please see
+<http://creativecommons.org/publicdomain/zero/1.0/>
diff --git a/samples/README.md b/samples/README.md
new file mode 100644
index 00000000000..95f2526cee0
--- /dev/null
+++ b/samples/README.md
@@ -0,0 +1,5 @@
+# **Samples** #
+
+Samples are taken by team members or contributors to make mechanical sounds of various machines available in emulation.
+
+Licensed under [CC0 1.0 Universal (CC0 1.0)](https://creativecommons.org/publicdomain/zero/1.0/) \ No newline at end of file
diff --git a/scripts/build/makelist.py b/scripts/build/makelist.py
index 329ff374520..a9b450474e2 100644
--- a/scripts/build/makelist.py
+++ b/scripts/build/makelist.py
@@ -9,6 +9,8 @@ import sys
drivlist = []
sourcelist = []
+filter_addlist = []
+filter_removelist = []
def parse_file(srcfile):
try:
@@ -57,9 +59,9 @@ def parse_file(srcfile):
if not all(((c >='a' and c<='z') or (c>='0' and c<='9') or c=='_') for c in drivname):
sys.stderr.write("%s:%d - Invalid character in driver \"%s\"\n" % (srcfile, linenum, drivname))
return 1
- else:
+ else:
if (curr_source == '') or (len(sourcelist)==0) or (curr_source in sourcelist):
- drivlist.append(drivname)
+ drivlist.append(drivname)
return 0
def parse_filter_file(srcfile):
@@ -102,10 +104,16 @@ def parse_filter_file(srcfile):
sys.stderr.write("Importing drivers from '%s'\n" % sourcename[1:])
parse_filter_file(sourcename[1:])
continue
+ if sourcename[0]=='+':
+ filter_addlist.append(sourcename[1:])
+ continue
+ if sourcename[0]=='-':
+ filter_removelist.append(sourcename[1:])
+ continue
if not all(((c >='a' and c<='z') or (c>='0' and c<='9') or c=='_' or c=='.' or c=='-') for c in sourcename):
sys.stderr.write("%s:%d - Invalid character in driver \"%s\"\n" % (srcfile, linenum, sourcename))
return 1
- else:
+ else:
sourcelist.append(sourcename)
return 0
@@ -128,6 +136,11 @@ if len(drivlist)==0 :
sys.stderr.write("No drivers found\n")
sys.exit(1)
+for x in filter_addlist:
+ drivlist.append(x)
+
+drivlist = [x for x in drivlist if (x not in filter_removelist)]
+
sys.stderr.write("%d driver(s) found\n" % len(drivlist))
# add a reference to the ___empty driver
diff --git a/scripts/genie.lua b/scripts/genie.lua
index ef5c945bb64..ad60bc79252 100644
--- a/scripts/genie.lua
+++ b/scripts/genie.lua
@@ -805,6 +805,10 @@ end
"-O".. _OPTIONS["OPTIMIZE"],
"-fno-strict-aliasing"
}
+configuration { "mingw-clang" }
+ buildoptions {
+ "-O1", -- without this executable crash often
+ }
-- add the error warning flag
if _OPTIONS["NOWERROR"]==nil then
@@ -1025,6 +1029,15 @@ if (_OPTIONS["PLATFORM"]=="arm") then
}
end
+if (_OPTIONS["PLATFORM"]=="arm64") then
+ buildoptions {
+ "-Wno-cast-align",
+ }
+ defines {
+ "PTR64=1",
+ }
+end
+
local subdir
if (_OPTIONS["target"] == _OPTIONS["subtarget"]) then
subdir = _OPTIONS["osd"] .. "/" .. _OPTIONS["target"]
diff --git a/scripts/src/3rdparty.lua b/scripts/src/3rdparty.lua
index 82fb09947de..62262cef282 100644
--- a/scripts/src/3rdparty.lua
+++ b/scripts/src/3rdparty.lua
@@ -59,7 +59,7 @@ project "zlib"
kind "StaticLib"
local version = str_to_version(_OPTIONS["gcc_version"])
- if _OPTIONS["gcc"]~=nil and (string.find(_OPTIONS["gcc"], "clang") or string.find(_OPTIONS["gcc"], "asmjs")) then
+ if _OPTIONS["gcc"]~=nil and ((string.find(_OPTIONS["gcc"], "clang") or string.find(_OPTIONS["gcc"], "asmjs") or string.find(_OPTIONS["gcc"], "android"))) then
configuration { "gmake" }
if (version >= 30700) then
buildoptions {
@@ -276,7 +276,7 @@ end
"-Wno-unused-function",
"-O0",
}
- if _OPTIONS["gcc"]~=nil and string.find(_OPTIONS["gcc"], "clang") then
+ if _OPTIONS["gcc"]~=nil and (string.find(_OPTIONS["gcc"], "clang") or string.find(_OPTIONS["gcc"], "android")) then
buildoptions {
"-Wno-enum-conversion",
}
@@ -511,64 +511,6 @@ project "lualibs"
}
--------------------------------------------------
--- luv lua library objects
---------------------------------------------------
-if _OPTIONS["USE_LIBUV"]=="1" then
-project "luv"
- uuid "d98ec5ca-da2a-4a50-88a2-52061ca53871"
- kind "StaticLib"
-
- if _OPTIONS["targetos"]=="windows" then
- defines {
- "_WIN32_WINNT=0x0600",
- }
- end
-
- configuration { "vs*" }
- buildoptions {
- "/wd4244", -- warning C4244: 'argument' : conversion from 'xxx' to 'xxx', possible loss of data
- }
-
- configuration { "gmake" }
- buildoptions_c {
- "-Wno-unused-function",
- "-Wno-strict-prototypes",
- "-Wno-unused-variable",
- "-Wno-undef",
- }
-
- configuration { "not android-*" }
- buildoptions_c {
- "-Wno-maybe-uninitialized",
- }
-
- configuration { "vs2015" }
- buildoptions {
- "/wd4701", -- warning C4701: potentially uninitialized local variable 'xxx' used
- "/wd4703", -- warning C4703: potentially uninitialized local pointer variable 'xxx' used
- }
-
- configuration { }
- defines {
- "LUA_COMPAT_ALL",
- }
-
- includedirs {
- MAME_DIR .. "3rdparty/lua/src",
- MAME_DIR .. "3rdparty/libuv/include",
- }
- if _OPTIONS["with-bundled-lua"] then
- includedirs {
- MAME_DIR .. "3rdparty/luv/deps/lua/src",
- }
- end
-
- files {
- MAME_DIR .. "3rdparty/luv/src/luv.c",
- MAME_DIR .. "3rdparty/luv/src/luv.h",
- }
-end
---------------------------------------------------
-- SQLite3 library objects
--------------------------------------------------
@@ -830,6 +772,7 @@ end
MAME_DIR .. "3rdparty/bgfx/src/shader_dxbc.cpp",
MAME_DIR .. "3rdparty/bgfx/src/shader_dx9bc.cpp",
MAME_DIR .. "3rdparty/bgfx/src/shader_spirv.cpp",
+ MAME_DIR .. "3rdparty/bgfx/src/topology.cpp",
MAME_DIR .. "3rdparty/bgfx/src/vertexdecl.cpp",
MAME_DIR .. "3rdparty/bgfx/examples/common/bgfx_utils.cpp",
MAME_DIR .. "3rdparty/bgfx/examples/common/bounds.cpp",
diff --git a/scripts/src/devices.lua b/scripts/src/devices.lua
index 15e53a17cfb..c4a6c9fe0ac 100644
--- a/scripts/src/devices.lua
+++ b/scripts/src/devices.lua
@@ -57,44 +57,7 @@ function devicesProject(_target, _subtarget)
dofile(path.join("src", "machine.lua"))
-if (_OPTIONS["SOURCES"] == nil) then
- project ("bus")
- uuid ("5d782c89-cf7e-4cfe-8f9f-0d4bfc16c91d")
- kind (LIBTYPE)
- targetsubdir(_target .."_" .. _subtarget)
- addprojectflags()
- precompiledheaders()
- options {
- "ArchiveSplit",
- }
-
- includedirs {
- MAME_DIR .. "src/osd",
- MAME_DIR .. "src/emu",
- MAME_DIR .. "src/devices",
- MAME_DIR .. "src/lib/netlist",
- MAME_DIR .. "src/lib",
- MAME_DIR .. "src/lib/util",
- MAME_DIR .. "3rdparty",
- MAME_DIR .. "src/mame", -- used for nes bus devices,some mess bus devices need this
- GEN_DIR .. "emu",
- GEN_DIR .. "emu/layout",
- }
- if _OPTIONS["with-bundled-expat"] then
- includedirs {
- MAME_DIR .. "3rdparty/expat/lib",
- }
- end
- if _OPTIONS["with-bundled-lua"] then
- includedirs {
- MAME_DIR .. "3rdparty/lua/src",
- }
- end
-
dofile(path.join("src", "bus.lua"))
-else
- dofile(path.join("src", "bus.lua"))
-end
if #disasm_files > 0 then
project ("dasm")
diff --git a/scripts/src/emu.lua b/scripts/src/emu.lua
index c834c314c77..e71103a26b6 100644
--- a/scripts/src/emu.lua
+++ b/scripts/src/emu.lua
@@ -40,7 +40,7 @@ if _OPTIONS["with-bundled-lua"] then
}
end
-if (_OPTIONS["targetos"] == "windows") then
+if (_OPTIONS["targetos"] == "windows" and _OPTIONS["osd"] ~= "osdmini") then
defines {
"UI_WINDOWS",
}
@@ -412,8 +412,17 @@ dependency {
}
+if (_OPTIONS["targetos"]=="asmjs") then
+ custombuildtask {
+ { MAME_DIR .. "src/emu/uismall.png" , GEN_DIR .. "emu/uismall.fh", { MAME_DIR.. "scripts/build/png2bdc.py", MAME_DIR .. "scripts/build/file2str.py" }, {"@echo Converting uismall.png...", PYTHON .. " $(1) $(<) temp.bdc", PYTHON .. " $(2) temp.bdc $(@) font_uismall UINT8" }},
+ }
+else
+ custombuildtask {
+ { MAME_DIR .. "scripts/font/NotoSans-Bold.bdc", GEN_DIR .. "emu/uismall.fh", { MAME_DIR .. "scripts/build/file2str.py" }, {"@echo Converting NotoSans-Bold.bdc...", PYTHON .. " $(1) $(<) $(@) font_uismall UINT8" }},
+ }
+end
+
custombuildtask {
- { MAME_DIR .. "scripts/font/NotoSans-Bold.bdc", GEN_DIR .. "emu/uismall.fh", { MAME_DIR .. "scripts/build/file2str.py" }, {"@echo Converting NotoSans-Bold.bdc...", PYTHON .. " $(1) $(<) $(@) font_uismall UINT8" }},
{ MAME_DIR .. "src/emu/ui/uicmd14.png" , GEN_DIR .. "emu/ui/uicmd14.fh", { MAME_DIR.. "scripts/build/png2bdc.py", MAME_DIR .. "scripts/build/file2str.py" }, {"@echo Converting uicmd14.png...", PYTHON .. " $(1) $(<) temp_cmd.bdc", PYTHON .. " $(2) temp_cmd.bdc $(@) font_uicmd14 UINT8" }},
layoutbuildtask("emu/layout", "dualhovu"),
diff --git a/scripts/src/machine.lua b/scripts/src/machine.lua
index fbc923b3073..0b38879b20c 100644
--- a/scripts/src/machine.lua
+++ b/scripts/src/machine.lua
@@ -2724,3 +2724,15 @@ if (MACHINES["PDC"]~=null) then
MAME_DIR .. "src/devices/machine/pdc.h",
}
end
+
+---------------------------------------------------
+--
+--@src/devices/machine/genpc.h,MACHINES["GENPC"] = true
+---------------------------------------------------
+
+if (MACHINES["GENPC"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/machine/genpc.cpp",
+ MAME_DIR .. "src/devices/machine/genpc.h",
+ }
+end
diff --git a/scripts/src/main.lua b/scripts/src/main.lua
index eafcc59f72e..c9c99a354c3 100644
--- a/scripts/src/main.lua
+++ b/scripts/src/main.lua
@@ -137,11 +137,6 @@ end
links {
"qtdbg_" .. _OPTIONS["osd"],
}
- if (_OPTIONS["SOURCES"] == nil) then
- links {
- "bus",
- }
- end
links {
"netlist",
"optional",
@@ -165,7 +160,6 @@ end
if _OPTIONS["USE_LIBUV"]=="1" then
links {
- "luv",
"uv",
"http-parser",
}
diff --git a/scripts/src/osd/modules.lua b/scripts/src/osd/modules.lua
index 54443d4f618..5cef56772a3 100644
--- a/scripts/src/osd/modules.lua
+++ b/scripts/src/osd/modules.lua
@@ -89,6 +89,7 @@ function osdmodulesbuild()
if _OPTIONS["targetos"]=="windows" then
includedirs {
MAME_DIR .. "3rdparty/winpcap/Include",
+ MAME_DIR .. "3rdparty/compat/mingw",
}
end
@@ -432,29 +433,6 @@ newoption {
}
newoption {
- trigger = "USE_XAUDIO2",
- description = "Use XAudio2 API for audio",
- allowed = {
- { "0", "Disable XAudio2" },
- { "1", "Enable XAudio2" },
- },
-}
-
-if _OPTIONS["USE_XAUDIO2"]=="1" then
- _OPTIONS["MODERN_WIN_API"] = "1",
- defines {
- "USE_XAUDIO2=1",
- },
- includedirs {
- MAME_DIR .. "3rdparty/win81sdk/Include/um",
- }
-else
- defines {
- "USE_XAUDIO2=0",
- }
-end
-
-newoption {
trigger = "USE_QTDEBUG",
description = "Use QT debugger",
allowed = {
diff --git a/scripts/src/osd/osdmini.lua b/scripts/src/osd/osdmini.lua
index cc794ae88df..52a28147c32 100644
--- a/scripts/src/osd/osdmini.lua
+++ b/scripts/src/osd/osdmini.lua
@@ -65,6 +65,7 @@ project ("osd_" .. _OPTIONS["osd"])
MAME_DIR .. "src/osd/modules/lib/osdobj_common.h",
MAME_DIR .. "src/osd/modules/font/font_sdl.cpp",
MAME_DIR .. "src/osd/modules/font/font_windows.cpp",
+ MAME_DIR .. "src/osd/modules/font/font_dwrite.cpp",
MAME_DIR .. "src/osd/modules/font/font_osx.cpp",
MAME_DIR .. "src/osd/modules/font/font_none.cpp",
MAME_DIR .. "src/osd/modules/netdev/taptun.cpp",
diff --git a/scripts/src/osd/windows.lua b/scripts/src/osd/windows.lua
index 877d1503915..80360ac2ecb 100644
--- a/scripts/src/osd/windows.lua
+++ b/scripts/src/osd/windows.lua
@@ -46,6 +46,7 @@ function maintargetosdoptions(_target,_subtarget)
"comctl32",
"comdlg32",
"psapi",
+ "ole32",
}
end
@@ -216,6 +217,7 @@ project ("ocore_" .. _OPTIONS["osd"])
dofile("windows_cfg.lua")
includedirs {
+ MAME_DIR .. "3rdparty",
MAME_DIR .. "src/emu",
MAME_DIR .. "src/osd",
MAME_DIR .. "src/lib",
diff --git a/scripts/src/tests.lua b/scripts/src/tests.lua
index d30cff64df2..baba88df28c 100644
--- a/scripts/src/tests.lua
+++ b/scripts/src/tests.lua
@@ -22,11 +22,6 @@ project "gtest"
"-Wno-unused-variable",
}
- configuration { "mingw-clang" }
- buildoptions {
- "-O0", -- crash of compiler when doing optimization
- }
-
configuration { "vs*" }
if _OPTIONS["vs"]=="intel-15" then
buildoptions {
diff --git a/scripts/src/tools.lua b/scripts/src/tools.lua
index 421f5cc76b5..af134d0e77a 100644
--- a/scripts/src/tools.lua
+++ b/scripts/src/tools.lua
@@ -48,6 +48,7 @@ includedirs {
files {
MAME_DIR .. "src/tools/romcmp.cpp",
+ MAME_DIR .. "src/emu/emucore.cpp",
}
configuration { "mingw*" or "vs*" }
@@ -108,6 +109,7 @@ includedirs {
files {
MAME_DIR .. "src/tools/chdman.cpp",
+ MAME_DIR .. "src/emu/emucore.cpp",
MAME_DIR .. "src/version.cpp",
}
@@ -157,6 +159,7 @@ includedirs {
files {
MAME_DIR .. "src/tools/jedutil.cpp",
+ MAME_DIR .. "src/emu/emucore.cpp",
}
configuration { "mingw*" or "vs*" }
@@ -280,6 +283,7 @@ includedirs {
files {
MAME_DIR .. "src/tools/ldresample.cpp",
+ MAME_DIR .. "src/emu/emucore.cpp",
}
configuration { "mingw*" or "vs*" }
@@ -340,6 +344,7 @@ includedirs {
files {
MAME_DIR .. "src/tools/ldverify.cpp",
+ MAME_DIR .. "src/emu/emucore.cpp",
}
configuration { "mingw*" or "vs*" }
@@ -388,6 +393,7 @@ includedirs {
files {
MAME_DIR .. "src/tools/regrep.cpp",
+ MAME_DIR .. "src/emu/emucore.cpp",
}
configuration { "mingw*" or "vs*" }
@@ -436,6 +442,7 @@ includedirs {
files {
MAME_DIR .. "src/tools/srcclean.cpp",
+ MAME_DIR .. "src/emu/emucore.cpp",
}
configuration { "mingw*" or "vs*" }
@@ -484,6 +491,7 @@ includedirs {
files {
MAME_DIR .. "src/tools/src2html.cpp",
+ MAME_DIR .. "src/emu/emucore.cpp",
}
configuration { "mingw*" or "vs*" }
@@ -543,6 +551,7 @@ includedirs {
files {
MAME_DIR .. "src/tools/split.cpp",
+ MAME_DIR .. "src/emu/emucore.cpp",
}
configuration { "mingw*" or "vs*" }
@@ -591,6 +600,7 @@ includedirs {
files {
MAME_DIR .. "src/tools/pngcmp.cpp",
+ MAME_DIR .. "src/emu/emucore.cpp",
}
configuration { "mingw*" or "vs*" }
@@ -652,6 +662,7 @@ includedirs {
files {
MAME_DIR .. "src/lib/netlist/prg/nltool.cpp",
+ MAME_DIR .. "src/emu/emucore.cpp",
}
configuration { "mingw*" or "vs*" }
@@ -690,7 +701,8 @@ includedirs {
}
files {
- MAME_DIR .. "src/lib/netlist/prg/nlwav.cpp",
+ MAME_DIR .. "src/lib/netlist/prg/nlwav.cpp",
+ MAME_DIR .. "src/emu/emucore.cpp",
}
configuration { "mingw*" or "vs*" }
@@ -752,6 +764,7 @@ includedirs {
files {
MAME_DIR .. "src/tools/castool.cpp",
+ MAME_DIR .. "src/emu/emucore.cpp",
}
configuration { "mingw*" or "vs*" }
@@ -814,6 +827,7 @@ includedirs {
files {
MAME_DIR .. "src/tools/floptool.cpp",
+ MAME_DIR .. "src/emu/emucore.cpp",
}
configuration { "mingw*" or "vs*" }
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index b84d17d69d5..17f8df2f760 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -563,6 +563,7 @@ MACHINES["STEPPERS"] = true
--MACHINES["DIABLO_HD"] = true
MACHINES["PCI9050"] = true
--MACHINES["TMS1024"] = true
+MACHINES["GENPC"] = true
--------------------------------------------------
-- specify available bus cores
@@ -619,7 +620,7 @@ BUSES["NEOGEO"] = true
--BUSES["ORICEXT"] = true
--BUSES["PCE"] = true
BUSES["PC_JOY"] = true
---BUSES["PC_KBD"] = true
+BUSES["PC_KBD"] = true
--BUSES["PET"] = true
--BUSES["PLUS4"] = true
--BUSES["PSX_CONTROLLER"] = true
@@ -2590,8 +2591,6 @@ files {
MAME_DIR .. "src/mame/includes/tceptor.h",
MAME_DIR .. "src/mame/video/tceptor.cpp",
MAME_DIR .. "src/mame/drivers/toypop.cpp",
- MAME_DIR .. "src/mame/includes/toypop.h",
- MAME_DIR .. "src/mame/video/toypop.cpp",
MAME_DIR .. "src/mame/drivers/turrett.cpp",
MAME_DIR .. "src/mame/includes/turrett.h",
MAME_DIR .. "src/mame/audio/turrett.cpp",
@@ -2823,11 +2822,7 @@ files {
MAME_DIR .. "src/mame/includes/battlex.h",
MAME_DIR .. "src/mame/video/battlex.cpp",
MAME_DIR .. "src/mame/drivers/carjmbre.cpp",
- MAME_DIR .. "src/mame/includes/carjmbre.h",
- MAME_DIR .. "src/mame/video/carjmbre.cpp",
MAME_DIR .. "src/mame/drivers/popper.cpp",
- MAME_DIR .. "src/mame/includes/popper.h",
- MAME_DIR .. "src/mame/video/popper.cpp",
MAME_DIR .. "src/mame/drivers/spaceg.cpp",
}
@@ -4293,9 +4288,6 @@ files {
MAME_DIR .. "src/mame/drivers/fireball.cpp",
MAME_DIR .. "src/mame/drivers/flipjack.cpp",
MAME_DIR .. "src/mame/drivers/flower.cpp",
- MAME_DIR .. "src/mame/includes/flower.h",
- MAME_DIR .. "src/mame/audio/flower.cpp",
- MAME_DIR .. "src/mame/video/flower.cpp",
MAME_DIR .. "src/mame/drivers/fortecar.cpp",
MAME_DIR .. "src/mame/drivers/fresh.cpp",
MAME_DIR .. "src/mame/drivers/freekick.cpp",
@@ -4481,8 +4473,6 @@ files {
MAME_DIR .. "src/mame/drivers/splus.cpp",
MAME_DIR .. "src/mame/drivers/spool99.cpp",
MAME_DIR .. "src/mame/drivers/sprcros2.cpp",
- MAME_DIR .. "src/mame/includes/sprcros2.h",
- MAME_DIR .. "src/mame/video/sprcros2.cpp",
MAME_DIR .. "src/mame/drivers/sshot.cpp",
MAME_DIR .. "src/mame/drivers/ssingles.cpp",
MAME_DIR .. "src/mame/drivers/sstrangr.cpp",
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index 6c0dd4b0894..829c82af577 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -571,6 +571,7 @@ MACHINES["DIABLO_HD"] = true
MACHINES["TMS1024"] = true
MACHINES["NSC810"] = true
MACHINES["VT82C496"] = true
+MACHINES["GENPC"] = true
--------------------------------------------------
-- specify available bus cores
@@ -1777,8 +1778,6 @@ files {
MAME_DIR .. "src/mame/drivers/mephisto.cpp",
MAME_DIR .. "src/mame/drivers/mmodular.cpp",
MAME_DIR .. "src/mame/drivers/stratos.cpp",
- MAME_DIR .. "src/mame/machine/mboard.cpp",
- MAME_DIR .. "src/mame/includes/mboard.h",
}
createMESSProjects(_target, _subtarget, "hitachi")
@@ -2172,10 +2171,10 @@ createMESSProjects(_target, _subtarget, "novag")
files {
MAME_DIR .. "src/mame/drivers/mk1.cpp",
MAME_DIR .. "src/mame/drivers/mk2.cpp",
+ MAME_DIR .. "src/mame/drivers/novag6502.cpp",
MAME_DIR .. "src/mame/drivers/ssystem3.cpp",
MAME_DIR .. "src/mame/includes/ssystem3.h",
MAME_DIR .. "src/mame/video/ssystem3.cpp",
- MAME_DIR .. "src/mame/drivers/supercon.cpp",
}
createMESSProjects(_target, _subtarget, "olivetti")
@@ -2257,8 +2256,6 @@ files {
MAME_DIR .. "src/mame/drivers/asst128.cpp",
MAME_DIR .. "src/mame/drivers/europc.cpp",
MAME_DIR .. "src/mame/drivers/genpc.cpp",
- MAME_DIR .. "src/mame/includes/genpc.h",
- MAME_DIR .. "src/mame/machine/genpc.cpp",
MAME_DIR .. "src/mame/drivers/ibmpc.cpp",
MAME_DIR .. "src/mame/drivers/ibmpcjr.cpp",
MAME_DIR .. "src/mame/drivers/pc.cpp",
@@ -2605,8 +2602,6 @@ files {
createMESSProjects(_target, _subtarget, "svi")
files {
MAME_DIR .. "src/mame/drivers/svi318.cpp",
- MAME_DIR .. "src/mame/includes/svi318.h",
- MAME_DIR .. "src/mame/machine/svi318.cpp",
}
createMESSProjects(_target, _subtarget, "svision")
@@ -2996,9 +2991,6 @@ files {
MAME_DIR .. "src/mame/includes/mc1502.h",
MAME_DIR .. "src/mame/drivers/poisk1.cpp",
MAME_DIR .. "src/mame/machine/kb_poisk1.h",
- MAME_DIR .. "src/mame/includes/poisk1.h",
- MAME_DIR .. "src/mame/video/poisk1.cpp",
- MAME_DIR .. "src/mame/video/poisk1.h",
}
createMESSProjects(_target, _subtarget, "yamaha")
diff --git a/scripts/toolchain.lua b/scripts/toolchain.lua
index 5cca681cdff..0181f14616f 100644
--- a/scripts/toolchain.lua
+++ b/scripts/toolchain.lua
@@ -107,8 +107,8 @@ function toolchain(_buildDir, _subDir)
print("Set ANDROID_NDK_ARM and ANDROID_NDK_ROOT envrionment variables.")
end
- premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm-3.6/prebuilt/windows-x86_64/bin/clang.exe"
- premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm-3.6/prebuilt/windows-x86_64/bin/clang++.exe"
+ premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe"
+ premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe"
premake.gcc.ar = "$(ANDROID_NDK_ARM)/bin/arm-linux-androideabi-ar"
premake.gcc.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-arm")
@@ -120,8 +120,8 @@ function toolchain(_buildDir, _subDir)
print("Set ANDROID_NDK_ARM64 and ANDROID_NDK_ROOT envrionment variables.")
end
- premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm-3.6/prebuilt/windows-x86_64/bin/clang.exe"
- premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm-3.6/prebuilt/windows-x86_64/bin/clang++.exe"
+ premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe"
+ premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe"
premake.gcc.ar = "$(ANDROID_NDK_ARM64)/bin/aarch64-linux-android-ar.exe"
premake.gcc.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-arm64")
@@ -133,8 +133,8 @@ function toolchain(_buildDir, _subDir)
print("Set ANDROID_NDK_MIPS and ANDROID_NDK_ROOT envrionment variables.")
end
- premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm-3.6/prebuilt/windows-x86_64/bin/clang.exe"
- premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm-3.6/prebuilt/windows-x86_64/bin/clang++.exe"
+ premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe"
+ premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe"
premake.gcc.ar = "$(ANDROID_NDK_MIPS)/bin/mipsel-linux-android-ar"
premake.gcc.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-mips")
@@ -146,8 +146,8 @@ function toolchain(_buildDir, _subDir)
print("Set ANDROID_NDK_MIPS64 and ANDROID_NDK_ROOT envrionment variables.")
end
- premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm-3.6/prebuilt/windows-x86_64/bin/clang.exe"
- premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm-3.6/prebuilt/windows-x86_64/bin/clang++.exe"
+ premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe"
+ premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe"
premake.gcc.ar = "$(ANDROID_NDK_MIPS64)/bin/mips64el-linux-android-ar.exe"
premake.gcc.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-mips64")
@@ -159,8 +159,8 @@ function toolchain(_buildDir, _subDir)
print("Set ANDROID_NDK_X86 and ANDROID_NDK_ROOT envrionment variables.")
end
- premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm-3.6/prebuilt/windows-x86_64/bin/clang.exe"
- premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm-3.6/prebuilt/windows-x86_64/bin/clang++.exe"
+ premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe"
+ premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe"
premake.gcc.ar = "$(ANDROID_NDK_X86)/bin/i686-linux-android-ar"
premake.gcc.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-x86")
@@ -172,8 +172,8 @@ function toolchain(_buildDir, _subDir)
print("Set ANDROID_NDK_X64 and ANDROID_NDK_ROOT envrionment variables.")
end
- premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm-3.6/prebuilt/windows-x86_64/bin/clang.exe"
- premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm-3.6/prebuilt/windows-x86_64/bin/clang++.exe"
+ premake.gcc.cc = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe"
+ premake.gcc.cxx = "$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe"
premake.gcc.ar = "$(ANDROID_NDK_X64)/bin/x86_64-linux-android-ar.exe"
premake.gcc.llvm = true
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-x64")
@@ -685,6 +685,8 @@ function toolchain(_buildDir, _subDir)
"-Wunused-value",
"-Wundef",
"-Wno-cast-align",
+ "-Wno-unknown-attributes",
+ "-Wno-macro-redefined",
}
linkoptions {
"-no-canonical-prefixes",
diff --git a/shaders/README.md b/shaders/README.md
new file mode 100644
index 00000000000..74a8c7d7834
--- /dev/null
+++ b/shaders/README.md
@@ -0,0 +1,3 @@
+# **Shares** #
+
+This folder is containing precompiled shaders to be used with BGFX, source files are available under their own license \ No newline at end of file
diff --git a/src/devices/bus/a7800/a78_slot.cpp b/src/devices/bus/a7800/a78_slot.cpp
index 0509753a1c3..53541560fa4 100644
--- a/src/devices/bus/a7800/a78_slot.cpp
+++ b/src/devices/bus/a7800/a78_slot.cpp
@@ -537,7 +537,7 @@ std::string a78_cart_slot_device::get_default_card_software()
int type = A78_TYPE0, mapper;
// Load and check the header
- core_fread(m_file, &head[0], 128);
+ m_file->read(&head[0], 128);
// let's try to auto-fix some common errors in the header
mapper = validate_header((head[53] << 8) | head[54], FALSE);
@@ -558,7 +558,7 @@ std::string a78_cart_slot_device::get_default_card_software()
break;
case 0x0022:
case 0x0026:
- if (core_fsize(m_file) > 0x40000)
+ if (m_file->size() > 0x40000)
type = A78_MEGACART;
else
type = A78_VERSABOARD;
diff --git a/src/devices/bus/a800/a800_slot.cpp b/src/devices/bus/a800/a800_slot.cpp
index b2e46a421da..8f0f416ab0f 100644
--- a/src/devices/bus/a800/a800_slot.cpp
+++ b/src/devices/bus/a800/a800_slot.cpp
@@ -412,13 +412,13 @@ std::string a800_cart_slot_device::get_default_card_software()
{
const char *slot_string;
dynamic_buffer head(0x10);
- UINT32 len = core_fsize(m_file);
+ UINT32 len = m_file->size();
int type = A800_8K;
// check whether there is an header, to identify the cart type
if ((len % 0x1000) == 0x10)
{
- core_fread(m_file, &head[0], 0x10);
+ m_file->read(&head[0], 0x10);
type = identify_cart_type(&head[0]);
}
else // otherwise try to guess based on size
@@ -449,13 +449,13 @@ std::string a5200_cart_slot_device::get_default_card_software()
{
const char *slot_string;
dynamic_buffer head(0x10);
- UINT32 len = core_fsize(m_file);
+ UINT32 len = m_file->size();
int type = A5200_8K;
// check whether there is an header, to identify the cart type
if ((len % 0x1000) == 0x10)
{
- core_fread(m_file, &head[0], 0x10);
+ m_file->read(&head[0], 0x10);
type = identify_cart_type(&head[0]);
std::string info;
@@ -482,13 +482,13 @@ std::string xegs_cart_slot_device::get_default_card_software()
{
const char *slot_string;
dynamic_buffer head(0x10);
- UINT32 len = core_fsize(m_file);
+ UINT32 len = m_file->size();
int type = A800_8K;
// check whether there is an header, to identify the cart type
if ((len % 0x1000) == 0x10)
{
- core_fread(m_file, &head[0], 0x10);
+ m_file->read(&head[0], 0x10);
type = identify_cart_type(&head[0]);
}
if (type != A800_XEGS)
diff --git a/src/devices/bus/apf/slot.cpp b/src/devices/bus/apf/slot.cpp
index eb2e17d9f80..af872826ce3 100644
--- a/src/devices/bus/apf/slot.cpp
+++ b/src/devices/bus/apf/slot.cpp
@@ -226,7 +226,7 @@ std::string apf_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 size = core_fsize(m_file);
+ UINT32 size = m_file->size();
int type = APF_STD;
// attempt to identify Space Destroyer, which needs 1K of additional RAM
diff --git a/src/devices/bus/astrocde/slot.cpp b/src/devices/bus/astrocde/slot.cpp
index 8ae7bbe8c15..2cab9c3c285 100644
--- a/src/devices/bus/astrocde/slot.cpp
+++ b/src/devices/bus/astrocde/slot.cpp
@@ -203,7 +203,7 @@ std::string astrocade_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 size = core_fsize(m_file);
+ UINT32 size = m_file->size();
int type = ASTROCADE_STD;
if (size == 0x40000)
diff --git a/src/devices/bus/c64/exp.cpp b/src/devices/bus/c64/exp.cpp
index 47e2a20cc14..31263c5f927 100644
--- a/src/devices/bus/c64/exp.cpp
+++ b/src/devices/bus/c64/exp.cpp
@@ -153,7 +153,7 @@ bool c64_expansion_slot_device::call_load()
int exrom = 1;
int game = 1;
- if (cbm_crt_read_header(m_file, &roml_size, &romh_size, &exrom, &game))
+ if (cbm_crt_read_header(*m_file, &roml_size, &romh_size, &exrom, &game))
{
UINT8 *roml = nullptr;
UINT8 *romh = nullptr;
@@ -164,7 +164,7 @@ bool c64_expansion_slot_device::call_load()
if (roml_size) roml = m_card->m_roml;
if (romh_size) romh = m_card->m_roml;
- cbm_crt_read_data(m_file, roml, romh);
+ cbm_crt_read_data(*m_file, roml, romh);
}
m_card->m_exrom = exrom;
@@ -222,7 +222,7 @@ std::string c64_expansion_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
if (!core_stricmp(filetype(), "crt"))
- return cbm_crt_get_card(m_file);
+ return cbm_crt_get_card(*m_file);
clear();
}
diff --git a/src/devices/bus/c64/xl80.cpp b/src/devices/bus/c64/xl80.cpp
index c1f7fe0f1dd..5f4a1eaa285 100644
--- a/src/devices/bus/c64/xl80.cpp
+++ b/src/devices/bus/c64/xl80.cpp
@@ -122,14 +122,14 @@ GFXDECODE_END
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( c64_xl80 )
- MCFG_SCREEN_ADD(MC6845_SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(MC6845_SCREEN_TAG, RASTER, rgb_t::white)
MCFG_SCREEN_UPDATE_DEVICE(HD46505SP_TAG, h46505_device, screen_update)
MCFG_SCREEN_SIZE(80*8, 24*8)
MCFG_SCREEN_VISIBLE_AREA(0, 80*8-1, 0, 24*8-1)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", c64_xl80)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_MC6845_ADD(HD46505SP_TAG, H46505, MC6845_SCREEN_TAG, XTAL_14_31818MHz / 8)
MCFG_MC6845_SHOW_BORDER_AREA(true)
diff --git a/src/devices/bus/cbm2/hrg.cpp b/src/devices/bus/cbm2/hrg.cpp
index bb0e38a22cb..6bc88abdadb 100644
--- a/src/devices/bus/cbm2/hrg.cpp
+++ b/src/devices/bus/cbm2/hrg.cpp
@@ -85,12 +85,12 @@ ADDRESS_MAP_END
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( cbm2_hrg_a )
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DEVICE(EF9365_TAG, ef9365_device, screen_update)
MCFG_SCREEN_SIZE(512, 512)
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 512-1)
MCFG_SCREEN_REFRESH_RATE(25)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD(EF9365_TAG, EF9365, 1750000)
MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
@@ -106,12 +106,12 @@ MACHINE_CONFIG_END
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( cbm2_hrg_b )
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DEVICE(EF9366_TAG, ef9365_device, screen_update)
MCFG_SCREEN_SIZE(512, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD(EF9366_TAG, EF9365, 1750000)
MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
diff --git a/src/devices/bus/chanf/slot.cpp b/src/devices/bus/chanf/slot.cpp
index 72045151cca..ea5b00b5348 100644
--- a/src/devices/bus/chanf/slot.cpp
+++ b/src/devices/bus/chanf/slot.cpp
@@ -222,7 +222,7 @@ std::string channelf_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 len = core_fsize(m_file);
+ UINT32 len = m_file->size();
int type;
if (len == 0x40000)
diff --git a/src/devices/bus/coleco/exp.cpp b/src/devices/bus/coleco/exp.cpp
index 05a53b584a5..53953f82859 100644
--- a/src/devices/bus/coleco/exp.cpp
+++ b/src/devices/bus/coleco/exp.cpp
@@ -116,7 +116,7 @@ std::string colecovision_cartridge_slot_device::get_default_card_software()
{
if (open_image_file(mconfig().options()))
{
- UINT32 length = core_fsize(m_file);
+ UINT32 length = m_file->size();
if (length == 0x100000 || length == 0x200000)
return software_get_default_slot("xin1");
}
diff --git a/src/devices/bus/comx35/clm.cpp b/src/devices/bus/comx35/clm.cpp
index b9cc57b836f..15aa7f88295 100644
--- a/src/devices/bus/comx35/clm.cpp
+++ b/src/devices/bus/comx35/clm.cpp
@@ -135,7 +135,7 @@ GFXDECODE_END
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( comx_clm )
- MCFG_SCREEN_ADD(MC6845_SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(MC6845_SCREEN_TAG, RASTER, rgb_t::white)
MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update)
MCFG_SCREEN_SIZE(80*8, 24*8)
MCFG_SCREEN_VISIBLE_AREA(0, 80*8-1, 0, 24*8-1)
@@ -143,7 +143,7 @@ static MACHINE_CONFIG_FRAGMENT( comx_clm )
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", comx_clm)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_MC6845_ADD(MC6845_TAG, MC6845, MC6845_SCREEN_TAG, XTAL_14_31818MHz/7)
MCFG_MC6845_SHOW_BORDER_AREA(true)
diff --git a/src/devices/bus/crvision/slot.cpp b/src/devices/bus/crvision/slot.cpp
index 74c9eb28645..22af6ced64c 100644
--- a/src/devices/bus/crvision/slot.cpp
+++ b/src/devices/bus/crvision/slot.cpp
@@ -234,7 +234,7 @@ std::string crvision_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 size = core_fsize(m_file);
+ UINT32 size = m_file->size();
int type = CRV_4K;
switch (size)
diff --git a/src/devices/bus/ecbbus/grip.cpp b/src/devices/bus/ecbbus/grip.cpp
index 75ba3961754..ca0cd2a579a 100644
--- a/src/devices/bus/ecbbus/grip.cpp
+++ b/src/devices/bus/ecbbus/grip.cpp
@@ -459,14 +459,14 @@ static MACHINE_CONFIG_FRAGMENT( grip )
MCFG_CPU_IO_MAP(grip_io)
// video hardware
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::white)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update)
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
// sound hardware
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/devices/bus/gameboy/gb_slot.cpp b/src/devices/bus/gameboy/gb_slot.cpp
index 55555a8d4b2..47236928fb7 100644
--- a/src/devices/bus/gameboy/gb_slot.cpp
+++ b/src/devices/bus/gameboy/gb_slot.cpp
@@ -605,11 +605,11 @@ std::string base_gb_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 len = core_fsize(m_file), offset = 0;
+ UINT32 len = m_file->size(), offset = 0;
dynamic_buffer rom(len);
int type;
- core_fread(m_file, &rom[0], len);
+ m_file->read(&rom[0], len);
if ((len % 0x4000) == 512)
offset = 512;
diff --git a/src/devices/bus/gba/gba_slot.cpp b/src/devices/bus/gba/gba_slot.cpp
index 217f3f9e954..10c5d45a0a8 100644
--- a/src/devices/bus/gba/gba_slot.cpp
+++ b/src/devices/bus/gba/gba_slot.cpp
@@ -405,11 +405,11 @@ std::string gba_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 len = core_fsize(m_file);
+ UINT32 len = m_file->size();
dynamic_buffer rom(len);
int type;
- core_fread(m_file, &rom[0], len);
+ m_file->read(&rom[0], len);
type = get_cart_type(&rom[0], len);
slot_string = gba_get_slot(type);
diff --git a/src/devices/bus/intv/slot.cpp b/src/devices/bus/intv/slot.cpp
index 87f36e14bac..d502016fe76 100644
--- a/src/devices/bus/intv/slot.cpp
+++ b/src/devices/bus/intv/slot.cpp
@@ -464,11 +464,11 @@ std::string intv_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 len = core_fsize(m_file);
+ UINT32 len = m_file->size();
dynamic_buffer rom(len);
int type = INTV_STD;
- core_fread(m_file, &rom[0], len);
+ m_file->read(&rom[0], len);
if (rom[0] == 0xa8 && (rom[1] == (rom[2] ^ 0xff)))
{
diff --git a/src/devices/bus/isa/isa_cards.cpp b/src/devices/bus/isa/isa_cards.cpp
index a9ab1b9dc8f..e2702a5598f 100644
--- a/src/devices/bus/isa/isa_cards.cpp
+++ b/src/devices/bus/isa/isa_cards.cpp
@@ -19,6 +19,7 @@ SLOT_INTERFACE_START( pc_isa8_cards )
SLOT_INTERFACE("aga_pc200", ISA8_AGA_PC200)
SLOT_INTERFACE("ega", ISA8_EGA)
SLOT_INTERFACE("pgc", ISA8_PGC)
+ SLOT_INTERFACE("vga", ISA8_VGA)
SLOT_INTERFACE("svga_et4k", ISA8_SVGA_ET4K)
SLOT_INTERFACE("num9rev",ISA8_NUM_9_REV)
SLOT_INTERFACE("com", ISA8_COM)
@@ -40,6 +41,7 @@ SLOT_INTERFACE_START( pc_isa8_cards )
SLOT_INTERFACE("sblaster1_0", ISA8_SOUND_BLASTER_1_0)
SLOT_INTERFACE("sblaster1_5", ISA8_SOUND_BLASTER_1_5)
SLOT_INTERFACE("stereo_fx", ISA8_STEREO_FX)
+ SLOT_INTERFACE("ssi2001", ISA8_SSI2001)
SLOT_INTERFACE("mpu401", ISA8_MPU401)
SLOT_INTERFACE("ne1000", NE1000)
SLOT_INTERFACE("3c503", EL2_3C503)
diff --git a/src/devices/bus/isa/omti8621.cpp b/src/devices/bus/isa/omti8621.cpp
index c3eb61bf0e8..15255f1f3e5 100644
--- a/src/devices/bus/isa/omti8621.cpp
+++ b/src/devices/bus/isa/omti8621.cpp
@@ -1370,7 +1370,7 @@ void omti_disk_image_device::device_start()
{
m_image = this;
- if (m_image->image_core_file() == nullptr)
+ if (!m_image->is_open())
{
LOG1(("device_start_omti_disk: no disk"));
}
diff --git a/src/devices/bus/isa/sc499.cpp b/src/devices/bus/isa/sc499.cpp
index 88a0272a9c1..5e044759603 100644
--- a/src/devices/bus/isa/sc499.cpp
+++ b/src/devices/bus/isa/sc499.cpp
@@ -344,7 +344,7 @@ void sc499_device::device_start()
m_installed = false;
- if (m_image->image_core_file() == nullptr)
+ if (!m_image->is_open())
{
LOG2(("start sc499: no cartridge tape"));
}
diff --git a/src/devices/bus/megadrive/md_slot.cpp b/src/devices/bus/megadrive/md_slot.cpp
index a2674838914..f44e0597cd4 100644
--- a/src/devices/bus/megadrive/md_slot.cpp
+++ b/src/devices/bus/megadrive/md_slot.cpp
@@ -905,11 +905,11 @@ std::string base_md_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 len = core_fsize(m_file), offset = 0;
+ UINT32 len = m_file->size(), offset = 0;
dynamic_buffer rom(len);
int type;
- core_fread(m_file, &rom[0], len);
+ m_file->read(&rom[0], len);
if (genesis_is_SMD(&rom[0x200], len - 0x200))
offset = 0x200;
diff --git a/src/devices/bus/msx_slot/cartridge.cpp b/src/devices/bus/msx_slot/cartridge.cpp
index c24df3bf1fb..ae806337359 100644
--- a/src/devices/bus/msx_slot/cartridge.cpp
+++ b/src/devices/bus/msx_slot/cartridge.cpp
@@ -283,7 +283,7 @@ std::string msx_slot_cartridge_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string = "nomapper";
- UINT32 length = core_fsize(m_file);
+ UINT32 length = m_file->size();
dynamic_buffer rom(length);
int type = NOMAPPER;
@@ -328,7 +328,7 @@ std::string msx_slot_cartridge_device::get_default_card_software()
if (type == NOMAPPER)
{
// Not identified through hashfile, try automatic detection
- core_fread(m_file, &rom[0], length);
+ m_file->read(&rom[0], length);
type = get_cart_type(&rom[0], length);
}
diff --git a/src/devices/bus/nes/aladdin.cpp b/src/devices/bus/nes/aladdin.cpp
index bad863b9255..bded198c5a7 100644
--- a/src/devices/bus/nes/aladdin.cpp
+++ b/src/devices/bus/nes/aladdin.cpp
@@ -147,11 +147,11 @@ std::string nes_aladdin_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string = "algn";
- UINT32 len = core_fsize(m_file);
+ UINT32 len = m_file->size();
dynamic_buffer rom(len);
UINT8 mapper;
- core_fread(m_file, &rom[0], len);
+ m_file->read(&rom[0], len);
mapper = (rom[6] & 0xf0) >> 4;
mapper |= rom[7] & 0xf0;
diff --git a/src/devices/bus/nes/nes_slot.cpp b/src/devices/bus/nes/nes_slot.cpp
index 05adca0f9ae..5eaf22852c9 100644
--- a/src/devices/bus/nes/nes_slot.cpp
+++ b/src/devices/bus/nes/nes_slot.cpp
@@ -917,10 +917,10 @@ std::string nes_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string = "nrom";
- UINT32 len = core_fsize(m_file);
+ UINT32 len = m_file->size();
dynamic_buffer rom(len);
- core_fread(m_file, &rom[0], len);
+ m_file->read(&rom[0], len);
if ((rom[0] == 'N') && (rom[1] == 'E') && (rom[2] == 'S'))
slot_string = get_default_card_ines(&rom[0], len);
diff --git a/src/devices/bus/odyssey2/slot.cpp b/src/devices/bus/odyssey2/slot.cpp
index 0a6e35028b9..3d0f8714288 100644
--- a/src/devices/bus/odyssey2/slot.cpp
+++ b/src/devices/bus/odyssey2/slot.cpp
@@ -214,7 +214,7 @@ std::string o2_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 size = core_fsize(m_file);
+ UINT32 size = m_file->size();
int type = O2_STD;
if (size == 12288)
diff --git a/src/devices/bus/pce/pce_slot.cpp b/src/devices/bus/pce/pce_slot.cpp
index 4fffa5172fc..6a1e5859f1f 100644
--- a/src/devices/bus/pce/pce_slot.cpp
+++ b/src/devices/bus/pce/pce_slot.cpp
@@ -344,11 +344,11 @@ std::string pce_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 len = core_fsize(m_file);
+ UINT32 len = m_file->size();
dynamic_buffer rom(len);
int type;
- core_fread(m_file, &rom[0], len);
+ m_file->read(&rom[0], len);
type = get_cart_type(&rom[0], len);
slot_string = pce_get_slot(type);
diff --git a/src/devices/bus/pet/hsg.cpp b/src/devices/bus/pet/hsg.cpp
index d0bd43d0020..e22f4041a73 100644
--- a/src/devices/bus/pet/hsg.cpp
+++ b/src/devices/bus/pet/hsg.cpp
@@ -87,12 +87,12 @@ ADDRESS_MAP_END
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( cbm8000_hsg_a )
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DEVICE(EF9365_TAG, ef9365_device, screen_update)
MCFG_SCREEN_SIZE(512, 512)
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 512-1)
MCFG_SCREEN_REFRESH_RATE(25)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD(EF9365_TAG, EF9365, 1750000)
MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
@@ -108,12 +108,12 @@ MACHINE_CONFIG_END
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( cbm8000_hsg_b )
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DEVICE(EF9366_TAG, ef9365_device, screen_update)
MCFG_SCREEN_SIZE(512, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD(EF9366_TAG, EF9365, 1750000)
MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
diff --git a/src/devices/bus/scv/slot.cpp b/src/devices/bus/scv/slot.cpp
index 15495afe918..daf31a27885 100644
--- a/src/devices/bus/scv/slot.cpp
+++ b/src/devices/bus/scv/slot.cpp
@@ -264,11 +264,11 @@ std::string scv_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 len = core_fsize(m_file);
+ UINT32 len = m_file->size();
dynamic_buffer rom(len);
int type;
- core_fread(m_file, &rom[0], len);
+ m_file->read(&rom[0], len);
type = get_cart_type(&rom[0], len);
slot_string = scv_get_slot(type);
diff --git a/src/devices/bus/sega8/sega8_slot.cpp b/src/devices/bus/sega8/sega8_slot.cpp
index df3c59adc05..a3ebf09c463 100644
--- a/src/devices/bus/sega8/sega8_slot.cpp
+++ b/src/devices/bus/sega8/sega8_slot.cpp
@@ -608,11 +608,11 @@ std::string sega8_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 len = core_fsize(m_file), offset = 0;
+ UINT32 len = m_file->size(), offset = 0;
dynamic_buffer rom(len);
int type;
- core_fread(m_file, &rom[0], len);
+ m_file->read(&rom[0], len);
if ((len % 0x4000) == 512)
offset = 512;
diff --git a/src/devices/bus/snes/snes_slot.cpp b/src/devices/bus/snes/snes_slot.cpp
index 65c2fffdb4d..38260a06e84 100644
--- a/src/devices/bus/snes/snes_slot.cpp
+++ b/src/devices/bus/snes/snes_slot.cpp
@@ -1007,11 +1007,11 @@ std::string base_sns_cart_slot_device::get_default_card_software()
{
const char *slot_string;
UINT32 offset;
- UINT32 len = core_fsize(m_file);
+ UINT32 len = m_file->size();
dynamic_buffer rom(len);
int type = 0, addon = 0;
- core_fread(m_file, &rom[0], len);
+ m_file->read(&rom[0], len);
offset = snes_skip_header(&rom[0], len);
diff --git a/src/devices/bus/vc4000/slot.cpp b/src/devices/bus/vc4000/slot.cpp
index 0b67a264c34..ba75cd67267 100644
--- a/src/devices/bus/vc4000/slot.cpp
+++ b/src/devices/bus/vc4000/slot.cpp
@@ -240,7 +240,7 @@ std::string vc4000_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 size = core_fsize(m_file);
+ UINT32 size = m_file->size();
int type = VC4000_STD;
// attempt to identify the non-standard types
diff --git a/src/devices/bus/vcs/vcs_slot.cpp b/src/devices/bus/vcs/vcs_slot.cpp
index b946c8051e7..b8b25b864d4 100755..100644
--- a/src/devices/bus/vcs/vcs_slot.cpp
+++ b/src/devices/bus/vcs/vcs_slot.cpp
@@ -786,11 +786,11 @@ std::string vcs_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 len = core_fsize(m_file);
+ UINT32 len = m_file->size();
dynamic_buffer rom(len);
int type;
- core_fread(m_file, &rom[0], len);
+ m_file->read(&rom[0], len);
type = identify_cart_type(&rom[0], len);
slot_string = vcs_get_slot(type);
diff --git a/src/devices/bus/vectrex/slot.cpp b/src/devices/bus/vectrex/slot.cpp
index 1a9bbed7d29..14e531b8cd2 100644
--- a/src/devices/bus/vectrex/slot.cpp
+++ b/src/devices/bus/vectrex/slot.cpp
@@ -222,11 +222,11 @@ std::string vectrex_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 size = core_fsize(m_file);
+ UINT32 size = m_file->size();
dynamic_buffer rom(size);
int type = VECTREX_STD;
- core_fread(m_file, &rom[0], size);
+ m_file->read(&rom[0], size);
if (!memcmp(&rom[0x06], "SRAM", 4))
type = VECTREX_SRAM;
diff --git a/src/devices/bus/vic10/exp.cpp b/src/devices/bus/vic10/exp.cpp
index 1aa6f2e6363..76c55ff7d79 100644
--- a/src/devices/bus/vic10/exp.cpp
+++ b/src/devices/bus/vic10/exp.cpp
@@ -139,7 +139,7 @@ bool vic10_expansion_slot_device::call_load()
int exrom = 1;
int game = 1;
- if (cbm_crt_read_header(m_file, &roml_size, &romh_size, &exrom, &game))
+ if (cbm_crt_read_header(*m_file, &roml_size, &romh_size, &exrom, &game))
{
UINT8 *roml = nullptr;
UINT8 *romh = nullptr;
@@ -150,7 +150,7 @@ bool vic10_expansion_slot_device::call_load()
if (roml_size) roml = m_card->m_lorom;
if (romh_size) romh = m_card->m_lorom;
- cbm_crt_read_data(m_file, roml, romh);
+ cbm_crt_read_data(*m_file, roml, romh);
}
}
}
@@ -187,7 +187,7 @@ std::string vic10_expansion_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
if (!core_stricmp(filetype(), "crt"))
- return cbm_crt_get_card(m_file);
+ return cbm_crt_get_card(*m_file);
clear();
}
diff --git a/src/devices/bus/wangpc/tig.cpp b/src/devices/bus/wangpc/tig.cpp
index efadfc332dc..519758ba12a 100644
--- a/src/devices/bus/wangpc/tig.cpp
+++ b/src/devices/bus/wangpc/tig.cpp
@@ -110,14 +110,14 @@ UPD7220_DISPLAY_PIXELS_MEMBER( wangpc_tig_device::hgdc_display_pixels )
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( wangpc_tig )
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, wangpc_tig_device, screen_update)
MCFG_SCREEN_SIZE(80*10, 25*12)
MCFG_SCREEN_VISIBLE_AREA(0, 80*10-1, 0, 25*12-1)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette")
+ MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
MCFG_DEVICE_ADD(UPD7720_0_TAG, UPD7220, XTAL_52_832MHz/28)
MCFG_DEVICE_ADDRESS_MAP(AS_0, upd7220_0_map)
diff --git a/src/devices/bus/wswan/slot.cpp b/src/devices/bus/wswan/slot.cpp
index b5b95851f00..256487bc8e1 100644
--- a/src/devices/bus/wswan/slot.cpp
+++ b/src/devices/bus/wswan/slot.cpp
@@ -311,12 +311,12 @@ std::string ws_cart_slot_device::get_default_card_software()
if (open_image_file(mconfig().options()))
{
const char *slot_string;
- UINT32 size = core_fsize(m_file);
+ UINT32 size = m_file->size();
dynamic_buffer rom(size);
int type;
UINT32 nvram;
- core_fread(m_file, &rom[0], size);
+ m_file->read(&rom[0], size);
// nvram size is not really used here, but we set it up nevertheless
type = get_cart_type(&rom[0], size, nvram);
diff --git a/src/devices/cpu/arcompact/arcompact_make.py b/src/devices/cpu/arcompact/arcompact_make.py
index 080fd72b426..30aba810a99 100644
--- a/src/devices/cpu/arcompact/arcompact_make.py
+++ b/src/devices/cpu/arcompact/arcompact_make.py
@@ -1,5 +1,6 @@
#!/usr/bin/python
-
+# license:BSD-3-Clause
+# copyright-holders:David Haywood
from __future__ import print_function
import sys
diff --git a/src/devices/cpu/es5510/es5510.cpp b/src/devices/cpu/es5510/es5510.cpp
index 17a73204f09..28be6e56f8b 100644
--- a/src/devices/cpu/es5510/es5510.cpp
+++ b/src/devices/cpu/es5510/es5510.cpp
@@ -422,12 +422,12 @@ WRITE8_MEMBER(es5510_device::host_w)
break;
/* 0x03 to 0x08 INSTR Register */
- case 0x03: instr_latch = ((instr_latch&U64(0x00ffffffffff)) | ((INT64)data&0xff)<<40); LOG(("ES5510: Host Write INSTR latch[5] = %02x -> %012" I64FMT "x\n", data, instr_latch)); break;
- case 0x04: instr_latch = ((instr_latch&U64(0xff00ffffffff)) | ((INT64)data&0xff)<<32); LOG(("ES5510: Host Write INSTR latch[4] = %02x -> %012" I64FMT "x\n", data, instr_latch)); break;
- case 0x05: instr_latch = ((instr_latch&U64(0xffff00ffffff)) | ((INT64)data&0xff)<<24); LOG(("ES5510: Host Write INSTR latch[3] = %02x -> %012" I64FMT "x\n", data, instr_latch)); break;
- case 0x06: instr_latch = ((instr_latch&U64(0xffffff00ffff)) | ((INT64)data&0xff)<<16); LOG(("ES5510: Host Write INSTR latch[2] = %02x -> %012" I64FMT "x\n", data, instr_latch)); break;
- case 0x07: instr_latch = ((instr_latch&U64(0xffffffff00ff)) | ((INT64)data&0xff)<< 8); LOG(("ES5510: Host Write INSTR latch[1] = %02x -> %012" I64FMT "x\n", data, instr_latch)); break;
- case 0x08: instr_latch = ((instr_latch&U64(0xffffffffff00)) | ((INT64)data&0xff)<< 0); LOG(("ES5510: Host Write INSTR latch[0] = %02x -> %012" I64FMT "x\n", data, instr_latch)); break;
+ case 0x03: instr_latch = ((instr_latch&U64(0x00ffffffffff)) | ((INT64)data&0xff)<<40); LOG(("%s",string_format("ES5510: Host Write INSTR latch[5] = %02x -> %012I64x\n", data, instr_latch).c_str())); break;
+ case 0x04: instr_latch = ((instr_latch&U64(0xff00ffffffff)) | ((INT64)data&0xff)<<32); LOG(("%s",string_format("ES5510: Host Write INSTR latch[4] = %02x -> %012I64x\n", data, instr_latch).c_str())); break;
+ case 0x05: instr_latch = ((instr_latch&U64(0xffff00ffffff)) | ((INT64)data&0xff)<<24); LOG(("%s",string_format("ES5510: Host Write INSTR latch[3] = %02x -> %012I64x\n", data, instr_latch).c_str())); break;
+ case 0x06: instr_latch = ((instr_latch&U64(0xffffff00ffff)) | ((INT64)data&0xff)<<16); LOG(("%s",string_format("ES5510: Host Write INSTR latch[2] = %02x -> %012I64x\n", data, instr_latch).c_str())); break;
+ case 0x07: instr_latch = ((instr_latch&U64(0xffffffff00ff)) | ((INT64)data&0xff)<< 8); LOG(("%s",string_format("ES5510: Host Write INSTR latch[1] = %02x -> %012I64x\n", data, instr_latch).c_str())); break;
+ case 0x08: instr_latch = ((instr_latch&U64(0xffffffffff00)) | ((INT64)data&0xff)<< 0); LOG(("%s",string_format("ES5510: Host Write INSTR latch[0] = %02x -> %012I64x\n", data, instr_latch).c_str())); break;
/* 0x09 to 0x0b DIL Register (r/o) */
@@ -477,7 +477,7 @@ WRITE8_MEMBER(es5510_device::host_w)
break;
case 0x80: /* Read select - GPR + INSTR */
- LOG(("ES5510: Host Read INSTR+GPR %02x (%s): %012" I64FMT "x %06x (%d)\n", data, REGNAME(data & 0xff), instr[data] & U64(0xffffffffffff), gpr[data] & 0xffffff, gpr[data]));
+ LOG(("%s",string_format("ES5510: Host Read INSTR+GPR %02x (%s): %012I64x %06x (%d)\n", data, REGNAME(data & 0xff), instr[data] & U64(0xffffffffffff), gpr[data] & 0xffffff, gpr[data]).c_str()));
/* Check if an INSTR address is selected */
if (data < 0xa0) {
@@ -498,7 +498,7 @@ WRITE8_MEMBER(es5510_device::host_w)
case 0xc0: /* Write select - INSTR */
#if VERBOSE
DESCRIBE_INSTR(buf, instr_latch, gpr[data], NULL, NULL, NULL, NULL);
- LOG(("ES5510: Host Write INSTR %02x %012" I64FMT "x: %s\n", data, instr_latch&U64(0xffffffffffff), buf));
+ LOG(("%s",string_format("ES5510: Host Write INSTR %02x %012I64x: %s\n", data, instr_latch&U64(0xffffffffffff), buf).c_str()));
#endif
if (data < 0xa0) {
instr[data] = instr_latch&U64(0xffffffffffff);
@@ -508,7 +508,7 @@ WRITE8_MEMBER(es5510_device::host_w)
case 0xe0: /* Write select - GPR + INSTR */
#if VERBOSE
DESCRIBE_INSTR(buf, instr_latch, gpr_latch, NULL, NULL, NULL, NULL);
- LOG(("ES5510: Host Write INSTR+GPR %02x (%s): %012" I64FMT "x %06x (%d): %s\n", data, REGNAME(data&0xff), instr_latch, gpr_latch, SX(gpr_latch), buf));
+ LOG(("%s",string_format("ES5510: Host Write INSTR+GPR %02x (%s): %012I64x %06x (%d): %s\n", data, REGNAME(data&0xff), instr_latch, gpr_latch, SX(gpr_latch), buf).c_str()));
#endif
if (data < 0xa0) {
instr[data] = instr_latch;
@@ -675,7 +675,7 @@ void es5510_device::list_program(void(p)(const char *, ...)) {
UINT8 cReg = (UINT8)((instr[addr] >> 32) & 0xff);
UINT8 dReg = (UINT8)((instr[addr] >> 40) & 0xff);
DESCRIBE_INSTR(buf, instr[addr], gpr[addr], name[aReg], name[bReg], name[cReg], name[dReg]);
- p("%02x: %012" I64FMT "x %06x (%8d) %s\n", addr, instr[addr], gpr[addr]&0xffffff, SX(gpr[addr]&0xffffff), buf);
+ p("%s",string_format("%02x: %012I64x %06x (%8d) %s\n", addr, instr[addr], gpr[addr]&0xffffff, SX(gpr[addr]&0xffffff), buf).c_str());
}
for (; addr < 0xc0; addr++) {
p("%02x: %06x (%d)\n", addr, gpr[addr]&0xffffff, SX(gpr[addr]&0xffffff));
@@ -701,7 +701,7 @@ void es5510_device::execute_run() {
#if VERBOSE_EXEC
char buf[1024];
DESCRIBE_INSTR(buf, instr[pc], gpr[pc], NULL, NULL, NULL, NULL);
- LOG_EXEC(("EXECUTING %02x: %012" I64FMT "x %06x %s\n", pc, instr[pc], gpr[pc]&0xffffff, buf));
+ LOG_EXEC(("%s",string_format("EXECUTING %02x: %012I64x %06x %s\n", pc, instr[pc], gpr[pc]&0xffffff, buf).c_str()));
#endif
ram_pp = ram_p;
diff --git a/src/devices/cpu/h8/h8.lst b/src/devices/cpu/h8/h8.lst
index 3ec1f46fbe4..56fcd25a548 100644
--- a/src/devices/cpu/h8/h8.lst
+++ b/src/devices/cpu/h8/h8.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
macro bxx_any %cond
prefetch_start();
TMP2 = read16i(TMP1);
diff --git a/src/devices/cpu/h8/h8make.py b/src/devices/cpu/h8/h8make.py
index 929b5d14c4e..2115bc01cbe 100644
--- a/src/devices/cpu/h8/h8make.py
+++ b/src/devices/cpu/h8/h8make.py
@@ -1,5 +1,6 @@
#!/usr/bin/python
-
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
from __future__ import print_function
USAGE = """
diff --git a/src/devices/cpu/m6502/ddeco16.lst b/src/devices/cpu/m6502/ddeco16.lst
index b57f2614cf0..9c84900e98b 100644
--- a/src/devices/cpu/m6502/ddeco16.lst
+++ b/src/devices/cpu/m6502/ddeco16.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# deco16 - deco variant
brk_16_imp ora_idx ill_non ill_non ill_non ora_zpg asl_zpg ill_non php_imp ora_imm asl_acc u0B_zpg ill_non ora_aba asl_aba ill_non
bpl_rel ora_idy ill_non u13_zpg ill_non ora_zpx asl_zpx ill_non clc_imp ora_aby ill_non ill_non ill_non ora_abx asl_abx ill_non
diff --git a/src/devices/cpu/m6502/dm4510.lst b/src/devices/cpu/m6502/dm4510.lst
index 6de7627ebc7..eae3c8ef006 100644
--- a/src/devices/cpu/m6502/dm4510.lst
+++ b/src/devices/cpu/m6502/dm4510.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# m4510 - 65ce02 with a mmu
brk_ce_imp ora_ce_idx cle_imp see_imp tsb_ce_zpg ora_ce_zpg asl_ce_zpg rmb_ce_bzp php_ce_imp ora_imm asl_ce_acc tsy_imp tsb_ce_aba ora_aba asl_ce_aba bbr_ce_zpb
bpl_ce_rel ora_ce_idy ora_idz bpl_rw2 trb_ce_zpg ora_ce_zpx asl_ce_zpx rmb_ce_bzp clc_ce_imp ora_ce_aby inc_ce_acc inz_imp trb_ce_aba ora_ce_abx asl_ce_abx bbr_ce_zpb
diff --git a/src/devices/cpu/m6502/dm6502.lst b/src/devices/cpu/m6502/dm6502.lst
index 335cae3d2e7..654a2f1fe74 100644
--- a/src/devices/cpu/m6502/dm6502.lst
+++ b/src/devices/cpu/m6502/dm6502.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# m6502_family_device - 6502, 6504
brk_imp ora_idx kil_non slo_idx nop_zpg ora_zpg asl_zpg slo_zpg php_imp ora_imm asl_acc anc_imm nop_aba ora_aba asl_aba slo_aba
bpl_rel ora_idy kil_non slo_idy nop_zpx ora_zpx asl_zpx slo_zpx clc_imp ora_aby nop_imp slo_aby nop_abx ora_abx asl_abx slo_abx
diff --git a/src/devices/cpu/m6502/dm6509.lst b/src/devices/cpu/m6502/dm6509.lst
index 644aa6c79d6..d8e498ecdf8 100644
--- a/src/devices/cpu/m6502/dm6509.lst
+++ b/src/devices/cpu/m6502/dm6509.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# m6509 - special banking on two specific instructions, and banking in general
brk_imp ora_idx kil_non slo_idx nop_zpg ora_zpg asl_zpg slo_zpg php_imp ora_imm asl_acc anc_imm nop_aba ora_aba asl_aba slo_aba
bpl_rel ora_idy kil_non slo_idy nop_zpx ora_zpx asl_zpx slo_zpx clc_imp ora_aby nop_imp slo_aby nop_abx ora_abx asl_abx slo_abx
diff --git a/src/devices/cpu/m6502/dm6510.lst b/src/devices/cpu/m6502/dm6510.lst
index dbc8bd88d57..18b78643795 100644
--- a/src/devices/cpu/m6502/dm6510.lst
+++ b/src/devices/cpu/m6502/dm6510.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# m6510_family - identical to 6502, except for some undocumented instructions that have to be handled specifically
brk_imp ora_idx kil_non slo_idx nop_zpg ora_zpg asl_zpg slo_zpg php_imp ora_imm asl_acc anc_10_imm nop_aba ora_aba asl_aba slo_aba
bpl_rel ora_idy kil_non slo_idy nop_zpx ora_zpx asl_zpx slo_zpx clc_imp ora_aby nop_imp slo_aby nop_abx ora_abx asl_abx slo_abx
diff --git a/src/devices/cpu/m6502/dm65c02.lst b/src/devices/cpu/m6502/dm65c02.lst
index 4b0cd1f2db4..a174a154041 100644
--- a/src/devices/cpu/m6502/dm65c02.lst
+++ b/src/devices/cpu/m6502/dm65c02.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# m65c02
brk_c_imp ora_idx nop_imm nop_c_imp tsb_zpg ora_zpg asl_zpg nop_c_imp php_imp ora_imm asl_acc nop_c_imp tsb_aba ora_aba asl_aba nop_c_imp
bpl_rel ora_idy ora_zpi nop_c_imp trb_zpg ora_zpx asl_zpx nop_c_imp clc_imp ora_aby inc_acc nop_c_imp trb_aba ora_abx asl_c_abx nop_c_imp
diff --git a/src/devices/cpu/m6502/dm65ce02.lst b/src/devices/cpu/m6502/dm65ce02.lst
index b2fafe67203..819ce35c614 100644
--- a/src/devices/cpu/m6502/dm65ce02.lst
+++ b/src/devices/cpu/m6502/dm65ce02.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# m65ce02 - Adds the B and Z registers to the r65c02, a bunch of instructions, and changes most of the timings
brk_ce_imp ora_ce_idx cle_imp see_imp tsb_ce_zpg ora_ce_zpg asl_ce_zpg rmb_ce_bzp php_ce_imp ora_imm asl_ce_acc tsy_imp tsb_ce_aba ora_aba asl_ce_aba bbr_ce_zpb
bpl_ce_rel ora_ce_idy ora_idz bpl_rw2 trb_ce_zpg ora_ce_zpx asl_ce_zpx rmb_ce_bzp clc_ce_imp ora_ce_aby inc_ce_acc inz_imp trb_ce_aba ora_ce_abx asl_ce_abx bbr_ce_zpb
diff --git a/src/devices/cpu/m6502/dm740.lst b/src/devices/cpu/m6502/dm740.lst
index c11f0826cd5..04f67738dc9 100644
--- a/src/devices/cpu/m6502/dm740.lst
+++ b/src/devices/cpu/m6502/dm740.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# m740 device
brk740_imp ora_idx kil_non bbs_bar nop_zpg ora_zpg asl_zpg bbs_bzr php_imp ora_imm asl_acc seb_bac nop_aba ora_aba asl_aba seb_biz
bpl_rel ora_idy clt_imp bbc_bar nop_zpx ora_zpx asl_zpx bbc_bzr clc_imp ora_aby dec_acc clb_bac nop_abx ora_abx asl_abx clb_biz
diff --git a/src/devices/cpu/m6502/dn2a03.lst b/src/devices/cpu/m6502/dn2a03.lst
index 7f0a5d4a9cb..06dcc2610a2 100644
--- a/src/devices/cpu/m6502/dn2a03.lst
+++ b/src/devices/cpu/m6502/dn2a03.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# n2a03 - D flag is disabled but present in the P register
brk_imp ora_idx kil_non slo_idx nop_zpg ora_zpg asl_zpg slo_zpg php_imp ora_imm asl_acc anc_imm nop_aba ora_aba asl_aba slo_aba
bpl_rel ora_idy kil_non slo_idy nop_zpx ora_zpx asl_zpx slo_zpx clc_imp ora_aby nop_imp slo_aby nop_abx ora_abx asl_abx slo_abx
diff --git a/src/devices/cpu/m6502/dr65c02.lst b/src/devices/cpu/m6502/dr65c02.lst
index fa4a97bda56..60573ac30d3 100644
--- a/src/devices/cpu/m6502/dr65c02.lst
+++ b/src/devices/cpu/m6502/dr65c02.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# r65c02 - rockwell variant, with the bitwise instructions and stp/wai
brk_c_imp ora_idx nop_imm nop_c_imp tsb_zpg ora_zpg asl_zpg rmb_bzp php_imp ora_imm asl_acc nop_c_imp tsb_aba ora_aba asl_aba bbr_zpb
bpl_rel ora_idy ora_zpi nop_c_imp trb_zpg ora_zpx asl_zpx rmb_bzp clc_imp ora_aby inc_acc nop_c_imp trb_aba ora_abx asl_c_abx bbr_zpb
diff --git a/src/devices/cpu/m6502/m6502make.py b/src/devices/cpu/m6502/m6502make.py
index 4ac62e90ce9..8bcd85f8e21 100755
--- a/src/devices/cpu/m6502/m6502make.py
+++ b/src/devices/cpu/m6502/m6502make.py
@@ -1,4 +1,6 @@
#!/usr/bin/python
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
from __future__ import print_function
diff --git a/src/devices/cpu/m6502/odeco16.lst b/src/devices/cpu/m6502/odeco16.lst
index 6cea2fa7282..f3aade96499 100644
--- a/src/devices/cpu/m6502/odeco16.lst
+++ b/src/devices/cpu/m6502/odeco16.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# deco 16 opcodes
brk_16_imp
// The 6502 bug when a nmi occurs in a brk is reproduced (case !irq_taken && nmi_state)
diff --git a/src/devices/cpu/m6502/om4510.lst b/src/devices/cpu/m6502/om4510.lst
index fbe49491fac..ade37a82db6 100644
--- a/src/devices/cpu/m6502/om4510.lst
+++ b/src/devices/cpu/m6502/om4510.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# 4510 opcodes
eom_imp
diff --git a/src/devices/cpu/m6502/om6502.lst b/src/devices/cpu/m6502/om6502.lst
index 24c560c02fa..93026a1fc8b 100644
--- a/src/devices/cpu/m6502/om6502.lst
+++ b/src/devices/cpu/m6502/om6502.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# NMOS 6502 opcodes
# Verified with visual6502
# documented opcodes
diff --git a/src/devices/cpu/m6502/om6509.lst b/src/devices/cpu/m6502/om6509.lst
index 4595827b1d7..8c9a6f9baa1 100644
--- a/src/devices/cpu/m6502/om6509.lst
+++ b/src/devices/cpu/m6502/om6509.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# 6509 opcodes
lda_9_idy
diff --git a/src/devices/cpu/m6502/om6510.lst b/src/devices/cpu/m6502/om6510.lst
index e08a5229111..1ad0dfc0182 100644
--- a/src/devices/cpu/m6502/om6510.lst
+++ b/src/devices/cpu/m6502/om6510.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# 6510 undocumented instructions in a C64 context
anc_10_imm
TMP2 = read_pc();
diff --git a/src/devices/cpu/m6502/om65c02.lst b/src/devices/cpu/m6502/om65c02.lst
index d64ddcdc409..c2536d2c11d 100644
--- a/src/devices/cpu/m6502/om65c02.lst
+++ b/src/devices/cpu/m6502/om65c02.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# m65c02 opcodes
adc_c_aba
diff --git a/src/devices/cpu/m6502/om65ce02.lst b/src/devices/cpu/m6502/om65ce02.lst
index 049097fded8..f5b6beebc9a 100644
--- a/src/devices/cpu/m6502/om65ce02.lst
+++ b/src/devices/cpu/m6502/om65ce02.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# 65ce02 opcodes, a lot only remove dummy read/write cycles, some are new, some use the B register
adc_ce_aba
diff --git a/src/devices/cpu/m6502/om740.lst b/src/devices/cpu/m6502/om740.lst
index 9f17dc639bf..f5ea32d49dc 100644
--- a/src/devices/cpu/m6502/om740.lst
+++ b/src/devices/cpu/m6502/om740.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# m740 opcodes
set_imp
read_pc_noinc();
diff --git a/src/devices/cpu/m6502/on2a03.lst b/src/devices/cpu/m6502/on2a03.lst
index 7d8a72c8d62..2719f7c6ad2 100644
--- a/src/devices/cpu/m6502/on2a03.lst
+++ b/src/devices/cpu/m6502/on2a03.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
# n2a03 opcodes - same as 6502 but with d disabled
adc_nd_aba
TMP = read_pc();
diff --git a/src/devices/cpu/m6800/6800ops.inc b/src/devices/cpu/m6800/6800ops.inc
index d6c3d7634a5..45a78d1d71f 100644
--- a/src/devices/cpu/m6800/6800ops.inc
+++ b/src/devices/cpu/m6800/6800ops.inc
@@ -1,4 +1,5 @@
-
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles
/*
HNZVC
diff --git a/src/devices/cpu/m6800/6800tbl.inc b/src/devices/cpu/m6800/6800tbl.inc
index 10515e54bdc..09c86bd8093 100644
--- a/src/devices/cpu/m6800/6800tbl.inc
+++ b/src/devices/cpu/m6800/6800tbl.inc
@@ -1,4 +1,5 @@
-
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles
const m6800_cpu_device::op_func m6800_cpu_device::m6800_insn[0x100] = {
&m6800_cpu_device::illegal,&m6800_cpu_device::nop, &m6800_cpu_device::illegal,&m6800_cpu_device::illegal,&m6800_cpu_device::illegal,&m6800_cpu_device::illegal,&m6800_cpu_device::tap, &m6800_cpu_device::tpa,
&m6800_cpu_device::inx, &m6800_cpu_device::dex, &m6800_cpu_device::clv, &m6800_cpu_device::sev, &m6800_cpu_device::clc, &m6800_cpu_device::sec, &m6800_cpu_device::cli, &m6800_cpu_device::sei,
diff --git a/src/devices/cpu/m68000/m68000.h b/src/devices/cpu/m68000/m68000.h
index 013627ac6c0..6dc0c37489c 100644
--- a/src/devices/cpu/m68000/m68000.h
+++ b/src/devices/cpu/m68000/m68000.h
@@ -141,6 +141,9 @@ public:
DECLARE_WRITE_LINE_MEMBER( write_irq6 );
DECLARE_WRITE_LINE_MEMBER( write_irq7 );
+ void presave();
+ void postload();
+
void clear_all(void);
virtual UINT32 disasm_min_opcode_bytes() const override { return 2; };
diff --git a/src/devices/cpu/m68000/m68kcpu.cpp b/src/devices/cpu/m68000/m68kcpu.cpp
index 02809436472..8e8e7a3eadb 100644
--- a/src/devices/cpu/m68000/m68kcpu.cpp
+++ b/src/devices/cpu/m68000/m68kcpu.cpp
@@ -659,19 +659,19 @@ static void set_irq_line(m68000_base_device *m68k, int irqline, int state)
m68k->nmi_pending = TRUE;
}
-static void m68k_presave(m68000_base_device *m68k)
+void m68000_base_device::presave()
{
- m68k->save_sr = m68ki_get_sr(m68k);
- m68k->save_stopped = (m68k->stopped & STOP_LEVEL_STOP) != 0;
- m68k->save_halted = (m68k->stopped & STOP_LEVEL_HALT) != 0;
+ save_sr = m68ki_get_sr(this);
+ save_stopped = (stopped & STOP_LEVEL_STOP) != 0;
+ save_halted = (stopped & STOP_LEVEL_HALT) != 0;
}
-static void m68k_postload(m68000_base_device *m68k)
+void m68000_base_device::postload()
{
- m68ki_set_sr_noint_nosp(m68k, m68k->save_sr);
+ m68ki_set_sr_noint_nosp(this, save_sr);
//fprintf(stderr, "Reloaded, pc=%x\n", REG_PC(m68k));
- m68k->stopped = (m68k->save_stopped ? STOP_LEVEL_STOP : 0) | (m68k->save_halted ? STOP_LEVEL_HALT : 0);
- m68ki_jump(m68k, REG_PC(m68k));
+ stopped = (save_stopped ? STOP_LEVEL_STOP : 0) | (save_halted ? STOP_LEVEL_HALT : 0);
+ m68ki_jump(this, REG_PC(this));
}
static void m68k_cause_bus_error(m68000_base_device *m68k)
@@ -742,7 +742,6 @@ WRITE_LINE_MEMBER( m68000_base_device::write_irq7 )
bool m68000_base_device::memory_translate(address_spacenum space, int intention, offs_t &address)
{
/* only applies to the program address space and only does something if the MMU's enabled */
- if (this)
{
/* 68040 needs to call the MMU even when disabled so transparent translation works */
if ((space == AS_PROGRAM) && ((pmmu_enabled) || (CPU_TYPE_IS_040_PLUS(cpu_type))))
@@ -1025,8 +1024,8 @@ void m68000_base_device::init_cpu_common(void)
save_item(NAME(mmu_atc_data[i]), i);
}
- machine().save().register_presave(save_prepost_delegate(FUNC(m68k_presave), this));
- machine().save().register_postload(save_prepost_delegate(FUNC(m68k_postload), this));
+ machine().save().register_presave(save_prepost_delegate(FUNC(m68000_base_device::presave), this));
+ machine().save().register_postload(save_prepost_delegate(FUNC(m68000_base_device::postload), this));
m_icountptr = &remaining_cycles;
remaining_cycles = 0;
@@ -2646,7 +2645,6 @@ void m68020pmmu_device::device_start()
bool m68020hmmu_device::memory_translate(address_spacenum space, int intention, offs_t &address)
{
/* only applies to the program address space and only does something if the MMU's enabled */
- if (this)
{
if ((space == AS_PROGRAM) && (hmmu_enabled))
{
diff --git a/src/devices/cpu/m6805/6805ops.inc b/src/devices/cpu/m6805/6805ops.inc
index 713be5e0d7b..c6761982c96 100644
--- a/src/devices/cpu/m6805/6805ops.inc
+++ b/src/devices/cpu/m6805/6805ops.inc
@@ -1,4 +1,5 @@
-
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles
/*
HNZC
diff --git a/src/devices/cpu/m6809/base6x09.ops b/src/devices/cpu/m6809/base6x09.ops
index 334521eb385..54226cddfb9 100644
--- a/src/devices/cpu/m6809/base6x09.ops
+++ b/src/devices/cpu/m6809/base6x09.ops
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Nathan Woods
NMI:
m_nmi_asserted = false;
m_cc |= CC_E;
diff --git a/src/devices/cpu/m6809/hd6309.ops b/src/devices/cpu/m6809/hd6309.ops
index 6da3a904d2b..f96acfc695a 100644
--- a/src/devices/cpu/m6809/hd6309.ops
+++ b/src/devices/cpu/m6809/hd6309.ops
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Nathan Woods
MAIN:
// check interrupt lines
switch(get_pending_interrupt())
diff --git a/src/devices/cpu/m6809/konami.ops b/src/devices/cpu/m6809/konami.ops
index e2246f85b71..fefa27aea26 100644
--- a/src/devices/cpu/m6809/konami.ops
+++ b/src/devices/cpu/m6809/konami.ops
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Nathan Woods
MAIN:
// check interrupt lines
switch(get_pending_interrupt())
diff --git a/src/devices/cpu/m6809/m6809.ops b/src/devices/cpu/m6809/m6809.ops
index 96b9f6c11a7..5602211527a 100644
--- a/src/devices/cpu/m6809/m6809.ops
+++ b/src/devices/cpu/m6809/m6809.ops
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Nathan Woods
MAIN:
// check interrupt lines
switch(get_pending_interrupt())
diff --git a/src/devices/cpu/m6809/m6809make.py b/src/devices/cpu/m6809/m6809make.py
index c3d5b0f66ee..8838b960191 100644
--- a/src/devices/cpu/m6809/m6809make.py
+++ b/src/devices/cpu/m6809/m6809make.py
@@ -1,4 +1,6 @@
#!/usr/bin/python
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
import sys
import re
diff --git a/src/devices/cpu/mcs51/mcs51ops.inc b/src/devices/cpu/mcs51/mcs51ops.inc
index e60cc3505eb..0c1dec682ef 100644
--- a/src/devices/cpu/mcs51/mcs51ops.inc
+++ b/src/devices/cpu/mcs51/mcs51ops.inc
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Steve Ellenoff
/*******************************************************************************************
NOTE: All registers are accessed directly, instead of using the SFR_R() function for speed
Direct register access is availabe from the R_(register name) macros.. ex: ACC for the ACC
diff --git a/src/devices/cpu/mcs96/mcs96make.py b/src/devices/cpu/mcs96/mcs96make.py
index 72d8f36cfa6..b4844942e3d 100644
--- a/src/devices/cpu/mcs96/mcs96make.py
+++ b/src/devices/cpu/mcs96/mcs96make.py
@@ -1,4 +1,6 @@
#!/usr/bin/python
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
from __future__ import print_function
diff --git a/src/devices/cpu/mcs96/mcs96ops.lst b/src/devices/cpu/mcs96/mcs96ops.lst
index 7ccedf358da..372acb44218 100644
--- a/src/devices/cpu/mcs96/mcs96ops.lst
+++ b/src/devices/cpu/mcs96/mcs96ops.lst
@@ -1,3 +1,5 @@
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
fetch
if(irq_requested) {
int level;
diff --git a/src/devices/cpu/powerpc/ppcdrc.cpp b/src/devices/cpu/powerpc/ppcdrc.cpp
index 35b984d240d..7390f9284e9 100644
--- a/src/devices/cpu/powerpc/ppcdrc.cpp
+++ b/src/devices/cpu/powerpc/ppcdrc.cpp
@@ -3472,7 +3472,13 @@ int ppc_device::generate_instruction_3b(drcuml_block *block, compiler_state *com
case 0x12: /* FDIVSx */
if (!(m_drcoptions & PPCDRC_ACCURATE_SINGLES))
return generate_instruction_3f(block, compiler, desc);
- UML_FDDIV(block, F0, F64(G_RA(op)), F64(G_RB(op))); // fddiv f0,ra,rb
+ UML_FDCMP(block, F64(G_RB(op)), mem(&m_core->fp0)); // fdcmp rb,0
+ UML_JMPc(block, COND_Z, compiler->labelnum); // bz 1:
+ UML_FDDIV(block, F0, F64(G_RA(op)), F64(G_RB(op))); // fddiv f0,ra,rb
+ UML_JMP(block, compiler->labelnum+1); // bz 2:
+ UML_LABEL(block, compiler->labelnum++); // 1:
+ UML_FDMOV(block, F0, mem(&m_core->fp0)); // fdmov f0,0
+ UML_LABEL(block, compiler->labelnum++); // 2:
UML_FDRNDS(block, F64(G_RD(op)), F0); // fdrnds rd,f0
generate_fp_flags(block, desc, TRUE);
return TRUE;
@@ -3566,7 +3572,13 @@ int ppc_device::generate_instruction_3f(drcuml_block *block, compiler_state *com
return TRUE;
case 0x12: /* FDIVx */
+ UML_FDCMP(block, F64(G_RB(op)), mem(&m_core->fp0)); // fdcmp rb,0
+ UML_JMPc(block, COND_Z, compiler->labelnum); // bz 1:
UML_FDDIV(block, F64(G_RD(op)), F64(G_RA(op)), F64(G_RB(op))); // fddiv rd,ra,rb
+ UML_JMP(block, compiler->labelnum+1); // bz 2:
+ UML_LABEL(block, compiler->labelnum++); // 1:
+ UML_FDMOV(block, F64(G_RD(op)), mem(&m_core->fp0)); // fdmov rd,0
+ UML_LABEL(block, compiler->labelnum++); // 2:
generate_fp_flags(block, desc, TRUE);
return TRUE;
diff --git a/src/devices/cpu/sh4/sh4dmac.h b/src/devices/cpu/sh4/sh4dmac.h
index 60148653c2b..fe0bbc84514 100644
--- a/src/devices/cpu/sh4/sh4dmac.h
+++ b/src/devices/cpu/sh4/sh4dmac.h
@@ -27,8 +27,6 @@
#define DMAOR_NMIF 0x0002
#define DMAOR_DME 0x0001
-TIMER_CALLBACK( sh4_dmac_callback );
-
void sh4_handle_sar0_addr_w(UINT32 data, UINT32 mem_mask);
void sh4_handle_sar1_addr_w(UINT32 data, UINT32 mem_mask);
void sh4_handle_sar2_addr_w(UINT32 data, UINT32 mem_mask);
diff --git a/src/devices/cpu/tms0980/tms0980.cpp b/src/devices/cpu/tms0980/tms0980.cpp
index e067946bb7a..3ea3ca918b1 100644
--- a/src/devices/cpu/tms0980/tms0980.cpp
+++ b/src/devices/cpu/tms0980/tms0980.cpp
@@ -203,7 +203,8 @@ const device_type TMS0270 = &device_creator<tms0270_cpu_device>; // 40-pin DIP,
// TMS0260 is same or similar?
// TP0320 is TI's first CMOS MCU with integrated LCD controller, the die is still very similar to TMS0980
-// - x
+// - ROM and main RAM is same as on TMS0980 with different row-select
+// -
const device_type TP0320 = &device_creator<tp0320_cpu_device>; // 28-pin SDIP, ..
diff --git a/src/devices/cpu/tms0980/tms0980d.cpp b/src/devices/cpu/tms0980/tms0980d.cpp
index ea72ba9be2e..371047b0a79 100644
--- a/src/devices/cpu/tms0980/tms0980d.cpp
+++ b/src/devices/cpu/tms0980/tms0980d.cpp
@@ -11,7 +11,8 @@
#include "tms0980.h"
-enum e_mnemonics {
+enum e_mnemonics
+{
zA10AAC=0, zA6AAC, zA8AAC, zAC1AC, zACACC, zACNAA, zALEC, zALEM, zAMAAC, zBRANCH, zCALL, zCCLA,
zCLA, zCLO, zCOMC, zCOMX, zCOMX8, zCPAIZ, zCTMDYN, zDAN, zDMAN, zDMEA, zDNAA,
zDYN, zIA, zIMAC, zIYC, zKNEZ, zLDP, zLDX, zLDX3, zLDX4, zMNEA, zMNEZ,
@@ -22,7 +23,8 @@ enum e_mnemonics {
zILL
};
-static const char *const s_mnemonic[] = {
+static const char *const s_mnemonic[] =
+{
"A10AAC", "A6AAC", "A8AAC", "AC1AC", "ACACC", "ACNAA", "ALEC", "ALEM", "AMAAC", "BRANCH", "CALL", "CCLA",
"CLA", "CLO", "COMC", "COMX", "COMX8", "CPAIZ", "CTMDYN", "DAN", "DMAN", "DMEA", "DNAA",
"DYN", "IA", "IMAC", "IYC", "KNEZ", "LDP", "LDX", "LDX", "LDX", "MNEA", "MNEZ",
@@ -37,7 +39,8 @@ static const char *const s_mnemonic[] = {
#define _OVER DASMFLAG_STEP_OVER
#define _OUT DASMFLAG_STEP_OUT
-static const UINT32 s_flags[] = {
+static const UINT32 s_flags[] =
+{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _OVER, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -49,11 +52,13 @@ static const UINT32 s_flags[] = {
};
-enum e_addressing {
+enum e_addressing
+{
zB0=0, zI2, zI3, zI4, zB7
};
-static const UINT8 s_addressing[] = {
+static const UINT8 s_addressing[] =
+{
zB0, zB0, zB0, zI4, zI4, zI4, zI4, zB0, zB0, zB7, zB7, zB0,
zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0,
zB0, zB0, zB0, zB0, zB0, zI4, zI2, zI3, zI4, zB0, zB0,
@@ -65,7 +70,25 @@ static const UINT8 s_addressing[] = {
};
-static const UINT8 tms0980_mnemonic[512] = {
+static const UINT8 tms0980_i2_value[4] =
+{
+ 0, 2, 1, 3
+};
+static const UINT8 tms0980_i3_value[8] =
+{
+ 0, 4, 2, 6, 1, 5, 3, 7
+};
+static const UINT8 tms0980_i4_value[16] =
+{
+ 0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe, 0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf
+};
+
+
+
+// opcode luts
+
+static const UINT8 tms0980_mnemonic[512] =
+{
/* 0x000 */
zCOMX, zALEM, zYNEA, zXMA, zDYN, zIYC, zCLA, zDMAN,
zTKA, zMNEA, zTKM, zILL, zILL, zSETR, zKNEZ, zILL,
@@ -151,7 +174,8 @@ static const UINT8 tms0980_mnemonic[512] = {
};
-static const UINT8 tms1000_mnemonic[256] = {
+static const UINT8 tms1000_mnemonic[256] =
+{
/* 0x00 */
zCOMX, zA8AAC, zYNEA, zTAM, zTAMZA, zA10AAC, zA6AAC, zDAN,
zTKA, zKNEZ, zTDO, zCLO, zRSTR, zSETR, zIA, zRETN,
@@ -191,7 +215,8 @@ static const UINT8 tms1000_mnemonic[256] = {
};
-static const UINT8 tms1100_mnemonic[256] = {
+static const UINT8 tms1100_mnemonic[256] =
+{
/* 0x00 */
zMNEA, zALEM, zYNEA, zXMA, zDYN, zIYC, zAMAAC, zDMAN,
zTKA, zCOMX, zTDO, zCOMC, zRSTR, zSETR, zKNEZ, zRETN,
@@ -233,21 +258,11 @@ static const UINT8 tms1100_mnemonic[256] = {
};
-static const UINT8 tms0980_i2_value[4] =
-{
- 0x00, 0x02, 0x01, 0x03
-};
-static const UINT8 tms0980_i3_value[8] =
-{
- 0x00, 0x04, 0x02, 0x06, 0x01, 0x05, 0x03, 0x07
-};
-static const UINT8 tms0980_i4_value[16] =
-{
- 0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E, 0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F
-};
+// disasm
-CPU_DISASSEMBLE( tms0980 ) {
+CPU_DISASSEMBLE( tms0980 )
+{
char *dst = buffer;
UINT16 op, instr;
int pos = 0;
@@ -259,7 +274,8 @@ CPU_DISASSEMBLE( tms0980 ) {
dst += sprintf( dst, "%-8s ", s_mnemonic[instr] );
- switch( s_addressing[instr] ) {
+ switch( s_addressing[instr] )
+ {
default:
case zB0:
break;
@@ -278,7 +294,8 @@ CPU_DISASSEMBLE( tms0980 ) {
}
-CPU_DISASSEMBLE( tms1000 ) {
+CPU_DISASSEMBLE( tms1000 )
+{
char *dst = buffer;
UINT8 op, instr;
int pos = 0;
@@ -290,7 +307,8 @@ CPU_DISASSEMBLE( tms1000 ) {
dst += sprintf( dst, "%-8s ", s_mnemonic[instr] );
- switch( s_addressing[instr] ) {
+ switch( s_addressing[instr] )
+ {
default:
case zB0:
break;
@@ -309,7 +327,8 @@ CPU_DISASSEMBLE( tms1000 ) {
}
-CPU_DISASSEMBLE( tms1100 ) {
+CPU_DISASSEMBLE( tms1100 )
+{
char *dst = buffer;
UINT8 op, instr;
int pos = 0;
@@ -321,7 +340,8 @@ CPU_DISASSEMBLE( tms1100 ) {
dst += sprintf( dst, "%-8s ", s_mnemonic[instr] );
- switch( s_addressing[instr] ) {
+ switch( s_addressing[instr] )
+ {
default:
case zB0:
break;
diff --git a/src/devices/cpu/tms57002/tmsmake.py b/src/devices/cpu/tms57002/tmsmake.py
index df37f261dc1..e2e12b5a4b3 100755
--- a/src/devices/cpu/tms57002/tmsmake.py
+++ b/src/devices/cpu/tms57002/tmsmake.py
@@ -1,4 +1,6 @@
#!/usr/bin/python
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert
from __future__ import print_function
diff --git a/src/devices/imagedev/chd_cd.cpp b/src/devices/imagedev/chd_cd.cpp
index d9ab295dfad..630403001ff 100644
--- a/src/devices/imagedev/chd_cd.cpp
+++ b/src/devices/imagedev/chd_cd.cpp
@@ -109,7 +109,7 @@ bool cdrom_image_device::call_load()
if (software_entry() == nullptr)
{
if (strstr(m_image_name.c_str(), ".chd") && is_loaded()) {
- err = m_self_chd.open( *image_core_file() ); /* CDs are never writeable */
+ err = m_self_chd.open( image_core_file() ); /* CDs are never writeable */
if ( err )
goto error;
chd = &m_self_chd;
diff --git a/src/devices/imagedev/diablo.cpp b/src/devices/imagedev/diablo.cpp
index f9d4218856a..6ba6aad5cf2 100644
--- a/src/devices/imagedev/diablo.cpp
+++ b/src/devices/imagedev/diablo.cpp
@@ -124,7 +124,7 @@ bool diablo_image_device::call_create(int create_format, option_resolution *crea
/* create the CHD file */
chd_codec_type compression[4] = { CHD_CODEC_NONE };
- err = m_origchd.create(*image_core_file(), (UINT64)totalsectors * (UINT64)sectorsize, hunksize, sectorsize, compression);
+ err = m_origchd.create(image_core_file(), (UINT64)totalsectors * (UINT64)sectorsize, hunksize, sectorsize, compression);
if (err != CHDERR_NONE)
goto error;
@@ -219,14 +219,14 @@ int diablo_image_device::internal_load_dsk()
}
else
{
- err = m_origchd.open(*image_core_file(), true);
+ err = m_origchd.open(image_core_file(), true);
if (err == CHDERR_NONE)
{
m_chd = &m_origchd;
}
else if (err == CHDERR_FILE_NOT_WRITEABLE)
{
- err = m_origchd.open(*image_core_file(), false);
+ err = m_origchd.open(image_core_file(), false);
if (err == CHDERR_NONE)
{
err = open_disk_diff(device().machine().options(), basename_noext(), m_origchd, m_diffchd);
diff --git a/src/devices/imagedev/floppy.cpp b/src/devices/imagedev/floppy.cpp
index cb7e184f811..c4269c944ef 100644
--- a/src/devices/imagedev/floppy.cpp
+++ b/src/devices/imagedev/floppy.cpp
@@ -295,7 +295,7 @@ void floppy_image_device::commit_image()
io.procs = &image_ioprocs;
io.filler = 0xff;
- file_error err = core_truncate(image_core_file(), 0);
+ file_error err = image_core_file().truncate(0);
if (err != 0)
popmessage("Error, unable to truncate image: %d", err);
@@ -362,7 +362,7 @@ void floppy_image_device::device_timer(emu_timer &timer, device_timer_id id, int
floppy_image_format_t *floppy_image_device::identify(std::string filename)
{
- core_file *fd;
+ util::core_file::ptr fd;
std::string revised_path;
file_error err = zippath_fopen(filename.c_str(), OPEN_FLAG_READ, fd, revised_path);
@@ -372,19 +372,20 @@ floppy_image_format_t *floppy_image_device::identify(std::string filename)
}
io_generic io;
- io.file = fd;
+ io.file = fd.get();
io.procs = &corefile_ioprocs_noclose;
io.filler = 0xff;
int best = 0;
floppy_image_format_t *best_format = nullptr;
- for(floppy_image_format_t *format = fif_list; format; format = format->next) {
+ for (floppy_image_format_t *format = fif_list; format; format = format->next)
+ {
int score = format->identify(&io, form_factor);
if(score > best) {
best = score;
best_format = format;
}
}
- core_fclose(fd);
+ fd.reset();
return best_format;
}
@@ -515,15 +516,15 @@ void floppy_image_device::mon_w(int state)
if (!mon && image)
{
revolution_start_time = machine().time();
- if (motor_always_on) {
- // Drives with motor that is always spinning are immediately ready when a disk is loaded
- // because there is no spin-up time
- ready = false;
- if(!cur_ready_cb.isnull())
- cur_ready_cb(this, ready);
- } else {
- ready_counter = 2;
- }
+ if (motor_always_on) {
+ // Drives with motor that is always spinning are immediately ready when a disk is loaded
+ // because there is no spin-up time
+ ready = false;
+ if(!cur_ready_cb.isnull())
+ cur_ready_cb(this, ready);
+ } else {
+ ready_counter = 2;
+ }
index_resync();
}
@@ -1001,11 +1002,11 @@ void ui_menu_control_floppy_image::hook_load(std::string filename, bool softlist
if(can_in_place) {
file_error filerr;
std::string tmp_path;
- core_file *tmp_file;
+ util::core_file::ptr tmp_file;
/* attempt to open the file for writing but *without* create */
filerr = zippath_fopen(filename.c_str(), OPEN_FLAG_READ | OPEN_FLAG_WRITE, tmp_file, tmp_path);
if(!filerr)
- core_fclose(tmp_file);
+ tmp_file.reset();
else
can_in_place = false;
}
diff --git a/src/devices/imagedev/harddriv.cpp b/src/devices/imagedev/harddriv.cpp
index c03b0e4075b..d07852e166f 100644
--- a/src/devices/imagedev/harddriv.cpp
+++ b/src/devices/imagedev/harddriv.cpp
@@ -148,7 +148,7 @@ bool harddisk_image_device::call_create(int create_format, option_resolution *cr
/* create the CHD file */
chd_codec_type compression[4] = { CHD_CODEC_NONE };
- err = m_origchd.create(*image_core_file(), (UINT64)totalsectors * (UINT64)sectorsize, hunksize, sectorsize, compression);
+ err = m_origchd.create(image_core_file(), (UINT64)totalsectors * (UINT64)sectorsize, hunksize, sectorsize, compression);
if (err != CHDERR_NONE)
goto error;
@@ -243,14 +243,14 @@ int harddisk_image_device::internal_load_hd()
}
else
{
- err = m_origchd.open(*image_core_file(), true);
+ err = m_origchd.open(image_core_file(), true);
if (err == CHDERR_NONE)
{
m_chd = &m_origchd;
}
else if (err == CHDERR_FILE_NOT_WRITEABLE)
{
- err = m_origchd.open(*image_core_file(), false);
+ err = m_origchd.open(image_core_file(), false);
if (err == CHDERR_NONE)
{
err = open_disk_diff(device().machine().options(), basename_noext(), m_origchd, m_diffchd);
diff --git a/src/devices/machine/68307tmu.cpp b/src/devices/machine/68307tmu.cpp
index 6f5c33687cd..e3c8e595f7c 100644
--- a/src/devices/machine/68307tmu.cpp
+++ b/src/devices/machine/68307tmu.cpp
@@ -99,7 +99,7 @@ WRITE16_MEMBER( m68307cpu_device::m68307_internal_timer_w )
}
}
-static TIMER_CALLBACK( m68307_timer0_callback )
+TIMER_CALLBACK_MEMBER(m68307_timer::timer0_callback )
{
m68307cpu_device* m68k = (m68307cpu_device *)ptr;
m68307_single_timer* tptr = &m68k->m68307TIMER->singletimer[0];
@@ -110,7 +110,7 @@ static TIMER_CALLBACK( m68307_timer0_callback )
tptr->mametimer->adjust(m68k->cycles_to_attotime(20000));
}
-static TIMER_CALLBACK( m68307_timer1_callback )
+TIMER_CALLBACK_MEMBER(m68307_timer::timer1_callback )
{
m68307cpu_device* m68k = (m68307cpu_device *)ptr;
m68307_single_timer* tptr = &m68k->m68307TIMER->singletimer[1];
@@ -122,7 +122,7 @@ static TIMER_CALLBACK( m68307_timer1_callback )
}
-static TIMER_CALLBACK( m68307_wd_timer_callback )
+TIMER_CALLBACK_MEMBER(m68307_timer::wd_timer_callback )
{
printf("wd timer\n");
}
@@ -134,15 +134,12 @@ void m68307_timer::init(m68307cpu_device *device)
m68307_single_timer* tptr;
tptr = &singletimer[0];
- tptr->mametimer = device->machine().scheduler().timer_alloc(FUNC(m68307_timer0_callback), parent);
+ tptr->mametimer = device->machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m68307_timer::timer0_callback),this), parent);
tptr = &singletimer[1];
- tptr->mametimer = device->machine().scheduler().timer_alloc(FUNC(m68307_timer1_callback), parent);
-
-
- wd_mametimer = device->machine().scheduler().timer_alloc(FUNC(m68307_wd_timer_callback), parent);
-
+ tptr->mametimer = device->machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m68307_timer::timer1_callback),this), parent);
+ wd_mametimer = device->machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m68307_timer::wd_timer_callback),this), parent);
}
UINT16 m68307_timer::read_tcn(UINT16 mem_mask, int which)
diff --git a/src/devices/machine/68307tmu.h b/src/devices/machine/68307tmu.h
index 2c62858b66d..660bdaeeb41 100644
--- a/src/devices/machine/68307tmu.h
+++ b/src/devices/machine/68307tmu.h
@@ -38,4 +38,8 @@ class m68307_timer
void init(m68307cpu_device *device);
void reset(void);
+
+ TIMER_CALLBACK_MEMBER(timer0_callback);
+ TIMER_CALLBACK_MEMBER(timer1_callback);
+ TIMER_CALLBACK_MEMBER(wd_timer_callback);
};
diff --git a/src/devices/machine/74123.cpp b/src/devices/machine/74123.cpp
index d5eddbe91a3..0263ad0eb4b 100644
--- a/src/devices/machine/74123.cpp
+++ b/src/devices/machine/74123.cpp
@@ -116,7 +116,7 @@ int ttl74123_device::timer_running()
/*-------------------------------------------------
- TIMER_CALLBACK( output_callback )
+ TIMER_CALLBACK_MEMBER( output_callback )
-------------------------------------------------*/
TIMER_CALLBACK_MEMBER( ttl74123_device::output_callback )
@@ -140,7 +140,7 @@ void ttl74123_device::set_output()
/*-------------------------------------------------
- TIMER_CALLBACK( clear_callback )
+ TIMER_CALLBACK_MEMBER( clear_callback )
-------------------------------------------------*/
TIMER_CALLBACK_MEMBER( ttl74123_device::clear_callback )
diff --git a/src/devices/machine/8042kbdc.cpp b/src/devices/machine/8042kbdc.cpp
index a1d36a41b43..509a5952890 100644
--- a/src/devices/machine/8042kbdc.cpp
+++ b/src/devices/machine/8042kbdc.cpp
@@ -224,10 +224,10 @@ void kbdc8042_device::device_start()
{
// resolve callbacks
m_system_reset_cb.resolve_safe();
- m_gate_a20_cb.resolve();
- m_input_buffer_full_cb.resolve();
+ m_gate_a20_cb.resolve_safe();
+ m_input_buffer_full_cb.resolve_safe();
m_output_buffer_empty_cb.resolve_safe();
- m_speaker_cb.resolve();
+ m_speaker_cb.resolve_safe();
m_operation_write_state = 0; /* first write to 0x60 might occur before anything can set this */
memset(&m_keyboard, 0x00, sizeof(m_keyboard));
memset(&m_mouse, 0x00, sizeof(m_mouse));
@@ -287,7 +287,8 @@ void kbdc8042_device::at_8042_receive(UINT8 data)
m_input_buffer_full_cb(1);
/* Lets 8952's timers do their job before clear the interrupt line, */
/* else Keyboard interrupt never happens. */
- machine().scheduler().timer_set(attotime::from_usec(2), timer_expired_delegate(FUNC(kbdc8042_device::kbdc8042_clr_int),this));
+ /* Why was this done? It dies when an extended scan code is received */
+ //machine().scheduler().timer_set(attotime::from_usec(2), timer_expired_delegate(FUNC(kbdc8042_device::kbdc8042_clr_int),this));
}
}
@@ -347,6 +348,7 @@ READ8_MEMBER(kbdc8042_device::data_r)
switch (offset) {
case 0:
data = m_data;
+ m_input_buffer_full_cb(0);
if ((m_status_read_mode != 3) || (data != 0xfa))
{
if (m_keybtype != KBDC8042_AT386 || (data != 0x55))
diff --git a/src/devices/machine/bcreader.cpp b/src/devices/machine/bcreader.cpp
index 5a5df7fb452..4d05a779835 100644
--- a/src/devices/machine/bcreader.cpp
+++ b/src/devices/machine/bcreader.cpp
@@ -208,7 +208,6 @@ void barcode_reader_device::decode(int len)
sum += (i & 1) ? (m_byte_data[i] * 1) : (m_byte_data[i] * 3);
}
- if (m_pixel_data)
{
sum = (10 - (sum % 10)) % 10;
if (sum != m_byte_data[len - 1])
diff --git a/src/devices/machine/f3853.cpp b/src/devices/machine/f3853.cpp
index a37e1b7e59b..49deb99f073 100644
--- a/src/devices/machine/f3853.cpp
+++ b/src/devices/machine/f3853.cpp
@@ -77,7 +77,7 @@ void f3853_device::device_start()
m_interrupt_req_cb.bind_relative_to(*owner());
- m_timer = machine().scheduler().timer_alloc(FUNC(f3853_timer_callback), (void *)this );
+ m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(f3853_device::timer_callback),this));
save_item(NAME(m_high) );
save_item(NAME(m_low) );
@@ -128,13 +128,7 @@ void f3853_device::timer_start(UINT8 value)
m_timer->adjust(period);
}
-
-TIMER_CALLBACK( f3853_device::f3853_timer_callback )
-{
- reinterpret_cast<f3853_device*>(ptr)->timer();
-}
-
-void f3853_device::timer()
+TIMER_CALLBACK_MEMBER(f3853_device::timer_callback)
{
if(m_timer_enable)
{
diff --git a/src/devices/machine/f3853.h b/src/devices/machine/f3853.h
index 82e9610c174..b080b982fc2 100644
--- a/src/devices/machine/f3853.h
+++ b/src/devices/machine/f3853.h
@@ -72,20 +72,17 @@ public:
void set_external_interrupt_in_line(int level);
void set_priority_in_line(int level);
+ TIMER_CALLBACK_MEMBER(timer_callback);
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_post_load() override { }
virtual void device_clock_changed() override { }
-
- static TIMER_CALLBACK( f3853_timer_callback );
-
private:
void set_interrupt_request_line();
void timer_start(UINT8 value);
- void timer();
f3853_interrupt_req_delegate m_interrupt_req_cb;
UINT8 m_high;
diff --git a/src/mame/machine/genpc.cpp b/src/devices/machine/genpc.cpp
index 44dbcd00d20..a363c0d75aa 100644
--- a/src/mame/machine/genpc.cpp
+++ b/src/devices/machine/genpc.cpp
@@ -8,8 +8,7 @@
***************************************************************************/
#include "emu.h"
-#include "includes/genpc.h"
-
+#include "machine/genpc.h"
#include "machine/i8255.h"
#include "machine/pic8259.h"
#include "machine/pit8253.h"
@@ -36,12 +35,6 @@
*
*************************************************************************/
-READ8_MEMBER( ibm5160_mb_device::pc_page_r)
-{
- return 0xff;
-}
-
-
WRITE8_MEMBER( ibm5160_mb_device::pc_page_w)
{
switch(offset % 4)
@@ -528,24 +521,14 @@ ibm5160_mb_device::ibm5160_mb_device(const machine_config &mconfig, const char *
{
}
-void ibm5160_mb_device::install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler)
-{
- int buswidth = m_maincpu->space_config(AS_IO)->m_databus_width;
- switch(buswidth)
- {
- case 8:
- if(!rhandler.isnull()) m_maincpu->space(AS_IO).install_read_handler(start, end, mask, mirror, rhandler, 0);
- if(!whandler.isnull()) m_maincpu->space(AS_IO).install_write_handler(start, end, mask, mirror, whandler, 0);
- break;
- case 16:
- if(!rhandler.isnull()) m_maincpu->space(AS_IO).install_read_handler(start, end, mask, mirror, rhandler, 0xffff);
- if(!whandler.isnull()) m_maincpu->space(AS_IO).install_write_handler(start, end, mask, mirror, whandler, 0xffff);
- break;
- default:
- fatalerror("IBM5160_MOTHERBOARD: Bus width %d not supported\n", buswidth);
- }
-}
-
+DEVICE_ADDRESS_MAP_START( map, 8, ibm5160_mb_device )
+ AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE("dma8237", am9517a_device, read, write)
+ AM_RANGE(0x0020, 0x002f) AM_DEVREADWRITE("pic8259", pic8259_device, read, write)
+ AM_RANGE(0x0040, 0x004f) AM_DEVREADWRITE("pit8253", pit8253_device, read, write)
+ AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
+ AM_RANGE(0x0080, 0x008f) AM_WRITE(pc_page_w)
+ AM_RANGE(0x00a0, 0x00a1) AM_WRITE(nmi_enable_w)
+ADDRESS_MAP_END
//-------------------------------------------------
// device_start - device-specific startup
@@ -553,15 +536,9 @@ void ibm5160_mb_device::install_device(offs_t start, offs_t end, offs_t mask, of
void ibm5160_mb_device::device_start()
{
- install_device(0x0000, 0x000f, 0, 0, read8_delegate(FUNC(am9517a_device::read), (am9517a_device*)m_dma8237), write8_delegate(FUNC(am9517a_device::write), (am9517a_device*)m_dma8237) );
- install_device(0x0020, 0x0021, 0, 0, read8_delegate(FUNC(pic8259_device::read), (pic8259_device*)m_pic8259), write8_delegate(FUNC(pic8259_device::write), (pic8259_device*)m_pic8259) );
- install_device(0x0040, 0x0043, 0, 0, read8_delegate(FUNC(pit8253_device::read), (pit8253_device*)m_pit8253), write8_delegate(FUNC(pit8253_device::write), (pit8253_device*)m_pit8253) );
- install_device(0x0060, 0x0063, 0, 0, read8_delegate(FUNC(i8255_device::read), (i8255_device*)m_ppi8255), write8_delegate(FUNC(i8255_device::write), (i8255_device*)m_ppi8255) );
- install_device(0x0080, 0x0087, 0, 0, read8_delegate(FUNC(ibm5160_mb_device::pc_page_r), this), write8_delegate(FUNC(ibm5160_mb_device::pc_page_w),this) );
- install_device(0x00a0, 0x00a1, 0, 0, read8_delegate(), write8_delegate(FUNC(ibm5160_mb_device::nmi_enable_w),this));
- /* MESS managed RAM */
- if ( m_ram->pointer() )
- membank( "bank10" )->set_base( m_ram->pointer() );
+ if(!m_ram->started())
+ throw device_missing_dependencies();
+ m_maincpu->space(AS_PROGRAM).install_ram(0, m_ram->size() - 1, m_ram->pointer());
}
@@ -607,6 +584,10 @@ static MACHINE_CONFIG_FRAGMENT( ibm5150_mb_config )
MCFG_DEVICE_MODIFY("pc_kbdc")
MCFG_PC_KBDC_OUT_CLOCK_CB(WRITELINE(ibm5150_mb_device, keyboard_clock_w))
+ MCFG_DEVICE_MODIFY("ppi8255")
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(ibm5150_mb_device, pc_ppi_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(ibm5150_mb_device, pc_ppi_portc_r))
+
MCFG_CASSETTE_ADD( "cassette" )
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED)
MACHINE_CONFIG_END
@@ -636,15 +617,6 @@ ibm5150_mb_device::ibm5150_mb_device(const machine_config &mconfig, const char *
{
}
-void ibm5150_mb_device::device_start()
-{
- ibm5160_mb_device::device_start();
-}
-void ibm5150_mb_device::device_reset()
-{
- ibm5160_mb_device::device_reset();
-}
-
READ8_MEMBER (ibm5150_mb_device::pc_ppi_porta_r)
{
int data = 0xFF;
@@ -788,6 +760,10 @@ const device_type EC1841_MOTHERBOARD = &device_creator<ec1841_mb_device>;
static MACHINE_CONFIG_FRAGMENT( ec1841_mb_config )
MCFG_FRAGMENT_ADD(ibm5160_mb_config)
+ MCFG_DEVICE_MODIFY("ppi8255")
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(ec1841_mb_device, pc_ppi_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(ec1841_mb_device, pc_ppi_portc_r))
+
MCFG_DEVICE_MODIFY("pc_kbdc")
MCFG_PC_KBDC_OUT_CLOCK_CB(WRITELINE(ec1841_mb_device, keyboard_clock_w))
MACHINE_CONFIG_END
@@ -857,11 +833,6 @@ ec1841_mb_device::ec1841_mb_device(const machine_config &mconfig, const char *ta
void ec1841_mb_device::device_start()
{
- ibm5160_mb_device::device_start();
-}
-void ec1841_mb_device::device_reset()
-{
- ibm5160_mb_device::device_reset();
}
// kbd interface is 5150-like but PB2 controls access to second bank of DIP switches (SA2).
@@ -939,16 +910,12 @@ ioport_constructor pc_noppi_mb_device::device_input_ports() const
return INPUT_PORTS_NAME( pc_noppi_mb );
}
-void pc_noppi_mb_device::device_start()
-{
- install_device(0x0000, 0x000f, 0, 0, read8_delegate(FUNC(am9517a_device::read), (am9517a_device*)m_dma8237), write8_delegate(FUNC(am9517a_device::write), (am9517a_device*)m_dma8237) );
- install_device(0x0020, 0x0021, 0, 0, read8_delegate(FUNC(pic8259_device::read), (pic8259_device*)m_pic8259), write8_delegate(FUNC(pic8259_device::write), (pic8259_device*)m_pic8259) );
- install_device(0x0040, 0x0043, 0, 0, read8_delegate(FUNC(pit8253_device::read), (pit8253_device*)m_pit8253), write8_delegate(FUNC(pit8253_device::write), (pit8253_device*)m_pit8253) );
- install_device(0x0080, 0x0087, 0, 0, read8_delegate(FUNC(ibm5160_mb_device::pc_page_r), this), write8_delegate(FUNC(ibm5160_mb_device::pc_page_w),this) );
- install_device(0x00a0, 0x00a1, 0, 0, read8_delegate(), write8_delegate(FUNC(ibm5160_mb_device::nmi_enable_w),this));
- /* MESS managed RAM */
- if ( m_ram->pointer() )
- membank( "bank10" )->set_base( m_ram->pointer() );
-}
+DEVICE_ADDRESS_MAP_START( map, 8, pc_noppi_mb_device )
+ AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE("dma8237", am9517a_device, read, write)
+ AM_RANGE(0x0020, 0x002f) AM_DEVREADWRITE("pic8259", pic8259_device, read, write)
+ AM_RANGE(0x0040, 0x004f) AM_DEVREADWRITE("pit8253", pit8253_device, read, write)
+ AM_RANGE(0x0080, 0x008f) AM_WRITE(pc_page_w)
+ AM_RANGE(0x00a0, 0x00a1) AM_WRITE(nmi_enable_w)
+ADDRESS_MAP_END
const device_type PCNOPPI_MOTHERBOARD = &device_creator<pc_noppi_mb_device>;
diff --git a/src/mame/includes/genpc.h b/src/devices/machine/genpc.h
index b3353de35d6..e766ea367da 100644
--- a/src/mame/includes/genpc.h
+++ b/src/devices/machine/genpc.h
@@ -36,12 +36,12 @@ public:
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const override;
virtual ioport_constructor device_input_ports() const override;
+
+ DECLARE_ADDRESS_MAP(map, 8);
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
-
- void install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler);
public:
required_device<cpu_device> m_maincpu;
required_device<pic8259_device> m_pic8259;
@@ -76,12 +76,12 @@ public:
UINT8 m_ppi_shift_enable;
// interface to the keyboard
- virtual DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w );
+ DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w );
DECLARE_WRITE_LINE_MEMBER( keyboard_data_w );
- virtual DECLARE_READ8_MEMBER ( pc_ppi_porta_r );
- virtual DECLARE_READ8_MEMBER ( pc_ppi_portc_r );
- virtual DECLARE_WRITE8_MEMBER( pc_ppi_portb_w );
+ DECLARE_READ8_MEMBER ( pc_ppi_porta_r );
+ DECLARE_READ8_MEMBER ( pc_ppi_portc_r );
+ DECLARE_WRITE8_MEMBER( pc_ppi_portb_w );
DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out1_changed );
DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out2_changed );
@@ -104,7 +104,6 @@ public:
DECLARE_WRITE_LINE_MEMBER( pc_speaker_set_spkrdata );
- DECLARE_READ8_MEMBER(pc_page_r);
DECLARE_WRITE8_MEMBER(pc_page_w);
DECLARE_WRITE8_MEMBER(nmi_enable_w);
@@ -133,18 +132,16 @@ public:
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const override;
- virtual DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w ) override;
+ DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w );
protected:
// device-level overrides
- virtual void device_start() override;
- virtual void device_reset() override;
required_device<cassette_image_device> m_cassette;
public:
- virtual DECLARE_READ8_MEMBER ( pc_ppi_porta_r ) override;
- virtual DECLARE_READ8_MEMBER ( pc_ppi_portc_r ) override;
- virtual DECLARE_WRITE8_MEMBER( pc_ppi_portb_w ) override;
+ DECLARE_READ8_MEMBER ( pc_ppi_porta_r );
+ DECLARE_READ8_MEMBER ( pc_ppi_portc_r );
+ DECLARE_WRITE8_MEMBER( pc_ppi_portb_w );
};
@@ -165,17 +162,13 @@ public:
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const override;
virtual ioport_constructor device_input_ports() const override;
-
-protected:
- // device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
public:
- virtual DECLARE_READ8_MEMBER ( pc_ppi_portc_r ) override;
- virtual DECLARE_WRITE8_MEMBER( pc_ppi_portb_w ) override;
+ DECLARE_READ8_MEMBER ( pc_ppi_portc_r );
+ DECLARE_WRITE8_MEMBER( pc_ppi_portb_w );
- virtual DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w ) override;
+ DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w );
};
extern const device_type EC1841_MOTHERBOARD;
@@ -189,12 +182,12 @@ class pc_noppi_mb_device : public ibm5160_mb_device
public:
// construction/destruction
pc_noppi_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ UINT8 pit_out2() { return m_pit_out2; } // helper for near-clones with multifunction ics instead of 8255s
+
+ DECLARE_ADDRESS_MAP(map, 8);
virtual machine_config_constructor device_mconfig_additions() const override;
virtual ioport_constructor device_input_ports() const override;
-protected:
- // device-level overrides
- void device_start() override;
};
extern const device_type PCNOPPI_MOTHERBOARD;
diff --git a/src/devices/machine/k056230.cpp b/src/devices/machine/k056230.cpp
index 8d750b66a8a..f641b799147 100644
--- a/src/devices/machine/k056230.cpp
+++ b/src/devices/machine/k056230.cpp
@@ -54,12 +54,7 @@ READ8_MEMBER(k056230_device::read)
return 0;
}
-TIMER_CALLBACK( k056230_device::network_irq_clear_callback )
-{
- reinterpret_cast<k056230_device*>(ptr)->network_irq_clear();
-}
-
-void k056230_device::network_irq_clear()
+TIMER_CALLBACK_MEMBER(k056230_device::network_irq_clear)
{
if (m_cpu)
m_cpu->set_input_line(INPUT_LINE_IRQ2, CLEAR_LINE);
@@ -84,7 +79,7 @@ WRITE8_MEMBER(k056230_device::write)
if (m_cpu)
m_cpu->set_input_line(INPUT_LINE_IRQ2, ASSERT_LINE);
- machine().scheduler().timer_set(attotime::from_usec(10), FUNC(network_irq_clear_callback), 0, (void*)this);
+ machine().scheduler().timer_set(attotime::from_usec(10), timer_expired_delegate(FUNC(k056230_device::network_irq_clear), this));
}
}
// else
diff --git a/src/devices/machine/k056230.h b/src/devices/machine/k056230.h
index 5695261f4c2..4fa8d165fd1 100644
--- a/src/devices/machine/k056230.h
+++ b/src/devices/machine/k056230.h
@@ -47,7 +47,7 @@ public:
DECLARE_READ8_MEMBER(read);
DECLARE_WRITE8_MEMBER(write);
- static TIMER_CALLBACK( network_irq_clear_callback );
+ TIMER_CALLBACK_MEMBER(network_irq_clear);
protected:
// device-level overrides
@@ -58,7 +58,6 @@ protected:
private:
- void network_irq_clear();
int m_is_thunderh;
required_device<cpu_device> m_cpu;
diff --git a/src/devices/machine/nvram.cpp b/src/devices/machine/nvram.cpp
index d1e99ceb98b..88d1191187a 100644
--- a/src/devices/machine/nvram.cpp
+++ b/src/devices/machine/nvram.cpp
@@ -165,5 +165,5 @@ void nvram_device::determine_final_base()
// if we are region-backed for the default, find it now and make sure it's the right size
if (m_region != nullptr && m_region->bytes() != m_length)
- throw emu_fatalerror("NVRAM device '%s' has a default region, but it should be 0x%" SIZETFMT "X bytes", tag(), m_length);
+ throw emu_fatalerror("%s",string_format("NVRAM device '%s' has a default region, but it should be 0x%I64uX bytes", tag(), m_length).c_str());
}
diff --git a/src/devices/machine/ram.cpp b/src/devices/machine/ram.cpp
index c190ea64f16..66e8b31cf4f 100644
--- a/src/devices/machine/ram.cpp
+++ b/src/devices/machine/ram.cpp
@@ -1,4 +1,4 @@
-// license: BSD-3-Clause
+// license:BSD-3-Clause
// copyright-holders: Dirk Best
/*************************************************************************
diff --git a/src/devices/machine/ram.h b/src/devices/machine/ram.h
index 5140309f825..8fbe85cd865 100644
--- a/src/devices/machine/ram.h
+++ b/src/devices/machine/ram.h
@@ -1,4 +1,4 @@
-// license: BSD-3-Clause
+// license:BSD-3-Clause
// copyright-holders: Dirk Best
/*************************************************************************
diff --git a/src/devices/machine/rtc65271.cpp b/src/devices/machine/rtc65271.cpp
index 074b8d87f48..0c02e4fb176 100644
--- a/src/devices/machine/rtc65271.cpp
+++ b/src/devices/machine/rtc65271.cpp
@@ -464,30 +464,10 @@ void rtc65271_device::field_interrupts()
/*
- Timer handlers
-*/
-TIMER_CALLBACK( rtc65271_device::rtc_SQW_callback )
-{
- rtc65271_device *rtc = reinterpret_cast<rtc65271_device *>(ptr);
- rtc->rtc_SQW_cb();
-}
-
-TIMER_CALLBACK( rtc65271_device::rtc_begin_update_callback )
-{
- rtc65271_device *rtc = reinterpret_cast<rtc65271_device *>(ptr);
- rtc->rtc_begin_update_cb();
-}
-
-TIMER_CALLBACK( rtc65271_device::rtc_end_update_callback )
-{
- rtc65271_device *rtc = reinterpret_cast<rtc65271_device *>(ptr);
- rtc->rtc_end_update_cb();
-}
-/*
Update SQW output state each half-period and assert periodic interrupt each
period.
*/
-void rtc65271_device::rtc_SQW_cb()
+TIMER_CALLBACK_MEMBER(rtc65271_device::rtc_SQW_cb)
{
attotime half_period;
@@ -506,14 +486,14 @@ void rtc65271_device::rtc_SQW_cb()
/*
Begin update cycle (called every second)
*/
-void rtc65271_device::rtc_begin_update_cb()
+TIMER_CALLBACK_MEMBER(rtc65271_device::rtc_begin_update_cb)
{
if (((m_regs[reg_A] & reg_A_DV) == 0x20) && ! (m_regs[reg_B] & reg_B_SET))
{
m_regs[reg_A] |= reg_A_UIP;
/* schedule end of update cycle */
- machine().scheduler().timer_set(UPDATE_CYCLE_TIME, FUNC(rtc_end_update_callback), 0, (void *)this);
+ machine().scheduler().timer_set(UPDATE_CYCLE_TIME, timer_expired_delegate(FUNC(rtc65271_device::rtc_end_update_cb), this));
}
}
@@ -521,7 +501,7 @@ void rtc65271_device::rtc_begin_update_cb()
End update cycle (called UPDATE_CYCLE_TIME = 1948us after start of update
cycle)
*/
-void rtc65271_device::rtc_end_update_cb()
+TIMER_CALLBACK_MEMBER(rtc65271_device::rtc_end_update_cb)
{
static const int days_in_month_table[12] =
{
@@ -684,9 +664,9 @@ rtc65271_device::rtc65271_device(const machine_config &mconfig, const char *tag,
//-------------------------------------------------
void rtc65271_device::device_start()
{
- m_update_timer = machine().scheduler().timer_alloc(FUNC(rtc_begin_update_callback), (void *)this);
+ m_update_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(rtc65271_device::rtc_begin_update_cb), this));
m_update_timer->adjust(attotime::from_seconds(1), 0, attotime::from_seconds(1));
- m_SQW_timer = machine().scheduler().timer_alloc(FUNC(rtc_SQW_callback), (void *)this);
+ m_SQW_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(rtc65271_device::rtc_SQW_cb), this));
m_interrupt_cb.resolve();
save_item(NAME(m_regs));
diff --git a/src/devices/machine/rtc65271.h b/src/devices/machine/rtc65271.h
index c5d554e75fd..903f5fe9a28 100644
--- a/src/devices/machine/rtc65271.h
+++ b/src/devices/machine/rtc65271.h
@@ -43,13 +43,9 @@ private:
void write(int xramsel, offs_t offset, UINT8 data);
void field_interrupts();
- static TIMER_CALLBACK( rtc_SQW_callback );
- static TIMER_CALLBACK( rtc_begin_update_callback );
- static TIMER_CALLBACK( rtc_end_update_callback );
-
- void rtc_SQW_cb();
- void rtc_begin_update_cb();
- void rtc_end_update_cb();
+ TIMER_CALLBACK_MEMBER(rtc_SQW_cb);
+ TIMER_CALLBACK_MEMBER(rtc_begin_update_cb);
+ TIMER_CALLBACK_MEMBER(rtc_end_update_cb);
/* 64 8-bit registers (10 clock registers, 4 control/status registers, and
50 bytes of user RAM) */
UINT8 m_regs[64];
diff --git a/src/devices/machine/rtc9701.cpp b/src/devices/machine/rtc9701.cpp
index 7c92ddc53e7..fc72c76c900 100644
--- a/src/devices/machine/rtc9701.cpp
+++ b/src/devices/machine/rtc9701.cpp
@@ -41,7 +41,7 @@ rtc9701_device::rtc9701_device(const machine_config &mconfig, const char *tag, d
{
}
-void rtc9701_device::timer_callback()
+TIMER_CALLBACK_MEMBER(rtc9701_device::timer_callback)
{
static const UINT8 dpm[12] = { 0x31, 0x28, 0x31, 0x30, 0x31, 0x30, 0x31, 0x31, 0x30, 0x31, 0x30, 0x31 };
int dpm_count;
@@ -72,11 +72,6 @@ void rtc9701_device::timer_callback()
if((m_rtc.year & 0xf0) >= 0xa0) { m_rtc.year = 0; } //2000-2099 possible timeframe
}
-TIMER_CALLBACK( rtc9701_device::rtc_inc_callback )
-{
- reinterpret_cast<rtc9701_device *>(ptr)->timer_callback();
-}
-
//-------------------------------------------------
// device_validity_check - perform validity checks
// on this device
@@ -93,7 +88,7 @@ void rtc9701_device::device_validity_check(validity_checker &valid) const
void rtc9701_device::device_start()
{
/* let's call the timer callback every second */
- machine().scheduler().timer_pulse(attotime::from_hz(clock() / XTAL_32_768kHz), FUNC(rtc_inc_callback), 0, (void *)this);
+ machine().scheduler().timer_pulse(attotime::from_hz(clock() / XTAL_32_768kHz), timer_expired_delegate(FUNC(rtc9701_device::timer_callback), this));
system_time systime;
machine().base_datetime(systime);
diff --git a/src/devices/machine/rtc9701.h b/src/devices/machine/rtc9701.h
index 14407f157ec..c294cb5d9f1 100644
--- a/src/devices/machine/rtc9701.h
+++ b/src/devices/machine/rtc9701.h
@@ -59,7 +59,7 @@ public:
DECLARE_READ_LINE_MEMBER( read_bit );
DECLARE_WRITE_LINE_MEMBER( set_cs_line );
DECLARE_WRITE_LINE_MEMBER( set_clock_line );
- void timer_callback();
+ TIMER_CALLBACK_MEMBER(timer_callback);
protected:
// device-level overrides
@@ -74,8 +74,6 @@ protected:
inline UINT8 rtc_read(UINT8 offset);
inline void rtc_write(UINT8 offset,UINT8 data);
- static TIMER_CALLBACK( rtc_inc_callback );
-
int m_latch;
int m_reset_line;
int m_clock_line;
diff --git a/src/devices/machine/s3520cf.cpp b/src/devices/machine/s3520cf.cpp
index d37a6b2a542..e504e5b9022 100644
--- a/src/devices/machine/s3520cf.cpp
+++ b/src/devices/machine/s3520cf.cpp
@@ -40,7 +40,7 @@ s3520cf_device::s3520cf_device(const machine_config &mconfig, const char *tag, d
{
}
-void s3520cf_device::timer_callback()
+TIMER_CALLBACK_MEMBER(s3520cf_device::timer_callback)
{
static const UINT8 dpm[12] = { 0x31, 0x28, 0x31, 0x30, 0x31, 0x30, 0x31, 0x31, 0x30, 0x31, 0x30, 0x31 };
int dpm_count;
@@ -71,10 +71,6 @@ void s3520cf_device::timer_callback()
if((m_rtc.year & 0xf0) >= 0xa0) { m_rtc.year = 0; } //1901-2000 possible timeframe
}
-TIMER_CALLBACK( s3520cf_device::rtc_inc_callback )
-{
- reinterpret_cast<s3520cf_device *>(ptr)->timer_callback();
-}
//-------------------------------------------------
// device_validity_check - perform validity checks
@@ -93,7 +89,7 @@ void s3520cf_device::device_validity_check(validity_checker &valid) const
void s3520cf_device::device_start()
{
/* let's call the timer callback every second for now */
- machine().scheduler().timer_pulse(attotime::from_hz(clock() / XTAL_32_768kHz), FUNC(rtc_inc_callback), 0, (void *)this);
+ machine().scheduler().timer_pulse(attotime::from_hz(clock() / XTAL_32_768kHz), timer_expired_delegate(FUNC(s3520cf_device::timer_callback), this));
system_time systime;
machine().base_datetime(systime);
diff --git a/src/devices/machine/s3520cf.h b/src/devices/machine/s3520cf.h
index c277c69142a..b2b3fa452a6 100644
--- a/src/devices/machine/s3520cf.h
+++ b/src/devices/machine/s3520cf.h
@@ -50,7 +50,7 @@ public:
DECLARE_WRITE_LINE_MEMBER( set_cs_line );
DECLARE_WRITE_LINE_MEMBER( set_clock_line );
DECLARE_WRITE_LINE_MEMBER( write_bit );
- void timer_callback();
+ TIMER_CALLBACK_MEMBER(timer_callback);
protected:
// device-level overrides
@@ -60,8 +60,6 @@ protected:
inline UINT8 rtc_read(UINT8 offset);
inline void rtc_write(UINT8 offset,UINT8 data);
- static TIMER_CALLBACK( rtc_inc_callback );
-
int m_dir;
int m_latch;
int m_reset_line;
diff --git a/src/devices/machine/s3c24xx.inc b/src/devices/machine/s3c24xx.inc
index e2c4800f077..ca7bc05a90d 100644
--- a/src/devices/machine/s3c24xx.inc
+++ b/src/devices/machine/s3c24xx.inc
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Tim Schuerewegen
/*******************************************************************************
Samsung S3C2400 / S3C2410 / S3C2440
diff --git a/src/devices/machine/serflash.cpp b/src/devices/machine/serflash.cpp
index ebdd1dd53a9..f5a002ae929 100644
--- a/src/devices/machine/serflash.cpp
+++ b/src/devices/machine/serflash.cpp
@@ -77,7 +77,7 @@ void serflash_device::nvram_read(emu_file &file)
int size = m_length / FLASH_PAGE_SIZE;
- if (file)
+ if (file.is_open())
{
UINT32 page;
file.read(&page, 4);
diff --git a/src/devices/machine/terminal.cpp b/src/devices/machine/terminal.cpp
index 6b1b26b8c85..86388182f15 100644
--- a/src/devices/machine/terminal.cpp
+++ b/src/devices/machine/terminal.cpp
@@ -319,14 +319,14 @@ WRITE8_MEMBER( generic_terminal_device::kbd_put )
***************************************************************************/
static MACHINE_CONFIG_FRAGMENT( generic_terminal )
- MCFG_SCREEN_ADD(TERMINAL_SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(TERMINAL_SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(TERMINAL_WIDTH*8, TERMINAL_HEIGHT*10)
MCFG_SCREEN_VISIBLE_AREA(0, TERMINAL_WIDTH*8-1, 0, TERMINAL_HEIGHT*10-1)
MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, generic_terminal_device, update)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0)
MCFG_GENERIC_KEYBOARD_CB(WRITE8(generic_terminal_device, kbd_put))
diff --git a/src/devices/machine/v3021.cpp b/src/devices/machine/v3021.cpp
index ab0057d9951..d7caf681c70 100644
--- a/src/devices/machine/v3021.cpp
+++ b/src/devices/machine/v3021.cpp
@@ -38,7 +38,7 @@ v3021_device::v3021_device(const machine_config &mconfig, const char *tag, devic
{
}
-void v3021_device::timer_callback()
+TIMER_CALLBACK_MEMBER(v3021_device::timer_callback)
{
static const UINT8 dpm[12] = { 0x31, 0x28, 0x31, 0x30, 0x31, 0x30, 0x31, 0x31, 0x30, 0x31, 0x30, 0x31 };
int dpm_count;
@@ -69,11 +69,6 @@ void v3021_device::timer_callback()
if((m_rtc.year & 0xf0) >= 0xa0) { m_rtc.year = 0; } //2000-2099 possible timeframe
}
-TIMER_CALLBACK( v3021_device::rtc_inc_callback )
-{
- reinterpret_cast<v3021_device *>(ptr)->timer_callback();
-}
-
//-------------------------------------------------
// device_validity_check - perform validity checks
// on this device
@@ -90,7 +85,7 @@ void v3021_device::device_validity_check(validity_checker &valid) const
void v3021_device::device_start()
{
/* let's call the timer callback every second */
- machine().scheduler().timer_pulse(attotime::from_hz(clock() / XTAL_32_768kHz), FUNC(rtc_inc_callback), 0, (void *)this);
+ machine().scheduler().timer_pulse(attotime::from_hz(clock() / XTAL_32_768kHz), timer_expired_delegate(FUNC(v3021_device::timer_callback),this));
system_time systime;
machine().base_datetime(systime);
diff --git a/src/devices/machine/v3021.h b/src/devices/machine/v3021.h
index 7e4844216c4..ed13501e949 100644
--- a/src/devices/machine/v3021.h
+++ b/src/devices/machine/v3021.h
@@ -45,7 +45,7 @@ public:
// I/O operations
DECLARE_WRITE8_MEMBER( write );
DECLARE_READ8_MEMBER( read );
- void timer_callback();
+ TIMER_CALLBACK_MEMBER(timer_callback);
protected:
// device-level overrides
@@ -53,8 +53,6 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
- static TIMER_CALLBACK( rtc_inc_callback );
-
UINT8 m_cal_mask,m_cal_com,m_cal_cnt,m_cal_val;
rtc_regs_t m_rtc;
diff --git a/src/devices/machine/wd_fdc.cpp b/src/devices/machine/wd_fdc.cpp
index 15744f5f7bc..84fcbf5ceb8 100644
--- a/src/devices/machine/wd_fdc.cpp
+++ b/src/devices/machine/wd_fdc.cpp
@@ -90,7 +90,7 @@ void wd_fdc_t::device_start()
enmf_cb.resolve();
if (!has_enmf && !enmf_cb.isnull())
- logerror("%s: Warning, this chip doesn't have an ENMF line.\n", tag());
+ logerror("Warning, this chip doesn't have an ENMF line.\n");
t_gen = timer_alloc(TM_GEN);
t_cmd = timer_alloc(TM_CMD);
@@ -154,9 +154,9 @@ void wd_fdc_t::soft_reset()
intrq_cond = 0;
live_abort();
- // restore
- last_dir = 1;
- seek_start(RESTORE);
+ // trigger a restore after everything else is reset too, in particular the floppy device itself
+ sub_state = INITIAL_RESTORE;
+ t_gen->adjust(attotime::zero);
}
void wd_fdc_t::set_floppy(floppy_image_device *_floppy)
@@ -190,13 +190,13 @@ void wd_fdc_t::set_floppy(floppy_image_device *_floppy)
void wd_fdc_t::dden_w(bool _dden)
{
if(disable_mfm) {
- logerror("%s: Error, this chip does not have a dden line\n", tag());
+ logerror("Error, this chip does not have a dden line\n");
return;
}
if(dden != _dden) {
dden = _dden;
- if (TRACE_LINES) logerror("%s: select %s\n", tag(), dden ? "fm" : "mfm");
+ if (TRACE_LINES) logerror("select %s\n", dden ? "fm" : "mfm");
}
}
@@ -215,7 +215,7 @@ std::string wd_fdc_t::ttsn()
void wd_fdc_t::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
- if (TRACE_EVENT) logerror("%s: Event fired for timer %s\n", tag(), (id==TM_GEN)? "TM_GEN" : (id==TM_CMD)? "TM_CMD" : (id==TM_TRACK)? "TM_TRACK" : "TM_SECTOR");
+ if (TRACE_EVENT) logerror("Event fired for timer %s\n", (id==TM_GEN)? "TM_GEN" : (id==TM_CMD)? "TM_CMD" : (id==TM_TRACK)? "TM_TRACK" : "TM_SECTOR");
live_sync();
switch(id) {
@@ -243,7 +243,7 @@ void wd_fdc_t::command_end()
void wd_fdc_t::seek_start(int state)
{
- if (TRACE_COMMAND) logerror("%s: seek %d (track=%d)\n", tag(), data, track);
+ if (TRACE_COMMAND) logerror("seek %d (track=%d)\n", data, track);
main_state = state;
status &= ~(S_CRC|S_RNF|S_SPIN);
if(head_control) {
@@ -263,7 +263,7 @@ void wd_fdc_t::seek_continue()
for(;;) {
switch(sub_state) {
case SPINUP:
- if (TRACE_STATE) logerror("%s: SPINUP\n", tag());
+ if (TRACE_STATE) logerror("SPINUP\n");
if(!(status & S_MON)) {
spinup();
return;
@@ -274,11 +274,11 @@ void wd_fdc_t::seek_continue()
break;
case SPINUP_WAIT:
- if (TRACE_STATE) logerror("%s: SPINUP_WAIT\n", tag());
+ if (TRACE_STATE) logerror("SPINUP_WAIT\n");
return;
case SPINUP_DONE:
- if (TRACE_STATE) logerror("%s: SPINUP_DONE\n", tag());
+ if (TRACE_STATE) logerror("SPINUP_DONE\n");
if(main_state == RESTORE && floppy && !floppy->trk00_r()) {
sub_state = SEEK_WAIT_STEP_TIME;
delay_cycles(t_gen, step_times[command & 3]);
@@ -296,7 +296,7 @@ void wd_fdc_t::seek_continue()
break;
case SEEK_MOVE:
- if (TRACE_STATE) logerror("%s: SEEK_MOVE\n", tag());
+ if (TRACE_STATE) logerror("SEEK_MOVE\n");
if(floppy) {
floppy->dir_w(last_dir);
floppy->stp_w(0);
@@ -312,11 +312,11 @@ void wd_fdc_t::seek_continue()
return;
case SEEK_WAIT_STEP_TIME:
- if (TRACE_STATE) logerror("%s: SEEK_WAIT_STEP_TIME\n", tag());
+ if (TRACE_STATE) logerror("SEEK_WAIT_STEP_TIME\n");
return;
case SEEK_WAIT_STEP_TIME_DONE: {
- if (TRACE_STATE) logerror("%s: SEEK_WAIT_STEP_TIME_DONE\n", tag());
+ if (TRACE_STATE) logerror("SEEK_WAIT_STEP_TIME_DONE\n");
bool done = false;
switch(main_state) {
case RESTORE:
@@ -349,16 +349,16 @@ void wd_fdc_t::seek_continue()
}
case SEEK_WAIT_STABILIZATION_TIME:
- if (TRACE_STATE) logerror("%s: SEEK_WAIT_STABILIZATION_TIME\n", tag());
+ if (TRACE_STATE) logerror("SEEK_WAIT_STABILIZATION_TIME\n");
return;
case SEEK_WAIT_STABILIZATION_TIME_DONE:
- if (TRACE_STATE) logerror("%s: SEEK_WAIT_STABILIZATION_TIME_DONE\n", tag());
+ if (TRACE_STATE) logerror("SEEK_WAIT_STABILIZATION_TIME_DONE\n");
sub_state = SEEK_DONE;
break;
case SEEK_DONE:
- if (TRACE_STATE) logerror("%s: SEEK_DONE\n", tag());
+ if (TRACE_STATE) logerror("SEEK_DONE\n");
status |= S_HLD;
hld = true;
if (!hld_cb.isnull())
@@ -378,7 +378,7 @@ void wd_fdc_t::seek_continue()
return;
case SCAN_ID:
- if (TRACE_STATE) logerror("%s: SCAN_ID\n", tag());
+ if (TRACE_STATE) logerror("SCAN_ID\n");
if(cur_live.idbuf[0] != track) {
live_start(SEARCH_ADDRESS_MARK_HEADER);
return;
@@ -392,13 +392,13 @@ void wd_fdc_t::seek_continue()
return;
case SCAN_ID_FAILED:
- if (TRACE_STATE) logerror("%s: SCAN_ID_FAILED\n", tag());
+ if (TRACE_STATE) logerror("SCAN_ID_FAILED\n");
status |= S_RNF;
command_end();
return;
default:
- logerror("%s: seek unknown sub-state %d\n", ttsn().c_str(), sub_state);
+ logerror("seek unknown sub-state %d\n", ttsn().c_str(), sub_state);
return;
}
}
@@ -407,7 +407,7 @@ void wd_fdc_t::seek_continue()
bool wd_fdc_t::sector_matches() const
{
if(TRACE_MATCH)
- logerror("%s: matching read T=%02x H=%02x S=%02x L=%02x - searched T=%02x S=%02x\n", tag(),
+ logerror("matching read T=%02x H=%02x S=%02x L=%02x - searched T=%02x S=%02x\n",
cur_live.idbuf[0], cur_live.idbuf[1], cur_live.idbuf[2], cur_live.idbuf[3],
track, sector);
@@ -428,7 +428,7 @@ bool wd_fdc_t::is_ready()
void wd_fdc_t::read_sector_start()
{
- if (TRACE_COMMAND) logerror("%s: read sector%s (c=%02x) t=%d, s=%d\n", tag(), command & 0x10 ? " multiple" : "", command, track, sector);
+ if (TRACE_COMMAND) logerror("read sector%s (c=%02x) t=%d, s=%d\n", command & 0x10 ? " multiple" : "", command, track, sector);
if(!is_ready()) {
command_end();
return;
@@ -449,7 +449,7 @@ void wd_fdc_t::read_sector_continue()
for(;;) {
switch(sub_state) {
case SPINUP:
- if (TRACE_STATE) logerror("%s: SPINUP\n", tag());
+ if (TRACE_STATE) logerror("SPINUP\n");
if(!(status & S_MON)) {
spinup();
return;
@@ -458,11 +458,11 @@ void wd_fdc_t::read_sector_continue()
break;
case SPINUP_WAIT:
- if (TRACE_STATE) logerror("%s: SPINUP_WAIT\n", tag());
+ if (TRACE_STATE) logerror("SPINUP_WAIT\n");
return;
case SPINUP_DONE:
- if (TRACE_STATE) logerror("%s: SPINUP_DONE\n", tag());
+ if (TRACE_STATE) logerror("SPINUP_DONE\n");
if(command & 4) {
sub_state = SETTLE_WAIT;
delay_cycles(t_gen, settle_time());
@@ -473,18 +473,18 @@ void wd_fdc_t::read_sector_continue()
}
case SETTLE_WAIT:
- if (TRACE_STATE) logerror("%s: SETTLE_WAIT\n", tag());
+ if (TRACE_STATE) logerror("SETTLE_WAIT\n");
return;
case SETTLE_DONE:
- if (TRACE_STATE) logerror("%s: SETTLE_DONE\n", tag());
+ if (TRACE_STATE) logerror("SETTLE_DONE\n");
sub_state = SCAN_ID;
counter = 0;
live_start(SEARCH_ADDRESS_MARK_HEADER);
return;
case SCAN_ID:
- if (TRACE_STATE) logerror("%s: SCAN_ID\n", tag());
+ if (TRACE_STATE) logerror("SCAN_ID\n");
if(!sector_matches()) {
live_start(SEARCH_ADDRESS_MARK_HEADER);
return;
@@ -500,13 +500,13 @@ void wd_fdc_t::read_sector_continue()
return;
case SCAN_ID_FAILED:
- if (TRACE_STATE) logerror("%s: SCAN_ID_FAILED\n", tag());
+ if (TRACE_STATE) logerror("SCAN_ID_FAILED\n");
status |= S_RNF;
command_end();
return;
case SECTOR_READ:
- if (TRACE_STATE) logerror("%s: SECTOR_READ\n", tag());
+ if (TRACE_STATE) logerror("SECTOR_READ\n");
if(cur_live.crc)
status |= S_CRC;
@@ -520,7 +520,7 @@ void wd_fdc_t::read_sector_continue()
break;
default:
- logerror("%s: read sector unknown sub-state %d\n", ttsn().c_str(), sub_state);
+ logerror("read sector unknown sub-state %d\n", ttsn().c_str(), sub_state);
return;
}
}
@@ -528,7 +528,7 @@ void wd_fdc_t::read_sector_continue()
void wd_fdc_t::read_track_start()
{
- if (TRACE_COMMAND) logerror("%s: read track (c=%02x) t=%d\n", tag(), command, track);
+ if (TRACE_COMMAND) logerror("read track (c=%02x) t=%d\n", command, track);
if(!is_ready()) {
command_end();
@@ -550,7 +550,7 @@ void wd_fdc_t::read_track_continue()
for(;;) {
switch(sub_state) {
case SPINUP:
- if (TRACE_STATE) logerror("%s: SPINUP\n", tag());
+ if (TRACE_STATE) logerror("SPINUP\n");
if(!(status & S_MON)) {
spinup();
return;
@@ -559,11 +559,11 @@ void wd_fdc_t::read_track_continue()
break;
case SPINUP_WAIT:
- if (TRACE_STATE) logerror("%s: SPINUP_WAIT\n", tag());
+ if (TRACE_STATE) logerror("SPINUP_WAIT\n");
return;
case SPINUP_DONE:
- if (TRACE_STATE) logerror("%s: SPINUP_DONE\n", tag());
+ if (TRACE_STATE) logerror("SPINUP_DONE\n");
if(command & 4) {
sub_state = SETTLE_WAIT;
delay_cycles(t_gen, settle_time());
@@ -575,31 +575,31 @@ void wd_fdc_t::read_track_continue()
}
case SETTLE_WAIT:
- if (TRACE_STATE) logerror("%s: SETTLE_WAIT\n", tag());
+ if (TRACE_STATE) logerror("SETTLE_WAIT\n");
return;
case SETTLE_DONE:
- if (TRACE_STATE) logerror("%s: SETTLE_DONE\n", tag());
+ if (TRACE_STATE) logerror("SETTLE_DONE\n");
sub_state = WAIT_INDEX;
return;
case WAIT_INDEX:
- if (TRACE_STATE) logerror("%s: WAIT_INDEX\n", tag());
+ if (TRACE_STATE) logerror("WAIT_INDEX\n");
return;
case WAIT_INDEX_DONE:
- if (TRACE_STATE) logerror("%s: WAIT_INDEX_DONE\n", tag());
+ if (TRACE_STATE) logerror("WAIT_INDEX_DONE\n");
sub_state = TRACK_DONE;
live_start(READ_TRACK_DATA);
return;
case TRACK_DONE:
- if (TRACE_STATE) logerror("%s: TRACK_DONE\n", tag());
+ if (TRACE_STATE) logerror("TRACK_DONE\n");
command_end();
return;
default:
- logerror("%s: read track unknown sub-state %d\n", ttsn().c_str(), sub_state);
+ logerror("read track unknown sub-state %d\n", ttsn().c_str(), sub_state);
return;
}
}
@@ -607,7 +607,7 @@ void wd_fdc_t::read_track_continue()
void wd_fdc_t::read_id_start()
{
- if (TRACE_COMMAND) logerror("%s: read id (c=%02x)\n", tag(), command);
+ if (TRACE_COMMAND) logerror("read id (c=%02x)\n", command);
if(!is_ready()) {
command_end();
return;
@@ -628,7 +628,7 @@ void wd_fdc_t::read_id_continue()
for(;;) {
switch(sub_state) {
case SPINUP:
- if (TRACE_STATE) logerror("%s: SPINUP\n", tag());
+ if (TRACE_STATE) logerror("SPINUP\n");
if(!(status & S_MON)) {
spinup();
return;
@@ -637,11 +637,11 @@ void wd_fdc_t::read_id_continue()
break;
case SPINUP_WAIT:
- if (TRACE_STATE) logerror("%s: SPINUP_WAIT\n", tag());
+ if (TRACE_STATE) logerror("SPINUP_WAIT\n");
return;
case SPINUP_DONE:
- if (TRACE_STATE) logerror("%s: SPINUP_DONE\n", tag());
+ if (TRACE_STATE) logerror("SPINUP_DONE\n");
if(command & 4) {
sub_state = SETTLE_WAIT;
delay_cycles(t_gen, settle_time());
@@ -652,29 +652,29 @@ void wd_fdc_t::read_id_continue()
}
case SETTLE_WAIT:
- if (TRACE_STATE) logerror("%s: SETTLE_WAIT\n", tag());
+ if (TRACE_STATE) logerror("SETTLE_WAIT\n");
return;
case SETTLE_DONE:
- if (TRACE_STATE) logerror("%s: SETTLE_DONE\n", tag());
+ if (TRACE_STATE) logerror("SETTLE_DONE\n");
sub_state = SCAN_ID;
counter = 0;
live_start(SEARCH_ADDRESS_MARK_HEADER);
return;
case SCAN_ID:
- if (TRACE_STATE) logerror("%s: SCAN_ID\n", tag());
+ if (TRACE_STATE) logerror("SCAN_ID\n");
command_end();
return;
case SCAN_ID_FAILED:
- if (TRACE_STATE) logerror("%s: SCAN_ID_FAILED\n", tag());
+ if (TRACE_STATE) logerror("SCAN_ID_FAILED\n");
status |= S_RNF;
command_end();
return;
default:
- logerror("%s: read id unknown sub-state %d\n", ttsn().c_str(), sub_state);
+ logerror("read id unknown sub-state %d\n", ttsn().c_str(), sub_state);
return;
}
}
@@ -682,7 +682,7 @@ void wd_fdc_t::read_id_continue()
void wd_fdc_t::write_track_start()
{
- if (TRACE_COMMAND) logerror("%s: write track (c=%02x) t=%d\n", tag(), command, track);
+ if (TRACE_COMMAND) logerror("write track (c=%02x) t=%d\n", command, track);
if(!is_ready()) {
command_end();
@@ -709,7 +709,7 @@ void wd_fdc_t::write_track_continue()
for(;;) {
switch(sub_state) {
case SPINUP:
- if (TRACE_STATE) logerror("%s: SPINUP\n", tag());
+ if (TRACE_STATE) logerror("SPINUP\n");
if(!(status & S_MON)) {
spinup();
return;
@@ -718,11 +718,11 @@ void wd_fdc_t::write_track_continue()
break;
case SPINUP_WAIT:
- if (TRACE_STATE) logerror("%s: SPINUP_WAIT\n", tag());
+ if (TRACE_STATE) logerror("SPINUP_WAIT\n");
return;
case SPINUP_DONE:
- if (TRACE_STATE) logerror("%s: SPINUP_DONE\n", tag());
+ if (TRACE_STATE) logerror("SPINUP_DONE\n");
if(command & 4) {
sub_state = SETTLE_WAIT;
delay_cycles(t_gen, settle_time());
@@ -733,22 +733,22 @@ void wd_fdc_t::write_track_continue()
}
case SETTLE_WAIT:
- if (TRACE_STATE) logerror("%s: SETTLE_WAIT\n", tag());
+ if (TRACE_STATE) logerror("SETTLE_WAIT\n");
return;
case SETTLE_DONE:
- if (TRACE_STATE) logerror("%s: SETTLE_DONE\n", tag());
+ if (TRACE_STATE) logerror("SETTLE_DONE\n");
set_drq();
sub_state = DATA_LOAD_WAIT;
delay_cycles(t_gen, 192);
return;
case DATA_LOAD_WAIT:
- if (TRACE_STATE) logerror("%s: DATA_LOAD_WAIT\n", tag());
+ if (TRACE_STATE) logerror("DATA_LOAD_WAIT\n");
return;
case DATA_LOAD_WAIT_DONE:
- if (TRACE_STATE) logerror("%s: DATA_LOAD_WAIT_DONE\n", tag());
+ if (TRACE_STATE) logerror("DATA_LOAD_WAIT_DONE\n");
if(drq) {
status |= S_LOST;
drop_drq();
@@ -759,18 +759,18 @@ void wd_fdc_t::write_track_continue()
break;
case WAIT_INDEX:
- if (TRACE_STATE) logerror("%s: WAIT_INDEX\n", tag());
+ if (TRACE_STATE) logerror("WAIT_INDEX\n");
return;
case WAIT_INDEX_DONE:
- if (TRACE_STATE) logerror("%s: WAIT_INDEX_DONE\n", tag());
+ if (TRACE_STATE) logerror("WAIT_INDEX_DONE\n");
sub_state = TRACK_DONE;
live_start(WRITE_TRACK_DATA);
pll_start_writing(machine().time());
return;
case TRACK_DONE:
- if (TRACE_STATE) logerror("%s: TRACK_DONE\n", tag());
+ if (TRACE_STATE) logerror("TRACK_DONE\n");
if(format_last_byte_count) {
char buf[32];
if(format_last_byte_count > 1)
@@ -779,12 +779,12 @@ void wd_fdc_t::write_track_continue()
sprintf(buf, "%02x", format_last_byte);
format_description_string += buf;
}
- if (TRACE_DESC) logerror("%s: track description %s\n", tag(), format_description_string.c_str());
+ if (TRACE_DESC) logerror("track description %s\n", format_description_string.c_str());
command_end();
return;
default:
- logerror("%s: write track unknown sub-state %d\n", ttsn().c_str(), sub_state);
+ logerror("write track unknown sub-state %d\n", ttsn().c_str(), sub_state);
return;
}
}
@@ -793,7 +793,7 @@ void wd_fdc_t::write_track_continue()
void wd_fdc_t::write_sector_start()
{
- if (TRACE_COMMAND) logerror("%s: write sector%s (c=%02x) t=%d, s=%d\n", tag(), command & 0x10 ? " multiple" : "", command, track, sector);
+ if (TRACE_COMMAND) logerror("write sector%s (c=%02x) t=%d, s=%d\n", command & 0x10 ? " multiple" : "", command, track, sector);
if(!is_ready()) {
command_end();
@@ -815,7 +815,7 @@ void wd_fdc_t::write_sector_continue()
for(;;) {
switch(sub_state) {
case SPINUP:
- if (TRACE_STATE) logerror("%s: SPINUP\n", tag());
+ if (TRACE_STATE) logerror("SPINUP\n");
if(!(status & S_MON)) {
spinup();
return;
@@ -824,11 +824,11 @@ void wd_fdc_t::write_sector_continue()
break;
case SPINUP_WAIT:
- if (TRACE_STATE) logerror("%s: SPINUP_WAIT\n", tag());
+ if (TRACE_STATE) logerror("SPINUP_WAIT\n");
return;
case SPINUP_DONE:
- if (TRACE_STATE) logerror("%s: SPINUP_DONE\n", tag());
+ if (TRACE_STATE) logerror("SPINUP_DONE\n");
if(command & 4) {
sub_state = SETTLE_WAIT;
delay_cycles(t_gen, settle_time());
@@ -839,18 +839,18 @@ void wd_fdc_t::write_sector_continue()
}
case SETTLE_WAIT:
- if (TRACE_STATE) logerror("%s: SETTLE_WAIT\n", tag());
+ if (TRACE_STATE) logerror("SETTLE_WAIT\n");
return;
case SETTLE_DONE:
- if (TRACE_STATE) logerror("%s: SETTLE_DONE\n", tag());
+ if (TRACE_STATE) logerror("SETTLE_DONE\n");
sub_state = SCAN_ID;
counter = 0;
live_start(SEARCH_ADDRESS_MARK_HEADER);
return;
case SCAN_ID:
- if (TRACE_STATE) logerror("%s: SCAN_ID\n", tag());
+ if (TRACE_STATE) logerror("SCAN_ID\n");
if(!sector_matches()) {
live_start(SEARCH_ADDRESS_MARK_HEADER);
return;
@@ -866,13 +866,13 @@ void wd_fdc_t::write_sector_continue()
return;
case SCAN_ID_FAILED:
- if (TRACE_STATE) logerror("%s: SCAN_ID_FAILED\n", tag());
+ if (TRACE_STATE) logerror("SCAN_ID_FAILED\n");
status |= S_RNF;
command_end();
return;
case SECTOR_WRITE:
- if (TRACE_STATE) logerror("%s: SECTOR_WRITE\n", tag());
+ if (TRACE_STATE) logerror("SECTOR_WRITE\n");
if(command & 0x10) {
sector++;
sub_state = SPINUP_DONE;
@@ -883,7 +883,7 @@ void wd_fdc_t::write_sector_continue()
break;
default:
- logerror("%s: write sector unknown sub-state %d\n", ttsn().c_str(), sub_state);
+ logerror("write sector unknown sub-state %d\n", ttsn().c_str(), sub_state);
return;
}
}
@@ -891,7 +891,7 @@ void wd_fdc_t::write_sector_continue()
void wd_fdc_t::interrupt_start()
{
- if (TRACE_COMMAND) logerror("%s: Forced interrupt (c=%02x)\n", tag(), command);
+ if (TRACE_COMMAND) logerror("Forced interrupt (c=%02x)\n", command);
if(status & S_BUSY) {
main_state = sub_state = cur_live.state = IDLE;
@@ -990,6 +990,11 @@ void wd_fdc_t::do_generic()
sub_state = DATA_LOAD_WAIT_DONE;
break;
+ case INITIAL_RESTORE:
+ last_dir = 1;
+ seek_start(RESTORE);
+ break;
+
default:
if(cur_live.tm.is_never())
logerror("%s: do_generic on unknown sub-state %d\n", ttsn().c_str(), sub_state);
@@ -1055,7 +1060,7 @@ void wd_fdc_t::do_cmd_w()
void wd_fdc_t::cmd_w(UINT8 val)
{
- if (TRACE_COMP) logerror("%s: Initiating command %02x\n", tag(), val);
+ if (TRACE_COMP) logerror("Initiating command %02x\n", val);
if (inverted_bus) val ^= 0xff;
if(intrq && !(intrq_cond & I_IMM)) {
@@ -1492,7 +1497,7 @@ bool wd_fdc_t::write_one_bit(const attotime &limit)
void wd_fdc_t::live_write_raw(UINT16 raw)
{
- if (TRACE_WRITE) logerror("%s: write raw %04x, CRC=%04x\n", tag(), raw, cur_live.crc);
+ if (TRACE_WRITE) logerror("write raw %04x, CRC=%04x\n", raw, cur_live.crc);
cur_live.shift_reg = raw;
cur_live.data_bit_context = raw & 1;
}
@@ -1511,7 +1516,7 @@ void wd_fdc_t::live_write_mfm(UINT8 mfm)
}
cur_live.shift_reg = raw;
cur_live.data_bit_context = context;
- if (TRACE_WRITE) logerror("%s: live_write_mfm byte=%02x, raw=%04x, CRC=%04x\n", tag(), mfm, raw, cur_live.crc);
+ if (TRACE_WRITE) logerror("live_write_mfm byte=%02x, raw=%04x, CRC=%04x\n", mfm, raw, cur_live.crc);
}
@@ -1524,7 +1529,7 @@ void wd_fdc_t::live_write_fm(UINT8 fm)
cur_live.data_reg = fm;
cur_live.shift_reg = raw;
cur_live.data_bit_context = fm & 1;
- if (TRACE_WRITE) logerror("%s: live_write_fm byte=%02x, raw=%04x, CRC=%04x\n", tag(), fm, raw, cur_live.crc);
+ if (TRACE_WRITE) logerror("live_write_fm byte=%02x, raw=%04x, CRC=%04x\n", fm, raw, cur_live.crc);
}
void wd_fdc_t::live_run(attotime limit)
diff --git a/src/devices/machine/wd_fdc.h b/src/devices/machine/wd_fdc.h
index 4abc761e74b..8aab3309264 100644
--- a/src/devices/machine/wd_fdc.h
+++ b/src/devices/machine/wd_fdc.h
@@ -275,7 +275,7 @@ private:
WRITE_TRACK,
WRITE_SECTOR,
- // Sub states
+ // Sub states, plus the reset-time restore request
SPINUP,
SPINUP_WAIT,
@@ -304,6 +304,8 @@ private:
SECTOR_WRITE,
TRACK_DONE,
+ INITIAL_RESTORE,
+
// Live states
SEARCH_ADDRESS_MARK_HEADER,
diff --git a/src/devices/machine/z80ctc.cpp b/src/devices/machine/z80ctc.cpp
index 276254d96f1..a6cb090e30b 100644
--- a/src/devices/machine/z80ctc.cpp
+++ b/src/devices/machine/z80ctc.cpp
@@ -303,7 +303,7 @@ void z80ctc_device::ctc_channel::start(z80ctc_device *device, int index)
// initialize state
m_device = device;
m_index = index;
- m_timer = m_device->machine().scheduler().timer_alloc(FUNC(static_timer_callback), this);
+ m_timer = m_device->machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(z80ctc_device::ctc_channel::timer_callback), this));
// register for save states
m_device->save_item(NAME(m_mode), m_index);
@@ -478,7 +478,7 @@ void z80ctc_device::ctc_channel::trigger(UINT8 data)
{
// if we hit zero, do the same thing as for a timer interrupt
if (--m_down == 0)
- timer_callback();
+ timer_callback(nullptr,0);
}
}
}
@@ -490,7 +490,7 @@ void z80ctc_device::ctc_channel::trigger(UINT8 data)
// side-effects
//-------------------------------------------------
-void z80ctc_device::ctc_channel::timer_callback()
+TIMER_CALLBACK_MEMBER(z80ctc_device::ctc_channel::timer_callback)
{
// down counter has reached zero - see if we should interrupt
if ((m_mode & INTERRUPT) == INTERRUPT_ON)
diff --git a/src/devices/machine/z80ctc.h b/src/devices/machine/z80ctc.h
index 2c3002e1166..a144ff013d4 100644
--- a/src/devices/machine/z80ctc.h
+++ b/src/devices/machine/z80ctc.h
@@ -103,7 +103,7 @@ private:
attotime period() const;
void trigger(UINT8 data);
- void timer_callback();
+ TIMER_CALLBACK_MEMBER(timer_callback);
z80ctc_device * m_device; // pointer back to our device
int m_index; // our channel index
@@ -113,9 +113,6 @@ private:
UINT8 m_extclk; // current signal from the external clock
emu_timer * m_timer; // array of active timers
UINT8 m_int_state; // interrupt status (for daisy chain)
-
- private:
- static TIMER_CALLBACK( static_timer_callback ) { reinterpret_cast<z80ctc_device::ctc_channel *>(ptr)->timer_callback(); }
};
// internal state
diff --git a/src/devices/machine/z80dma.cpp b/src/devices/machine/z80dma.cpp
index c1f3162bebd..bf5c4585234 100644
--- a/src/devices/machine/z80dma.cpp
+++ b/src/devices/machine/z80dma.cpp
@@ -176,7 +176,7 @@ void z80dma_device::device_start()
m_out_iorq_cb.resolve_safe();
// allocate timer
- m_timer = machine().scheduler().timer_alloc(FUNC(static_timerproc), (void *)this);
+ m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(z80dma_device::timerproc), this));
// register for state saving
save_item(NAME(m_regs));
@@ -488,7 +488,7 @@ int z80dma_device::do_write()
// timerproc
//-------------------------------------------------
-void z80dma_device::timerproc()
+TIMER_CALLBACK_MEMBER(z80dma_device::timerproc)
{
int done;
@@ -837,10 +837,10 @@ void z80dma_device::write(UINT8 data)
// rdy_write_callback - deferred RDY signal write
//-------------------------------------------------
-void z80dma_device::rdy_write_callback(int state)
+TIMER_CALLBACK_MEMBER(z80dma_device::rdy_write_callback)
{
// normalize state
- m_rdy = state;
+ m_rdy = param;
m_status = (m_status & 0xFD) | (!is_ready() << 1);
update_status();
@@ -859,7 +859,7 @@ void z80dma_device::rdy_write_callback(int state)
WRITE_LINE_MEMBER(z80dma_device::rdy_w)
{
if (LOG) logerror("Z80DMA '%s' RDY: %d Active High: %d\n", tag(), state, READY_ACTIVE_HIGH);
- machine().scheduler().synchronize(FUNC(static_rdy_write_callback), state, (void *)this);
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(z80dma_device::rdy_write_callback),this), state);
}
diff --git a/src/devices/machine/z80dma.h b/src/devices/machine/z80dma.h
index fc1c3c1175c..0b1916c5d5f 100644
--- a/src/devices/machine/z80dma.h
+++ b/src/devices/machine/z80dma.h
@@ -111,13 +111,11 @@ private:
void do_transfer_write();
void do_search();
- static TIMER_CALLBACK( static_timerproc ) { reinterpret_cast<z80dma_device *>(ptr)->timerproc(); }
- void timerproc();
+ TIMER_CALLBACK_MEMBER(timerproc);
void update_status();
- static TIMER_CALLBACK( static_rdy_write_callback ) { reinterpret_cast<z80dma_device *>(ptr)->rdy_write_callback(param); }
- void rdy_write_callback(int state);
+ TIMER_CALLBACK_MEMBER(rdy_write_callback);
// internal state
devcb_write_line m_out_busreq_cb;
diff --git a/src/devices/sound/315-5641.cpp b/src/devices/sound/315-5641.cpp
index df5341c7382..dbec291779f 100644
--- a/src/devices/sound/315-5641.cpp
+++ b/src/devices/sound/315-5641.cpp
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Angelo Salese
/* Sega 315-5641 / D77591 / 9442CA010 */
#include "emu.h"
diff --git a/src/devices/sound/315-5641.h b/src/devices/sound/315-5641.h
index 49e068fb4ac..e8349236421 100644
--- a/src/devices/sound/315-5641.h
+++ b/src/devices/sound/315-5641.h
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Angelo Salese
/* Sega 315-5641 / D77591 / 9442CA010 */
// this is the PICO sound chip, we are not sure if it's the same as a 7759 or not, it requires FIFO logic
diff --git a/src/devices/sound/disc_sys.inc b/src/devices/sound/disc_sys.inc
index 92b00c30383..a166f71ce49 100644
--- a/src/devices/sound/disc_sys.inc
+++ b/src/devices/sound/disc_sys.inc
@@ -61,7 +61,7 @@ DISCRETE_STEP( dso_csvlog )
int nodenum;
/* Dump any csv logs */
- fprintf(m_csv_file, "%" I64FMT "d", ++m_sample_num);
+ fprintf(m_csv_file, "%s", string_format("%I64d", ++m_sample_num).c_str());
for (nodenum = 0; nodenum < this->active_inputs(); nodenum++)
{
fprintf(m_csv_file, ", %f", *this->m_input[nodenum]);
diff --git a/src/devices/sound/discrete.cpp b/src/devices/sound/discrete.cpp
index 926db3a4a40..e09c47c9bf0 100644
--- a/src/devices/sound/discrete.cpp
+++ b/src/devices/sound/discrete.cpp
@@ -39,6 +39,7 @@
#include "sound/wavwrite.h"
#include "discrete.h"
#include <atomic>
+#include <iostream>
/* for_each collides with c++ standard libraries - include it here */
#define for_each(_T, _e, _l) for (_T _e = (_l)->begin_ptr() ; _e <= (_l)->end_ptr(); _e++)
@@ -647,15 +648,15 @@ void discrete_device::display_profiling(void)
total = list_run_time(m_node_list);
count = m_node_list.count();
/* print statistics */
- printf("Total Samples : %16" I64FMT "d\n", m_total_samples);
+ util::stream_format(std::cout, "Total Samples : %16d\n", m_total_samples);
tresh = total / count;
- printf("Threshold (mean): %16" I64FMT "d\n", tresh / m_total_samples );
+ util::stream_format(std::cout, "Threshold (mean): %16d\n", tresh / m_total_samples );
for_each(discrete_base_node **, node, &m_node_list)
{
discrete_step_interface *step;
if ((*node)->interface(step))
if (step->run_time > tresh)
- printf("%3d: %20s %8.2f %10.2f\n", (*node)->index(), (*node)->module_name(), (double) step->run_time / (double) total * 100.0, ((double) step->run_time) / (double) m_total_samples);
+ util::stream_format(std::cout, "%3d: %20s %8.2f %10.2f\n", (*node)->index(), (*node)->module_name(), double(step->run_time) / double(total) * 100.0, double(step->run_time) / double(m_total_samples));
}
/* Task information */
@@ -663,10 +664,10 @@ void discrete_device::display_profiling(void)
{
tt = step_list_run_time((*task)->step_list);
- printf("Task(%d): %8.2f %15.2f\n", (*task)->task_group, tt / (double) total * 100.0, tt / (double) m_total_samples);
+ util::stream_format(std::cout, "Task(%d): %8.2f %15.2f\n", (*task)->task_group, tt / double(total) * 100.0, tt / double(m_total_samples));
}
- printf("Average samples/double->update: %8.2f\n", (double) m_total_samples / (double) m_total_stream_updates);
+ util::stream_format(std::cout, "Average samples/double->update: %8.2f\n", double(m_total_samples) / double(m_total_stream_updates));
}
@@ -737,7 +738,7 @@ void discrete_device::init_nodes(const sound_block_list_t &block_list)
task->task_group = block->initial[0];
if (task->task_group < 0 || task->task_group >= DISCRETE_MAX_TASK_GROUPS)
fatalerror("discrete_dso_task: illegal task_group %d\n", task->task_group);
- //printf("task group %d\n", task->task_group);
+ //util::stream_format(std::cout, "task group %d\n", task->task_group);
task_list.add(task);
}
break;
@@ -870,7 +871,6 @@ void discrete_device::device_start()
//m_stream = machine().sound().stream_alloc(*this, 0, 2, 22257);
const discrete_block *intf_start = m_intf;
- char name[128];
/* If a clock is specified we will use it, otherwise run at the audio sample rate. */
if (this->clock())
@@ -884,9 +884,8 @@ void discrete_device::device_start()
m_total_stream_updates = 0;
/* create the logfile */
- sprintf(name, "discrete%s.log", this->tag());
if (DISCRETE_DEBUGLOG)
- m_disclogfile = fopen(name, "w");
+ m_disclogfile = fopen(util::string_format("discrete%s.log", this->tag()).c_str(), "w");
/* enable profiling */
m_profiling = 0;
diff --git a/src/devices/sound/esqpump.cpp b/src/devices/sound/esqpump.cpp
index 496cc5c832a..9873029e056 100644
--- a/src/devices/sound/esqpump.cpp
+++ b/src/devices/sound/esqpump.cpp
@@ -112,7 +112,7 @@ void esq_5505_5510_pump::sound_stream_update(sound_stream &stream, stream_sample
e[(ei + 0x1d0f) % 0x4000] = e_next;
if (l != e[ei]) {
- fprintf(stderr, "expected (%d) but have (%d)\n", e[ei], l);
+ util::stream_format(std::cerr, "expected (%d) but have (%d)\n", e[ei], l);
}
ei = (ei + 1) % 0x4000;
#endif
@@ -133,9 +133,9 @@ void esq_5505_5510_pump::sound_stream_update(sound_stream &stream, stream_sample
bool silence = silent_for >= 500;
if (was_silence != silence) {
if (!silence) {
- fprintf(stderr, ".-*\n");
+ util::stream_format(std::cerr, ".-*\n");
} else {
- fprintf(stderr, "*-.\n");
+ util::stream_format(std::cerr, "*-.\n");
}
was_silence = silence;
}
@@ -148,7 +148,7 @@ void esq_5505_5510_pump::sound_stream_update(sound_stream &stream, stream_sample
{
osd_ticks_t elapsed = now - last_ticks;
osd_ticks_t tps = osd_ticks_per_second();
- fprintf(stderr, "Pump: %d samples in %" I64FMT "d ticks for %f Hz\n", last_samples, elapsed, last_samples * (double)tps / (double)elapsed);
+ util::stream_format(std::cerr, "Pump: %d samples in %d ticks for %f Hz\n", last_samples, elapsed, last_samples * (double)tps / (double)elapsed);
last_ticks = now;
while (next_report_ticks <= now) {
next_report_ticks += tps;
@@ -156,7 +156,7 @@ void esq_5505_5510_pump::sound_stream_update(sound_stream &stream, stream_sample
last_samples = 0;
#if !PUMP_FAKE_ESP_PROCESSING
- fprintf(stderr, " ESP spent %" I64FMT "d ticks on %d samples, %f ticks per sample\n", ticks_spent_processing, samples_processed, (double)ticks_spent_processing / (double)samples_processed);
+ util::stream_format(std::cerr, " ESP spent %d ticks on %d samples, %f ticks per sample\n", ticks_spent_processing, samples_processed, (double)ticks_spent_processing / (double)samples_processed);
ticks_spent_processing = 0;
samples_processed = 0;
#endif
diff --git a/src/devices/sound/samples.cpp b/src/devices/sound/samples.cpp
index 7a756dbb0fe..62bd8e02657 100644
--- a/src/devices/sound/samples.cpp
+++ b/src/devices/sound/samples.cpp
@@ -571,7 +571,7 @@ bool samples_device::read_flac_sample(emu_file &file, sample_t &sample)
file.seek(0, SEEK_SET);
// create the FLAC decoder and fill in the sample data
- flac_decoder decoder((core_file&) file);
+ flac_decoder decoder((util::core_file &)file);
sample.frequency = decoder.sample_rate();
// error if more than 1 channel or not 16bpp
diff --git a/src/devices/video/315_5313.cpp b/src/devices/video/315_5313.cpp
index 22b63f36d5b..f82e63f60b6 100644
--- a/src/devices/video/315_5313.cpp
+++ b/src/devices/video/315_5313.cpp
@@ -56,38 +56,18 @@ machine_config_constructor sega315_5313_device::device_mconfig_additions() const
return MACHINE_CONFIG_NAME( sega_genesis_vdp );
}
-static TIMER_CALLBACK( render_timer_callback )
-{
- sega315_5313_device* vdp = (sega315_5313_device*)ptr;
- vdp->render_scanline();
-}
-
-void sega315_5313_device::vdp_handle_irq6_on_timer_callback(int param)
+TIMER_CALLBACK_MEMBER(sega315_5313_device::irq6_on_timer_callback)
{
// m_irq6_pending = 1;
if (MEGADRIVE_REG01_IRQ6_ENABLE)
m_lv6irqline_callback(true);
}
-static TIMER_CALLBACK( irq6_on_timer_callback )
-{
- sega315_5313_device* vdp = (sega315_5313_device*)ptr;
- vdp->vdp_handle_irq6_on_timer_callback(param);
-}
-
-void sega315_5313_device::vdp_handle_irq4_on_timer_callback(int param)
+TIMER_CALLBACK_MEMBER(sega315_5313_device::irq4_on_timer_callback)
{
m_lv4irqline_callback(true);
}
-static TIMER_CALLBACK( irq4_on_timer_callback )
-{
- sega315_5313_device* vdp = (sega315_5313_device*)ptr;
- vdp->vdp_handle_irq4_on_timer_callback(param);
-}
-
-
-
void sega315_5313_device::set_alt_timing(device_t &device, int use_alt_timing)
{
sega315_5313_device &dev = downcast<sega315_5313_device &>(device);
@@ -189,9 +169,9 @@ void sega315_5313_device::device_start()
if (m_use_alt_timing)
save_pointer(NAME(m_render_line.get()), 320/2);
- m_irq6_on_timer = machine().scheduler().timer_alloc(FUNC(irq6_on_timer_callback), (void*)this);
- m_irq4_on_timer = machine().scheduler().timer_alloc(FUNC(irq4_on_timer_callback), (void*)this);
- m_render_timer = machine().scheduler().timer_alloc(FUNC(render_timer_callback), (void*)this);
+ m_irq6_on_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sega315_5313_device::irq6_on_timer_callback), this));
+ m_irq4_on_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sega315_5313_device::irq4_on_timer_callback), this));
+ m_render_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sega315_5313_device::render_scanline), this));
m_space68k = &machine().device<m68000_base_device>(":maincpu")->space();
m_cpu68k = machine().device<m68000_base_device>(":maincpu");
@@ -2598,7 +2578,7 @@ void sega315_5313_device::render_videobuffer_to_screenbuffer(int scanline)
}
}
-void sega315_5313_device::render_scanline()
+TIMER_CALLBACK_MEMBER(sega315_5313_device::render_scanline)
{
int scanline = get_scanline_counter();
diff --git a/src/devices/video/315_5313.h b/src/devices/video/315_5313.h
index d7ca05ee2e6..dc897265009 100644
--- a/src/devices/video/315_5313.h
+++ b/src/devices/video/315_5313.h
@@ -214,10 +214,10 @@ public:
int get_scanline_counter();
- void render_scanline();
+ TIMER_CALLBACK_MEMBER(render_scanline);
void vdp_handle_scanline_callback(int scanline);
- void vdp_handle_irq6_on_timer_callback(int param);
- void vdp_handle_irq4_on_timer_callback(int param);
+ TIMER_CALLBACK_MEMBER(irq6_on_timer_callback);
+ TIMER_CALLBACK_MEMBER(irq4_on_timer_callback);
void vdp_handle_eof();
void device_reset_old();
void vdp_clear_irq6_pending(void) { m_irq6_pending = 0; };
diff --git a/src/devices/video/epic12in.inc b/src/devices/video/epic12in.inc
index cf0c81dd80f..4297c5a2d55 100644
--- a/src/devices/video/epic12in.inc
+++ b/src/devices/video/epic12in.inc
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
/* blitter function */
void epic12_device::FUNCNAME(BLIT_PARAMS)
diff --git a/src/devices/video/epic12pixel.inc b/src/devices/video/epic12pixel.inc
index 3cb01cebbf4..65666470e40 100644
--- a/src/devices/video/epic12pixel.inc
+++ b/src/devices/video/epic12pixel.inc
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
/* This is the inner-most loop code (per-pixel) and thus the most performance sensitive part */
#if FLIPX == 1
diff --git a/src/devices/video/voodoo_rast.inc b/src/devices/video/voodoo_rast.inc
index e7251bf9a01..4c858bc1e69 100644
--- a/src/devices/video/voodoo_rast.inc
+++ b/src/devices/video/voodoo_rast.inc
@@ -1,4 +1,5 @@
-
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles
/***************************************************************************
GAME-SPECIFIC RASTERIZERS
***************************************************************************/
diff --git a/src/emu/cheat.cpp b/src/emu/cheat.cpp
index 6b24b22fc35..0a799ca6f13 100644
--- a/src/emu/cheat.cpp
+++ b/src/emu/cheat.cpp
@@ -1031,6 +1031,9 @@ std::unique_ptr<cheat_script> &cheat_entry::script_for_state(script_state state)
// CHEAT MANAGER
//**************************************************************************
+const int cheat_manager::CHEAT_VERSION;
+
+
//-------------------------------------------------
// cheat_manager - constructor
//-------------------------------------------------
diff --git a/src/emu/cheat.h b/src/emu/cheat.h
index 6badabd14d6..20772e25640 100644
--- a/src/emu/cheat.h
+++ b/src/emu/cheat.h
@@ -329,7 +329,7 @@ private:
symbol_table m_symtable; // global symbol table
// constants
- static const int CHEAT_VERSION = 1;
+ static constexpr int CHEAT_VERSION = 1;
};
diff --git a/src/emu/clifront.cpp b/src/emu/clifront.cpp
index 4476e4e0151..7c6c974cce7 100644
--- a/src/emu/clifront.cpp
+++ b/src/emu/clifront.cpp
@@ -1880,7 +1880,7 @@ void media_identifier::identify_file(const char *name)
// load the file and process if it opens and has a valid length
UINT32 length;
void *data;
- file_error filerr = core_fload(name, &data, &length);
+ const file_error filerr = util::core_file::load(name, &data, length);
if (filerr == FILERR_NONE && length > 0)
{
identify_data(name, reinterpret_cast<UINT8 *>(data), length);
diff --git a/src/emu/diexec.cpp b/src/emu/diexec.cpp
index ac72ce768d7..02684095b04 100644
--- a/src/emu/diexec.cpp
+++ b/src/emu/diexec.cpp
@@ -272,7 +272,7 @@ void device_execute_interface::spin_until_time(const attotime &duration)
suspend_until_trigger(TRIGGER_SUSPENDTIME + timetrig, true);
// then set a timer for it
- m_scheduler->timer_set(duration, FUNC(static_timed_trigger_callback), TRIGGER_SUSPENDTIME + timetrig, this);
+ m_scheduler->timer_set(duration, timer_expired_delegate(FUNC(device_execute_interface::timed_trigger_callback),this), TRIGGER_SUSPENDTIME + timetrig, this);
timetrig = (timetrig + 1) % 256;
}
@@ -484,7 +484,7 @@ void device_execute_interface::interface_pre_start()
// allocate timers if we need them
if (m_timed_interrupt_period != attotime::zero)
- m_timedint_timer = m_scheduler->timer_alloc(FUNC(static_trigger_periodic_interrupt), (void *)this);
+ m_timedint_timer = m_scheduler->timer_alloc(timer_expired_delegate(FUNC(device_execute_interface::trigger_periodic_interrupt), this));
}
@@ -653,10 +653,9 @@ attoseconds_t device_execute_interface::minimum_quantum() const
// trigger
//-------------------------------------------------
-TIMER_CALLBACK( device_execute_interface::static_timed_trigger_callback )
+TIMER_CALLBACK_MEMBER( device_execute_interface::timed_trigger_callback )
{
- device_execute_interface *device = reinterpret_cast<device_execute_interface *>(ptr);
- device->trigger(param);
+ trigger(param);
}
@@ -681,16 +680,11 @@ void device_execute_interface::on_vblank(screen_device &screen, bool vblank_stat
//-------------------------------------------------
-// static_trigger_periodic_interrupt - timer
+// trigger_periodic_interrupt - timer
// callback for timed interrupts
//-------------------------------------------------
-TIMER_CALLBACK( device_execute_interface::static_trigger_periodic_interrupt )
-{
- reinterpret_cast<device_execute_interface *>(ptr)->trigger_periodic_interrupt();
-}
-
-void device_execute_interface::trigger_periodic_interrupt()
+TIMER_CALLBACK_MEMBER(device_execute_interface::trigger_periodic_interrupt)
{
// bail if there is no routine
if (!suspended(SUSPEND_REASON_HALT | SUSPEND_REASON_RESET | SUSPEND_REASON_DISABLE | SUSPEND_REASON_CLOCK))
@@ -781,7 +775,7 @@ if (TEMPLOG) printf("setline(%s,%d,%d,%d)\n", m_execute->device().tag(), m_linen
if (event_index >= ARRAY_LENGTH(m_queue))
{
m_qindex--;
- empty_event_queue();
+ empty_event_queue(nullptr,0);
event_index = m_qindex++;
m_execute->device().logerror("Exceeded pending input line event queue on device '%s'!\n", m_execute->device().tag());
}
@@ -795,7 +789,7 @@ if (TEMPLOG) printf("setline(%s,%d,%d,%d)\n", m_execute->device().tag(), m_linen
// if this is the first one, set the timer
if (event_index == 0)
- m_execute->scheduler().synchronize(FUNC(static_empty_event_queue), 0, (void *)this);
+ m_execute->scheduler().synchronize(timer_expired_delegate(FUNC(device_execute_interface::device_input::empty_event_queue),this), 0, this);
}
}
@@ -804,12 +798,7 @@ if (TEMPLOG) printf("setline(%s,%d,%d,%d)\n", m_execute->device().tag(), m_linen
// empty_event_queue - empty our event queue
//-------------------------------------------------
-TIMER_CALLBACK( device_execute_interface::device_input::static_empty_event_queue )
-{
- reinterpret_cast<device_input *>(ptr)->empty_event_queue();
-}
-
-void device_execute_interface::device_input::empty_event_queue()
+TIMER_CALLBACK_MEMBER(device_execute_interface::device_input::empty_event_queue)
{
if (TEMPLOG) printf("empty_queue(%s,%d,%d)\n", m_execute->device().tag(), m_linenum, m_qindex);
// loop over all events
diff --git a/src/emu/diexec.h b/src/emu/diexec.h
index 3a5cc0405f9..4fd379b5dae 100644
--- a/src/emu/diexec.h
+++ b/src/emu/diexec.h
@@ -71,12 +71,13 @@ enum
// MACROS
//**************************************************************************
+#define TIMER_CALLBACK(name) void name(running_machine &machine, void *ptr, int param)
+#define TIMER_CALLBACK_MEMBER(name) void name(void *ptr, INT32 param)
+
// IRQ callback to be called by device implementations when an IRQ is actually taken
-#define IRQ_CALLBACK(func) int func(device_t *device, int irqline)
#define IRQ_CALLBACK_MEMBER(func) int func(device_t &device, int irqline)
// interrupt generator callback called as a VBLANK or periodic interrupt
-#define INTERRUPT_GEN(func) void func(device_t *device)
#define INTERRUPT_GEN_MEMBER(func) void func(device_t &device)
@@ -246,8 +247,7 @@ protected:
int m_qindex; // index within the queue
private:
- static void static_empty_event_queue(running_machine &machine, void *ptr, int param);
- void empty_event_queue();
+ TIMER_CALLBACK_MEMBER(empty_event_queue);
};
// scheduler
@@ -292,12 +292,11 @@ protected:
private:
// callbacks
- static void static_timed_trigger_callback(running_machine &machine, void *ptr, int param);
+ TIMER_CALLBACK_MEMBER(timed_trigger_callback);
void on_vblank(screen_device &screen, bool vblank_state);
- static void static_trigger_periodic_interrupt(running_machine &machine, void *ptr, int param);
- void trigger_periodic_interrupt();
+ TIMER_CALLBACK_MEMBER(trigger_periodic_interrupt);
void suspend_resume_changed();
attoseconds_t minimum_quantum() const;
diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp
index d43cfe02fed..704f7d987e8 100644
--- a/src/emu/diimage.cpp
+++ b/src/emu/diimage.cpp
@@ -57,8 +57,8 @@ const image_device_type_info device_image_interface::m_device_info_array[] =
device_image_interface::device_image_interface(const machine_config &mconfig, device_t &device)
: device_interface(device, "image"),
m_err(),
- m_file(nullptr),
- m_mame_file(nullptr),
+ m_file(),
+ m_mame_file(),
m_software_info_ptr(nullptr),
m_software_part_ptr(nullptr),
m_supported(0),
@@ -611,12 +611,11 @@ bool device_image_interface::is_loaded()
image_error_t device_image_interface::load_image_by_path(UINT32 open_flags, const char *path)
{
- file_error filerr;
image_error_t err;
std::string revised_path;
/* attempt to read the file */
- filerr = zippath_fopen(path, open_flags, m_file, revised_path);
+ auto const filerr = zippath_fopen(path, open_flags, m_file, revised_path);
/* did the open succeed? */
switch(filerr)
@@ -662,15 +661,13 @@ image_error_t device_image_interface::load_image_by_path(UINT32 open_flags, cons
int device_image_interface::reopen_for_write(const char *path)
{
- if(m_file)
- core_fclose(m_file);
+ m_file.reset();
- file_error filerr;
image_error_t err;
std::string revised_path;
/* attempt to open the file for writing*/
- filerr = zippath_fopen(path, OPEN_FLAG_READ|OPEN_FLAG_WRITE|OPEN_FLAG_CREATE, m_file, revised_path);
+ auto const filerr = zippath_fopen(path, OPEN_FLAG_READ|OPEN_FLAG_WRITE|OPEN_FLAG_CREATE, m_file, revised_path);
/* did the open succeed? */
switch(filerr)
@@ -876,10 +873,9 @@ bool device_image_interface::load_software(software_list_device &swlist, const c
warningcount += verify_length_and_hash(m_mame_file.get(),ROM_GETNAME(romp),ROM_GETLENGTH(romp),hash_collection(ROM_GETHASHDATA(romp)));
if (filerr == FILERR_NONE)
- {
- m_file = *m_mame_file;
+ filerr = util::core_file::open_proxy(*m_mame_file, m_file);
+ if (filerr == FILERR_NONE)
retVal = TRUE;
- }
break; // load first item for start
}
@@ -1118,17 +1114,8 @@ bool device_image_interface::create(const char *path, const image_device_format
void device_image_interface::clear()
{
- if (m_mame_file)
- {
- m_mame_file = nullptr;
- m_file = nullptr;
- } else {
- if (m_file)
- {
- core_fclose(m_file);
- m_file = nullptr;
- }
- }
+ m_mame_file.reset();
+ m_file.reset();
m_image_name.clear();
m_readonly = false;
diff --git a/src/emu/diimage.h b/src/emu/diimage.h
index b1a8a16ad70..f15e0e555a9 100644
--- a/src/emu/diimage.h
+++ b/src/emu/diimage.h
@@ -178,21 +178,22 @@ public:
const char *basename() { if (m_basename.empty()) return nullptr; else return m_basename.c_str(); }
const char *basename_noext() { if (m_basename_noext.empty()) return nullptr; else return m_basename_noext.c_str(); }
const char *filetype() { if (m_filetype.empty()) return nullptr; else return m_filetype.c_str(); }
- core_file *image_core_file() { return m_file; }
- UINT64 length() { check_for_file(); return core_fsize(m_file); }
+ bool is_open() const { return bool(m_file); }
+ util::core_file &image_core_file() { return *m_file; }
+ UINT64 length() { check_for_file(); return m_file->size(); }
bool is_readonly() { return m_readonly; }
bool has_been_created() { return m_created; }
void make_readonly() { m_readonly = true; }
- UINT32 fread(void *buffer, UINT32 length) { check_for_file(); return core_fread(m_file, buffer, length); }
+ UINT32 fread(void *buffer, UINT32 length) { check_for_file(); return m_file->read(buffer, length); }
UINT32 fread(optional_shared_ptr<UINT8> &ptr, UINT32 length) { ptr.allocate(length); return fread(ptr.target(), length); }
UINT32 fread(optional_shared_ptr<UINT8> &ptr, UINT32 length, offs_t offset) { ptr.allocate(length); return fread(ptr + offset, length - offset); }
- UINT32 fwrite(const void *buffer, UINT32 length) { check_for_file(); return core_fwrite(m_file, buffer, length); }
- int fseek(INT64 offset, int whence) { check_for_file(); return core_fseek(m_file, offset, whence); }
- UINT64 ftell() { check_for_file(); return core_ftell(m_file); }
+ UINT32 fwrite(const void *buffer, UINT32 length) { check_for_file(); return m_file->write(buffer, length); }
+ int fseek(INT64 offset, int whence) { check_for_file(); return m_file->seek(offset, whence); }
+ UINT64 ftell() { check_for_file(); return m_file->tell(); }
int fgetc() { char ch; if (fread(&ch, 1) != 1) ch = '\0'; return ch; }
- char *fgets(char *buffer, UINT32 length) { check_for_file(); return core_fgets(buffer, length, m_file); }
- int image_feof() { check_for_file(); return core_feof(m_file); }
- void *ptr() {check_for_file(); return (void *) core_fbuffer(m_file); }
+ char *fgets(char *buffer, UINT32 length) { check_for_file(); return m_file->gets(buffer, length); }
+ int image_feof() { check_for_file(); return m_file->eof(); }
+ void *ptr() {check_for_file(); return const_cast<void *>(m_file->buffer()); }
// configuration access
void set_init_phase() { m_init_phase = TRUE; }
@@ -250,7 +251,7 @@ protected:
void clear_error();
- void check_for_file() { assert_always(m_file != nullptr, "Illegal operation on unmounted image"); }
+ void check_for_file() { assert_always(m_file, "Illegal operation on unmounted image"); }
void setup_working_directory();
bool try_change_working_directory(const char *subdir);
@@ -274,7 +275,7 @@ protected:
std::string m_err_message;
/* variables that are only non-zero when an image is mounted */
- core_file *m_file;
+ util::core_file::ptr m_file;
std::unique_ptr<emu_file> m_mame_file;
std::string m_image_name;
std::string m_basename;
diff --git a/src/emu/drawgfx.cpp b/src/emu/drawgfx.cpp
index 30bde314664..8ca9b1d7aea 100644
--- a/src/emu/drawgfx.cpp
+++ b/src/emu/drawgfx.cpp
@@ -86,33 +86,6 @@ gfxdecode_device::gfxdecode_device(const machine_config &mconfig, const char *ta
// gfx_element - constructor
//-------------------------------------------------
-#ifdef UNUSED_FUNCTION
-gfx_element::gfx_element()
- : m_palette(nullptr),
- m_width(0),
- m_height(0),
- m_startx(0),
- m_starty(0),
- m_origwidth(0),
- m_origheight(0),
- m_total_elements(0),
- m_color_base(0),
- m_color_depth(0),
- m_color_granularity(0),
- m_total_colors(0),
- m_line_modulo(0),
- m_char_modulo(0),
- m_srcdata(nullptr),
- m_dirtyseq(1),
- m_gfxdata(nullptr),
- m_layout_is_raw(false),
- m_layout_planes(0),
- m_layout_xormask(0),
- m_layout_charincrement(0)
-{
-}
-#endif
-
gfx_element::gfx_element(palette_device &palette, UINT8 *base, UINT32 width, UINT32 height, UINT32 rowbytes, UINT32 total_colors, UINT32 color_base, UINT32 color_granularity)
: m_palette(&palette),
m_width(width),
diff --git a/src/emu/drivers/xtal.h b/src/emu/drivers/xtal.h
index 6cc8cbe32c0..476db5e99ab 100644
--- a/src/emu/drivers/xtal.h
+++ b/src/emu/drivers/xtal.h
@@ -80,7 +80,7 @@ enum
XTAL_5_911MHz = 5911000, /* Philips Videopac Plus G7400 */
XTAL_5_9904MHz = 5990400, /* Luxor ABC 800 keyboard (Keytronic custom part #48-300-008 is equivalent) */
XTAL_6MHz = 6000000, /* American Poker II */
- XTAL_6_144MHz = 6144000, /* Used on Alpha Denshi early 80's games sound board and Casio FP-200 main CPU */
+ XTAL_6_144MHz = 6144000, /* Used on Alpha Denshi early 80's games sound board, Casio FP-200 and Namco System 16 */
XTAL_6_5MHz = 6500000, /* Jupiter Ace */
XTAL_6_9MHz = 6900000, /* BBN BitGraph CPU */
XTAL_7MHz = 7000000, /* Jaleco Mega System PCBs */
diff --git a/src/emu/emu.h b/src/emu/emu.h
index 0cf7b7c1384..e978bbe44d5 100644
--- a/src/emu/emu.h
+++ b/src/emu/emu.h
@@ -18,7 +18,6 @@
#ifndef __EMU_H__
#define __EMU_H__
-#include <stdio.h> // must be here otherwise issues with I64FMT in MINGW
#include <list>
#include <vector>
#include <memory>
diff --git a/src/emu/emuopts.cpp b/src/emu/emuopts.cpp
index 079080c08a3..332c9c2d787 100644
--- a/src/emu/emuopts.cpp
+++ b/src/emu/emuopts.cpp
@@ -32,7 +32,7 @@ const options_entry emu_options::s_option_entries[] =
{ OPTION_READCONFIG ";rc", "1", OPTION_BOOLEAN, "enable loading of configuration files" },
{ OPTION_WRITECONFIG ";wc", "0", OPTION_BOOLEAN, "writes configuration to (driver).ini on exit" },
- // seach path options
+ // search path options
{ nullptr, nullptr, OPTION_HEADER, "CORE SEARCH PATH OPTIONS" },
{ OPTION_MEDIAPATH ";rp;biospath;bp", "roms", OPTION_STRING, "path to ROMsets and hard disk images" },
{ OPTION_HASHPATH ";hash_directory;hash", "hash", OPTION_STRING, "path to hash files" },
@@ -190,7 +190,7 @@ const options_entry emu_options::s_option_entries[] =
{ OPTION_CONFIRM_QUIT, "0", OPTION_BOOLEAN, "display confirm quit screen on exit" },
{ OPTION_UI_MOUSE, "1", OPTION_BOOLEAN, "display ui mouse cursor" },
{ OPTION_AUTOBOOT_COMMAND ";ab", nullptr, OPTION_STRING, "command to execute after machine boot" },
- { OPTION_AUTOBOOT_DELAY, "2", OPTION_INTEGER, "timer delay in sec to trigger command execution on autoboot" },
+ { OPTION_AUTOBOOT_DELAY, "0", OPTION_INTEGER, "timer delay in sec to trigger command execution on autoboot" },
{ OPTION_AUTOBOOT_SCRIPT ";script", nullptr, OPTION_STRING, "lua script to execute after machine boot" },
{ OPTION_CONSOLE, "0", OPTION_BOOLEAN, "enable emulator LUA console" },
{ OPTION_LANGUAGE ";lang", "English", OPTION_STRING, "display language" },
@@ -270,7 +270,11 @@ bool emu_options::add_slot_options(const software_part *swpart)
std::string featurename = std::string(name).append("_default");
const char *value = swpart->feature(featurename.c_str());
if (value != nullptr && (*value == '\0' || slot->option(value) != nullptr))
- set_default_value(name, value);
+ {
+ // set priority above INIs but below actual command line
+ std::string error;
+ set_value(name, value, OPTION_PRIORITY_SUBCMD, error);
+ }
}
}
return (options_count() != starting_count);
@@ -391,7 +395,7 @@ bool emu_options::parse_slot_devices(int argc, char *argv[], std::string &error_
m_device_options = 0;
add_device_options();
if (name != nullptr && exists(name))
- set_value(name, value, OPTION_PRIORITY_CMDLINE, error_string);
+ set_value(name, value, OPTION_PRIORITY_SUBCMD, error_string);
core_options::parse_command_line(argc, argv, OPTION_PRIORITY_CMDLINE, error_string);
int num;
@@ -571,7 +575,7 @@ bool emu_options::parse_one_ini(const char *basename, int priority, std::string
// parse the file
osd_printf_verbose("Parsing %s.ini\n", basename);
std::string error;
- bool result = parse_ini_file((core_file&)file, priority, OPTION_PRIORITY_DRIVER_INI, error);
+ bool result = parse_ini_file((util::core_file&)file, priority, OPTION_PRIORITY_DRIVER_INI, error);
// append errors if requested
if (!error.empty() && error_string)
diff --git a/src/emu/emuopts.h b/src/emu/emuopts.h
index 79df39c7438..0512924dd59 100644
--- a/src/emu/emuopts.h
+++ b/src/emu/emuopts.h
@@ -23,7 +23,8 @@
enum
{
// command-line options are HIGH priority
- OPTION_PRIORITY_CMDLINE = OPTION_PRIORITY_HIGH,
+ OPTION_PRIORITY_SUBCMD = OPTION_PRIORITY_HIGH,
+ OPTION_PRIORITY_CMDLINE,
// INI-based options are NORMAL priority, in increasing order:
OPTION_PRIORITY_INI = OPTION_PRIORITY_NORMAL,
diff --git a/src/emu/emupal.cpp b/src/emu/emupal.cpp
index e3d2dcd97a1..ccd0b26d324 100644
--- a/src/emu/emupal.cpp
+++ b/src/emu/emupal.cpp
@@ -744,79 +744,44 @@ void palette_device::configure_rgb_shadows(int mode, float factor)
void palette_device::palette_init_all_black(palette_device &palette)
{
- int i;
-
- for (i = 0; i < palette.entries(); i++)
+ for (int i = 0; i < palette.entries(); i++)
{
- palette.set_pen_color(i,rgb_t::black); // black
+ palette.set_pen_color(i, rgb_t::black);
}
}
/*-------------------------------------------------
- black_and_white - basic 2-color black & white
--------------------------------------------------*/
-
-void palette_device::palette_init_black_and_white(palette_device &palette)
-{
- palette.set_pen_color(0,rgb_t::black); // black
- palette.set_pen_color(1,rgb_t::white); // white
-}
-
-
-/*-------------------------------------------------
- white_and_black - basic 2-color white & black
--------------------------------------------------*/
-
-void palette_device::palette_init_white_and_black(palette_device &palette)
-{
- palette.set_pen_color(0,rgb_t::white); // white
- palette.set_pen_color(1,rgb_t::black); // black
-}
-
-
-/*-------------------------------------------------
- monochrome_amber - 2-color black & amber
--------------------------------------------------*/
-
-void palette_device::palette_init_monochrome_amber(palette_device &palette)
-{
- palette.set_pen_color(0, rgb_t::black); // black
- palette.set_pen_color(1, rgb_t(0xf7, 0xaa, 0x00)); // amber
-}
-
-
-/*-------------------------------------------------
- monochrome_green - 2-color black & green
+ monochrome - 2-color black & white
-------------------------------------------------*/
-void palette_device::palette_init_monochrome_green(palette_device &palette)
+void palette_device::palette_init_monochrome(palette_device &palette)
{
- palette.set_pen_color(0, rgb_t::black); // black
- palette.set_pen_color(1, rgb_t(0x00, 0xff, 0x00)); // green
+ palette.set_pen_color(0, rgb_t::black);
+ palette.set_pen_color(1, rgb_t::white);
}
/*-------------------------------------------------
- monochrome_green_highlight - 3-color black & green
+ monochrome_inverted - 2-color white & black
-------------------------------------------------*/
-void palette_device::palette_init_monochrome_green_highlight(palette_device &palette)
+void palette_device::palette_init_monochrome_inverted(palette_device &palette)
{
- palette.set_pen_color(0, rgb_t::black); // black
- palette.set_pen_color(1, rgb_t(0x00, 0xc0, 0x00)); // green
- palette.set_pen_color(2, rgb_t(0x00, 0xff, 0x00)); // green
+ palette.set_pen_color(0, rgb_t::white);
+ palette.set_pen_color(1, rgb_t::black);
}
/*-------------------------------------------------
- monochrome_yellow - 2-color black & yellow
+ monochrome_highlight - 3-color
-------------------------------------------------*/
-void palette_device::palette_init_monochrome_yellow(palette_device &palette)
+void palette_device::palette_init_monochrome_highlight(palette_device &palette)
{
- palette.set_pen_color(0, rgb_t::black); // black
- palette.set_pen_color(1, rgb_t(0xff, 0xff, 0x00)); // yellow
+ palette.set_pen_color(0, rgb_t::black);
+ palette.set_pen_color(1, rgb_t(0xc0, 0xc0, 0xc0));
+ palette.set_pen_color(2, rgb_t::white);
}
diff --git a/src/emu/emupal.h b/src/emu/emupal.h
index b06a5b43d7f..57b6cecebdc 100644
--- a/src/emu/emupal.h
+++ b/src/emu/emupal.h
@@ -217,31 +217,20 @@
palette_device::static_enable_hilights(*device);
-// standard palettes
-#define MCFG_PALETTE_ADD_BLACK_AND_WHITE(_tag) \
+// monochrome palettes
+#define MCFG_PALETTE_ADD_MONOCHROME(_tag) \
MCFG_PALETTE_ADD(_tag, 2) \
- palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_black_and_white), downcast<palette_device *>(device)));
+ palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_monochrome), downcast<palette_device *>(device)));
-#define MCFG_PALETTE_ADD_WHITE_AND_BLACK(_tag) \
+#define MCFG_PALETTE_ADD_MONOCHROME_INVERTED(_tag) \
MCFG_PALETTE_ADD(_tag, 2) \
- palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_white_and_black), downcast<palette_device *>(device)));
+ palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_monochrome_inverted), downcast<palette_device *>(device)));
-#define MCFG_PALETTE_ADD_MONOCHROME_AMBER(_tag) \
- MCFG_PALETTE_ADD(_tag, 2) \
- palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_monochrome_amber), downcast<palette_device *>(device)));
-
-#define MCFG_PALETTE_ADD_MONOCHROME_GREEN(_tag) \
- MCFG_PALETTE_ADD(_tag, 2) \
- palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_monochrome_green), downcast<palette_device *>(device)));
-
-#define MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT(_tag) \
+#define MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT(_tag) \
MCFG_PALETTE_ADD(_tag, 3) \
- palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_monochrome_green_highlight), downcast<palette_device *>(device)));
-
-#define MCFG_PALETTE_ADD_MONOCHROME_YELLOW(_tag) \
- MCFG_PALETTE_ADD(_tag, 2) \
- palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_monochrome_yellow), downcast<palette_device *>(device)));
+ palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_monochrome_highlight), downcast<palette_device *>(device)));
+// 8-bit palettes
#define MCFG_PALETTE_ADD_3BIT_RGB(_tag) \
MCFG_PALETTE_ADD(_tag, 8) \
palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_3bit_rgb), downcast<palette_device *>(device)));
@@ -266,10 +255,12 @@
MCFG_PALETTE_ADD(_tag, 8) \
palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_3bit_bgr), downcast<palette_device *>(device)));
+// 15-bit palettes
#define MCFG_PALETTE_ADD_RRRRRGGGGGBBBBB(_tag) \
MCFG_PALETTE_ADD(_tag, 32768) \
palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_RRRRRGGGGGBBBBB), downcast<palette_device *>(device)));
+// 16-bit palettes
#define MCFG_PALETTE_ADD_BBBBBGGGGGRRRRR(_tag) \
MCFG_PALETTE_ADD(_tag, 32768) \
palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_BBBBBGGGGGRRRRR), downcast<palette_device *>(device)));
@@ -437,12 +428,9 @@ public:
// generic palette init routines
void palette_init_all_black(palette_device &palette);
- void palette_init_black_and_white(palette_device &palette);
- void palette_init_white_and_black(palette_device &palette);
- void palette_init_monochrome_amber(palette_device &palette);
- void palette_init_monochrome_green(palette_device &palette);
- void palette_init_monochrome_green_highlight(palette_device &palette);
- void palette_init_monochrome_yellow(palette_device &palette);
+ void palette_init_monochrome(palette_device &palette);
+ void palette_init_monochrome_inverted(palette_device &palette);
+ void palette_init_monochrome_highlight(palette_device &palette);
void palette_init_3bit_rgb(palette_device &palette);
void palette_init_3bit_rbg(palette_device &palette);
void palette_init_3bit_brg(palette_device &palette);
diff --git a/src/emu/fileio.cpp b/src/emu/fileio.cpp
index d13e162f990..79bf746fbfa 100644
--- a/src/emu/fileio.cpp
+++ b/src/emu/fileio.cpp
@@ -187,21 +187,11 @@ emu_file::~emu_file()
//-------------------------------------------------
-// operator core_file - automatically convert
-// ourselves to a core_file pointer
+// operator util::core_file - automatically
+// convert ourselves to a core_file reference
//-------------------------------------------------
-emu_file::operator core_file *()
-{
- // load the ZIP file now if we haven't yet
- if (compressed_file_ready())
- return nullptr;
-
- // return the core file
- return m_file;
-}
-
-emu_file::operator core_file &()
+emu_file::operator util::core_file &()
{
// load the ZIP file now if we haven't yet
if (compressed_file_ready())
@@ -251,12 +241,12 @@ hash_collection &emu_file::hashes(const char *types)
}
// read the data if we can
- const UINT8 *filedata = (const UINT8 *)core_fbuffer(m_file);
+ const UINT8 *filedata = (const UINT8 *)m_file->buffer();
if (filedata == nullptr)
return m_hashes;
// compute the hash
- m_hashes.compute(filedata, core_fsize(m_file), needed.c_str());
+ m_hashes.compute(filedata, m_file->size(), needed.c_str());
return m_hashes;
}
@@ -348,7 +338,7 @@ file_error emu_file::open_next()
while (m_iterator.next(m_fullpath, m_filename.c_str()))
{
// attempt to open the file directly
- filerr = core_fopen(m_fullpath.c_str(), m_openflags, &m_file);
+ filerr = util::core_file::open(m_fullpath.c_str(), m_openflags, m_file);
if (filerr == FILERR_NONE)
break;
@@ -384,7 +374,7 @@ file_error emu_file::open_ram(const void *data, UINT32 length)
m_crc = 0;
// use the core_file's built-in RAM support
- return core_fopen_ram(data, length, m_openflags, &m_file);
+ return util::core_file::open_ram(data, length, m_openflags, m_file);
}
@@ -404,9 +394,7 @@ void emu_file::close()
zip_file_close(m_zipfile);
m_zipfile = nullptr;
- if (m_file != nullptr)
- core_fclose(m_file);
- m_file = nullptr;
+ m_file.reset();
m__7zdata.clear();
m_zipdata.clear();
@@ -429,7 +417,7 @@ void emu_file::close()
file_error emu_file::compress(int level)
{
- return core_fcompress(m_file, level);
+ return m_file->compress(level);
}
@@ -461,8 +449,8 @@ int emu_file::seek(INT64 offset, int whence)
return 1;
// seek if we can
- if (m_file != nullptr)
- return core_fseek(m_file, offset, whence);
+ if (m_file)
+ return m_file->seek(offset, whence);
return 1;
}
@@ -479,8 +467,8 @@ UINT64 emu_file::tell()
return 0;
// tell if we can
- if (m_file != nullptr)
- return core_ftell(m_file);
+ if (m_file)
+ return m_file->tell();
return 0;
}
@@ -497,8 +485,8 @@ bool emu_file::eof()
return 0;
// return EOF if we can
- if (m_file != nullptr)
- return core_feof(m_file);
+ if (m_file)
+ return m_file->eof();
return 0;
}
@@ -518,8 +506,8 @@ UINT64 emu_file::size()
return m_ziplength;
// return length if we can
- if (m_file != nullptr)
- return core_fsize(m_file);
+ if (m_file)
+ return m_file->size();
return 0;
}
@@ -536,8 +524,8 @@ UINT32 emu_file::read(void *buffer, UINT32 length)
return 0;
// read the data if we can
- if (m_file != nullptr)
- return core_fread(m_file, buffer, length);
+ if (m_file)
+ return m_file->read(buffer, length);
return 0;
}
@@ -554,8 +542,8 @@ int emu_file::getc()
return EOF;
// read the data if we can
- if (m_file != nullptr)
- return core_fgetc(m_file);
+ if (m_file)
+ return m_file->getc();
return EOF;
}
@@ -572,8 +560,8 @@ int emu_file::ungetc(int c)
return 1;
// read the data if we can
- if (m_file != nullptr)
- return core_ungetc(c, m_file);
+ if (m_file)
+ return m_file->ungetc(c);
return 1;
}
@@ -590,8 +578,8 @@ char *emu_file::gets(char *s, int n)
return nullptr;
// read the data if we can
- if (m_file != nullptr)
- return core_fgets(s, n, m_file);
+ if (m_file)
+ return m_file->gets(s, n);
return nullptr;
}
@@ -604,8 +592,8 @@ char *emu_file::gets(char *s, int n)
UINT32 emu_file::write(const void *buffer, UINT32 length)
{
// write the data if we can
- if (m_file != nullptr)
- return core_fwrite(m_file, buffer, length);
+ if (m_file)
+ return m_file->write(buffer, length);
return 0;
}
@@ -618,8 +606,8 @@ UINT32 emu_file::write(const void *buffer, UINT32 length)
int emu_file::puts(const char *s)
{
// write the data if we can
- if (m_file != nullptr)
- return core_fputs(m_file, s);
+ if (m_file)
+ return m_file->puts(s);
return 0;
}
@@ -629,25 +617,10 @@ int emu_file::puts(const char *s)
// vfprintf - vfprintf to a text file
//-------------------------------------------------
-int emu_file::vprintf(const char *fmt, va_list va)
+int emu_file::vprintf(util::format_argument_pack<std::ostream> const &args)
{
// write the data if we can
- return (m_file != nullptr) ? core_vfprintf(m_file, fmt, va) : 0;
-}
-
-
-//-------------------------------------------------
-// printf - vfprintf to a text file
-//-------------------------------------------------
-
-int CLIB_DECL emu_file::printf(const char *fmt, ...)
-{
- int rc;
- va_list va;
- va_start(va, fmt);
- rc = vprintf(fmt, va);
- va_end(va);
- return rc;
+ return m_file ? m_file->vprintf(args) : 0;
}
@@ -658,8 +631,8 @@ int CLIB_DECL emu_file::printf(const char *fmt, ...)
void emu_file::flush()
{
// flush the buffers if we can
- if (m_file != nullptr)
- core_fflush(m_file);
+ if (m_file)
+ m_file->flush();
}
@@ -778,7 +751,7 @@ file_error emu_file::load_zipped_file()
}
// convert to RAM file
- file_error filerr = core_fopen_ram(&m_zipdata[0], m_zipdata.size(), m_openflags, &m_file);
+ file_error filerr = util::core_file::open_ram(&m_zipdata[0], m_zipdata.size(), m_openflags, m_file);
if (filerr != FILERR_NONE)
{
m_zipdata.clear();
@@ -907,7 +880,7 @@ file_error emu_file::load__7zped_file()
}
// convert to RAM file
- file_error filerr = core_fopen_ram(&m__7zdata[0], m__7zdata.size(), m_openflags, &m_file);
+ file_error filerr = util::core_file::open_ram(&m__7zdata[0], m__7zdata.size(), m_openflags, m_file);
if (filerr != FILERR_NONE)
{
m__7zdata.clear();
diff --git a/src/emu/fileio.h b/src/emu/fileio.h
index 60111304abc..22f36f5362e 100644
--- a/src/emu/fileio.h
+++ b/src/emu/fileio.h
@@ -90,9 +90,8 @@ public:
virtual ~emu_file();
// getters
- operator core_file *();
- operator core_file &();
- bool is_open() const { return (m_file != nullptr); }
+ operator util::core_file &();
+ bool is_open() const { return bool(m_file); }
const char *filename() const { return m_filename.c_str(); }
const char *fullpath() const { return m_fullpath.c_str(); }
UINT32 openflags() const { return m_openflags; }
@@ -102,7 +101,7 @@ public:
// setters
void remove_on_close() { m_remove_on_close = true; }
- void set_openflags(UINT32 openflags) { assert(m_file == nullptr); m_openflags = openflags; }
+ void set_openflags(UINT32 openflags) { assert(!m_file); m_openflags = openflags; }
void set_restrict_to_mediapath(bool rtmp = true) { m_restrict_to_mediapath = rtmp; }
// open/close
@@ -136,8 +135,11 @@ public:
// writing
UINT32 write(const void *buffer, UINT32 length);
int puts(const char *s);
- int vprintf(const char *fmt, va_list va);
- int printf(const char *fmt, ...) ATTR_PRINTF(2,3);
+ int vprintf(util::format_argument_pack<std::ostream> const &args);
+ template <typename Format, typename... Params> int printf(Format &&fmt, Params &&...args)
+ {
+ return vprintf(util::make_format_argument_pack(std::forward<Format>(fmt), std::forward<Params>(args)...));
+ }
// buffers
void flush();
@@ -157,9 +159,9 @@ private:
// internal state
std::string m_filename; // original filename provided
std::string m_fullpath; // full filename
- core_file * m_file; // core file pointer
+ util::core_file::ptr m_file; // core file pointer
path_iterator m_iterator; // iterator for paths
- path_iterator m_mediapaths; // media-path iterator
+ path_iterator m_mediapaths; // media-path iterator
UINT32 m_crc; // file's CRC
UINT32 m_openflags; // flags we used for the open
hash_collection m_hashes; // collection of hashes
diff --git a/src/emu/ioport.cpp b/src/emu/ioport.cpp
index a9ac5682b04..2b00cabb94b 100644
--- a/src/emu/ioport.cpp
+++ b/src/emu/ioport.cpp
@@ -103,6 +103,9 @@
#include <ctype.h>
#include <time.h>
+
+namespace {
+
// temporary: set this to 1 to enable the originally defined behavior that
// a field specified via PORT_MODIFY which intersects a previously-defined
// field completely wipes out the previous definition
@@ -142,7 +145,6 @@ struct char_info
};
-
//**************************************************************************
// INLINE FUNCTIONS
//**************************************************************************
@@ -186,10 +188,10 @@ inline INT32 apply_scale(INT32 value, INT64 scale)
//**************************************************************************
// XML attributes for the different types
-static const char *const seqtypestrings[] = { "standard", "increment", "decrement" };
+const char *const seqtypestrings[] = { "standard", "increment", "decrement" };
// master character info table
-static const char_info charinfo[] =
+const char_info charinfo[] =
{
{ 0x0008, "Backspace", nullptr }, // Backspace
{ 0x0009, "Tab", " " }, // Tab
@@ -489,7 +491,7 @@ static const char_info charinfo[] =
// COMMON SHARED STRINGS
//**************************************************************************
-static const struct
+const struct
{
UINT32 id;
const char *string;
@@ -616,6 +618,11 @@ static const struct
{ INPUT_STRING_None, "None" },
};
+} // anonymous namespace
+
+
+std::uint8_t const inp_header::MAGIC[inp_header::OFFS_BASETIME - inp_header::OFFS_MAGIC] = { 'M', 'A', 'M', 'E', 'I', 'N', 'P', 0 };
+
//**************************************************************************
@@ -3404,25 +3411,25 @@ time_t ioport_manager::playback_init()
assert_always(filerr == FILERR_NONE, "Failed to open file for playback");
// read the header and verify that it is a modern version; if not, print an error
- UINT8 header[INP_HEADER_SIZE];
- if (m_playback_file.read(header, sizeof(header)) != sizeof(header))
+ inp_header header;
+ if (!header.read(m_playback_file))
fatalerror("Input file is corrupt or invalid (missing header)\n");
- if (memcmp(header, "MAMEINP\0", 8) != 0)
+ if (!header.check_magic())
fatalerror("Input file invalid or in an older, unsupported format\n");
- if (header[0x10] != INP_HEADER_MAJVERSION)
+ if (header.get_majversion() != inp_header::MAJVERSION)
fatalerror("Input file format version mismatch\n");
// output info to console
osd_printf_info("Input file: %s\n", filename);
- osd_printf_info("INP version %d.%d\n", header[0x10], header[0x11]);
- time_t basetime = header[0x08] | (header[0x09] << 8) | (header[0x0a] << 16) | (header[0x0b] << 24) |
- ((UINT64)header[0x0c] << 32) | ((UINT64)header[0x0d] << 40) | ((UINT64)header[0x0e] << 48) | ((UINT64)header[0x0f] << 56);
+ osd_printf_info("INP version %u.%u\n", header.get_majversion(), header.get_minversion());
+ time_t basetime = header.get_basetime();
osd_printf_info("Created %s\n", ctime(&basetime));
- osd_printf_info("Recorded using %s\n", header + 0x20);
+ osd_printf_info("Recorded using %s\n", header.get_appdesc().c_str());
// verify the header against the current game
- if (memcmp(machine().system().name, header + 0x14, strlen(machine().system().name) + 1) != 0)
- osd_printf_info("Input file is for machine '%s', not for current machine '%s'\n", header + 0x14, machine().system().name);
+ std::string const sysname = header.get_sysname();
+ if (sysname != machine().system().name)
+ osd_printf_info("Input file is for machine '%s', not for current machine '%s'\n", sysname.c_str(), machine().system().name);
// enable compression
m_playback_file.compress(FCOMPRESS_MEDIUM);
@@ -3447,7 +3454,8 @@ void ioport_manager::playback_end(const char *message)
machine().popmessage("Playback Ended\nReason: %s", message);
// display speed stats
- m_playback_accumulated_speed /= m_playback_accumulated_frames;
+ if (m_playback_accumulated_speed > 0)
+ m_playback_accumulated_speed /= m_playback_accumulated_frames;
osd_printf_info("Total playback frames: %d\n", UINT32(m_playback_accumulated_frames));
osd_printf_info("Average recorded speed: %d%%\n", UINT32((m_playback_accumulated_speed * 200 + 1) >> 21));
@@ -3582,23 +3590,15 @@ void ioport_manager::record_init()
machine().base_datetime(systime);
// fill in the header
- UINT8 header[INP_HEADER_SIZE] = { 0 };
- memcpy(header, "MAMEINP\0", 8);
- header[0x08] = systime.time >> 0;
- header[0x09] = systime.time >> 8;
- header[0x0a] = systime.time >> 16;
- header[0x0b] = systime.time >> 24;
- header[0x0c] = systime.time >> 32;
- header[0x0d] = systime.time >> 40;
- header[0x0e] = systime.time >> 48;
- header[0x0f] = systime.time >> 56;
- header[0x10] = INP_HEADER_MAJVERSION;
- header[0x11] = INP_HEADER_MINVERSION;
- strcpy((char *)header + 0x14, machine().system().name);
- sprintf((char *)header + 0x20, "%s %s", emulator_info::get_appname(), build_version);
+ inp_header header;
+ header.set_magic();
+ header.set_basetime(systime.time);
+ header.set_version();
+ header.set_sysname(machine().system().name);
+ header.set_appdesc(util::string_format("%s %s", emulator_info::get_appname(), build_version));
// write it
- m_record_file.write(header, sizeof(header));
+ header.write(m_record_file);
// enable compression
m_record_file.compress(FCOMPRESS_MEDIUM);
diff --git a/src/emu/ioport.h b/src/emu/ioport.h
index bc8dab543be..8d16f7e4fa8 100644
--- a/src/emu/ioport.h
+++ b/src/emu/ioport.h
@@ -17,6 +17,8 @@
#ifndef __INPTPORT_H__
#define __INPTPORT_H__
+#include <cstdint>
+#include <cstring>
#include <time.h>
@@ -34,11 +36,6 @@ const ioport_value IP_ACTIVE_LOW = 0xffffffff;
// maximum number of players supported
const int MAX_PLAYERS = 8;
-// INP file parameters
-const UINT32 INP_HEADER_SIZE = 64;
-const UINT32 INP_HEADER_MAJVERSION = 3;
-const UINT32 INP_HEADER_MINVERSION = 0;
-
// unicode constants
const unicode_char UCHAR_PRIVATE = 0x100000;
const unicode_char UCHAR_SHIFT_1 = UCHAR_PRIVATE + 0;
@@ -697,15 +694,110 @@ typedef delegate<bool ()> ioport_charqueue_empty_delegate;
// ======================> inp_header
// header at the front of INP files
-struct inp_header
+class inp_header
{
- char header[8]; // +00: 8 byte header - must be "MAMEINP\0"
- UINT64 basetime; // +08: base time of recording
- UINT8 majversion; // +10: major INP version
- UINT8 minversion; // +11: minor INP version
- UINT8 reserved[2]; // +12: must be zero
- char gamename[12]; // +14: game name string, NULL-terminated
- char version[32]; // +20: system version string, NULL-terminated
+public:
+ // parameters
+ static constexpr unsigned MAJVERSION = 3;
+ static constexpr unsigned MINVERSION = 0;
+
+ bool read(emu_file &f)
+ {
+ return f.read(m_data, sizeof(m_data)) == sizeof(m_data);
+ }
+ bool write(emu_file &f) const
+ {
+ return f.write(m_data, sizeof(m_data)) == sizeof(m_data);
+ }
+
+ bool check_magic() const
+ {
+ return 0 == std::memcmp(MAGIC, m_data + OFFS_MAGIC, OFFS_BASETIME - OFFS_MAGIC);
+ }
+ std::uint64_t get_basetime() const
+ {
+ return
+ (std::uint64_t(m_data[OFFS_BASETIME + 0]) << (0 * 8)) |
+ (std::uint64_t(m_data[OFFS_BASETIME + 1]) << (1 * 8)) |
+ (std::uint64_t(m_data[OFFS_BASETIME + 2]) << (2 * 8)) |
+ (std::uint64_t(m_data[OFFS_BASETIME + 3]) << (3 * 8)) |
+ (std::uint64_t(m_data[OFFS_BASETIME + 4]) << (4 * 8)) |
+ (std::uint64_t(m_data[OFFS_BASETIME + 5]) << (5 * 8)) |
+ (std::uint64_t(m_data[OFFS_BASETIME + 6]) << (6 * 8)) |
+ (std::uint64_t(m_data[OFFS_BASETIME + 7]) << (7 * 8));
+ }
+ unsigned get_majversion() const
+ {
+ return m_data[OFFS_MAJVERSION];
+ }
+ unsigned get_minversion() const
+ {
+ return m_data[OFFS_MINVERSION];
+ }
+ std::string get_sysname() const
+ {
+ return get_string<OFFS_SYSNAME, OFFS_APPDESC>();
+ }
+ std::string get_appdesc() const
+ {
+ return get_string<OFFS_APPDESC, OFFS_END>();
+ }
+
+ void set_magic()
+ {
+ std::memcpy(m_data + OFFS_MAGIC, MAGIC, OFFS_BASETIME - OFFS_MAGIC);
+ }
+ void set_basetime(std::uint64_t time)
+ {
+ m_data[OFFS_BASETIME + 0] = std::uint8_t((time >> (0 * 8)) & 0x00ff);
+ m_data[OFFS_BASETIME + 1] = std::uint8_t((time >> (1 * 8)) & 0x00ff);
+ m_data[OFFS_BASETIME + 2] = std::uint8_t((time >> (2 * 8)) & 0x00ff);
+ m_data[OFFS_BASETIME + 3] = std::uint8_t((time >> (3 * 8)) & 0x00ff);
+ m_data[OFFS_BASETIME + 4] = std::uint8_t((time >> (4 * 8)) & 0x00ff);
+ m_data[OFFS_BASETIME + 5] = std::uint8_t((time >> (5 * 8)) & 0x00ff);
+ m_data[OFFS_BASETIME + 6] = std::uint8_t((time >> (6 * 8)) & 0x00ff);
+ m_data[OFFS_BASETIME + 7] = std::uint8_t((time >> (7 * 8)) & 0x00ff);
+ }
+ void set_version()
+ {
+ m_data[OFFS_MAJVERSION] = MAJVERSION;
+ m_data[OFFS_MINVERSION] = MINVERSION;
+ }
+ void set_sysname(std::string const &name)
+ {
+ set_string<OFFS_SYSNAME, OFFS_APPDESC>(name);
+ }
+ void set_appdesc(std::string const &desc)
+ {
+ set_string<OFFS_APPDESC, OFFS_END>(desc);
+ }
+
+private:
+ template <std::size_t BEGIN, std::size_t END> void set_string(std::string const &str)
+ {
+ std::size_t const used = (std::min<std::size_t>)(str.size() + 1, END - BEGIN);
+ std::memcpy(m_data + BEGIN, str.c_str(), used);
+ if ((END - BEGIN) > used)
+ std::memset(m_data + BEGIN + used, 0, (END - BEGIN) - used);
+ }
+ template <std::size_t BEGIN, std::size_t END> std::string get_string() const
+ {
+ char const *const begin = reinterpret_cast<char const *>(m_data + BEGIN);
+ return std::string(begin, std::find(begin, reinterpret_cast<char const *>(m_data + END), '\0'));
+ }
+
+ static constexpr std::size_t OFFS_MAGIC = 0x00; // 0x08 bytes
+ static constexpr std::size_t OFFS_BASETIME = 0x08; // 0x08 bytes (little-endian binary integer)
+ static constexpr std::size_t OFFS_MAJVERSION = 0x10; // 0x01 bytes (binary integer)
+ static constexpr std::size_t OFFS_MINVERSION = 0x11; // 0x01 bytes (binary integer)
+ // 0x02 bytes reserved
+ static constexpr std::size_t OFFS_SYSNAME = 0x14; // 0x0c bytes (ASCII)
+ static constexpr std::size_t OFFS_APPDESC = 0x20; // 0x20 bytes (ASCII)
+ static constexpr std::size_t OFFS_END = 0x40;
+
+ static std::uint8_t const MAGIC[OFFS_BASETIME - OFFS_MAGIC];
+
+ std::uint8_t m_data[OFFS_END];
};
@@ -1580,7 +1672,6 @@ private:
#define DECLARE_INPUT_CHANGED_MEMBER(name) void name(ioport_field &field, void *param, ioport_value oldval, ioport_value newval)
// macro for port changed callback functions (PORT_CROSSHAIR_MAPPER)
-#define CROSSHAIR_MAPPER(name) float name(device_t &device, ioport_field &field, float linear_value)
#define CROSSHAIR_MAPPER_MEMBER(name) float name(ioport_field &field, float linear_value)
#define DECLARE_CROSSHAIR_MAPPER_MEMBER(name) float name(ioport_field &field, float linear_value)
@@ -1727,9 +1818,6 @@ ATTR_COLD void INPUT_PORTS_NAME(_name)(device_t &owner, ioport_list &portlist, s
configurer.field_set_analog_invert();
// read callbacks
-#define PORT_CUSTOM(_callback, _param) \
- configurer.field_set_dynamic_read(ioport_field_read_delegate(_callback, #_callback, DEVICE_SELF, (device_t *)NULL), (void *)(_param));
-
#define PORT_CUSTOM_MEMBER(_device, _class, _member, _param) \
configurer.field_set_dynamic_read(ioport_field_read_delegate(&_class::_member, #_class "::" #_member, _device, (_class *)NULL), (void *)(_param));
@@ -1738,18 +1826,12 @@ ATTR_COLD void INPUT_PORTS_NAME(_name)(device_t &owner, ioport_list &portlist, s
configurer.field_set_dynamic_write(ioport_field_write_delegate(&_class::_member, #_class "::" #_member, _device, (_class *)NULL), (void *)(_param));
// input device handler
-#define PORT_READ_LINE_DEVICE(_device, _read_line_device) \
- configurer.field_set_dynamic_read(ioport_field_read_delegate(&ioport_read_line_wrapper<_read_line_device>, #_read_line_device, _device, (device_t *)NULL));
-
#define PORT_READ_LINE_DEVICE_MEMBER(_device, _class, _member) \
- configurer.field_set_dynamic_read(ioport_field_read_delegate(&ioport_read_line_wrapper<_class, &_class::_member>, #_class "::" #_member, _device, (_class *)NULL));
+ configurer.field_set_dynamic_read(ioport_field_read_delegate([](_class &device, ioport_field &field, void *param)->ioport_value { return (device._member() & 1) ? ~ioport_value(0) : 0; } , #_class "::" #_member, _device, (_class *)NULL));
// output device handler
-#define PORT_WRITE_LINE_DEVICE(_device, _write_line_device) \
- configurer.field_set_dynamic_write(ioport_field_write_delegate(&ioport_write_line_wrapper<_write_line_device>, #_write_line_device, _device, (device_t *)NULL));
-
#define PORT_WRITE_LINE_DEVICE_MEMBER(_device, _class, _member) \
- configurer.field_set_dynamic_write(ioport_field_write_delegate(&ioport_write_line_wrapper<_class, &_class::_member>, #_class "::" #_member, _device, (_class *)NULL));
+ configurer.field_set_dynamic_write(ioport_field_write_delegate([](_class &device, ioport_field &field, void *param, ioport_value oldval, ioport_value newval) { device._member(newval); }, #_class "::" #_member, _device, (_class *)NULL));
// dip switch definition
#define PORT_DIPNAME(_mask, _default, _name) \
@@ -1829,38 +1911,6 @@ ATTR_COLD void INPUT_PORTS_NAME(_name)(device_t &owner, ioport_list &portlist, s
#define PORT_HBLANK(_screen) \
PORT_READ_LINE_DEVICE_MEMBER(_screen, screen_device, hblank)
-
-
-//**************************************************************************
-// INLINE TEMPLATES
-//**************************************************************************
-
-template<int (*_FunctionPointer)(device_t *)>
-ioport_value ioport_read_line_wrapper(device_t &device, ioport_field &field, void *param)
-{
- return ((*_FunctionPointer)(&device) & 1) ? ~ioport_value(0) : 0;
-}
-
-template<class _FunctionClass, int (_FunctionClass::*_FunctionPointer)()>
-ioport_value ioport_read_line_wrapper(_FunctionClass &device, ioport_field &field, void *param)
-{
- return ((device.*_FunctionPointer)() & 1) ? ~ioport_value(0) : 0;
-}
-
-template<void (*_FunctionPointer)(device_t *, int)>
-void ioport_write_line_wrapper(device_t &device, ioport_field &field, void *param, ioport_value oldval, ioport_value newval)
-{
- return (*_FunctionPointer)(&device, newval);
-}
-
-template<class _FunctionClass, void (_FunctionClass::*_FunctionPointer)(int)>
-void ioport_write_line_wrapper(_FunctionClass &device, ioport_field &field, void *param, ioport_value oldval, ioport_value newval)
-{
- return (device.*_FunctionPointer)(newval);
-}
-
-
-
//**************************************************************************
// INLINE FUNCTIONS
//**************************************************************************
diff --git a/src/emu/layout/LICENSE b/src/emu/layout/LICENSE
new file mode 100644
index 00000000000..670154e3538
--- /dev/null
+++ b/src/emu/layout/LICENSE
@@ -0,0 +1,116 @@
+CC0 1.0 Universal
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later
+claims of infringement build upon, modify, incorporate in other works, reuse
+and redistribute as freely as possible in any form whatsoever and for any
+purposes, including without limitation commercial purposes. These owners may
+contribute to the Commons to promote the ideal of a free culture and the
+further production of creative, cultural and scientific works, or to gain
+reputation or greater distribution for their Work in part through the use and
+efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with a
+Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not limited
+to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display, communicate,
+ and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or performer(s);
+
+ iii. publicity and privacy rights pertaining to a person's image or likeness
+ depicted in a Work;
+
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+
+ v. rights protecting the extraction, dissemination, use and reuse of data in
+ a Work;
+
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation thereof,
+ including any amended or successor version of such directive); and
+
+ vii. other similar, equivalent or corresponding rights throughout the world
+ based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time
+extensions), (iii) in any current or future medium and for any number of
+copies, and (iv) for any purpose whatsoever, including without limitation
+commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
+the Waiver for the benefit of each member of the public at large and to the
+detriment of Affirmer's heirs and successors, fully intending that such Waiver
+shall not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of the Work
+by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account
+Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
+is so judged Affirmer hereby grants to each affected person a royalty-free,
+non transferable, non sublicensable, non exclusive, irrevocable and
+unconditional license to exercise Affirmer's Copyright and Related Rights in
+the Work (i) in all territories worldwide, (ii) for the maximum duration
+provided by applicable law or treaty (including future time extensions), (iii)
+in any current or future medium and for any number of copies, and (iv) for any
+purpose whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed effective as
+of the date CC0 was applied by Affirmer to the Work. Should any part of the
+License for any reason be judged legally invalid or ineffective under
+applicable law, such partial invalidity or ineffectiveness shall not
+invalidate the remainder of the License, and in such case Affirmer hereby
+affirms that he or she will not (i) exercise any of his or her remaining
+Copyright and Related Rights in the Work or (ii) assert any associated claims
+and causes of action with respect to the Work, in either case contrary to
+Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+
+ b. Affirmer offers the Work as-is and makes no representations or warranties
+ of any kind concerning the Work, express, implied, statutory or otherwise,
+ including without limitation warranties of title, merchantability, fitness
+ for a particular purpose, non infringement, or the absence of latent or
+ other defects, accuracy, or the present or absence of errors, whether or not
+ discoverable, all to the greatest extent permissible under applicable law.
+
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without limitation
+ any person's Copyright and Related Rights in the Work. Further, Affirmer
+ disclaims responsibility for obtaining any necessary consents, permissions
+ or other rights required for any use of the Work.
+
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to this
+ CC0 or use of the Work.
+
+For more information, please see
+<http://creativecommons.org/publicdomain/zero/1.0/>
diff --git a/src/emu/layout/README.md b/src/emu/layout/README.md
new file mode 100644
index 00000000000..78ef2e5e6ad
--- /dev/null
+++ b/src/emu/layout/README.md
@@ -0,0 +1,6 @@
+# **Layout** #
+
+Layouts files are definiton files to describe look and fell of emulated machines, and are product
+of many different contributors.
+
+Licensed under [CC0 1.0 Universal (CC0 1.0)](https://creativecommons.org/publicdomain/zero/1.0/) \ No newline at end of file
diff --git a/src/emu/luaengine.cpp b/src/emu/luaengine.cpp
index ecf1b418de5..4ffee509693 100644
--- a/src/emu/luaengine.cpp
+++ b/src/emu/luaengine.cpp
@@ -19,9 +19,6 @@
#include "ui/ui.h"
#include "luaengine.h"
#include <mutex>
-#if !defined(NO_LIBUV)
-#include "libuv/include/uv.h"
-#endif
//**************************************************************************
// LUA ENGINE
@@ -52,10 +49,6 @@ extern "C" {
int luaopen_lsqlite3(lua_State *L);
int luaopen_zlib(lua_State *L);
int luaopen_lfs(lua_State *L);
-#if !defined(NO_LIBUV)
- int luaopen_luv(lua_State *L);
- uv_loop_t* luv_loop(lua_State* L);
-#endif
}
static void lstop(lua_State *L, lua_Debug *ar)
@@ -1199,12 +1192,6 @@ lua_engine::lua_engine()
lua_getfield(m_lua_state, -1, "preload");
lua_remove(m_lua_state, -2); // Remove package
-#if !defined(NO_LIBUV)
- // Store uv module definition at preload.uv
- lua_pushcfunction(m_lua_state, luaopen_luv);
- lua_setfield(m_lua_state, -2, "luv");
-#endif
-
lua_pushcfunction(m_lua_state, luaopen_zlib);
lua_setfield(m_lua_state, -2, "zlib");
@@ -1670,11 +1657,6 @@ void lua_engine::periodic_check()
msg.ready = 0;
msg.done = 1;
}
-#if !defined(NO_LIBUV)
- auto loop = luv_loop(m_lua_state);
- if (loop!=nullptr)
- uv_run(loop, UV_RUN_NOWAIT);
-#endif
}
//-------------------------------------------------
@@ -1727,13 +1709,13 @@ void lua_engine::start()
namespace luabridge {
template <>
- struct Stack <UINT64> {
- static inline void push (lua_State* L, UINT64 value) {
+ struct Stack <unsigned long long> {
+ static inline void push (lua_State* L, unsigned long long value) {
lua_pushunsigned(L, static_cast <lua_Unsigned> (value));
}
- static inline UINT64 get (lua_State* L, int index) {
- return static_cast <UINT64> (luaL_checkunsigned (L, index));
+ static inline unsigned long long get (lua_State* L, int index) {
+ return static_cast <unsigned long long> (luaL_checkunsigned (L, index));
}
};
}
diff --git a/src/emu/machine.cpp b/src/emu/machine.cpp
index 70c3f2f1569..b3ac263473e 100644
--- a/src/emu/machine.cpp
+++ b/src/emu/machine.cpp
@@ -1011,6 +1011,7 @@ void running_machine::logfile_callback(const running_machine &machine, const cha
if (machine.m_logfile != nullptr)
{
machine.m_logfile->puts(buffer);
+
machine.m_logfile->flush();
}
}
diff --git a/src/emu/mame.cpp b/src/emu/mame.cpp
index 513300553d6..5e93623498d 100644
--- a/src/emu/mame.cpp
+++ b/src/emu/mame.cpp
@@ -259,7 +259,7 @@ int machine_manager::execute()
sw_instance = sw_load.substr(right + 1);
sw_load.assign(sw_load.substr(0, right));
- char arg[] = "ume";
+ char arg[] = "mame";
char *argv = &arg[0];
m_options.set_value(OPTION_SOFTWARENAME, sw_name.c_str(), OPTION_PRIORITY_CMDLINE, error_string);
m_options.parse_slot_devices(1, &argv, option_errors, sw_instance.c_str(), sw_load.c_str());
diff --git a/src/emu/schedule.h b/src/emu/schedule.h
index 2f3a7f8a23a..5ed0c049bdb 100644
--- a/src/emu/schedule.h
+++ b/src/emu/schedule.h
@@ -33,8 +33,6 @@
#define PERIOD_OF_555_MONOSTABLE(r,c) attotime::from_nsec(PERIOD_OF_555_MONOSTABLE_NSEC(r,c))
#define PERIOD_OF_555_ASTABLE(r1,r2,c) attotime::from_nsec(PERIOD_OF_555_ASTABLE_NSEC(r1,r2,c))
-#define TIMER_CALLBACK(name) void name(running_machine &machine, void *ptr, int param)
-#define TIMER_CALLBACK_MEMBER(name) void name(void *ptr, INT32 param)
//**************************************************************************
// TYPE DEFINITIONS
diff --git a/src/emu/screen.cpp b/src/emu/screen.cpp
index 2ae1269cdd8..c286788ea37 100644
--- a/src/emu/screen.cpp
+++ b/src/emu/screen.cpp
@@ -240,6 +240,19 @@ void screen_device::static_set_video_attributes(device_t &device, UINT32 flags)
screen_device &screen = downcast<screen_device &>(device);
screen.m_video_attributes = flags;
}
+
+
+//-------------------------------------------------
+// static_set_color - set the screen global color
+//-------------------------------------------------
+
+void screen_device::static_set_color(device_t &device, rgb_t color)
+{
+ screen_device &screen = downcast<screen_device &>(device);
+ screen.m_color = color;
+}
+
+
//-------------------------------------------------
// device_validity_check - verify device
// configuration
diff --git a/src/emu/screen.h b/src/emu/screen.h
index 6a38b72f377..711602b0395 100644
--- a/src/emu/screen.h
+++ b/src/emu/screen.h
@@ -193,6 +193,7 @@ public:
static void static_set_screen_vblank(device_t &device, screen_vblank_delegate callback);
static void static_set_palette(device_t &device, const char *tag);
static void static_set_video_attributes(device_t &device, UINT32 flags);
+ static void static_set_color(device_t &device, rgb_t color);
// information getters
render_container &container() const { assert(m_container != nullptr); return *m_container; }
@@ -365,6 +366,12 @@ typedef device_type_iterator<&device_creator<screen_device>, screen_device> scre
#define MCFG_SCREEN_ADD(_tag, _type) \
MCFG_DEVICE_ADD(_tag, SCREEN, 0) \
MCFG_SCREEN_TYPE(_type)
+
+#define MCFG_SCREEN_ADD_MONOCHROME(_tag, _type, _color) \
+ MCFG_DEVICE_ADD(_tag, SCREEN, 0) \
+ MCFG_SCREEN_TYPE(_type) \
+ MCFG_SCREEN_COLOR(_color)
+
#define MCFG_SCREEN_MODIFY(_tag) \
MCFG_DEVICE_MODIFY(_tag)
@@ -442,6 +449,8 @@ typedef device_type_iterator<&device_creator<screen_device>, screen_device> scre
screen_device::static_set_palette(*device, FINDER_DUMMY_TAG);
#define MCFG_SCREEN_VIDEO_ATTRIBUTES(_flags) \
screen_device::static_set_video_attributes(*device, _flags);
+#define MCFG_SCREEN_COLOR(_color) \
+ screen_device::static_set_color(*device, _color);
//**************************************************************************
diff --git a/src/emu/tilemap.cpp b/src/emu/tilemap.cpp
index 8df29a29e09..807c1b30cf8 100644
--- a/src/emu/tilemap.cpp
+++ b/src/emu/tilemap.cpp
@@ -558,22 +558,22 @@ void tilemap_t::configure_groups(gfx_element &gfx, int transcolor)
// order with optional flipping
//-------------------------------------------------
-tilemap_memory_index tilemap_t::scan_rows(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
+tilemap_memory_index tilemap_t::scan_rows(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
{
return row * num_cols + col;
}
-tilemap_memory_index tilemap_t::scan_rows_flip_x(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
+tilemap_memory_index tilemap_t::scan_rows_flip_x(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
{
return row * num_cols + (num_cols - 1 - col);
}
-tilemap_memory_index tilemap_t::scan_rows_flip_y(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
+tilemap_memory_index tilemap_t::scan_rows_flip_y(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
{
return (num_rows - 1 - row) * num_cols + col;
}
-tilemap_memory_index tilemap_t::scan_rows_flip_xy(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
+tilemap_memory_index tilemap_t::scan_rows_flip_xy(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
{
return (num_rows - 1 - row) * num_cols + (num_cols - 1 - col);
}
@@ -587,22 +587,22 @@ tilemap_memory_index tilemap_t::scan_rows_flip_xy(driver_device &device, UINT32
// major order with optional flipping
//-------------------------------------------------
-tilemap_memory_index tilemap_t::scan_cols(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
+tilemap_memory_index tilemap_t::scan_cols(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
{
return col * num_rows + row;
}
-tilemap_memory_index tilemap_t::scan_cols_flip_x(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
+tilemap_memory_index tilemap_t::scan_cols_flip_x(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
{
return (num_cols - 1 - col) * num_rows + row;
}
-tilemap_memory_index tilemap_t::scan_cols_flip_y(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
+tilemap_memory_index tilemap_t::scan_cols_flip_y(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
{
return col * num_rows + (num_rows - 1 - row);
}
-tilemap_memory_index tilemap_t::scan_cols_flip_xy(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
+tilemap_memory_index tilemap_t::scan_cols_flip_xy(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
{
return (num_cols - 1 - col) * num_rows + (num_rows - 1 - row);
}
@@ -1519,22 +1519,6 @@ tilemap_manager::~tilemap_manager()
// tilemaps
//-------------------------------------------------
-static const struct
-{
- tilemap_memory_index (*func)(driver_device &, UINT32, UINT32, UINT32, UINT32);
- const char *name;
-} s_standard_mappers[TILEMAP_STANDARD_COUNT] =
-{
- { FUNC(tilemap_t::scan_rows) },
- { FUNC(tilemap_t::scan_rows_flip_x) },
- { FUNC(tilemap_t::scan_rows_flip_y) },
- { FUNC(tilemap_t::scan_rows_flip_xy) },
- { FUNC(tilemap_t::scan_cols) },
- { FUNC(tilemap_t::scan_cols_flip_x) },
- { FUNC(tilemap_t::scan_cols_flip_y) },
- { FUNC(tilemap_t::scan_cols_flip_xy) }
-};
-
tilemap_t &tilemap_manager::create(device_gfx_interface &decoder, tilemap_get_info_delegate tile_get_info, tilemap_mapper_delegate mapper, int tilewidth, int tileheight, int cols, int rows, tilemap_t *allocated)
{
if (allocated == nullptr)
@@ -1546,7 +1530,19 @@ tilemap_t &tilemap_manager::create(device_gfx_interface &decoder, tilemap_get_in
{
if (allocated == nullptr)
allocated = global_alloc(tilemap_t);
- return m_tilemap_list.append(allocated->init(*this, decoder, tile_get_info, tilemap_mapper_delegate(s_standard_mappers[mapper].func, s_standard_mappers[mapper].name, machine().driver_data()), tilewidth, tileheight, cols, rows));
+
+ switch (mapper)
+ {
+ case TILEMAP_SCAN_ROWS :return m_tilemap_list.append(allocated->init(*this, decoder, tile_get_info, tilemap_mapper_delegate(FUNC(tilemap_t::scan_rows), allocated), tilewidth, tileheight, cols, rows));
+ case TILEMAP_SCAN_ROWS_FLIP_X:return m_tilemap_list.append(allocated->init(*this, decoder, tile_get_info, tilemap_mapper_delegate(FUNC(tilemap_t::scan_rows_flip_x), allocated), tilewidth, tileheight, cols, rows));
+ case TILEMAP_SCAN_ROWS_FLIP_Y:return m_tilemap_list.append(allocated->init(*this, decoder, tile_get_info, tilemap_mapper_delegate(FUNC(tilemap_t::scan_rows_flip_y), allocated), tilewidth, tileheight, cols, rows));
+ case TILEMAP_SCAN_ROWS_FLIP_XY:return m_tilemap_list.append(allocated->init(*this, decoder, tile_get_info, tilemap_mapper_delegate(FUNC(tilemap_t::scan_rows_flip_xy),allocated), tilewidth, tileheight, cols, rows));
+ case TILEMAP_SCAN_COLS:return m_tilemap_list.append(allocated->init(*this, decoder, tile_get_info, tilemap_mapper_delegate(FUNC(tilemap_t::scan_cols),allocated), tilewidth, tileheight, cols, rows));
+ case TILEMAP_SCAN_COLS_FLIP_X:return m_tilemap_list.append(allocated->init(*this, decoder, tile_get_info, tilemap_mapper_delegate(FUNC(tilemap_t::scan_cols_flip_x),allocated), tilewidth, tileheight, cols, rows));
+ case TILEMAP_SCAN_COLS_FLIP_Y:return m_tilemap_list.append(allocated->init(*this, decoder, tile_get_info, tilemap_mapper_delegate(FUNC(tilemap_t::scan_cols_flip_y),allocated), tilewidth, tileheight, cols, rows));
+ case TILEMAP_SCAN_COLS_FLIP_XY:return m_tilemap_list.append(allocated->init(*this, decoder, tile_get_info, tilemap_mapper_delegate(FUNC(tilemap_t::scan_cols_flip_xy),allocated), tilewidth, tileheight, cols, rows));
+ default: throw emu_fatalerror("Tilemap manager create unknown mapper %d", mapper);
+ }
}
diff --git a/src/emu/tilemap.h b/src/emu/tilemap.h
index 0f7dcf93c1b..6e4308d6052 100644
--- a/src/emu/tilemap.h
+++ b/src/emu/tilemap.h
@@ -550,16 +550,16 @@ public:
// mappers
// scan in row-major order with optional flipping
- static tilemap_memory_index scan_rows(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
- static tilemap_memory_index scan_rows_flip_x(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
- static tilemap_memory_index scan_rows_flip_y(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
- static tilemap_memory_index scan_rows_flip_xy(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
+ tilemap_memory_index scan_rows(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
+ tilemap_memory_index scan_rows_flip_x(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
+ tilemap_memory_index scan_rows_flip_y(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
+ tilemap_memory_index scan_rows_flip_xy(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
// scan in column-major order with optional flipping
- static tilemap_memory_index scan_cols(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
- static tilemap_memory_index scan_cols_flip_x(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
- static tilemap_memory_index scan_cols_flip_y(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
- static tilemap_memory_index scan_cols_flip_xy(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
+ tilemap_memory_index scan_cols(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
+ tilemap_memory_index scan_cols_flip_x(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
+ tilemap_memory_index scan_cols_flip_y(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
+ tilemap_memory_index scan_cols_flip_xy(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
// optional memory accessors
UINT32 basemem_read(int index) { return m_basemem.read(index); }
diff --git a/src/emu/ui/custui.cpp b/src/emu/ui/custui.cpp
index 6aaed9105df..a6279ac5b54 100644
--- a/src/emu/ui/custui.cpp
+++ b/src/emu/ui/custui.cpp
@@ -588,7 +588,7 @@ void ui_menu_colors_ui::custom_render(void *selectedref, float top, float bottom
// bottom text
// get the text for 'UI Select'
std::string ui_select_text = machine().input().seq_name(machine().ioport().type_seq(IPT_UI_SELECT, 0, SEQ_TYPE_STANDARD));
- topbuf.assign(_("Double click or press ")).append(ui_select_text.c_str()).append(_(" to change the color value"));
+ topbuf = string_format(_("Double click or press %1$s to change the color value"), ui_select_text);
mui.draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER,
DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
@@ -857,7 +857,7 @@ void ui_menu_rgb_ui::populate()
if (m_lock_ref != RGB_ALPHA)
{
arrow_flags = get_arrow_flags(0, 255, m_color->a());
- item_append(_("Alpha"), string_format("%3d", m_color->a()).c_str(), arrow_flags, (void *)(FPTR)RGB_ALPHA);
+ item_append(_("Alpha"), string_format("%3u", m_color->a()).c_str(), arrow_flags, (void *)(FPTR)RGB_ALPHA);
}
else
item_append(_("Alpha"), s_text.c_str(), 0, (void *)(FPTR)RGB_ALPHA);
@@ -865,7 +865,7 @@ void ui_menu_rgb_ui::populate()
if (m_lock_ref != RGB_RED)
{
arrow_flags = get_arrow_flags(0, 255, m_color->r());
- item_append(_("Red"), string_format("%3d", m_color->r()).c_str(), arrow_flags, (void *)(FPTR)RGB_RED);
+ item_append(_("Red"), string_format("%3u", m_color->r()).c_str(), arrow_flags, (void *)(FPTR)RGB_RED);
}
else
item_append(_("Red"), s_text.c_str(), 0, (void *)(FPTR)RGB_RED);
@@ -873,7 +873,7 @@ void ui_menu_rgb_ui::populate()
if (m_lock_ref != RGB_GREEN)
{
arrow_flags = get_arrow_flags(0, 255, m_color->g());
- item_append(_("Green"), string_format("%3d", m_color->g()).c_str(), arrow_flags, (void *)(FPTR)RGB_GREEN);
+ item_append(_("Green"), string_format("%3u", m_color->g()).c_str(), arrow_flags, (void *)(FPTR)RGB_GREEN);
}
else
item_append(_("Green"), s_text.c_str(), 0, (void *)(FPTR)RGB_GREEN);
@@ -881,7 +881,7 @@ void ui_menu_rgb_ui::populate()
if (m_lock_ref != RGB_BLUE)
{
arrow_flags = get_arrow_flags(0, 255, m_color->b());
- item_append(_("Blue"), string_format("%3d", m_color->b()).c_str(), arrow_flags, (void *)(FPTR)RGB_BLUE);
+ item_append(_("Blue"), string_format("%3u", m_color->b()).c_str(), arrow_flags, (void *)(FPTR)RGB_BLUE);
}
else
item_append(_("Blue"), s_text.c_str(), 0, (void *)(FPTR)RGB_BLUE);
diff --git a/src/emu/ui/datfile.h b/src/emu/ui/datfile.h
index 66d76d17501..7b38599ba21 100644
--- a/src/emu/ui/datfile.h
+++ b/src/emu/ui/datfile.h
@@ -31,7 +31,6 @@ public:
void load_software_info(std::string &softlist, std::string &buffer, std::string &softname, std::string &parentname);
void command_sub_menu(const game_driver *drv, std::vector<std::string> &menuitems);
void reset_run() { first_run = true; }
- bool has_software(std::string &softlist, std::string &softname, std::string &parentname);
std::string rev_history() const { return m_history_rev; }
std::string rev_mameinfo() const { return m_mame_rev; }
@@ -45,9 +44,11 @@ public:
bool has_command(const game_driver *driver) { return (m_cmdidx.find(driver) != m_cmdidx.end()); }
bool has_sysinfo(const game_driver *driver) { return (m_sysidx.find(driver) != m_sysidx.end()); }
bool has_story(const game_driver *driver) { return (m_storyidx.find(driver) != m_storyidx.end()); }
+ bool has_software(std::string &softlist, std::string &softname, std::string &parentname);
- bool has_data(const game_driver *d)
+ bool has_data(const game_driver *a = nullptr)
{
+ const game_driver *d = (a != nullptr) ? a : &machine().system();
return (has_history(d) || has_mameinfo(d) || has_messinfo(d) || has_command(d) || has_sysinfo(d) || has_story(d));
}
private:
diff --git a/src/emu/ui/datmenu.cpp b/src/emu/ui/datmenu.cpp
index 6c240311c62..93c776f3e51 100644
--- a/src/emu/ui/datmenu.cpp
+++ b/src/emu/ui/datmenu.cpp
@@ -99,10 +99,7 @@ void ui_menu_dats_view::handle()
void ui_menu_dats_view::populate()
{
machine().pause();
- if (!issoft)
- get_data();
- else
- get_data_sw();
+ (issoft == true) ? get_data_sw() : get_data();
item_append(MENU_SEPARATOR_ITEM, nullptr, (MENU_FLAG_UI_DATS | MENU_FLAG_LEFT_ARROW | MENU_FLAG_RIGHT_ARROW), nullptr);
customtop = 2.0f * machine().ui().get_line_height() + 4.0f * UI_BOX_TB_BORDER;
@@ -119,12 +116,7 @@ void ui_menu_dats_view::custom_render(void *selectedref, float top, float bottom
ui_manager &mui = machine().ui();
float maxwidth = origx2 - origx1;
float width;
- std::string driver;
-
- if (issoft)
- driver = m_swinfo->longname;
- else
- driver = m_driver->description;
+ std::string driver = (issoft == true) ? m_swinfo->longname : m_driver->description;
mui.draw_text_full(container, driver.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE,
DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
@@ -251,7 +243,6 @@ void ui_menu_dats_view::get_data()
{
std::string tempbuf(buffer.substr(xstart[x], xend[x] - xstart[x]));
item_append(tempbuf.c_str(), nullptr, (MENU_FLAG_UI_DATS | MENU_FLAG_DISABLE), (void *)(FPTR)(x + 1));
-
}
}
@@ -276,7 +267,6 @@ void ui_menu_dats_view::get_data_sw()
{
std::string tempbuf(buffer.substr(xstart[x], xend[x] - xstart[x]));
item_append(tempbuf.c_str(), nullptr, (MENU_FLAG_UI_DATS | MENU_FLAG_DISABLE), (void *)(FPTR)(x + 1));
-
}
}
diff --git a/src/emu/ui/dirmenu.cpp b/src/emu/ui/dirmenu.cpp
index a24a0041653..8ae0372af30 100644
--- a/src/emu/ui/dirmenu.cpp
+++ b/src/emu/ui/dirmenu.cpp
@@ -180,7 +180,7 @@ void ui_menu_display_actual::handle()
void ui_menu_display_actual::populate()
{
- m_tempbuf.assign(_("Current ")).append(_(s_folders[m_ref].name)).append(_(" Folders"));
+ m_tempbuf = string_format(_("Current %1$s Folders"), _(s_folders[m_ref].name));
if (machine().ui().options().exists(s_folders[m_ref].option))
m_searchpath.assign(machine().ui().options().value(s_folders[m_ref].option));
else
@@ -494,8 +494,12 @@ void ui_menu_add_change_folder::custom_render(void *selectedref, float top, floa
float width, maxwidth = origx2 - origx1;
ui_manager &mui = machine().ui();
std::string tempbuf[2];
- tempbuf[0] = (m_change) ? _("Change)") : _("Add");
- tempbuf[0].append(" ").append(_(s_folders[m_ref].name)).append(_(" Folder - Search: ")).append(m_search).append("_");
+ tempbuf[0] = string_format(
+ (m_change)
+ ? _("Change %1$s Folder - Search: %2$s_")
+ : _("Add %1$s Folder - Search: %2$s_"),
+ _(s_folders[m_ref].name),
+ m_search);
tempbuf[1] = m_current_path;
// get the size of the text
@@ -636,7 +640,7 @@ void ui_menu_remove_folder::custom_render(void *selectedref, float top, float bo
{
float width;
ui_manager &mui = machine().ui();
- std::string tempbuf = std::string(_("Remove ")).append(_(s_folders[m_ref].name)).append(_(" Folder"));
+ std::string tempbuf = string_format(_("Remove %1$s Folder"), _(s_folders[m_ref].name));
// get the size of the text
mui.draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
diff --git a/src/emu/ui/filesel.cpp b/src/emu/ui/filesel.cpp
index 18555c4809b..ec8d4c2ea22 100644
--- a/src/emu/ui/filesel.cpp
+++ b/src/emu/ui/filesel.cpp
@@ -712,7 +712,7 @@ void ui_menu_file_selector::handle()
// from current entry to the end
for (entry = cur_selected; entry != nullptr; entry = entry->next)
{
- if (entry->basename != nullptr && m_filename_buffer != nullptr)
+ if (entry->basename != nullptr && m_filename_buffer[0] != '\0')
{
int match = 0;
for (int i = 0; i < ARRAY_LENGTH(m_filename_buffer); i++)
@@ -731,7 +731,7 @@ void ui_menu_file_selector::handle()
// and from the first entry to current one
for (entry = m_entrylist; entry != cur_selected; entry = entry->next)
{
- if (entry->basename != nullptr && m_filename_buffer != nullptr)
+ if (entry->basename != nullptr && m_filename_buffer[0] != '\0')
{
int match = 0;
for (int i = 0; i < ARRAY_LENGTH(m_filename_buffer); i++)
diff --git a/src/emu/ui/mainmenu.cpp b/src/emu/ui/mainmenu.cpp
index 66381a3df1f..0cf449e8f84 100644
--- a/src/emu/ui/mainmenu.cpp
+++ b/src/emu/ui/mainmenu.cpp
@@ -132,7 +132,7 @@ void ui_menu_main::populate()
item_append(_("Cheat"), nullptr, 0, (void *)CHEAT);
// add dats menu
- if (machine().ui().options().enabled_dats() && machine().datfile().has_data(&machine().system()))
+ if (machine().ui().options().enabled_dats() && machine().datfile().has_data())
item_append(_("External DAT View"), nullptr, 0, (void *)EXTERNAL_DATS);
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
diff --git a/src/emu/ui/menu.cpp b/src/emu/ui/menu.cpp
index f6154c41638..ccc73f55002 100644
--- a/src/emu/ui/menu.cpp
+++ b/src/emu/ui/menu.cpp
@@ -544,7 +544,7 @@ void ui_menu::draw(bool customonly, bool noimage, bool noinput)
machine().ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR);
// determine the first visible line based on the current selection
- if (selected > top_line + visible_lines)
+ if (selected > top_line + visible_lines || selected < top_line - visible_lines)
top_line = selected - (visible_lines / 2);
if (top_line < 0 || selected == 0)
top_line = 0;
@@ -1891,6 +1891,21 @@ void ui_menu::handle_main_events(UINT32 flags)
bool stop = false;
ui_event local_menu_event;
+ if (m_pressed)
+ {
+ bool pressed = mouse_pressed();
+ INT32 m_target_x, m_target_y;
+ bool m_button;
+ render_target *mouse_target = machine().ui_input().find_mouse(&m_target_x, &m_target_y, &m_button);
+ if (mouse_target != nullptr && m_button && (hover == HOVER_ARROW_DOWN || hover == HOVER_ARROW_UP))
+ {
+ if (pressed)
+ machine().ui_input().push_mouse_down_event(mouse_target, m_target_x, m_target_y);
+ }
+ else
+ reset_pressed();
+ }
+
// loop while we have interesting events
while (!stop && machine().ui_input().pop_event(&local_menu_event))
{
@@ -1919,6 +1934,7 @@ void ui_menu::handle_main_events(UINT32 flags)
if (selected < 0)
selected = 0;
top_line -= visitems - (top_line + visible_lines == visible_items);
+ set_pressed();
}
else if (hover == HOVER_ARROW_DOWN)
{
@@ -1926,6 +1942,7 @@ void ui_menu::handle_main_events(UINT32 flags)
if (selected >= visible_items)
selected = visible_items - 1;
top_line += visible_lines - 2;
+ set_pressed();
}
else if (hover == HOVER_UI_RIGHT)
menu_event.iptkey = IPT_UI_RIGHT;
@@ -2820,3 +2837,9 @@ void ui_menu::draw_dats_menu()
// return the number of visible lines, minus 1 for top arrow and 1 for bottom arrow
visitems = visible_lines - (top_line != 0) - (top_line + visible_lines != visible_items);
}
+
+void ui_menu::set_pressed()
+{
+ (m_repeat == 0) ? m_repeat = osd_ticks() + osd_ticks_per_second() / 2 : m_repeat = osd_ticks() + osd_ticks_per_second() / 4;
+ m_pressed = true;
+} \ No newline at end of file
diff --git a/src/emu/ui/menu.h b/src/emu/ui/menu.h
index 562650d0e51..4a788c612c7 100644
--- a/src/emu/ui/menu.h
+++ b/src/emu/ui/menu.h
@@ -266,8 +266,15 @@ protected:
static std::unique_ptr<bitmap_rgb32> hilight_main_bitmap;
static render_texture *hilight_main_texture;
private:
+
+ // mouse button held down
+ bool m_pressed = false;
+ osd_ticks_t m_repeat = 0;
+ void reset_pressed() { m_pressed = false; m_repeat = 0; }
+ bool mouse_pressed() { return (osd_ticks() >= m_repeat); }
+ void set_pressed();
+
static std::unique_ptr<bitmap_argb32> no_avail_bitmap, bgrnd_bitmap, star_bitmap;
-// static std::unique_ptr<bitmap_rgb32> hilight_main_bitmap;
static render_texture *bgrnd_texture, *star_texture;
static bitmap_argb32 *icons_bitmap[];
static render_texture *icons_texture[];
diff --git a/src/emu/ui/miscmenu.cpp b/src/emu/ui/miscmenu.cpp
index 89bf4182ffd..2145069bfab 100644
--- a/src/emu/ui/miscmenu.cpp
+++ b/src/emu/ui/miscmenu.cpp
@@ -574,7 +574,10 @@ ui_menu_misc_options::misc_option ui_menu_misc_options::m_options[] = {
ui_menu_misc_options::ui_menu_misc_options(running_machine &machine, render_container *container) : ui_menu(machine, container)
{
for (int d = 1; d < ARRAY_LENGTH(m_options); ++d)
- m_options[d].status = machine.ui().options().bool_value(m_options[d].option);
+ if (machine.ui().options().exists(m_options[d].option))
+ m_options[d].status = machine.ui().options().bool_value(m_options[d].option);
+ else
+ m_options[d].status = machine.options().bool_value(m_options[d].option);
}
ui_menu_misc_options::~ui_menu_misc_options()
@@ -585,7 +588,8 @@ ui_menu_misc_options::~ui_menu_misc_options()
{
machine().ui().options().set_value(m_options[d].option, m_options[d].status, OPTION_PRIORITY_CMDLINE, error_string);
}
- else {
+ else
+ {
if (machine().options().bool_value(m_options[d].option) != m_options[d].status)
{
machine().options().set_value(m_options[d].option, m_options[d].status, OPTION_PRIORITY_CMDLINE, error_string);
diff --git a/src/emu/ui/optsmenu.cpp b/src/emu/ui/optsmenu.cpp
index b643fcef883..f93bdbf4652 100644
--- a/src/emu/ui/optsmenu.cpp
+++ b/src/emu/ui/optsmenu.cpp
@@ -217,7 +217,7 @@ void ui_menu_game_options::populate()
item_append(_("Filter"), main_filters::text[m_main], arrow_flags, (void *)(FPTR)FILTER_MENU);
// add category subitem
- if (main_filters::actual == FILTER_CATEGORY && !machine().inifile().ini_index.empty())
+ if (m_main == FILTER_CATEGORY && !machine().inifile().ini_index.empty())
{
inifile_manager &inif = machine().inifile();
int afile = inif.current_file;
@@ -233,7 +233,7 @@ void ui_menu_game_options::populate()
item_append(fbuff.c_str(), inif.actual_category().c_str(), arrow_flags, (void *)(FPTR)CATEGORY_FILTER);
}
// add manufacturer subitem
- else if (main_filters::actual == FILTER_MANUFACTURER && c_mnfct::ui.size() > 0)
+ else if (m_main == FILTER_MANUFACTURER && c_mnfct::ui.size() > 0)
{
arrow_flags = get_arrow_flags(0, c_mnfct::ui.size() - 1, c_mnfct::actual);
fbuff = _("^!Manufacturer");
@@ -241,7 +241,7 @@ void ui_menu_game_options::populate()
item_append(fbuff.c_str(), c_mnfct::ui[c_mnfct::actual].c_str(), arrow_flags, (void *)(FPTR)MANUFACT_CAT_FILTER);
}
// add year subitem
- else if (main_filters::actual == FILTER_YEAR && c_year::ui.size() > 0)
+ else if (m_main == FILTER_YEAR && c_year::ui.size() > 0)
{
arrow_flags = get_arrow_flags(0, c_year::ui.size() - 1, c_year::actual);
fbuff.assign(_("^!Year"));
@@ -249,7 +249,7 @@ void ui_menu_game_options::populate()
item_append(fbuff.c_str(), c_year::ui[c_year::actual].c_str(), arrow_flags, (void *)(FPTR)YEAR_CAT_FILTER);
}
// add custom subitem
- else if (main_filters::actual == FILTER_CUSTOM)
+ else if (m_main == FILTER_CUSTOM)
{
fbuff = _("^!Setup custom filter");
convert_command_glyph(fbuff);
@@ -322,7 +322,7 @@ void save_ui_options(running_machine &machine)
file.close();
}
else
- machine.popmessage(_("**Error to save ui.ini**"));
+ machine.popmessage(_("**Error saving ui.ini**"));
}
//-------------------------------------------------
@@ -341,10 +341,10 @@ void save_main_option(running_machine &machine)
emu_file file(machine.options().ini_path(), OPEN_FLAG_READ);
if (file.open(emulator_info::get_configname(), ".ini") == FILERR_NONE)
{
- bool result = options.parse_ini_file((core_file&)file, OPTION_PRIORITY_MAME_INI, OPTION_PRIORITY_DRIVER_INI, error);
+ bool result = options.parse_ini_file((util::core_file&)file, OPTION_PRIORITY_MAME_INI, OPTION_PRIORITY_DRIVER_INI, error);
if (!result)
{
- osd_printf_error(_("**Error to load %s.ini**"), emulator_info::get_configname());
+ osd_printf_error("**Error loading %s.ini**", emulator_info::get_configname());
return;
}
}
@@ -369,7 +369,7 @@ void save_main_option(running_machine &machine)
file.close();
}
else {
- machine.popmessage(_("**Error to save %s.ini**"), emulator_info::get_configname());
+ machine.popmessage(_("**Error saving %s.ini**"), emulator_info::get_configname());
return;
}
}
diff --git a/src/emu/ui/selector.cpp b/src/emu/ui/selector.cpp
index ae786dd1834..330694fd497 100644
--- a/src/emu/ui/selector.cpp
+++ b/src/emu/ui/selector.cpp
@@ -178,7 +178,7 @@ void ui_menu_selector::custom_render(void *selectedref, float top, float bottom,
// bottom text
// get the text for 'UI Select'
std::string ui_select_text = machine().input().seq_name(machine().ioport().type_seq(IPT_UI_SELECT, 0, SEQ_TYPE_STANDARD));
- tempbuf.assign(_("Double click or press ")).append(ui_select_text).append(_(" to select"));
+ tempbuf = string_format(_("Double click or press %1$s to select"), ui_select_text);
mui.draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER,
DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
diff --git a/src/emu/ui/selgame.cpp b/src/emu/ui/selgame.cpp
index 34fdab6d64e..dcc9e1d2d68 100644
--- a/src/emu/ui/selgame.cpp
+++ b/src/emu/ui/selgame.cpp
@@ -299,10 +299,31 @@ void ui_menu_select_game::handle()
}
// Infos
- else if (ui_globals::rpanel == RP_INFOS && ui_globals::curdats_view > UI_FIRST_LOAD)
+ else if (ui_globals::rpanel == RP_INFOS)
{
- ui_globals::curdats_view--;
- topline_datsview = 0;
+ if (!isfavorite())
+ {
+ const game_driver *drv = (const game_driver *)m_event->itemref;
+ if ((FPTR)drv > skip_main_items && ui_globals::curdats_view > UI_FIRST_LOAD)
+ {
+ ui_globals::curdats_view--;
+ topline_datsview = 0;
+ }
+ }
+ else
+ {
+ ui_software_info *drv = (ui_software_info *)m_event->itemref;
+ if (drv->startempty == 1 && ui_globals::curdats_view > UI_FIRST_LOAD)
+ {
+ ui_globals::curdats_view--;
+ topline_datsview = 0;
+ }
+ else if ((FPTR)drv > skip_main_items && ui_globals::cur_sw_dats_view > 0)
+ {
+ ui_globals::cur_sw_dats_view--;
+ topline_datsview = 0;
+ }
+ }
}
}
@@ -318,10 +339,31 @@ void ui_menu_select_game::handle()
}
// Infos
- else if (ui_globals::rpanel == RP_INFOS && ui_globals::curdats_view < UI_LAST_LOAD)
+ else if (ui_globals::rpanel == RP_INFOS)
{
- ui_globals::curdats_view++;
- topline_datsview = 0;
+ if (!isfavorite())
+ {
+ const game_driver *drv = (const game_driver *)m_event->itemref;
+ if ((FPTR)drv > skip_main_items && ui_globals::curdats_view < UI_LAST_LOAD)
+ {
+ ui_globals::curdats_view++;
+ topline_datsview = 0;
+ }
+ }
+ else
+ {
+ ui_software_info *drv = (ui_software_info *)m_event->itemref;
+ if (drv->startempty == 1 && ui_globals::curdats_view < UI_LAST_LOAD)
+ {
+ ui_globals::curdats_view++;
+ topline_datsview = 0;
+ }
+ else if ((FPTR)drv > skip_main_items && ui_globals::cur_sw_dats_view < 1)
+ {
+ ui_globals::cur_sw_dats_view++;
+ topline_datsview = 0;
+ }
+ }
}
}
@@ -358,18 +400,20 @@ void ui_menu_select_game::handle()
if (!isfavorite())
{
const game_driver *driver = (const game_driver *)m_event->itemref;
- if ((FPTR)driver > 3 && machine().datfile().has_data(driver))
+ if ((FPTR)driver > skip_main_items && machine().datfile().has_data(driver))
ui_menu::stack_push(global_alloc_clear<ui_menu_dats_view>(machine(), container, driver));
}
else
{
- ui_software_info *swinfo = (ui_software_info *)m_event->itemref;
- if ((FPTR)swinfo > 3 && machine().datfile().has_data(swinfo->driver))
+ ui_software_info *ui_swinfo = (ui_software_info *)m_event->itemref;
+ datfile_manager &mdat = machine().datfile();
+
+ if ((FPTR)ui_swinfo > skip_main_items)
{
- if (swinfo->startempty == 1)
- ui_menu::stack_push(global_alloc_clear<ui_menu_dats_view>(machine(), container, swinfo->driver));
- else
- ui_menu::stack_push(global_alloc_clear<ui_menu_dats_view>(machine(), container, swinfo));
+ if (ui_swinfo->startempty == 1 && mdat.has_history(ui_swinfo->driver))
+ ui_menu::stack_push(global_alloc_clear<ui_menu_dats_view>(machine(), container, ui_swinfo->driver));
+ else if (mdat.has_software(ui_swinfo->listname, ui_swinfo->shortname, ui_swinfo->parentname) || !ui_swinfo->usage.empty())
+ ui_menu::stack_push(global_alloc_clear<ui_menu_dats_view>(machine(), container, ui_swinfo));
}
}
}
@@ -380,7 +424,7 @@ void ui_menu_select_game::handle()
if (!isfavorite())
{
const game_driver *driver = (const game_driver *)m_event->itemref;
- if ((FPTR)driver > 3)
+ if ((FPTR)driver > skip_main_items)
{
if (!machine().favorite().isgame_favorite(driver))
{
@@ -398,7 +442,7 @@ void ui_menu_select_game::handle()
else
{
ui_software_info *swinfo = (ui_software_info *)m_event->itemref;
- if ((FPTR)swinfo > 3)
+ if ((FPTR)swinfo > skip_main_items)
{
machine().popmessage(_("%s\n removed from favorites list."), swinfo->longname.c_str());
machine().favorite().remove_favorite_game(*swinfo);
@@ -534,24 +578,26 @@ void ui_menu_select_game::populate()
}
// iterate over entries
- for (size_t curitem = 0; curitem < m_displaylist.size(); ++curitem)
+ int curitem = 0;
+ for (auto & elem : m_displaylist)
{
UINT32 flags_ui = MENU_FLAG_UI | MENU_FLAG_LEFT_ARROW | MENU_FLAG_RIGHT_ARROW;
- if (old_item_selected == -1 && m_displaylist[curitem]->name == reselect_last::driver)
+ if (old_item_selected == -1 && elem->name == reselect_last::driver)
old_item_selected = curitem;
- bool cloneof = strcmp(m_displaylist[curitem]->parent, "0");
+ bool cloneof = strcmp(elem->parent, "0");
if (cloneof)
{
- int cx = driver_list::find(m_displaylist[curitem]->parent);
+ int cx = driver_list::find(elem->parent);
if (cx != -1 && ((driver_list::driver(cx).flags & MACHINE_IS_BIOS_ROOT) != 0))
cloneof = false;
}
if (cloneof)
flags_ui |= MENU_FLAG_INVERT;
- item_append(m_displaylist[curitem]->description, nullptr, flags_ui, (void *)m_displaylist[curitem]);
+ item_append(elem->description, nullptr, flags_ui, (void *)elem);
+ curitem++;
}
}
}
@@ -1556,7 +1602,7 @@ void ui_menu_select_game::general_info(const game_driver *driver, std::string &b
util::stream_format(str, _("Support Cocktail: %1$s\n"), ((driver->flags & MACHINE_NO_COCKTAIL) ? _("Yes") : _("No")));
util::stream_format(str, _("Driver is Bios: %1$s\n"), ((driver->flags & MACHINE_IS_BIOS_ROOT) ? _("Yes") : _("No")));
util::stream_format(str, _("Support Save: %1$s\n"), ((driver->flags & MACHINE_SUPPORTS_SAVE) ? _("Yes") : _("No")));
- util::stream_format(str, _("Screen Orentation: %1$s\n"), ((driver->flags & ORIENTATION_SWAP_XY) ? _("Vertical") : _("Horizontal")));
+ util::stream_format(str, _("Screen Orientation: %1$s\n"), ((driver->flags & ORIENTATION_SWAP_XY) ? _("Vertical") : _("Horizontal")));
bool found = false;
for (const rom_entry *rom = driver->rom; !ROMENTRY_ISEND(rom); ++rom)
if (ROMENTRY_ISREGION(rom) && ROMREGION_ISDISKDATA(rom))
diff --git a/src/emu/ui/selsoft.cpp b/src/emu/ui/selsoft.cpp
index 2c8fa5135ea..3bf2e237553 100644
--- a/src/emu/ui/selsoft.cpp
+++ b/src/emu/ui/selsoft.cpp
@@ -242,14 +242,12 @@ void ui_menu_select_software::handle()
else if (m_event->iptkey == IPT_UI_DATS && machine().ui().options().enabled_dats())
{
ui_software_info *ui_swinfo = (ui_software_info *)m_event->itemref;
+ datfile_manager &mdat = machine().datfile();
- if ((FPTR)ui_swinfo > 1 && machine().datfile().has_data(ui_swinfo->driver))
- {
- if (ui_swinfo->startempty == 1)
- ui_menu::stack_push(global_alloc_clear<ui_menu_dats_view>(machine(), container, ui_swinfo->driver));
- else
- ui_menu::stack_push(global_alloc_clear<ui_menu_dats_view>(machine(), container, ui_swinfo));
- }
+ if (ui_swinfo->startempty == 1 && mdat.has_history(ui_swinfo->driver))
+ ui_menu::stack_push(global_alloc_clear<ui_menu_dats_view>(machine(), container, ui_swinfo->driver));
+ else if (mdat.has_software(ui_swinfo->listname, ui_swinfo->shortname, ui_swinfo->parentname) || !ui_swinfo->usage.empty())
+ ui_menu::stack_push(global_alloc_clear<ui_menu_dats_view>(machine(), container, ui_swinfo));
}
// handle UI_LEFT_PANEL
@@ -826,7 +824,7 @@ void ui_menu_select_software::custom_render(void *selectedref, float top, float
size_t found = copyright.find("\n");
tempbuf[0].clear();
- tempbuf[1].assign(emulator_info::get_appname()).append(" ").append(build_version);
+ tempbuf[1] = string_format("%s %s", emulator_info::get_appname(), build_version);
tempbuf[2] = copyright.substr(0, found);
tempbuf[3] = copyright.substr(found + 1);
tempbuf[4].clear();
@@ -2040,7 +2038,7 @@ void ui_bios_selection::handle()
{
// process the menu
const ui_menu_event *event = process(0);
- ui_options &moptions = machine().ui().options();
+ emu_options &moptions = machine().options();
if (event != nullptr && event->iptkey == IPT_UI_SELECT && event->itemref != nullptr)
for (auto & elem : m_bios)
if ((void*)&elem.name == event->itemref)
@@ -2073,7 +2071,7 @@ void ui_bios_selection::handle()
drivlist.next();
software_list_device *swlist = software_list_device::find_by_name(drivlist.config(), ui_swinfo->listname.c_str());
software_info *swinfo = swlist->find(ui_swinfo->shortname.c_str());
- if (!moptions.skip_parts_menu() && swinfo->has_multiple_parts(ui_swinfo->interface.c_str()))
+ if (!machine().ui().options().skip_parts_menu() && swinfo->has_multiple_parts(ui_swinfo->interface.c_str()))
{
std::unordered_map<std::string, std::string> parts;
for (const software_part *swpart = swinfo->first_part(); swpart != nullptr; swpart = swpart->next())
diff --git a/src/emu/ui/ui.cpp b/src/emu/ui/ui.cpp
index 4104ff88308..839e7c2d7a2 100644
--- a/src/emu/ui/ui.cpp
+++ b/src/emu/ui/ui.cpp
@@ -171,9 +171,9 @@ static void load_ui_options(running_machine &machine)
emu_file file(machine.options().ini_path(), OPEN_FLAG_READ);
if (file.open("ui.ini") == FILERR_NONE)
{
- bool result = machine.ui().options().parse_ini_file((core_file&)file, OPTION_PRIORITY_MAME_INI, OPTION_PRIORITY_DRIVER_INI, error);
+ bool result = machine.ui().options().parse_ini_file((util::core_file&)file, OPTION_PRIORITY_MAME_INI, OPTION_PRIORITY_DRIVER_INI, error);
if (!result)
- osd_printf_error("**Error to load ui.ini**");
+ osd_printf_error("**Error loading ui.ini**");
}
}
diff --git a/src/emu/uismall.png b/src/emu/uismall.png
new file mode 100644
index 00000000000..5d391640f62
--- /dev/null
+++ b/src/emu/uismall.png
Binary files differ
diff --git a/src/emu/validity.cpp b/src/emu/validity.cpp
index e4f1ef738e0..7feb39a1a71 100644
--- a/src/emu/validity.cpp
+++ b/src/emu/validity.cpp
@@ -15,19 +15,6 @@
//**************************************************************************
-// COMPILE-TIME VALIDATION
-//**************************************************************************
-
-// if the following lines error during compile, your PTR64 switch is set incorrectly in the makefile
-#ifdef PTR64
-UINT8 your_ptr64_flag_is_wrong[(int)(sizeof(void *) - 7)];
-#else
-UINT8 your_ptr64_flag_is_wrong[(int)(5 - sizeof(void *))];
-#endif
-
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -350,9 +337,9 @@ void validity_checker::validate_core()
// check pointer size
#ifdef PTR64
- if (sizeof(void *) != 8) osd_printf_error("PTR64 flag enabled, but was compiled for 32-bit target\n");
+ static_assert(sizeof(void *) == 8, "PTR64 flag enabled, but was compiled for 32-bit target\n");
#else
- if (sizeof(void *) != 4) osd_printf_error("PTR64 flag not enabled, but was compiled for 64-bit target\n");
+ static_assert(sizeof(void *) == 4, "PTR64 flag not enabled, but was compiled for 64-bit target\n");
#endif
// TODO: check if this is actually working
@@ -377,9 +364,6 @@ void validity_checker::validate_inlines()
#undef rand
volatile UINT64 testu64a = rand() ^ (rand() << 15) ^ ((UINT64)rand() << 30) ^ ((UINT64)rand() << 45);
volatile INT64 testi64a = rand() ^ (rand() << 15) ^ ((INT64)rand() << 30) ^ ((INT64)rand() << 45);
-#ifdef PTR64
- volatile INT64 testi64b = rand() ^ (rand() << 15) ^ ((INT64)rand() << 30) ^ ((INT64)rand() << 45);
-#endif
volatile UINT32 testu32a = rand() ^ (rand() << 15);
volatile UINT32 testu32b = rand() ^ (rand() << 15);
volatile INT32 testi32a = rand() ^ (rand() << 15);
@@ -395,10 +379,6 @@ void validity_checker::validate_inlines()
if (testu64a == 0) testu64a++;
if (testi64a == 0) testi64a++;
else if (testi64a < 0) testi64a = -testi64a;
-#ifdef PTR64
- if (testi64b == 0) testi64b++;
- else if (testi64b < 0) testi64b = -testi64b;
-#endif
if (testu32a == 0) testu32a++;
if (testu32b == 0) testu32b++;
if (testi32a == 0) testi32a++;
diff --git a/src/ldplayer/layout/LICENSE b/src/ldplayer/layout/LICENSE
new file mode 100644
index 00000000000..670154e3538
--- /dev/null
+++ b/src/ldplayer/layout/LICENSE
@@ -0,0 +1,116 @@
+CC0 1.0 Universal
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later
+claims of infringement build upon, modify, incorporate in other works, reuse
+and redistribute as freely as possible in any form whatsoever and for any
+purposes, including without limitation commercial purposes. These owners may
+contribute to the Commons to promote the ideal of a free culture and the
+further production of creative, cultural and scientific works, or to gain
+reputation or greater distribution for their Work in part through the use and
+efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with a
+Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not limited
+to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display, communicate,
+ and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or performer(s);
+
+ iii. publicity and privacy rights pertaining to a person's image or likeness
+ depicted in a Work;
+
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+
+ v. rights protecting the extraction, dissemination, use and reuse of data in
+ a Work;
+
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation thereof,
+ including any amended or successor version of such directive); and
+
+ vii. other similar, equivalent or corresponding rights throughout the world
+ based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time
+extensions), (iii) in any current or future medium and for any number of
+copies, and (iv) for any purpose whatsoever, including without limitation
+commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
+the Waiver for the benefit of each member of the public at large and to the
+detriment of Affirmer's heirs and successors, fully intending that such Waiver
+shall not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of the Work
+by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account
+Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
+is so judged Affirmer hereby grants to each affected person a royalty-free,
+non transferable, non sublicensable, non exclusive, irrevocable and
+unconditional license to exercise Affirmer's Copyright and Related Rights in
+the Work (i) in all territories worldwide, (ii) for the maximum duration
+provided by applicable law or treaty (including future time extensions), (iii)
+in any current or future medium and for any number of copies, and (iv) for any
+purpose whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed effective as
+of the date CC0 was applied by Affirmer to the Work. Should any part of the
+License for any reason be judged legally invalid or ineffective under
+applicable law, such partial invalidity or ineffectiveness shall not
+invalidate the remainder of the License, and in such case Affirmer hereby
+affirms that he or she will not (i) exercise any of his or her remaining
+Copyright and Related Rights in the Work or (ii) assert any associated claims
+and causes of action with respect to the Work, in either case contrary to
+Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+
+ b. Affirmer offers the Work as-is and makes no representations or warranties
+ of any kind concerning the Work, express, implied, statutory or otherwise,
+ including without limitation warranties of title, merchantability, fitness
+ for a particular purpose, non infringement, or the absence of latent or
+ other defects, accuracy, or the present or absence of errors, whether or not
+ discoverable, all to the greatest extent permissible under applicable law.
+
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without limitation
+ any person's Copyright and Related Rights in the Work. Further, Affirmer
+ disclaims responsibility for obtaining any necessary consents, permissions
+ or other rights required for any use of the Work.
+
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to this
+ CC0 or use of the Work.
+
+For more information, please see
+<http://creativecommons.org/publicdomain/zero/1.0/>
diff --git a/src/ldplayer/layout/README.md b/src/ldplayer/layout/README.md
new file mode 100644
index 00000000000..78ef2e5e6ad
--- /dev/null
+++ b/src/ldplayer/layout/README.md
@@ -0,0 +1,6 @@
+# **Layout** #
+
+Layouts files are definiton files to describe look and fell of emulated machines, and are product
+of many different contributors.
+
+Licensed under [CC0 1.0 Universal (CC0 1.0)](https://creativecommons.org/publicdomain/zero/1.0/) \ No newline at end of file
diff --git a/src/lib/formats/atom_dsk.cpp b/src/lib/formats/atom_dsk.cpp
index 6a5294a8fb8..36e4eeab69a 100644
--- a/src/lib/formats/atom_dsk.cpp
+++ b/src/lib/formats/atom_dsk.cpp
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Carl
#include "atom_dsk.h"
atom_format::atom_format() : wd177x_format(formats)
diff --git a/src/lib/formats/atom_dsk.h b/src/lib/formats/atom_dsk.h
index 7f64810e87c..03a4a0688f3 100644
--- a/src/lib/formats/atom_dsk.h
+++ b/src/lib/formats/atom_dsk.h
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Carl
#ifndef __ATOM_DSK_H__
#define __ATOM_DSK_H__
diff --git a/src/lib/formats/cbm_crt.cpp b/src/lib/formats/cbm_crt.cpp
index 6484dbf108c..43e440e725c 100644
--- a/src/lib/formats/cbm_crt.cpp
+++ b/src/lib/formats/cbm_crt.cpp
@@ -122,11 +122,11 @@ static const char * CRT_C64_SLOT_NAMES[_CRT_C64_COUNT] =
// cbm_crt_get_card - get slot interface card
//-------------------------------------------------
-std::string cbm_crt_get_card(core_file *file)
+std::string cbm_crt_get_card(util::core_file &file)
{
// read the header
cbm_crt_header header;
- core_fread(file, &header, CRT_HEADER_LENGTH);
+ file.read(&header, CRT_HEADER_LENGTH);
if (memcmp(header.signature, CRT_SIGNATURE, 16) == 0)
{
@@ -143,11 +143,11 @@ std::string cbm_crt_get_card(core_file *file)
// cbm_crt_read_header - read cartridge header
//-------------------------------------------------
-bool cbm_crt_read_header(core_file* file, size_t *roml_size, size_t *romh_size, int *exrom, int *game)
+bool cbm_crt_read_header(util::core_file &file, size_t *roml_size, size_t *romh_size, int *exrom, int *game)
{
// read the header
cbm_crt_header header;
- core_fread(file, &header, CRT_HEADER_LENGTH);
+ file.read(&header, CRT_HEADER_LENGTH);
if (memcmp(header.signature, CRT_SIGNATURE, 16) != 0)
return false;
@@ -166,10 +166,10 @@ bool cbm_crt_read_header(core_file* file, size_t *roml_size, size_t *romh_size,
}
// determine ROM region lengths
- while (!core_feof(file))
+ while (!file.eof())
{
cbm_crt_chip chip;
- core_fread(file, &chip, CRT_CHIP_LENGTH);
+ file.read(&chip, CRT_CHIP_LENGTH);
UINT16 address = pick_integer_be(chip.start_address, 0, 2);
UINT16 size = pick_integer_be(chip.image_size, 0, 2);
@@ -190,7 +190,7 @@ bool cbm_crt_read_header(core_file* file, size_t *roml_size, size_t *romh_size,
default: osd_printf_verbose("Invalid CHIP loading address!\n"); break;
}
- core_fseek(file, size, SEEK_CUR);
+ file.seek(size, SEEK_CUR);
}
return true;
@@ -201,26 +201,26 @@ bool cbm_crt_read_header(core_file* file, size_t *roml_size, size_t *romh_size,
// cbm_crt_read_data - read cartridge data
//-------------------------------------------------
-bool cbm_crt_read_data(core_file* file, UINT8 *roml, UINT8 *romh)
+bool cbm_crt_read_data(util::core_file &file, UINT8 *roml, UINT8 *romh)
{
UINT32 roml_offset = 0;
UINT32 romh_offset = 0;
- core_fseek(file, CRT_HEADER_LENGTH, SEEK_SET);
+ file.seek(CRT_HEADER_LENGTH, SEEK_SET);
- while (!core_feof(file))
+ while (!file.eof())
{
cbm_crt_chip chip;
- core_fread(file, &chip, CRT_CHIP_LENGTH);
+ file.read(&chip, CRT_CHIP_LENGTH);
UINT16 address = pick_integer_be(chip.start_address, 0, 2);
UINT16 size = pick_integer_be(chip.image_size, 0, 2);
switch (address)
{
- case 0x8000: core_fread(file, roml + roml_offset, size); roml_offset += size; break;
- case 0xa000: core_fread(file, romh + romh_offset, size); romh_offset += size; break;
- case 0xe000: core_fread(file, romh + romh_offset, size); romh_offset += size; break;
+ case 0x8000: file.read(roml + roml_offset, size); roml_offset += size; break;
+ case 0xa000: file.read(romh + romh_offset, size); romh_offset += size; break;
+ case 0xe000: file.read(romh + romh_offset, size); romh_offset += size; break;
}
}
diff --git a/src/lib/formats/cbm_crt.h b/src/lib/formats/cbm_crt.h
index f3cfb6bb164..96d04cea2f6 100644
--- a/src/lib/formats/cbm_crt.h
+++ b/src/lib/formats/cbm_crt.h
@@ -135,9 +135,9 @@ struct cbm_crt_chip
// FUNCTION PROTOTYPES
//**************************************************************************
-std::string cbm_crt_get_card(core_file *file);
-bool cbm_crt_read_header(core_file* file, size_t *roml_size, size_t *romh_size, int *exrom, int *game);
-bool cbm_crt_read_data(core_file* file, UINT8 *roml, UINT8 *romh);
+std::string cbm_crt_get_card(util::core_file &file);
+bool cbm_crt_read_header(util::core_file &file, size_t *roml_size, size_t *romh_size, int *exrom, int *game);
+bool cbm_crt_read_data(util::core_file &file, UINT8 *roml, UINT8 *romh);
#endif
diff --git a/src/lib/formats/ioprocs.cpp b/src/lib/formats/ioprocs.cpp
index 24f92060a82..9f00e3bb9d5 100644
--- a/src/lib/formats/ioprocs.cpp
+++ b/src/lib/formats/ioprocs.cpp
@@ -68,34 +68,33 @@ const struct io_procs stdio_ioprocs_noclose =
static void corefile_closeproc(void *file)
{
- core_fclose((core_file*)file);
+ delete (util::core_file*)file;
}
static int corefile_seekproc(void *file, INT64 offset, int whence)
{
- return core_fseek((core_file*)file, (long) offset, whence);
+ return ((util::core_file*)file)->seek(offset, whence);
}
static size_t corefile_readproc(void *file, void *buffer, size_t length)
{
- return core_fread((core_file*)file, buffer, length);
+ return ((util::core_file*)file)->read(buffer, length);
}
static size_t corefile_writeproc(void *file, const void *buffer, size_t length)
{
- return core_fwrite((core_file*)file, buffer, length);
+ return ((util::core_file*)file)->write(buffer, length);
}
static UINT64 corefile_filesizeproc(void *file)
{
- long l, sz;
- l = core_ftell((core_file*)file);
- if (core_fseek((core_file*)file, 0, SEEK_END))
- return (size_t) -1;
- sz = core_ftell((core_file*)file);
- if (core_fseek((core_file*)file, l, SEEK_SET))
+ const auto l = ((util::core_file*)file)->tell();
+ if (((util::core_file*)file)->seek(0, SEEK_END))
return (size_t) -1;
- return (size_t) sz;
+ const auto sz = ((util::core_file*)file)->tell();
+ if (((util::core_file*)file)->seek(l, SEEK_SET))
+ return UINT64(-1);
+ return UINT64(sz);
}
const struct io_procs corefile_ioprocs =
diff --git a/src/lib/netlist/macro/nlm_cd4xxx.cpp b/src/lib/netlist/macro/nlm_cd4xxx.cpp
index e8ffede2aa8..f7eda575bab 100644
--- a/src/lib/netlist/macro/nlm_cd4xxx.cpp
+++ b/src/lib/netlist/macro/nlm_cd4xxx.cpp
@@ -1,4 +1,5 @@
-
+// license:GPL-2.0+
+// copyright-holders:Couriersud
#include "nlm_cd4xxx.h"
#include "devices/nld_truthtable.h"
diff --git a/src/lib/netlist/macro/nlm_cd4xxx.h b/src/lib/netlist/macro/nlm_cd4xxx.h
index 94c5d04aef8..ebfb58740b2 100644
--- a/src/lib/netlist/macro/nlm_cd4xxx.h
+++ b/src/lib/netlist/macro/nlm_cd4xxx.h
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
#ifndef NLD_CD4XXX_H_
#define NLD_CD4XXX_H_
diff --git a/src/lib/netlist/macro/nlm_opamp.cpp b/src/lib/netlist/macro/nlm_opamp.cpp
index 9d246ebb04f..c3a932c0a35 100644
--- a/src/lib/netlist/macro/nlm_opamp.cpp
+++ b/src/lib/netlist/macro/nlm_opamp.cpp
@@ -1,4 +1,5 @@
-
+// license:GPL-2.0+
+// copyright-holders:Couriersud
#include "nlm_opamp.h"
#include "analog/nld_opamps.h"
diff --git a/src/lib/netlist/macro/nlm_opamp.h b/src/lib/netlist/macro/nlm_opamp.h
index 8612f72e453..c0d6a0b158f 100644
--- a/src/lib/netlist/macro/nlm_opamp.h
+++ b/src/lib/netlist/macro/nlm_opamp.h
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
#ifndef NLM_OPAMP_H_
#define NLM_OPAMP_H_
diff --git a/src/lib/netlist/macro/nlm_other.cpp b/src/lib/netlist/macro/nlm_other.cpp
index e3d53def922..9a5e54af737 100644
--- a/src/lib/netlist/macro/nlm_other.cpp
+++ b/src/lib/netlist/macro/nlm_other.cpp
@@ -1,4 +1,5 @@
-
+// license:GPL-2.0+
+// copyright-holders:Couriersud
#include "nlm_other.h"
#include "devices/nld_truthtable.h"
diff --git a/src/lib/netlist/macro/nlm_other.h b/src/lib/netlist/macro/nlm_other.h
index cc104968ed3..76f8dd781d5 100644
--- a/src/lib/netlist/macro/nlm_other.h
+++ b/src/lib/netlist/macro/nlm_other.h
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
#ifndef NLM_OTHER_H_
#define NLM_OTHER_H_
diff --git a/src/lib/netlist/macro/nlm_ttl74xx.cpp b/src/lib/netlist/macro/nlm_ttl74xx.cpp
index c9c33aceaeb..c06aa2e45d4 100644
--- a/src/lib/netlist/macro/nlm_ttl74xx.cpp
+++ b/src/lib/netlist/macro/nlm_ttl74xx.cpp
@@ -1,4 +1,5 @@
-
+// license:GPL-2.0+
+// copyright-holders:Couriersud
#include "nlm_ttl74xx.h"
#include "devices/nld_truthtable.h"
diff --git a/src/lib/netlist/macro/nlm_ttl74xx.h b/src/lib/netlist/macro/nlm_ttl74xx.h
index 0fed60235c1..8ae8819480f 100644
--- a/src/lib/netlist/macro/nlm_ttl74xx.h
+++ b/src/lib/netlist/macro/nlm_ttl74xx.h
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
#ifndef NLD_TTL74XX_H_
#define NLD_TTL74XX_H_
diff --git a/src/lib/netlist/prg/nlwav.cpp b/src/lib/netlist/prg/nlwav.cpp
index bba12ca1152..408cc65589e 100644
--- a/src/lib/netlist/prg/nlwav.cpp
+++ b/src/lib/netlist/prg/nlwav.cpp
@@ -1,3 +1,5 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
#include <cstdio>
#include <cstring>
#include "plib/poptions.h"
diff --git a/src/lib/util/cdrom.cpp b/src/lib/util/cdrom.cpp
index 10a1828d5e4..8bdf4af6c0f 100644
--- a/src/lib/util/cdrom.cpp
+++ b/src/lib/util/cdrom.cpp
@@ -115,7 +115,7 @@ struct cdrom_file
/** @brief Information describing the track. */
chdcd_track_input_info track_info; /* track info */
/** @brief The fhandle[ CD maximum tracks]. */
- core_file * fhandle[CD_MAX_TRACKS];/* file handle */
+ util::core_file::ptr fhandle[CD_MAX_TRACKS];/* file handle */
};
@@ -244,7 +244,7 @@ cdrom_file *cdrom_open(const char *inputfile)
for (i = 0; i < file->cdtoc.numtrks; i++)
{
- file_error filerr = core_fopen(file->track_info.track[i].fname.c_str(), OPEN_FLAG_READ, &file->fhandle[i]);
+ file_error filerr = util::core_file::open(file->track_info.track[i].fname.c_str(), OPEN_FLAG_READ, file->fhandle[i]);
if (filerr != FILERR_NONE)
{
fprintf(stderr, "Unable to open file: %s\n", file->track_info.track[i].fname.c_str());
@@ -418,7 +418,7 @@ void cdrom_close(cdrom_file *file)
{
for (int i = 0; i < file->cdtoc.numtrks; i++)
{
- core_fclose(file->fhandle[i]);
+ file->fhandle[i].reset();
}
}
@@ -474,7 +474,7 @@ chd_error read_partial_sector(cdrom_file *file, void *dest, UINT32 lbasector, UI
else
{
// else read from the appropriate file
- core_file *srcfile = file->fhandle[tracknum];
+ util::core_file &srcfile = *file->fhandle[tracknum];
UINT64 sourcefileoffset = file->track_info.track[tracknum].offset;
int bytespersector = file->cdtoc.tracks[tracknum].datasize + file->cdtoc.tracks[tracknum].subsize;
@@ -483,8 +483,8 @@ chd_error read_partial_sector(cdrom_file *file, void *dest, UINT32 lbasector, UI
// printf("Reading sector %d from track %d at offset %lld\n", chdsector, tracknum, sourcefileoffset);
- core_fseek(srcfile, sourcefileoffset, SEEK_SET);
- core_fread(srcfile, dest, length);
+ srcfile.seek(sourcefileoffset, SEEK_SET);
+ srcfile.read(dest, length);
needswap = file->track_info.track[tracknum].swap;
}
diff --git a/src/lib/util/chd.cpp b/src/lib/util/chd.cpp
index 3419f404c09..93a1b34ba29 100644
--- a/src/lib/util/chd.cpp
+++ b/src/lib/util/chd.cpp
@@ -190,8 +190,8 @@ inline void chd_file::file_read(UINT64 offset, void *dest, UINT32 length)
throw CHDERR_NOT_OPEN;
// seek and read
- core_fseek(m_file, offset, SEEK_SET);
- UINT32 count = core_fread(m_file, dest, length);
+ m_file->seek(offset, SEEK_SET);
+ UINT32 count = m_file->read(dest, length);
if (count != length)
throw CHDERR_READ_ERROR;
}
@@ -209,8 +209,8 @@ inline void chd_file::file_write(UINT64 offset, const void *source, UINT32 lengt
throw CHDERR_NOT_OPEN;
// seek and write
- core_fseek(m_file, offset, SEEK_SET);
- UINT32 count = core_fwrite(m_file, source, length);
+ m_file->seek(offset, SEEK_SET);
+ UINT32 count = m_file->write(source, length);
if (count != length)
throw CHDERR_WRITE_ERROR;
}
@@ -229,10 +229,10 @@ inline UINT64 chd_file::file_append(const void *source, UINT32 length, UINT32 al
throw CHDERR_NOT_OPEN;
// seek to the end and align if necessary
- core_fseek(m_file, 0, SEEK_END);
+ m_file->seek(0, SEEK_END);
if (alignment != 0)
{
- UINT64 offset = core_ftell(m_file);
+ UINT64 offset = m_file->tell();
UINT32 delta = offset % alignment;
if (delta != 0)
{
@@ -243,7 +243,7 @@ inline UINT64 chd_file::file_append(const void *source, UINT32 length, UINT32 al
while (delta != 0)
{
UINT32 bytes_to_write = MIN(sizeof(buffer), delta);
- UINT32 count = core_fwrite(m_file, buffer, bytes_to_write);
+ UINT32 count = m_file->write(buffer, bytes_to_write);
if (count != bytes_to_write)
throw CHDERR_WRITE_ERROR;
delta -= bytes_to_write;
@@ -252,8 +252,8 @@ inline UINT64 chd_file::file_append(const void *source, UINT32 length, UINT32 al
}
// write the real data
- UINT64 offset = core_ftell(m_file);
- UINT32 count = core_fwrite(m_file, source, length);
+ UINT64 offset = m_file->tell();
+ UINT32 count = m_file->write(source, length);
if (count != length)
throw CHDERR_READ_ERROR;
return offset;
@@ -567,7 +567,7 @@ void chd_file::set_parent_sha1(sha1_t parent)
}
/**
- * @fn chd_error chd_file::create(core_file &file, UINT64 logicalbytes, UINT32 hunkbytes, UINT32 unitbytes, chd_codec_type compression[4])
+ * @fn chd_error chd_file::create(util::core_file &file, UINT64 logicalbytes, UINT32 hunkbytes, UINT32 unitbytes, chd_codec_type compression[4])
*
* @brief -------------------------------------------------
* create - create a new file with no parent using an existing opened file handle
@@ -582,7 +582,7 @@ void chd_file::set_parent_sha1(sha1_t parent)
* @return A chd_error.
*/
-chd_error chd_file::create(core_file &file, UINT64 logicalbytes, UINT32 hunkbytes, UINT32 unitbytes, chd_codec_type compression[4])
+chd_error chd_file::create(util::core_file &file, UINT64 logicalbytes, UINT32 hunkbytes, UINT32 unitbytes, chd_codec_type compression[4])
{
// make sure we don't already have a file open
if (m_file != nullptr)
@@ -602,7 +602,7 @@ chd_error chd_file::create(core_file &file, UINT64 logicalbytes, UINT32 hunkbyte
}
/**
- * @fn chd_error chd_file::create(core_file &file, UINT64 logicalbytes, UINT32 hunkbytes, chd_codec_type compression[4], chd_file &parent)
+ * @fn chd_error chd_file::create(util::core_file &file, UINT64 logicalbytes, UINT32 hunkbytes, chd_codec_type compression[4], chd_file &parent)
*
* @brief -------------------------------------------------
* create - create a new file with a parent using an existing opened file handle
@@ -617,7 +617,7 @@ chd_error chd_file::create(core_file &file, UINT64 logicalbytes, UINT32 hunkbyte
* @return A chd_error.
*/
-chd_error chd_file::create(core_file &file, UINT64 logicalbytes, UINT32 hunkbytes, chd_codec_type compression[4], chd_file &parent)
+chd_error chd_file::create(util::core_file &file, UINT64 logicalbytes, UINT32 hunkbytes, chd_codec_type compression[4], chd_file &parent)
{
// make sure we don't already have a file open
if (m_file != nullptr)
@@ -659,21 +659,25 @@ chd_error chd_file::create(const char *filename, UINT64 logicalbytes, UINT32 hun
return CHDERR_ALREADY_OPEN;
// create the new file
- core_file *file = nullptr;
- file_error filerr = core_fopen(filename, OPEN_FLAG_READ | OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, &file);
+ util::core_file::ptr file;
+ const file_error filerr = util::core_file::open(filename, OPEN_FLAG_READ | OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, file);
if (filerr != FILERR_NONE)
return CHDERR_FILE_NOT_FOUND;
// create the file normally, then claim the file
- chd_error chderr = create(*file, logicalbytes, hunkbytes, unitbytes, compression);
+ const chd_error chderr = create(*file, logicalbytes, hunkbytes, unitbytes, compression);
m_owns_file = true;
// if an error happened, close and delete the file
if (chderr != CHDERR_NONE)
{
- core_fclose(file);
+ file.reset();
osd_rmfile(filename);
}
+ else
+ {
+ file.release();
+ }
return chderr;
}
@@ -700,21 +704,25 @@ chd_error chd_file::create(const char *filename, UINT64 logicalbytes, UINT32 hun
return CHDERR_ALREADY_OPEN;
// create the new file
- core_file *file = nullptr;
- file_error filerr = core_fopen(filename, OPEN_FLAG_READ | OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, &file);
+ util::core_file::ptr file;
+ const file_error filerr = util::core_file::open(filename, OPEN_FLAG_READ | OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, file);
if (filerr != FILERR_NONE)
return CHDERR_FILE_NOT_FOUND;
// create the file normally, then claim the file
- chd_error chderr = create(*file, logicalbytes, hunkbytes, compression, parent);
+ const chd_error chderr = create(*file, logicalbytes, hunkbytes, compression, parent);
m_owns_file = true;
// if an error happened, close and delete the file
if (chderr != CHDERR_NONE)
{
- core_fclose(file);
+ file.reset();
osd_rmfile(filename);
}
+ else
+ {
+ file.release();
+ }
return chderr;
}
@@ -739,27 +747,25 @@ chd_error chd_file::open(const char *filename, bool writeable, chd_file *parent)
return CHDERR_ALREADY_OPEN;
// open the file
- UINT32 openflags = writeable ? (OPEN_FLAG_READ | OPEN_FLAG_WRITE) : OPEN_FLAG_READ;
- core_file *file = nullptr;
- file_error filerr = core_fopen(filename, openflags, &file);
+ const UINT32 openflags = writeable ? (OPEN_FLAG_READ | OPEN_FLAG_WRITE) : OPEN_FLAG_READ;
+ util::core_file::ptr file;
+ const file_error filerr = util::core_file::open(filename, openflags, file);
if (filerr != FILERR_NONE)
return CHDERR_FILE_NOT_FOUND;
// now open the CHD
chd_error err = open(*file, writeable, parent);
if (err != CHDERR_NONE)
- {
- core_fclose(file);
return err;
- }
// we now own this file
+ file.release();
m_owns_file = true;
return err;
}
/**
- * @fn chd_error chd_file::open(core_file &file, bool writeable, chd_file *parent)
+ * @fn chd_error chd_file::open(util::core_file &file, bool writeable, chd_file *parent)
*
* @brief -------------------------------------------------
* open - open an existing file for read or read/write
@@ -772,7 +778,7 @@ chd_error chd_file::open(const char *filename, bool writeable, chd_file *parent)
* @return A chd_error.
*/
-chd_error chd_file::open(core_file &file, bool writeable, chd_file *parent)
+chd_error chd_file::open(util::core_file &file, bool writeable, chd_file *parent)
{
// make sure we don't already have a file open
if (m_file != nullptr)
@@ -796,8 +802,8 @@ chd_error chd_file::open(core_file &file, bool writeable, chd_file *parent)
void chd_file::close()
{
// reset file characteristics
- if (m_owns_file && m_file != nullptr)
- core_fclose(m_file);
+ if (m_owns_file && m_file)
+ delete m_file;
m_file = nullptr;
m_owns_file = false;
m_allow_reads = false;
diff --git a/src/lib/util/chd.h b/src/lib/util/chd.h
index d9a1dd57f51..ee8a03f5d17 100644
--- a/src/lib/util/chd.h
+++ b/src/lib/util/chd.h
@@ -304,7 +304,7 @@ public:
virtual ~chd_file();
// operators
- operator core_file *() { return m_file; }
+ operator util::core_file &() { return *m_file; }
// getters
bool opened() const { return (m_file != nullptr); }
@@ -328,13 +328,13 @@ public:
// file create
chd_error create(const char *filename, UINT64 logicalbytes, UINT32 hunkbytes, UINT32 unitbytes, chd_codec_type compression[4]);
- chd_error create(core_file &file, UINT64 logicalbytes, UINT32 hunkbytes, UINT32 unitbytes, chd_codec_type compression[4]);
+ chd_error create(util::core_file &file, UINT64 logicalbytes, UINT32 hunkbytes, UINT32 unitbytes, chd_codec_type compression[4]);
chd_error create(const char *filename, UINT64 logicalbytes, UINT32 hunkbytes, chd_codec_type compression[4], chd_file &parent);
- chd_error create(core_file &file, UINT64 logicalbytes, UINT32 hunkbytes, chd_codec_type compression[4], chd_file &parent);
+ chd_error create(util::core_file &file, UINT64 logicalbytes, UINT32 hunkbytes, chd_codec_type compression[4], chd_file &parent);
// file open
chd_error open(const char *filename, bool writeable = false, chd_file *parent = nullptr);
- chd_error open(core_file &file, bool writeable = false, chd_file *parent = nullptr);
+ chd_error open(util::core_file &file, bool writeable = false, chd_file *parent = nullptr);
// file close
void close();
@@ -401,7 +401,7 @@ private:
static int CLIB_DECL metadata_hash_compare(const void *elem1, const void *elem2);
// file characteristics
- core_file * m_file; // handle to the open core file
+ util::core_file * m_file; // handle to the open core file
bool m_owns_file; // flag indicating if this file should be closed on chd_close()
bool m_allow_reads; // permit reads from this CHD?
bool m_allow_writes; // permit writes to this CHD?
diff --git a/src/lib/util/corefile.cpp b/src/lib/util/corefile.cpp
index 25978afdb2c..64169a606fc 100644
--- a/src/lib/util/corefile.cpp
+++ b/src/lib/util/corefile.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
+// copyright-holders:Aaron Giles, Vas Crabb
/***************************************************************************
corefile.c
@@ -8,17 +8,24 @@
***************************************************************************/
-#include <assert.h>
-
#include "corefile.h"
+
#include "unicode.h"
+#include "vecstream.h"
+
#include <zlib.h>
-#include <stdarg.h>
+#include <algorithm>
+#include <cassert>
+#include <cstring>
#include <ctype.h>
+namespace util {
+
+namespace {
+
/***************************************************************************
VALIDATION
***************************************************************************/
@@ -30,613 +37,513 @@
/***************************************************************************
- CONSTANTS
-***************************************************************************/
-
-#define FILE_BUFFER_SIZE 512
-
-#define OPEN_FLAG_HAS_CRC 0x10000
-
-
-
-/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
-enum text_file_type
-{
- TFT_OSD = 0, /* OSD depdendent encoding format used when BOMs missing */
- TFT_UTF8, /* UTF-8 */
- TFT_UTF16BE, /* UTF-16 (big endian) */
- TFT_UTF16LE, /* UTF-16 (little endian) */
- TFT_UTF32BE, /* UTF-32 (UCS-4) (big endian) */
- TFT_UTF32LE /* UTF-32 (UCS-4) (little endian) */
-};
-
-
-struct zlib_data
-{
- z_stream stream;
- UINT8 buffer[1024];
- UINT64 realoffset;
- UINT64 nextoffset;
-};
-
-
-struct core_file
+class zlib_data
{
- osd_file * file; /* OSD file handle */
- zlib_data * zdata; /* compression data */
- UINT32 openflags; /* flags we were opened with */
- UINT8 data_allocated; /* was the data allocated by us? */
- UINT8 * data; /* file data, if RAM-based */
- UINT64 offset; /* current file offset */
- UINT64 length; /* total file length */
- text_file_type text_type; /* text output format */
- char back_chars[UTF8_CHAR_MAX]; /* buffer to hold characters for ungetc */
- int back_char_head; /* head of ungetc buffer */
- int back_char_tail; /* tail of ungetc buffer */
- UINT64 bufferbase; /* base offset of internal buffer */
- UINT32 bufferbytes; /* bytes currently loaded into buffer */
- UINT8 buffer[FILE_BUFFER_SIZE]; /* buffer data */
-};
-
-
-
-/***************************************************************************
- FUNCTION PROTOTYPES
-***************************************************************************/
-
-/* misc helpers */
-static UINT32 safe_buffer_copy(const void *source, UINT32 sourceoffs, UINT32 sourcelen, void *dest, UINT32 destoffs, UINT32 destlen);
-static file_error osd_or_zlib_read(core_file *file, void *buffer, UINT64 offset, UINT32 length, UINT32 *actual);
-static file_error osd_or_zlib_write(core_file *file, const void *buffer, UINT64 offset, UINT32 length, UINT32 *actual);
-
-
-
-/***************************************************************************
- INLINE FUNCTIONS
-***************************************************************************/
-
-/*-------------------------------------------------
- is_directory_separator - is a given character
- a directory separator? The following logic
- works for most platforms
--------------------------------------------------*/
+public:
+ typedef std::unique_ptr<zlib_data> ptr;
-static inline int is_directory_separator(char c)
-{
- return (c == '\\' || c == '/' || c == ':');
-}
-
-
-
-/***************************************************************************
- FILE OPEN/CLOSE
-***************************************************************************/
+ static int start_compression(int level, std::uint64_t offset, ptr &data)
+ {
+ ptr result(new zlib_data(offset));
+ result->reset_output();
+ auto const zerr = deflateInit(&result->m_stream, level);
+ result->m_compress = (Z_OK == zerr);
+ if (result->m_compress) data = std::move(result);
+ return zerr;
+ }
+ static int start_decompression(std::uint64_t offset, ptr &data)
+ {
+ ptr result(new zlib_data(offset));
+ auto const zerr = inflateInit(&result->m_stream);
+ result->m_decompress = (Z_OK == zerr);
+ if (result->m_decompress) data = std::move(result);
+ return zerr;
+ }
-/*-------------------------------------------------
- core_fopen - open a file for access and
- return an error code
--------------------------------------------------*/
+ ~zlib_data()
+ {
+ if (m_compress) deflateEnd(&m_stream);
+ else if (m_decompress) inflateEnd(&m_stream);
+ }
-file_error core_fopen(const char *filename, UINT32 openflags, core_file **file)
-{
- file_error filerr = FILERR_NOT_FOUND;
+ std::size_t buffer_size() const { return sizeof(m_buffer); }
+ void const *buffer_data() const { return m_buffer; }
+ void *buffer_data() { return m_buffer; }
- /* allocate the file itself */
- *file = (core_file *)malloc(sizeof(**file));
- if (*file == nullptr)
- return FILERR_OUT_OF_MEMORY;
- memset(*file, 0, sizeof(**file));
+ // general-purpose output buffer manipulation
+ bool output_full() const { return 0 == m_stream.avail_out; }
+ std::size_t output_space() const { return m_stream.avail_out; }
+ void set_output(void *data, std::uint32_t size)
+ {
+ m_stream.next_out = reinterpret_cast<Bytef *>(data);
+ m_stream.avail_out = size;
+ }
- /* attempt to open the file */
- filerr = osd_open(filename, openflags, &(*file)->file, &(*file)->length);
- (*file)->openflags = openflags;
+ // working with output to the internal buffer
+ bool has_output() const { return m_stream.avail_out != sizeof(m_buffer); }
+ std::size_t output_size() const { return sizeof(m_buffer) - m_stream.avail_out; }
+ void reset_output()
+ {
+ m_stream.next_out = m_buffer;
+ m_stream.avail_out = sizeof(m_buffer);
+ }
- /* handle errors and return */
- if (filerr != FILERR_NONE)
+ // general-purpose input buffer manipulation
+ bool has_input() const { return 0 != m_stream.avail_in; }
+ std::size_t input_size() const { return m_stream.avail_in; }
+ void set_input(void const *data, std::uint32_t size)
{
- core_fclose(*file);
- *file = nullptr;
+ m_stream.next_in = const_cast<Bytef *>(reinterpret_cast<Bytef const *>(data));
+ m_stream.avail_in = size;
}
- return filerr;
-}
+ // working with input from the internal buffer
+ void reset_input(std::uint32_t size)
+ {
+ m_stream.next_in = m_buffer;
+ m_stream.avail_in = size;
+ }
-/*-------------------------------------------------
- core_fopen_ram_internal - open a RAM-based buffer
- for file-like access, possibly copying the data,
- and return an error code
--------------------------------------------------*/
+ int compress() { assert(m_compress); return deflate(&m_stream, Z_NO_FLUSH); }
+ int finalise() { assert(m_compress); return deflate(&m_stream, Z_FINISH); }
+ int decompress() { assert(m_decompress); return inflate(&m_stream, Z_SYNC_FLUSH); }
-static file_error core_fopen_ram_internal(const void *data, size_t length, int copy_buffer, UINT32 openflags, core_file **file)
-{
- /* can only do this for read access */
- if ((openflags & OPEN_FLAG_WRITE) != 0)
- return FILERR_INVALID_ACCESS;
- if ((openflags & OPEN_FLAG_CREATE) != 0)
- return FILERR_INVALID_ACCESS;
+ std::uint64_t realoffset() const { return m_realoffset; }
+ void add_realoffset(std::uint32_t increment) { m_realoffset += increment; }
- /* allocate the file itself */
- *file = (core_file *)malloc(sizeof(**file) + (copy_buffer ? length : 0));
- if (*file == nullptr)
- return FILERR_OUT_OF_MEMORY;
- memset(*file, 0, sizeof(**file));
+ bool is_nextoffset(std::uint64_t value) const { return m_nextoffset == value; }
+ void add_nextoffset(std::uint32_t increment) { m_nextoffset += increment; }
- /* copy the buffer, if we're asked to */
- if (copy_buffer)
+private:
+ zlib_data(std::uint64_t offset)
+ : m_compress(false)
+ , m_decompress(false)
+ , m_realoffset(offset)
+ , m_nextoffset(offset)
{
- void *dest = ((UINT8 *) *file) + sizeof(**file);
- memcpy(dest, data, length);
- data = dest;
+ m_stream.zalloc = Z_NULL;
+ m_stream.zfree = Z_NULL;
+ m_stream.opaque = Z_NULL;
+ m_stream.avail_in = m_stream.avail_out = 0;
}
- /* claim the buffer */
- (*file)->data = (UINT8 *)data;
- (*file)->length = length;
- (*file)->openflags = openflags;
-
- return FILERR_NONE;
-}
-
+ bool m_compress, m_decompress;
+ z_stream m_stream;
+ std::uint8_t m_buffer[1024];
+ std::uint64_t m_realoffset;
+ std::uint64_t m_nextoffset;
+};
-/*-------------------------------------------------
- core_fopen_ram - open a RAM-based buffer for
- file-like access and return an error code
--------------------------------------------------*/
-file_error core_fopen_ram(const void *data, size_t length, UINT32 openflags, core_file **file)
+class core_proxy_file : public core_file
{
- return core_fopen_ram_internal(data, length, FALSE, openflags, file);
-}
-
+public:
+ core_proxy_file(core_file &file) : m_file(file) { }
+ virtual ~core_proxy_file() override { }
+ virtual file_error compress(int level) override { return m_file.compress(level); }
+
+ virtual int seek(std::int64_t offset, int whence) override { return m_file.seek(offset, whence); }
+ virtual std::uint64_t tell() const override { return m_file.tell(); }
+ virtual bool eof() const override { return m_file.eof(); }
+ virtual std::uint64_t size() const override { return m_file.size(); }
+
+ virtual std::uint32_t read(void *buffer, std::uint32_t length) override { return m_file.read(buffer, length); }
+ virtual int getc() override { return m_file.getc(); }
+ virtual int ungetc(int c) override { return m_file.ungetc(c); }
+ virtual char *gets(char *s, int n) override { return m_file.gets(s, n); }
+ virtual const void *buffer() override { return m_file.buffer(); }
+
+ virtual std::uint32_t write(const void *buffer, std::uint32_t length) override { return m_file.write(buffer, length); }
+ virtual int puts(const char *s) override { return m_file.puts(s); }
+ virtual int vprintf(util::format_argument_pack<std::ostream> const &args) override { return m_file.vprintf(args); }
+ virtual file_error truncate(std::uint64_t offset) override { return m_file.truncate(offset); }
+
+ virtual file_error flush() override { return m_file.flush(); }
+
+private:
+ core_file &m_file;
+};
-/*-------------------------------------------------
- core_fopen_ram_copy - open a copy of a RAM-based
- buffer for file-like access and return an error code
--------------------------------------------------*/
-file_error core_fopen_ram_copy(const void *data, size_t length, UINT32 openflags, core_file **file)
+class core_text_file : public core_file
{
- return core_fopen_ram_internal(data, length, TRUE, openflags, file);
-}
-
+public:
+ enum class text_file_type
+ {
+ OSD, // OSD dependent encoding format used when BOMs missing
+ UTF8, // UTF-8
+ UTF16BE, // UTF-16 (big endian)
+ UTF16LE, // UTF-16 (little endian)
+ UTF32BE, // UTF-32 (UCS-4) (big endian)
+ UTF32LE // UTF-32 (UCS-4) (little endian)
+ };
+
+ virtual int getc() override;
+ virtual int ungetc(int c) override;
+ virtual char *gets(char *s, int n) override;
+ virtual int puts(char const *s) override;
+ virtual int vprintf(util::format_argument_pack<std::ostream> const &args) override;
+
+protected:
+ core_text_file(std::uint32_t openflags)
+ : m_openflags(openflags)
+ , m_text_type(text_file_type::OSD)
+ , m_back_char_head(0)
+ , m_back_char_tail(0)
+ , m_printf_buffer()
+ {
+ }
-/*-------------------------------------------------
- core_fclose - closes a file
--------------------------------------------------*/
+ bool read_access() const { return 0U != (m_openflags & OPEN_FLAG_READ); }
+ bool write_access() const { return 0U != (m_openflags & OPEN_FLAG_WRITE); }
+ bool no_bom() const { return 0U != (m_openflags & OPEN_FLAG_NO_BOM); }
-void core_fclose(core_file *file)
-{
- /* close files and free memory */
- if (file->zdata != nullptr)
- core_fcompress(file, FCOMPRESS_NONE);
- if (file->file != nullptr)
- osd_close(file->file);
- if (file->data != nullptr && file->data_allocated)
- free(file->data);
- free(file);
-}
+ bool has_putback() const { return m_back_char_head != m_back_char_tail; }
+ void clear_putback() { m_back_char_head = m_back_char_tail = 0; }
+private:
+ std::uint32_t const m_openflags; // flags we were opened with
+ text_file_type m_text_type; // text output format
+ char m_back_chars[UTF8_CHAR_MAX]; // buffer to hold characters for ungetc
+ int m_back_char_head; // head of ungetc buffer
+ int m_back_char_tail; // tail of ungetc buffer
+ ovectorstream m_printf_buffer; // persistent buffer for formatted output
+};
-/*-------------------------------------------------
- core_fcompress - enable/disable streaming file
- compression via zlib; level is 0 to disable
- compression, or up to 9 for max compression
--------------------------------------------------*/
-file_error core_fcompress(core_file *file, int level)
+class core_in_memory_file : public core_text_file
{
- file_error result = FILERR_NONE;
-
- /* can only do this for read-only and write-only cases */
- if ((file->openflags & OPEN_FLAG_WRITE) != 0 && (file->openflags & OPEN_FLAG_READ) != 0)
- return FILERR_INVALID_ACCESS;
-
- /* if we have been compressing, flush and free the data */
- if (file->zdata != nullptr && level == FCOMPRESS_NONE)
+public:
+ core_in_memory_file(std::uint32_t openflags, void const *data, std::size_t length, bool copy)
+ : core_text_file(openflags)
+ , m_data_allocated(false)
+ , m_data(copy ? nullptr : data)
+ , m_offset(0)
+ , m_length(length)
{
- int zerr = Z_OK;
-
- /* flush any remaining data if we are writing */
- while ((file->openflags & OPEN_FLAG_WRITE) != 0 && zerr != Z_STREAM_END)
+ if (copy)
{
- UINT32 actualdata;
- file_error filerr;
-
- /* deflate some more */
- zerr = deflate(&file->zdata->stream, Z_FINISH);
- if (zerr != Z_STREAM_END && zerr != Z_OK)
- {
- result = FILERR_INVALID_DATA;
- break;
- }
-
- /* write the data */
- if (file->zdata->stream.avail_out != sizeof(file->zdata->buffer))
- {
- filerr = osd_write(file->file, file->zdata->buffer, file->zdata->realoffset, sizeof(file->zdata->buffer) - file->zdata->stream.avail_out, &actualdata);
- if (filerr != FILERR_NONE)
- break;
- file->zdata->realoffset += actualdata;
- file->zdata->stream.next_out = file->zdata->buffer;
- file->zdata->stream.avail_out = sizeof(file->zdata->buffer);
- }
+ void *const buf = allocate();
+ if (buf) std::memcpy(buf, data, length);
}
+ }
- /* end the appropriate operation */
- if ((file->openflags & OPEN_FLAG_WRITE) != 0)
- deflateEnd(&file->zdata->stream);
- else
- inflateEnd(&file->zdata->stream);
+ ~core_in_memory_file() override { purge(); }
+ virtual file_error compress(int level) override { return FILERR_INVALID_ACCESS; }
- /* free memory */
- free(file->zdata);
- file->zdata = nullptr;
- }
+ virtual int seek(std::int64_t offset, int whence) override;
+ virtual std::uint64_t tell() const override { return m_offset; }
+ virtual bool eof() const override;
+ virtual std::uint64_t size() const override { return m_length; }
- /* if we are just starting to compress, allocate a new buffer */
- if (file->zdata == nullptr && level > FCOMPRESS_NONE)
- {
- int zerr;
+ virtual std::uint32_t read(void *buffer, std::uint32_t length) override;
+ virtual void const *buffer() override { return m_data; }
- /* allocate memory */
- file->zdata = (zlib_data *)malloc(sizeof(*file->zdata));
- if (file->zdata == nullptr)
- return FILERR_OUT_OF_MEMORY;
- memset(file->zdata, 0, sizeof(*file->zdata));
+ virtual std::uint32_t write(void const *buffer, std::uint32_t length) override { return 0; }
+ virtual file_error truncate(std::uint64_t offset) override;
+ virtual file_error flush() override { clear_putback(); return FILERR_NONE; }
- /* initialize the stream and compressor */
- if ((file->openflags & OPEN_FLAG_WRITE) != 0)
- {
- file->zdata->stream.next_out = file->zdata->buffer;
- file->zdata->stream.avail_out = sizeof(file->zdata->buffer);
- zerr = deflateInit(&file->zdata->stream, level);
- }
- else
- zerr = inflateInit(&file->zdata->stream);
+protected:
+ core_in_memory_file(std::uint32_t openflags, std::uint64_t length)
+ : core_text_file(openflags)
+ , m_data_allocated(false)
+ , m_data(nullptr)
+ , m_offset(0)
+ , m_length(length)
+ {
+ }
- /* on error, return an error */
- if (zerr != Z_OK)
+ bool is_loaded() const { return nullptr != m_data; }
+ void *allocate()
+ {
+ if (m_data) return nullptr;
+ void *data = malloc(m_length);
+ if (data)
{
- free(file->zdata);
- file->zdata = nullptr;
- return FILERR_OUT_OF_MEMORY;
+ m_data_allocated = true;
+ m_data = data;
}
-
- /* flush buffers */
- file->bufferbytes = 0;
-
- /* set the initial offset */
- file->zdata->realoffset = file->offset;
- file->zdata->nextoffset = file->offset;
+ return data;
+ }
+ void purge()
+ {
+ if (m_data && m_data_allocated) free(const_cast<void *>(m_data));
+ m_data_allocated = false;
+ m_data = nullptr;
}
- return result;
-}
-
+ std::uint64_t offset() const { return m_offset; }
+ void add_offset(std::uint32_t increment) { m_offset += increment; m_length = (std::max)(m_length, m_offset); }
+ std::uint64_t length() const { return m_length; }
+ void set_length(std::uint64_t value) { m_length = value; m_offset = (std::min)(m_offset, m_length); }
+ static std::size_t safe_buffer_copy(
+ void const *source, std::size_t sourceoffs, std::size_t sourcelen,
+ void *dest, std::size_t destoffs, std::size_t destlen);
-/***************************************************************************
- FILE POSITIONING
-***************************************************************************/
+private:
+ bool m_data_allocated; // was the data allocated by us?
+ void const * m_data; // file data, if RAM-based
+ std::uint64_t m_offset; // current file offset
+ std::uint64_t m_length; // total file length
+};
-/*-------------------------------------------------
- core_fseek - seek within a file
--------------------------------------------------*/
-int core_fseek(core_file *file, INT64 offset, int whence)
+class core_osd_file : public core_in_memory_file
{
- int err = 0;
-
- /* error if compressing */
- if (file->zdata != nullptr)
- return 1;
-
- /* flush any buffered char */
- file->back_char_head = 0;
- file->back_char_tail = 0;
-
- /* switch off the relative location */
- switch (whence)
+public:
+ core_osd_file(std::uint32_t openmode, osd_file *file, std::uint64_t length)
+ : core_in_memory_file(openmode, length)
+ , m_file(file)
+ , m_zdata()
+ , m_bufferbase(0)
+ , m_bufferbytes(0)
{
- case SEEK_SET:
- file->offset = offset;
- break;
-
- case SEEK_CUR:
- file->offset += offset;
- break;
-
- case SEEK_END:
- file->offset = file->length + offset;
- break;
}
- return err;
-}
+ ~core_osd_file() override;
+ virtual file_error compress(int level) override;
-/*-------------------------------------------------
- core_ftell - return the current file position
--------------------------------------------------*/
+ virtual int seek(std::int64_t offset, int whence) override;
-UINT64 core_ftell(core_file *file)
-{
- /* return the current offset */
- return file->offset;
-}
+ virtual std::uint32_t read(void *buffer, std::uint32_t length) override;
+ virtual void const *buffer() override;
+ virtual std::uint32_t write(void const *buffer, std::uint32_t length) override;
+ virtual file_error truncate(std::uint64_t offset) override;
+ virtual file_error flush() override;
-/*-------------------------------------------------
- core_feof - return 1 if we're at the end
- of file
--------------------------------------------------*/
+protected:
-int core_feof(core_file *file)
-{
- /* check for buffered chars */
- if (file->back_char_head != file->back_char_tail)
- return 0;
+ bool is_buffered() const { return (offset() >= m_bufferbase) && (offset() < (m_bufferbase + m_bufferbytes)); }
- /* if the offset == length, we're at EOF */
- return (file->offset >= file->length);
-}
+private:
+ static constexpr std::size_t FILE_BUFFER_SIZE = 512;
+ file_error osd_or_zlib_read(void *buffer, std::uint64_t offset, std::uint32_t length, std::uint32_t &actual);
+ file_error osd_or_zlib_write(void const *buffer, std::uint64_t offset, std::uint32_t length, std::uint32_t &actual);
-/*-------------------------------------------------
- core_fsize - returns the size of a file
--------------------------------------------------*/
-
-UINT64 core_fsize(core_file *file)
-{
- return file->length;
-}
+ osd_file * m_file; // OSD file handle
+ zlib_data::ptr m_zdata; // compression data
+ std::uint64_t m_bufferbase; // base offset of internal buffer
+ std::uint32_t m_bufferbytes; // bytes currently loaded into buffer
+ std::uint8_t m_buffer[FILE_BUFFER_SIZE]; // buffer data
+};
/***************************************************************************
- FILE READ
+ INLINE FUNCTIONS
***************************************************************************/
/*-------------------------------------------------
- core_fread - read from a file
+ is_directory_separator - is a given character
+ a directory separator? The following logic
+ works for most platforms
-------------------------------------------------*/
-UINT32 core_fread(core_file *file, void *buffer, UINT32 length)
+inline int is_directory_separator(char c)
{
- UINT32 bytes_read = 0;
-
- /* flush any buffered char */
- file->back_char_head = 0;
- file->back_char_tail = 0;
-
- /* handle real files */
- if (file->file && file->data == nullptr)
- {
- /* if we're within the buffer, consume that first */
- if (file->offset >= file->bufferbase && file->offset < file->bufferbase + file->bufferbytes)
- bytes_read += safe_buffer_copy(file->buffer, file->offset - file->bufferbase, file->bufferbytes, buffer, bytes_read, length);
-
- /* if we've got a small amount left, read it into the buffer first */
- if (bytes_read < length)
- {
- if (length - bytes_read < sizeof(file->buffer) / 2)
- {
- /* read as much as makes sense into the buffer */
- file->bufferbase = file->offset + bytes_read;
- file->bufferbytes = 0;
- osd_or_zlib_read(file, file->buffer, file->bufferbase, sizeof(file->buffer), &file->bufferbytes);
-
- /* do a bounded copy from the buffer to the destination */
- bytes_read += safe_buffer_copy(file->buffer, 0, file->bufferbytes, buffer, bytes_read, length);
- }
-
- /* read the remainder directly from the file */
- else
- {
- UINT32 new_bytes_read = 0;
- osd_or_zlib_read(file, (UINT8 *)buffer + bytes_read, file->offset + bytes_read, length - bytes_read, &new_bytes_read);
- bytes_read += new_bytes_read;
- }
- }
- }
+ return (c == '\\' || c == '/' || c == ':');
+}
- /* handle RAM-based files */
- else
- bytes_read += safe_buffer_copy(file->data, (UINT32)file->offset, file->length, buffer, bytes_read, length);
- /* return the number of bytes read */
- file->offset += bytes_read;
- return bytes_read;
-}
+/***************************************************************************
+ core_text_file
+***************************************************************************/
/*-------------------------------------------------
- core_fgetc - read a character from a file
+ getc - read a character from a file
-------------------------------------------------*/
-int core_fgetc(core_file *file)
+int core_text_file::getc()
{
int result;
- /* refresh buffer, if necessary */
- if (file->back_char_head == file->back_char_tail)
+ // refresh buffer, if necessary
+ if (m_back_char_head == m_back_char_tail)
{
- utf16_char utf16_buffer[UTF16_CHAR_MAX];
- char utf8_buffer[UTF8_CHAR_MAX];
- char default_buffer[16];
- unicode_char uchar = (unicode_char) ~0;
- int readlen, charlen;
-
- /* do we need to check the byte order marks? */
- if (file->offset == 0)
+ // do we need to check the byte order marks?
+ if (tell() == 0)
{
- UINT8 bom[4];
+ std::uint8_t bom[4];
int pos = 0;
- if (core_fread(file, bom, 4) == 4)
+ if (read(bom, 4) == 4)
{
if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf)
{
- file->text_type = TFT_UTF8;
+ m_text_type = text_file_type::UTF8;
pos = 3;
}
else if (bom[0] == 0x00 && bom[1] == 0x00 && bom[2] == 0xfe && bom[3] == 0xff)
{
- file->text_type = TFT_UTF32BE;
+ m_text_type = text_file_type::UTF32BE;
pos = 4;
}
else if (bom[0] == 0xff && bom[1] == 0xfe && bom[2] == 0x00 && bom[3] == 0x00)
{
- file->text_type = TFT_UTF32LE;
+ m_text_type = text_file_type::UTF32LE;
pos = 4;
}
else if (bom[0] == 0xfe && bom[1] == 0xff)
{
- file->text_type = TFT_UTF16BE;
+ m_text_type = text_file_type::UTF16BE;
pos = 2;
}
else if (bom[0] == 0xff && bom[1] == 0xfe)
{
- file->text_type = TFT_UTF16LE;
+ m_text_type = text_file_type::UTF16LE;
pos = 2;
}
else
{
- file->text_type = TFT_OSD;
+ m_text_type = text_file_type::OSD;
pos = 0;
}
}
- core_fseek(file, pos, SEEK_SET);
+ seek(pos, SEEK_SET);
}
- /* fetch the next character */
- switch (file->text_type)
+ // fetch the next character
+ utf16_char utf16_buffer[UTF16_CHAR_MAX];
+ unicode_char uchar = unicode_char(~0);
+ switch (m_text_type)
{
- default:
- case TFT_OSD:
- readlen = core_fread(file, default_buffer, sizeof(default_buffer));
+ default:
+ case text_file_type::OSD:
+ {
+ char default_buffer[16];
+ auto const readlen = read(default_buffer, sizeof(default_buffer));
if (readlen > 0)
{
- charlen = osd_uchar_from_osdchar(&uchar, default_buffer, readlen / sizeof(default_buffer[0]));
- core_fseek(file, (INT64) (charlen * sizeof(default_buffer[0])) - readlen, SEEK_CUR);
+ auto const charlen = osd_uchar_from_osdchar(&uchar, default_buffer, readlen / sizeof(default_buffer[0]));
+ seek(std::int64_t(charlen * sizeof(default_buffer[0])) - readlen, SEEK_CUR);
}
- break;
+ }
+ break;
- case TFT_UTF8:
- readlen = core_fread(file, utf8_buffer, sizeof(utf8_buffer));
+ case text_file_type::UTF8:
+ {
+ char utf8_buffer[UTF8_CHAR_MAX];
+ auto const readlen = read(utf8_buffer, sizeof(utf8_buffer));
if (readlen > 0)
{
- charlen = uchar_from_utf8(&uchar, utf8_buffer, readlen / sizeof(utf8_buffer[0]));
- core_fseek(file, (INT64) (charlen * sizeof(utf8_buffer[0])) - readlen, SEEK_CUR);
+ auto const charlen = uchar_from_utf8(&uchar, utf8_buffer, readlen / sizeof(utf8_buffer[0]));
+ seek(std::int64_t(charlen * sizeof(utf8_buffer[0])) - readlen, SEEK_CUR);
}
- break;
+ }
+ break;
- case TFT_UTF16BE:
- readlen = core_fread(file, utf16_buffer, sizeof(utf16_buffer));
+ case text_file_type::UTF16BE:
+ {
+ auto const readlen = read(utf16_buffer, sizeof(utf16_buffer));
if (readlen > 0)
{
- charlen = uchar_from_utf16be(&uchar, utf16_buffer, readlen / sizeof(utf16_buffer[0]));
- core_fseek(file, (INT64) (charlen * sizeof(utf16_buffer[0])) - readlen, SEEK_CUR);
+ auto const charlen = uchar_from_utf16be(&uchar, utf16_buffer, readlen / sizeof(utf16_buffer[0]));
+ seek(std::int64_t(charlen * sizeof(utf16_buffer[0])) - readlen, SEEK_CUR);
}
- break;
+ }
+ break;
- case TFT_UTF16LE:
- readlen = core_fread(file, utf16_buffer, sizeof(utf16_buffer));
+ case text_file_type::UTF16LE:
+ {
+ auto const readlen = read(utf16_buffer, sizeof(utf16_buffer));
if (readlen > 0)
{
- charlen = uchar_from_utf16le(&uchar, utf16_buffer, readlen / sizeof(utf16_buffer[0]));
- core_fseek(file, (INT64) (charlen * sizeof(utf16_buffer[0])) - readlen, SEEK_CUR);
+ auto const charlen = uchar_from_utf16le(&uchar, utf16_buffer, readlen / sizeof(utf16_buffer[0]));
+ seek(std::int64_t(charlen * sizeof(utf16_buffer[0])) - readlen, SEEK_CUR);
}
- break;
+ }
+ break;
- case TFT_UTF32BE:
- if (core_fread(file, &uchar, sizeof(uchar)) == sizeof(uchar))
- uchar = BIG_ENDIANIZE_INT32(uchar);
- break;
+ case text_file_type::UTF32BE:
+ if (read(&uchar, sizeof(uchar)) == sizeof(uchar))
+ uchar = BIG_ENDIANIZE_INT32(uchar);
+ break;
- case TFT_UTF32LE:
- if (core_fread(file, &uchar, sizeof(uchar)) == sizeof(uchar))
- uchar = LITTLE_ENDIANIZE_INT32(uchar);
- break;
+ case text_file_type::UTF32LE:
+ if (read(&uchar, sizeof(uchar)) == sizeof(uchar))
+ uchar = LITTLE_ENDIANIZE_INT32(uchar);
+ break;
}
if (uchar != ~0)
{
- /* place the new character in the ring buffer */
- file->back_char_head = 0;
- file->back_char_tail = utf8_from_uchar(file->back_chars, ARRAY_LENGTH(file->back_chars), uchar);
-/* assert(file->back_char_tail != -1);*/
+ // place the new character in the ring buffer
+ m_back_char_head = 0;
+ m_back_char_tail = utf8_from_uchar(m_back_chars, ARRAY_LENGTH(m_back_chars), uchar);
+ //assert(file->back_char_tail != -1);
}
}
- /* now read from the ring buffer */
- if (file->back_char_head != file->back_char_tail)
+ // now read from the ring buffer
+ if (m_back_char_head == m_back_char_tail)
+ result = EOF;
+ else
{
- result = file->back_chars[file->back_char_head++];
- file->back_char_head %= ARRAY_LENGTH(file->back_chars);
+ result = m_back_chars[m_back_char_head++];
+ m_back_char_head %= ARRAY_LENGTH(m_back_chars);
}
- else
- result = EOF;
return result;
}
/*-------------------------------------------------
- core_ungetc - put back a character read from
- a file
+ ungetc - put back a character read from a
+ file
-------------------------------------------------*/
-int core_ungetc(int c, core_file *file)
+int core_text_file::ungetc(int c)
{
- file->back_chars[file->back_char_tail++] = (char) c;
- file->back_char_tail %= ARRAY_LENGTH(file->back_chars);
+ m_back_chars[m_back_char_tail++] = char(c);
+ m_back_char_tail %= ARRAY_LENGTH(m_back_chars);
return c;
}
/*-------------------------------------------------
- core_fgets - read a line from a text file
+ gets - read a line from a text file
-------------------------------------------------*/
-char *core_fgets(char *s, int n, core_file *file)
+char *core_text_file::gets(char *s, int n)
{
char *cur = s;
- /* loop while we have characters */
+ // loop while we have characters
while (n > 0)
{
- int c = core_fgetc(file);
+ int const c = getc();
if (c == EOF)
break;
-
- /* if there's a CR, look for an LF afterwards */
- if (c == 0x0d)
+ else if (c == 0x0d) // if there's a CR, look for an LF afterwards
{
- int c2 = core_fgetc(file);
+ int const c2 = getc();
if (c2 != 0x0a)
- core_ungetc(c2, file);
+ ungetc(c2);
*cur++ = 0x0d;
n--;
break;
}
-
- /* if there's an LF, reinterp as a CR for consistency */
- else if (c == 0x0a)
+ else if (c == 0x0a) // if there's an LF, reinterp as a CR for consistency
{
*cur++ = 0x0d;
n--;
break;
}
-
- /* otherwise, pop the character in and continue */
- *cur++ = c;
- n--;
+ else // otherwise, pop the character in and continue
+ {
+ *cur++ = c;
+ n--;
+ }
}
- /* if we put nothing in, return NULL */
+ // if we put nothing in, return NULL
if (cur == s)
return nullptr;
@@ -648,335 +555,414 @@ char *core_fgets(char *s, int n, core_file *file)
/*-------------------------------------------------
- core_fbuffer - return a pointer to the file
- buffer; if it doesn't yet exist, load the
- file into RAM first
+ puts - write a line to a text file
-------------------------------------------------*/
-const void *core_fbuffer(core_file *file)
+int core_text_file::puts(char const *s)
{
- file_error filerr;
- UINT32 read_length;
-
- /* if we already have data, just return it */
- if (file->data != nullptr || !file->length)
- return file->data;
+ char convbuf[1024];
+ char *pconvbuf = convbuf;
+ int count = 0;
- /* allocate some memory */
- file->data = (UINT8 *)malloc(file->length);
- if (file->data == nullptr)
- return nullptr;
- file->data_allocated = TRUE;
+ // is this the beginning of the file? if so, write a byte order mark
+ if (tell() == 0 && !no_bom())
+ {
+ *pconvbuf++ = char(0xef);
+ *pconvbuf++ = char(0xbb);
+ *pconvbuf++ = char(0xbf);
+ }
- /* read the file */
- filerr = osd_or_zlib_read(file, file->data, 0, file->length, &read_length);
- if (filerr != FILERR_NONE || read_length != file->length)
+ // convert '\n' to platform dependant line endings
+ while (*s != '\0')
{
- free(file->data);
- file->data = nullptr;
- return nullptr;
+ if (*s == '\n')
+ {
+ if (CRLF == 1) // CR only
+ *pconvbuf++ = 13;
+ else if (CRLF == 2) // LF only
+ *pconvbuf++ = 10;
+ else if (CRLF == 3) // CR+LF
+ {
+ *pconvbuf++ = 13;
+ *pconvbuf++ = 10;
+ }
+ }
+ else
+ *pconvbuf++ = *s;
+ s++;
+
+ // if we overflow, break into chunks
+ if (pconvbuf >= convbuf + ARRAY_LENGTH(convbuf) - 10)
+ {
+ count += write(convbuf, pconvbuf - convbuf);
+ pconvbuf = convbuf;
+ }
}
- /* close the file because we don't need it anymore */
- osd_close(file->file);
- file->file = nullptr;
- return file->data;
+ // final flush
+ if (pconvbuf != convbuf)
+ count += write(convbuf, pconvbuf - convbuf);
+
+ return count;
}
/*-------------------------------------------------
- core_fload - open a file with the specified
- filename, read it into memory, and return a
- pointer
+ vprintf - vfprintf to a text file
-------------------------------------------------*/
-file_error core_fload(const char *filename, void **data, UINT32 *length)
+int core_text_file::vprintf(util::format_argument_pack<std::ostream> const &args)
{
- core_file *file = nullptr;
- file_error err;
- UINT64 size;
+ m_printf_buffer.reserve(1024);
+ m_printf_buffer.seekp(0, ovectorstream::beg);
+ util::stream_format<std::ostream, std::ostream>(m_printf_buffer, args);
+ m_printf_buffer.put('\0');
+ return puts(&m_printf_buffer.vec()[0]);
+}
- /* attempt to open the file */
- err = core_fopen(filename, OPEN_FLAG_READ, &file);
- if (err != FILERR_NONE)
- return err;
- /* get the size */
- size = core_fsize(file);
- if ((UINT32)size != size)
- {
- core_fclose(file);
- return FILERR_OUT_OF_MEMORY;
- }
- /* allocate memory */
- *data = osd_malloc(size);
- if (length != nullptr)
- *length = (UINT32)size;
+/***************************************************************************
+ core_in_memory_file
+***************************************************************************/
+
+/*-------------------------------------------------
+ seek - seek within a file
+-------------------------------------------------*/
+
+int core_in_memory_file::seek(std::int64_t offset, int whence)
+{
+ // flush any buffered char
+ clear_putback();
- /* read the data */
- if (core_fread(file, *data, size) != size)
+ // switch off the relative location
+ switch (whence)
{
- core_fclose(file);
- free(*data);
- return FILERR_FAILURE;
+ case SEEK_SET:
+ m_offset = offset;
+ break;
+
+ case SEEK_CUR:
+ m_offset += offset;
+ break;
+
+ case SEEK_END:
+ m_offset = m_length + offset;
+ break;
}
+ return 0;
+}
- /* close the file and return data */
- core_fclose(file);
- return FILERR_NONE;
+
+/*-------------------------------------------------
+ eof - return 1 if we're at the end of file
+-------------------------------------------------*/
+
+bool core_in_memory_file::eof() const
+{
+ // check for buffered chars
+ if (has_putback())
+ return 0;
+
+ // if the offset == length, we're at EOF
+ return (m_offset >= m_length);
}
-file_error core_fload(const char *filename, dynamic_buffer &data)
+
+/*-------------------------------------------------
+ read - read from a file
+-------------------------------------------------*/
+
+std::uint32_t core_in_memory_file::read(void *buffer, std::uint32_t length)
{
- core_file *file = nullptr;
- file_error err;
- UINT64 size;
+ clear_putback();
- /* attempt to open the file */
- err = core_fopen(filename, OPEN_FLAG_READ, &file);
- if (err != FILERR_NONE)
- return err;
+ // handle RAM-based files
+ auto const bytes_read = safe_buffer_copy(m_data, std::size_t(m_offset), std::size_t(m_length), buffer, 0, length);
+ m_offset += bytes_read;
+ return bytes_read;
+}
- /* get the size */
- size = core_fsize(file);
- if ((UINT32)size != size)
- {
- core_fclose(file);
- return FILERR_OUT_OF_MEMORY;
- }
- /* allocate memory */
- data.resize(size);
+/*-------------------------------------------------
+ truncate - truncate a file
+-------------------------------------------------*/
- /* read the data */
- if (core_fread(file, &data[0], size) != size)
- {
- core_fclose(file);
- data.clear();
+file_error core_in_memory_file::truncate(std::uint64_t offset)
+{
+ if (m_length < offset)
return FILERR_FAILURE;
- }
- /* close the file and return data */
- core_fclose(file);
+ // adjust to new length and offset
+ set_length(offset);
return FILERR_NONE;
}
-
-/***************************************************************************
- FILE WRITE
-***************************************************************************/
-
/*-------------------------------------------------
- core_fwrite - write to a file
+ safe_buffer_copy - copy safely from one
+ bounded buffer to another
-------------------------------------------------*/
-UINT32 core_fwrite(core_file *file, const void *buffer, UINT32 length)
+std::size_t core_in_memory_file::safe_buffer_copy(
+ void const *source, std::size_t sourceoffs, std::size_t sourcelen,
+ void *dest, std::size_t destoffs, std::size_t destlen)
{
- UINT32 bytes_written = 0;
+ auto const sourceavail = sourcelen - sourceoffs;
+ auto const destavail = destlen - destoffs;
+ auto const bytes_to_copy = (std::min)(sourceavail, destavail);
+ if (bytes_to_copy > 0)
+ {
+ std::memcpy(
+ reinterpret_cast<std::uint8_t *>(dest) + destoffs,
+ reinterpret_cast<std::uint8_t const *>(source) + sourceoffs,
+ bytes_to_copy);
+ }
+ return bytes_to_copy;
+}
- /* can't write to RAM-based stuff */
- if (file->data != nullptr)
- return 0;
- /* flush any buffered char */
- file->back_char_head = 0;
- file->back_char_tail = 0;
- /* invalidate any buffered data */
- file->bufferbytes = 0;
+/***************************************************************************
+ core_osd_file
+***************************************************************************/
- /* do the write */
- osd_or_zlib_write(file, buffer, file->offset, length, &bytes_written);
+/*-------------------------------------------------
+ closes a file
+-------------------------------------------------*/
- /* return the number of bytes read */
- file->offset += bytes_written;
- file->length = MAX(file->length, file->offset);
- return bytes_written;
+core_osd_file::~core_osd_file()
+{
+ // close files and free memory
+ if (m_zdata)
+ compress(FCOMPRESS_NONE);
+ if (m_file)
+ osd_close(m_file);
}
/*-------------------------------------------------
- core_fputs - write a line to a text file
+ compress - enable/disable streaming file
+ compression via zlib; level is 0 to disable
+ compression, or up to 9 for max compression
-------------------------------------------------*/
-int core_fputs(core_file *f, const char *s)
+file_error core_osd_file::compress(int level)
{
- char convbuf[1024];
- char *pconvbuf = convbuf;
- int count = 0;
+ file_error result = FILERR_NONE;
- /* is this the beginning of the file? if so, write a byte order mark */
- if (f->offset == 0 && !(f->openflags & OPEN_FLAG_NO_BOM))
- {
- *pconvbuf++ = (char)0xef;
- *pconvbuf++ = (char)0xbb;
- *pconvbuf++ = (char)0xbf;
- }
+ // can only do this for read-only and write-only cases
+ if (read_access() && write_access())
+ return FILERR_INVALID_ACCESS;
- /* convert '\n' to platform dependant line endings */
- while (*s != 0)
+ // if we have been compressing, flush and free the data
+ if (m_zdata && (level == FCOMPRESS_NONE))
{
- if (*s == '\n')
+ int zerr = Z_OK;
+
+ // flush any remaining data if we are writing
+ while (write_access() && (zerr != Z_STREAM_END))
{
- if (CRLF == 1) /* CR only */
- *pconvbuf++ = 13;
- else if (CRLF == 2) /* LF only */
- *pconvbuf++ = 10;
- else if (CRLF == 3) /* CR+LF */
+ // deflate some more
+ zerr = m_zdata->finalise();
+ if ((zerr != Z_STREAM_END) && (zerr != Z_OK))
{
- *pconvbuf++ = 13;
- *pconvbuf++ = 10;
+ result = FILERR_INVALID_DATA;
+ break;
}
- }
- else
- *pconvbuf++ = *s;
- s++;
- /* if we overflow, break into chunks */
- if (pconvbuf >= convbuf + ARRAY_LENGTH(convbuf) - 10)
- {
- count += core_fwrite(f, convbuf, pconvbuf - convbuf);
- pconvbuf = convbuf;
+ // write the data
+ if (m_zdata->has_output())
+ {
+ std::uint32_t actualdata;
+ auto const filerr = osd_write(m_file, m_zdata->buffer_data(), m_zdata->realoffset(), m_zdata->output_size(), &actualdata);
+ if (filerr != FILERR_NONE)
+ break;
+ m_zdata->add_realoffset(actualdata);
+ m_zdata->reset_output();
+ }
}
+
+ // free memory
+ m_zdata.reset();
}
- /* final flush */
- if (pconvbuf != convbuf)
- count += core_fwrite(f, convbuf, pconvbuf - convbuf);
+ // if we are just starting to compress, allocate a new buffer
+ if (!m_zdata && (level > FCOMPRESS_NONE))
+ {
+ int zerr;
- return count;
-}
+ // initialize the stream and compressor
+ if (write_access())
+ zerr = zlib_data::start_compression(level, offset(), m_zdata);
+ else
+ zerr = zlib_data::start_decompression(offset(), m_zdata);
+ // on error, return an error
+ if (zerr != Z_OK)
+ return FILERR_OUT_OF_MEMORY;
-/*-------------------------------------------------
- core_vfprintf - vfprintf to a text file
--------------------------------------------------*/
+ // flush buffers
+ m_bufferbytes = 0;
+ }
-int core_vfprintf(core_file *f, const char *fmt, va_list va)
-{
- char buf[1024];
- vsnprintf(buf, sizeof(buf), fmt, va);
- return core_fputs(f, buf);
+ return result;
}
/*-------------------------------------------------
- core_fprintf - vfprintf to a text file
+ seek - seek within a file
-------------------------------------------------*/
-int CLIB_DECL core_fprintf(core_file *f, const char *fmt, ...)
+int core_osd_file::seek(std::int64_t offset, int whence)
{
- int rc;
- va_list va;
- va_start(va, fmt);
- rc = core_vfprintf(f, fmt, va);
- va_end(va);
- return rc;
+ // error if compressing
+ if (m_zdata)
+ return 1;
+ else
+ return core_in_memory_file::seek(offset, whence);
}
/*-------------------------------------------------
- core_truncate - truncate a file
+ read - read from a file
-------------------------------------------------*/
-file_error core_truncate(core_file *f, UINT64 offset)
+std::uint32_t core_osd_file::read(void *buffer, std::uint32_t length)
{
- file_error err;
+ if (!m_file || is_loaded())
+ return core_in_memory_file::read(buffer, length);
- /* truncate file */
- err = osd_truncate(f->file, offset);
- if (err != FILERR_NONE)
- return err;
+ // flush any buffered char
+ clear_putback();
- /* and adjust to new length and offset */
- f->length = offset;
- f->offset = MIN(f->offset, f->length);
+ std::uint32_t bytes_read = 0;
- return FILERR_NONE;
+ // if we're within the buffer, consume that first
+ if (is_buffered())
+ bytes_read += safe_buffer_copy(m_buffer, offset() - m_bufferbase, m_bufferbytes, buffer, bytes_read, length);
+
+ // if we've got a small amount left, read it into the buffer first
+ if (bytes_read < length)
+ {
+ if ((length - bytes_read) < (sizeof(m_buffer) / 2))
+ {
+ // read as much as makes sense into the buffer
+ m_bufferbase = offset() + bytes_read;
+ m_bufferbytes = 0;
+ osd_or_zlib_read(m_buffer, m_bufferbase, sizeof(m_buffer), m_bufferbytes);
+
+ // do a bounded copy from the buffer to the destination
+ bytes_read += safe_buffer_copy(m_buffer, 0, m_bufferbytes, buffer, bytes_read, length);
+ }
+ else
+ {
+ // read the remainder directly from the file
+ std::uint32_t new_bytes_read = 0;
+ osd_or_zlib_read(reinterpret_cast<std::uint8_t *>(buffer) + bytes_read, offset() + bytes_read, length - bytes_read, new_bytes_read);
+ bytes_read += new_bytes_read;
+ }
+ }
+
+ // return the number of bytes read
+ add_offset(bytes_read);
+ return bytes_read;
}
/*-------------------------------------------------
- core_truncate - flush write buffer
+ buffer - return a pointer to the file buffer;
+ if it doesn't yet exist, load the file into
+ RAM first
-------------------------------------------------*/
-file_error core_fflush(core_file *f)
+void const *core_osd_file::buffer()
{
- return osd_fflush(f->file);
+ // if we already have data, just return it
+ if (!is_loaded() && length())
+ {
+ // allocate some memory
+ void *buf = allocate();
+ if (!buf) return nullptr;
+
+ // read the file
+ std::uint32_t read_length = 0;
+ auto const filerr = osd_or_zlib_read(buf, 0, length(), read_length);
+ if ((filerr != FILERR_NONE) || (read_length != length()))
+ purge();
+ else
+ {
+ // close the file because we don't need it anymore
+ osd_close(m_file);
+ m_file = nullptr;
+ }
+ }
+ return core_in_memory_file::buffer();
}
-
-/***************************************************************************
- FILENAME UTILITIES
-***************************************************************************/
-
/*-------------------------------------------------
- core_filename_extract_base - extract the base
- name from a filename; note that this makes
- assumptions about path separators
+ write - write to a file
-------------------------------------------------*/
-std::string core_filename_extract_base(const char *name, bool strip_extension)
+std::uint32_t core_osd_file::write(void const *buffer, std::uint32_t length)
{
- /* find the start of the name */
- const char *start = name + strlen(name);
- while (start > name && !is_directory_separator(start[-1]))
- start--;
+ // can't write to RAM-based stuff
+ if (is_loaded())
+ return core_in_memory_file::write(buffer, length);
- /* copy the rest into an astring */
- std::string result(start);
+ // flush any buffered char
+ clear_putback();
- /* chop the extension if present */
- if (strip_extension)
- result = result.substr(0, result.find_last_of('.'));
- return result;
+ // invalidate any buffered data
+ m_bufferbytes = 0;
+
+ // do the write
+ std::uint32_t bytes_written = 0;
+ osd_or_zlib_write(buffer, offset(), length, bytes_written);
+
+ // return the number of bytes written
+ add_offset(bytes_written);
+ return bytes_written;
}
/*-------------------------------------------------
- core_filename_ends_with - does the given
- filename end with the specified extension?
+ truncate - truncate a file
-------------------------------------------------*/
-int core_filename_ends_with(const char *filename, const char *extension)
+file_error core_osd_file::truncate(std::uint64_t offset)
{
- int namelen = strlen(filename);
- int extlen = strlen(extension);
- int matches = TRUE;
+ if (is_loaded())
+ return core_in_memory_file::truncate(offset);
- /* work backwards checking for a match */
- while (extlen > 0)
- if (tolower((UINT8)filename[--namelen]) != tolower((UINT8)extension[--extlen]))
- {
- matches = FALSE;
- break;
- }
+ // truncate file
+ auto const err = osd_truncate(m_file, offset);
+ if (err != FILERR_NONE)
+ return err;
- return matches;
+ // and adjust to new length and offset
+ set_length(offset);
+ return FILERR_NONE;
}
-
-/***************************************************************************
- MISC HELPERS
-***************************************************************************/
-
/*-------------------------------------------------
- safe_buffer_copy - copy safely from one
- bounded buffer to another
+ flush - flush file buffers
-------------------------------------------------*/
-static UINT32 safe_buffer_copy(const void *source, UINT32 sourceoffs, UINT32 sourcelen, void *dest, UINT32 destoffs, UINT32 destlen)
+file_error core_osd_file::flush()
{
- UINT32 sourceavail = sourcelen - sourceoffs;
- UINT32 destavail = destlen - destoffs;
- UINT32 bytes_to_copy = MIN(sourceavail, destavail);
- if (bytes_to_copy > 0)
- memcpy((UINT8 *)dest + destoffs, (const UINT8 *)source + sourceoffs, bytes_to_copy);
- return bytes_to_copy;
+ if (is_loaded())
+ return core_in_memory_file::flush();
+
+ // flush any buffered char
+ clear_putback();
+
+ // invalidate any buffered data
+ m_bufferbytes = 0;
+
+ return osd_fflush(m_file);
}
@@ -985,51 +971,48 @@ static UINT32 safe_buffer_copy(const void *source, UINT32 sourceoffs, UINT32 sou
handles zlib-compressed data
-------------------------------------------------*/
-static file_error osd_or_zlib_read(core_file *file, void *buffer, UINT64 offset, UINT32 length, UINT32 *actual)
+file_error core_osd_file::osd_or_zlib_read(void *buffer, std::uint64_t offset, std::uint32_t length, std::uint32_t &actual)
{
- /* if no compression, just pass through */
- if (file->zdata == nullptr)
- return osd_read(file->file, buffer, offset, length, actual);
+ // if no compression, just pass through
+ if (!m_zdata)
+ return osd_read(m_file, buffer, offset, length, &actual);
- /* if the offset doesn't match the next offset, fail */
- if (offset != file->zdata->nextoffset)
+ // if the offset doesn't match the next offset, fail
+ if (!m_zdata->is_nextoffset(offset))
return FILERR_INVALID_ACCESS;
- /* set up the destination */
- file->zdata->stream.next_out = (Bytef *)buffer;
- file->zdata->stream.avail_out = length;
- while (file->zdata->stream.avail_out != 0)
+ // set up the destination
+ file_error filerr = FILERR_NONE;
+ m_zdata->set_output(buffer, length);
+ while (!m_zdata->output_full())
{
- file_error filerr;
- UINT32 actualdata;
- int zerr = Z_OK;
-
- /* if we didn't make progress, report an error or the end */
- if (file->zdata->stream.avail_in != 0)
- zerr = inflate(&file->zdata->stream, Z_SYNC_FLUSH);
- if (zerr != Z_OK)
+ // if we didn't make progress, report an error or the end
+ if (m_zdata->has_input())
{
- *actual = length - file->zdata->stream.avail_out;
- file->zdata->nextoffset += *actual;
- return (zerr == Z_STREAM_END) ? FILERR_NONE : FILERR_INVALID_DATA;
+ auto const zerr = m_zdata->decompress();
+ if (Z_OK != zerr)
+ {
+ if (Z_STREAM_END != zerr) filerr = FILERR_INVALID_DATA;
+ break;
+ }
}
- /* fetch more data if needed */
- if (file->zdata->stream.avail_in == 0)
+ // fetch more data if needed
+ if (!m_zdata->has_input())
{
- filerr = osd_read(file->file, file->zdata->buffer, file->zdata->realoffset, sizeof(file->zdata->buffer), &actualdata);
- if (filerr != FILERR_NONE)
- return filerr;
- file->zdata->realoffset += actualdata;
- file->zdata->stream.next_in = file->zdata->buffer;
- file->zdata->stream.avail_in = sizeof(file->zdata->buffer);
+ std::uint32_t actualdata = 0;
+ filerr = osd_read(m_file, m_zdata->buffer_data(), m_zdata->realoffset(), m_zdata->buffer_size(), &actualdata);
+ if (filerr != FILERR_NONE) break;
+ m_zdata->add_realoffset(actualdata);
+ m_zdata->reset_input(actualdata);
+ if (!m_zdata->has_input()) break;
}
}
- /* we read everything */
- *actual = length;
- file->zdata->nextoffset += *actual;
- return FILERR_NONE;
+ // adjust everything
+ actual = length - m_zdata->output_space();
+ m_zdata->add_nextoffset(actual);
+ return filerr;
}
@@ -1039,61 +1022,294 @@ static file_error osd_or_zlib_read(core_file *file, void *buffer, UINT64 offset,
-------------------------------------------------*/
/**
- * @fn static file_error osd_or_zlib_write(core_file *file, const void *buffer, UINT64 offset, UINT32 length, UINT32 *actual)
+ * @fn file_error osd_or_zlib_write(void const *buffer, std::uint64_t offset, std::uint32_t length, std::uint32_t actual)
*
* @brief OSD or zlib write.
*
- * @param [in,out] file If non-null, the file.
* @param buffer The buffer.
* @param offset The offset.
* @param length The length.
- * @param [in,out] actual If non-null, the actual.
+ * @param [in,out] actual The actual.
*
* @return A file_error.
*/
-static file_error osd_or_zlib_write(core_file *file, const void *buffer, UINT64 offset, UINT32 length, UINT32 *actual)
+file_error core_osd_file::osd_or_zlib_write(void const *buffer, std::uint64_t offset, std::uint32_t length, std::uint32_t &actual)
{
- /* if no compression, just pass through */
- if (file->zdata == nullptr)
- return osd_write(file->file, buffer, offset, length, actual);
+ // if no compression, just pass through
+ if (!m_zdata)
+ return osd_write(m_file, buffer, offset, length, &actual);
- /* if the offset doesn't match the next offset, fail */
- if (offset != file->zdata->nextoffset)
+ // if the offset doesn't match the next offset, fail
+ if (!m_zdata->is_nextoffset(offset))
return FILERR_INVALID_ACCESS;
- /* set up the source */
- file->zdata->stream.next_in = (Bytef *)buffer;
- file->zdata->stream.avail_in = length;
- while (file->zdata->stream.avail_in != 0)
+ // set up the source
+ m_zdata->set_input(buffer, length);
+ while (m_zdata->has_input())
{
- file_error filerr;
- UINT32 actualdata;
- int zerr;
-
- /* if we didn't make progress, report an error or the end */
- zerr = deflate(&file->zdata->stream, Z_NO_FLUSH);
+ // if we didn't make progress, report an error or the end
+ auto const zerr = m_zdata->compress();
if (zerr != Z_OK)
{
- *actual = length - file->zdata->stream.avail_in;
- file->zdata->nextoffset += *actual;
+ actual = length - m_zdata->input_size();
+ m_zdata->add_nextoffset(actual);
return FILERR_INVALID_DATA;
}
- /* write more data if we are full up */
- if (file->zdata->stream.avail_out == 0)
+ // write more data if we are full up
+ if (m_zdata->output_full())
{
- filerr = osd_write(file->file, file->zdata->buffer, file->zdata->realoffset, sizeof(file->zdata->buffer), &actualdata);
+ std::uint32_t actualdata = 0;
+ auto const filerr = osd_write(m_file, m_zdata->buffer_data(), m_zdata->realoffset(), m_zdata->output_size(), &actualdata);
if (filerr != FILERR_NONE)
return filerr;
- file->zdata->realoffset += actualdata;
- file->zdata->stream.next_out = file->zdata->buffer;
- file->zdata->stream.avail_out = sizeof(file->zdata->buffer);
+ m_zdata->add_realoffset(actualdata);
+ m_zdata->reset_output();
}
}
- /* we read everything */
- *actual = length;
- file->zdata->nextoffset += *actual;
+ // we wrote everything
+ actual = length;
+ m_zdata->add_nextoffset(actual);
return FILERR_NONE;
}
+
+} // anonymous namespace
+
+
+
+/***************************************************************************
+ core_file
+***************************************************************************/
+
+/*-------------------------------------------------
+ open - open a file for access and
+ return an error code
+-------------------------------------------------*/
+
+file_error core_file::open(char const *filename, std::uint32_t openflags, ptr &file)
+{
+ // attempt to open the file
+ osd_file *f = nullptr;
+ std::uint64_t length = 0;
+ auto const filerr = osd_open(filename, openflags, &f, &length);
+ if (filerr != FILERR_NONE)
+ return filerr;
+
+ try
+ {
+ file = std::make_unique<core_osd_file>(openflags, f, length);
+ return FILERR_NONE;
+ }
+ catch (...)
+ {
+ osd_close(f);
+ return FILERR_OUT_OF_MEMORY;
+ }
+}
+
+
+/*-------------------------------------------------
+ open_ram - open a RAM-based buffer for file-
+ like access and return an error code
+-------------------------------------------------*/
+
+file_error core_file::open_ram(void const *data, std::size_t length, std::uint32_t openflags, ptr &file)
+{
+ // can only do this for read access
+ if ((openflags & OPEN_FLAG_WRITE) || (openflags & OPEN_FLAG_CREATE))
+ return FILERR_INVALID_ACCESS;
+
+ try
+ {
+ file.reset(new core_in_memory_file(openflags, data, length, false));
+ return FILERR_NONE;
+ }
+ catch (...)
+ {
+ return FILERR_OUT_OF_MEMORY;
+ }
+}
+
+
+/*-------------------------------------------------
+ open_ram_copy - open a copy of a RAM-based
+ buffer for file-like access and return an
+ error code
+-------------------------------------------------*/
+
+file_error core_file::open_ram_copy(void const *data, std::size_t length, std::uint32_t openflags, ptr &file)
+{
+ // can only do this for read access
+ if ((openflags & OPEN_FLAG_WRITE) || (openflags & OPEN_FLAG_CREATE))
+ return FILERR_INVALID_ACCESS;
+
+ try
+ {
+ ptr result(new core_in_memory_file(openflags, data, length, true));
+ if (!result->buffer())
+ return FILERR_OUT_OF_MEMORY;
+
+ file = std::move(result);
+ return FILERR_NONE;
+ }
+ catch (...)
+ {
+ return FILERR_OUT_OF_MEMORY;
+ }
+}
+
+
+/*-------------------------------------------------
+ open_proxy - open a proxy to an existing file
+ object and return an error code
+-------------------------------------------------*/
+
+file_error core_file::open_proxy(core_file &file, ptr &proxy)
+{
+ try
+ {
+ proxy = std::make_unique<core_proxy_file>(file);
+ return FILERR_NONE;
+ }
+ catch (...)
+ {
+ return FILERR_OUT_OF_MEMORY;
+ }
+}
+
+
+/*-------------------------------------------------
+ closes a file
+-------------------------------------------------*/
+
+core_file::~core_file()
+{
+}
+
+
+/*-------------------------------------------------
+ load - open a file with the specified
+ filename, read it into memory, and return a
+ pointer
+-------------------------------------------------*/
+
+file_error core_file::load(char const *filename, void **data, std::uint32_t &length)
+{
+ ptr file;
+
+ // attempt to open the file
+ auto const err = open(filename, OPEN_FLAG_READ, file);
+ if (err != FILERR_NONE)
+ return err;
+
+ // get the size
+ auto const size = file->size();
+ if (std::uint32_t(size) != size)
+ return FILERR_OUT_OF_MEMORY;
+
+ // allocate memory
+ *data = osd_malloc(size);
+ length = std::uint32_t(size);
+
+ // read the data
+ if (file->read(*data, size) != size)
+ {
+ free(*data);
+ return FILERR_FAILURE;
+ }
+
+ // close the file and return data
+ return FILERR_NONE;
+}
+
+file_error core_file::load(char const *filename, dynamic_buffer &data)
+{
+ ptr file;
+
+ // attempt to open the file
+ auto const err = open(filename, OPEN_FLAG_READ, file);
+ if (err != FILERR_NONE)
+ return err;
+
+ // get the size
+ auto const size = file->size();
+ if (std::uint32_t(size) != size)
+ return FILERR_OUT_OF_MEMORY;
+
+ // allocate memory
+ data.resize(size);
+
+ // read the data
+ if (file->read(&data[0], size) != size)
+ {
+ data.clear();
+ return FILERR_FAILURE;
+ }
+
+ // close the file and return data
+ return FILERR_NONE;
+}
+
+
+/*-------------------------------------------------
+ protected constructor
+-------------------------------------------------*/
+
+core_file::core_file()
+{
+}
+
+} // namespace util
+
+
+
+/***************************************************************************
+ FILENAME UTILITIES
+***************************************************************************/
+
+/*-------------------------------------------------
+ core_filename_extract_base - extract the base
+ name from a filename; note that this makes
+ assumptions about path separators
+-------------------------------------------------*/
+
+std::string core_filename_extract_base(const char *name, bool strip_extension)
+{
+ /* find the start of the name */
+ const char *start = name + strlen(name);
+ while (start > name && !util::is_directory_separator(start[-1]))
+ start--;
+
+ /* copy the rest into an astring */
+ std::string result(start);
+
+ /* chop the extension if present */
+ if (strip_extension)
+ result = result.substr(0, result.find_last_of('.'));
+ return result;
+}
+
+
+/*-------------------------------------------------
+ core_filename_ends_with - does the given
+ filename end with the specified extension?
+-------------------------------------------------*/
+
+int core_filename_ends_with(const char *filename, const char *extension)
+{
+ int namelen = strlen(filename);
+ int extlen = strlen(extension);
+ int matches = TRUE;
+
+ /* work backwards checking for a match */
+ while (extlen > 0)
+ if (tolower((UINT8)filename[--namelen]) != tolower((UINT8)extension[--extlen]))
+ {
+ matches = FALSE;
+ break;
+ }
+
+ return matches;
+}
diff --git a/src/lib/util/corefile.h b/src/lib/util/corefile.h
index 36060631f35..7ec76af7cb5 100644
--- a/src/lib/util/corefile.h
+++ b/src/lib/util/corefile.h
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
+// copyright-holders:Aaron Giles, Vas Crabb
/***************************************************************************
corefile.h
@@ -13,12 +13,16 @@
#ifndef __COREFILE_H__
#define __COREFILE_H__
-#include <stdarg.h>
#include "corestr.h"
-#include <string>
#include "coretmpl.h"
+#include "strformat.h"
+
+#include <cstdint>
+#include <memory>
+#include <string>
+namespace util {
/***************************************************************************
ADDITIONAL OPEN FLAGS
@@ -32,98 +36,107 @@
#define FCOMPRESS_MAX 9 /* maximum compression */
-
/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
-struct core_file;
-
-
+class core_file
+{
+public:
+ typedef std::unique_ptr<core_file> ptr;
-/***************************************************************************
- FUNCTION PROTOTYPES
-***************************************************************************/
+ // ----- file open/close -----
-/* ----- file open/close ----- */
+ // open a file with the specified filename
+ static file_error open(const char *filename, std::uint32_t openflags, ptr &file);
-/* open a file with the specified filename */
-file_error core_fopen(const char *filename, UINT32 openflags, core_file **file);
+ // open a RAM-based "file" using the given data and length (read-only)
+ static file_error open_ram(const void *data, std::size_t length, std::uint32_t openflags, ptr &file);
-/* open a RAM-based "file" using the given data and length (read-only) */
-file_error core_fopen_ram(const void *data, size_t length, UINT32 openflags, core_file **file);
+ // open a RAM-based "file" using the given data and length (read-only), copying the data
+ static file_error open_ram_copy(const void *data, std::size_t length, std::uint32_t openflags, ptr &file);
-/* open a RAM-based "file" using the given data and length (read-only), copying the data */
-file_error core_fopen_ram_copy(const void *data, size_t length, UINT32 openflags, core_file **file);
+ // open a proxy "file" that forwards requests to another file object
+ static file_error open_proxy(core_file &file, ptr &proxy);
-/* close an open file */
-void core_fclose(core_file *file);
+ // close an open file
+ virtual ~core_file();
-/* enable/disable streaming file compression via zlib; level is 0 to disable compression, or up to 9 for max compression */
-file_error core_fcompress(core_file *file, int level);
+ // enable/disable streaming file compression via zlib; level is 0 to disable compression, or up to 9 for max compression
+ virtual file_error compress(int level) = 0;
+ // ----- file positioning -----
-/* ----- file positioning ----- */
+ // adjust the file pointer within the file
+ virtual int seek(std::int64_t offset, int whence) = 0;
-/* adjust the file pointer within the file */
-int core_fseek(core_file *file, INT64 offset, int whence);
+ // return the current file pointer
+ virtual std::uint64_t tell() const = 0;
-/* return the current file pointer */
-UINT64 core_ftell(core_file *file);
+ // return true if we are at the EOF
+ virtual bool eof() const = 0;
-/* return true if we are at the EOF */
-int core_feof(core_file *file);
+ // return the total size of the file
+ virtual std::uint64_t size() const = 0;
-/* return the total size of the file */
-UINT64 core_fsize(core_file *file);
+ // ----- file read -----
+ // standard binary read from a file
+ virtual std::uint32_t read(void *buffer, std::uint32_t length) = 0;
-/* ----- file read ----- */
+ // read one character from the file
+ virtual int getc() = 0;
-/* standard binary read from a file */
-UINT32 core_fread(core_file *file, void *buffer, UINT32 length);
+ // put back one character from the file
+ virtual int ungetc(int c) = 0;
-/* read one character from the file */
-int core_fgetc(core_file *file);
+ // read a full line of text from the file
+ virtual char *gets(char *s, int n) = 0;
-/* put back one character from the file */
-int core_ungetc(int c, core_file *file);
+ // get a pointer to a buffer that holds the full file data in RAM
+ // this function may cause the full file data to be read
+ virtual const void *buffer() = 0;
-/* read a full line of text from the file */
-char *core_fgets(char *s, int n, core_file *file);
+ // open a file with the specified filename, read it into memory, and return a pointer
+ static file_error load(const char *filename, void **data, std::uint32_t &length);
+ static file_error load(const char *filename, dynamic_buffer &data);
-/* get a pointer to a buffer that holds the full file data in RAM */
-/* this function may cause the full file data to be read */
-const void *core_fbuffer(core_file *file);
-/* open a file with the specified filename, read it into memory, and return a pointer */
-file_error core_fload(const char *filename, void **data, UINT32 *length);
-file_error core_fload(const char *filename, dynamic_buffer &data);
+ // ----- file write -----
+ // standard binary write to a file
+ virtual std::uint32_t write(const void *buffer, std::uint32_t length) = 0;
+ // write a line of text to the file
+ virtual int puts(const char *s) = 0;
-/* ----- file write ----- */
+ // printf-style text write to a file
+ virtual int vprintf(util::format_argument_pack<std::ostream> const &args) = 0;
+ template <typename Format, typename... Params> int printf(Format &&fmt, Params &&...args)
+ {
+ return vprintf(util::make_format_argument_pack(std::forward<Format>(fmt), std::forward<Params>(args)...));
+ }
-/* standard binary write to a file */
-UINT32 core_fwrite(core_file *file, const void *buffer, UINT32 length);
+ // file truncation
+ virtual file_error truncate(std::uint64_t offset) = 0;
-/* write a line of text to the file */
-int core_fputs(core_file *f, const char *s);
+ // flush file buffers
+ virtual file_error flush() = 0;
-/* printf-style text write to a file */
-int core_vfprintf(core_file *f, const char *fmt, va_list va);
-int CLIB_DECL core_fprintf(core_file *f, const char *fmt, ...) ATTR_PRINTF(2,3);
-/* file truncation */
-file_error core_truncate(core_file *f, UINT64 offset);
+protected:
+ core_file();
+};
-/* flush file buffers */
-file_error core_fflush(core_file *f);
+} // namespace util
+/***************************************************************************
+ FUNCTION PROTOTYPES
+***************************************************************************/
/* ----- filename utilities ----- */
diff --git a/src/lib/util/flac.cpp b/src/lib/util/flac.cpp
index f70ae709978..c66cc281931 100644
--- a/src/lib/util/flac.cpp
+++ b/src/lib/util/flac.cpp
@@ -35,7 +35,7 @@ flac_encoder::flac_encoder(void *buffer, UINT32 buflength)
}
-flac_encoder::flac_encoder(core_file &file)
+flac_encoder::flac_encoder(util::core_file &file)
{
init_common();
reset(file);
@@ -100,7 +100,7 @@ bool flac_encoder::reset(void *buffer, UINT32 buflength)
// reset - reset state with new file parameters
//-------------------------------------------------
-bool flac_encoder::reset(core_file &file)
+bool flac_encoder::reset(util::core_file &file)
{
// configure the output
m_compressed_start = nullptr;
@@ -185,7 +185,7 @@ UINT32 flac_encoder::finish()
{
// process the data and return the amount written
FLAC__stream_encoder_finish(m_encoder);
- return (m_file != nullptr) ? core_ftell(m_file) : m_compressed_offset;
+ return (m_file != nullptr) ? m_file->tell() : m_compressed_offset;
}
@@ -252,7 +252,7 @@ FLAC__StreamEncoderWriteStatus flac_encoder::write_callback(const FLAC__byte buf
{
int count = bytes - offset;
if (m_file != nullptr)
- core_fwrite(m_file, buffer, count);
+ m_file->write(buffer, count);
else
{
if (m_compressed_offset + count <= m_compressed_length)
@@ -308,7 +308,7 @@ flac_decoder::flac_decoder(const void *buffer, UINT32 length, const void *buffer
// flac_decoder - constructor
//-------------------------------------------------
-flac_decoder::flac_decoder(core_file &file)
+flac_decoder::flac_decoder(util::core_file &file)
: m_decoder(FLAC__stream_decoder_new()),
m_file(&file),
m_compressed_offset(0),
@@ -414,7 +414,7 @@ bool flac_decoder::reset(UINT32 sample_rate, UINT8 num_channels, UINT32 block_si
// reset - reset state with new file parameter
//-------------------------------------------------
-bool flac_decoder::reset(core_file &file)
+bool flac_decoder::reset(util::core_file &file)
{
m_file = &file;
m_compressed_start = nullptr;
@@ -511,7 +511,7 @@ FLAC__StreamDecoderReadStatus flac_decoder::read_callback(FLAC__byte buffer[], s
// if a file, just read
if (m_file != nullptr)
- *bytes = core_fread(m_file, buffer, expected);
+ *bytes = m_file->read(buffer, expected);
// otherwise, copy from memory
else
diff --git a/src/lib/util/flac.h b/src/lib/util/flac.h
index 563c40974e0..1f9a49b14bd 100644
--- a/src/lib/util/flac.h
+++ b/src/lib/util/flac.h
@@ -35,7 +35,7 @@ public:
// construction/destruction
flac_encoder();
flac_encoder(void *buffer, UINT32 buflength);
- flac_encoder(core_file &file);
+ flac_encoder(util::core_file &file);
~flac_encoder();
// configuration
@@ -51,7 +51,7 @@ public:
// reset
bool reset();
bool reset(void *buffer, UINT32 buflength);
- bool reset(core_file &file);
+ bool reset(util::core_file &file);
// encode a buffer
bool encode_interleaved(const INT16 *samples, UINT32 samples_per_channel, bool swap_endian = false);
@@ -68,7 +68,7 @@ private:
// internal state
FLAC__StreamEncoder * m_encoder; // actual encoder
- core_file * m_file; // output file
+ util::core_file * m_file; // output file
UINT32 m_compressed_offset; // current offset with the compressed stream
FLAC__byte * m_compressed_start; // start of compressed data
UINT32 m_compressed_length; // length of the compressed stream
@@ -93,7 +93,7 @@ public:
// construction/destruction
flac_decoder();
flac_decoder(const void *buffer, UINT32 length, const void *buffer2 = nullptr, UINT32 length2 = 0);
- flac_decoder(core_file &file);
+ flac_decoder(util::core_file &file);
~flac_decoder();
// getters (valid after reset)
@@ -108,7 +108,7 @@ public:
bool reset();
bool reset(const void *buffer, UINT32 length, const void *buffer2 = nullptr, UINT32 length2 = 0);
bool reset(UINT32 sample_rate, UINT8 num_channels, UINT32 block_size, const void *buffer, UINT32 length);
- bool reset(core_file &file);
+ bool reset(util::core_file &file);
// decode to a buffer; num_samples must be a multiple of the block size
bool decode_interleaved(INT16 *samples, UINT32 num_samples, bool swap_endian = false);
@@ -129,7 +129,7 @@ private:
// output state
FLAC__StreamDecoder * m_decoder; // actual encoder
- core_file * m_file; // output file
+ util::core_file * m_file; // output file
UINT32 m_sample_rate; // decoded sample rate
UINT8 m_channels; // decoded number of channels
UINT8 m_bits_per_sample; // decoded bits per sample
diff --git a/src/lib/util/options.cpp b/src/lib/util/options.cpp
index 56bad147bcb..9890ae46115 100644
--- a/src/lib/util/options.cpp
+++ b/src/lib/util/options.cpp
@@ -400,11 +400,11 @@ bool core_options::parse_command_line(int argc, char **argv, int priority, std::
// an INI file
//-------------------------------------------------
-bool core_options::parse_ini_file(core_file &inifile, int priority, int ignore_priority, std::string &error_string)
+bool core_options::parse_ini_file(util::core_file &inifile, int priority, int ignore_priority, std::string &error_string)
{
// loop over lines in the file
char buffer[4096];
- while (core_fgets(buffer, ARRAY_LENGTH(buffer), &inifile) != nullptr)
+ while (inifile.gets(buffer, ARRAY_LENGTH(buffer)) != nullptr)
{
// find the extent of the name
char *optionname;
diff --git a/src/lib/util/options.h b/src/lib/util/options.h
index cf58bc67222..4ffdf00ae35 100644
--- a/src/lib/util/options.h
+++ b/src/lib/util/options.h
@@ -142,7 +142,7 @@ public:
// parsing/input
bool parse_command_line(int argc, char **argv, int priority, std::string &error_string);
- bool parse_ini_file(core_file &inifile, int priority, int ignore_priority, std::string &error_string);
+ bool parse_ini_file(util::core_file &inifile, int priority, int ignore_priority, std::string &error_string);
// reverting
void revert(int priority = OPTION_PRIORITY_MAXIMUM);
diff --git a/src/lib/util/palette.cpp b/src/lib/util/palette.cpp
index bd3c2d45ede..8c61c64a470 100644
--- a/src/lib/util/palette.cpp
+++ b/src/lib/util/palette.cpp
@@ -15,9 +15,17 @@
#include <math.h>
+//**************************************************************************
+// CONSTANTS
+//**************************************************************************
+
const rgb_t rgb_t::black(0,0,0);
const rgb_t rgb_t::white(255,255,255);
+// the colors below are commonly used screen colors
+const rgb_t rgb_t::green(0, 255, 0);
+const rgb_t rgb_t::amber(247, 170, 0);
+
//**************************************************************************
// INLINE FUNCTIONS
diff --git a/src/lib/util/palette.h b/src/lib/util/palette.h
index 9c6703119e1..2dfbac03a45 100644
--- a/src/lib/util/palette.h
+++ b/src/lib/util/palette.h
@@ -78,6 +78,8 @@ public:
// constants
static const rgb_t black;
static const rgb_t white;
+ static const rgb_t green;
+ static const rgb_t amber;
private:
UINT32 m_data;
diff --git a/src/lib/util/png.cpp b/src/lib/util/png.cpp
index a6b269593ef..8023d350cdc 100644
--- a/src/lib/util/png.cpp
+++ b/src/lib/util/png.cpp
@@ -148,12 +148,12 @@ void png_free(png_info *pnginfo)
header at the current file location
-------------------------------------------------*/
-static png_error verify_header(core_file *fp)
+static png_error verify_header(util::core_file &fp)
{
UINT8 signature[8];
/* read 8 bytes */
- if (core_fread(fp, signature, 8) != 8)
+ if (fp.read(signature, 8) != 8)
return PNGERR_FILE_TRUNCATED;
/* return an error if we don't match */
@@ -168,18 +168,18 @@ static png_error verify_header(core_file *fp)
read_chunk - read the next PNG chunk
-------------------------------------------------*/
-static png_error read_chunk(core_file *fp, UINT8 **data, UINT32 *type, UINT32 *length)
+static png_error read_chunk(util::core_file &fp, UINT8 **data, UINT32 *type, UINT32 *length)
{
UINT32 crc, chunk_crc;
UINT8 tempbuff[4];
/* fetch the length of this chunk */
- if (core_fread(fp, tempbuff, 4) != 4)
+ if (fp.read(tempbuff, 4) != 4)
return PNGERR_FILE_TRUNCATED;
*length = fetch_32bit(tempbuff);
/* fetch the type of this chunk */
- if (core_fread(fp, tempbuff, 4) != 4)
+ if (fp.read(tempbuff, 4) != 4)
return PNGERR_FILE_TRUNCATED;
*type = fetch_32bit(tempbuff);
@@ -200,7 +200,7 @@ static png_error read_chunk(core_file *fp, UINT8 **data, UINT32 *type, UINT32 *l
return PNGERR_OUT_OF_MEMORY;
/* read the data from the file */
- if (core_fread(fp, *data, *length) != *length)
+ if (fp.read(*data, *length) != *length)
{
free(*data);
*data = nullptr;
@@ -212,7 +212,7 @@ static png_error read_chunk(core_file *fp, UINT8 **data, UINT32 *type, UINT32 *l
}
/* read the CRC */
- if (core_fread(fp, tempbuff, 4) != 4)
+ if (fp.read(tempbuff, 4) != 4)
{
free(*data);
*data = nullptr;
@@ -502,7 +502,7 @@ handle_error:
png_read_file - read a PNG from a core stream
-------------------------------------------------*/
-png_error png_read_file(core_file *fp, png_info *pnginfo)
+png_error png_read_file(util::core_file &fp, png_info *pnginfo)
{
UINT8 *chunk_data = nullptr;
png_private png;
@@ -579,7 +579,7 @@ handle_error:
bitmap
-------------------------------------------------*/
-png_error png_read_bitmap(core_file *fp, bitmap_argb32 &bitmap)
+png_error png_read_bitmap(util::core_file &fp, bitmap_argb32 &bitmap)
{
png_error result;
png_info png;
@@ -747,7 +747,7 @@ png_error png_add_text(png_info *pnginfo, const char *keyword, const char *text)
the given file
-------------------------------------------------*/
-static png_error write_chunk(core_file *fp, const UINT8 *data, UINT32 type, UINT32 length)
+static png_error write_chunk(util::core_file &fp, const UINT8 *data, UINT32 type, UINT32 length)
{
UINT8 tempbuff[8];
UINT32 crc;
@@ -758,20 +758,20 @@ static png_error write_chunk(core_file *fp, const UINT8 *data, UINT32 type, UINT
crc = crc32(0, tempbuff + 4, 4);
/* write that data */
- if (core_fwrite(fp, tempbuff, 8) != 8)
+ if (fp.write(tempbuff, 8) != 8)
return PNGERR_FILE_ERROR;
/* append the actual data */
if (length > 0)
{
- if (core_fwrite(fp, data, length) != length)
+ if (fp.write(data, length) != length)
return PNGERR_FILE_ERROR;
crc = crc32(crc, data, length);
}
/* write the CRC */
put_32bit(tempbuff, crc);
- if (core_fwrite(fp, tempbuff, 4) != 4)
+ if (fp.write(tempbuff, 4) != 4)
return PNGERR_FILE_ERROR;
return PNGERR_NONE;
@@ -783,9 +783,9 @@ static png_error write_chunk(core_file *fp, const UINT8 *data, UINT32 type, UINT
chunk to the given file by deflating it
-------------------------------------------------*/
-static png_error write_deflated_chunk(core_file *fp, UINT8 *data, UINT32 type, UINT32 length)
+static png_error write_deflated_chunk(util::core_file &fp, UINT8 *data, UINT32 type, UINT32 length)
{
- UINT64 lengthpos = core_ftell(fp);
+ UINT64 lengthpos = fp.tell();
UINT8 tempbuff[8192];
UINT32 zlength = 0;
z_stream stream;
@@ -798,7 +798,7 @@ static png_error write_deflated_chunk(core_file *fp, UINT8 *data, UINT32 type, U
crc = crc32(0, tempbuff + 4, 4);
/* write that data */
- if (core_fwrite(fp, tempbuff, 8) != 8)
+ if (fp.write(tempbuff, 8) != 8)
return PNGERR_FILE_ERROR;
/* initialize the stream */
@@ -821,7 +821,7 @@ static png_error write_deflated_chunk(core_file *fp, UINT8 *data, UINT32 type, U
if (stream.avail_out < sizeof(tempbuff))
{
int bytes = sizeof(tempbuff) - stream.avail_out;
- if (core_fwrite(fp, tempbuff, bytes) != bytes)
+ if (fp.write(tempbuff, bytes) != bytes)
{
deflateEnd(&stream);
return PNGERR_FILE_ERROR;
@@ -849,17 +849,17 @@ static png_error write_deflated_chunk(core_file *fp, UINT8 *data, UINT32 type, U
/* write the CRC */
put_32bit(tempbuff, crc);
- if (core_fwrite(fp, tempbuff, 4) != 4)
+ if (fp.write(tempbuff, 4) != 4)
return PNGERR_FILE_ERROR;
/* seek back and update the length */
- core_fseek(fp, lengthpos, SEEK_SET);
+ fp.seek(lengthpos, SEEK_SET);
put_32bit(tempbuff + 0, zlength);
- if (core_fwrite(fp, tempbuff, 4) != 4)
+ if (fp.write(tempbuff, 4) != 4)
return PNGERR_FILE_ERROR;
/* return to the end */
- core_fseek(fp, lengthpos + 8 + zlength + 4, SEEK_SET);
+ fp.seek(lengthpos + 8 + zlength + 4, SEEK_SET);
return PNGERR_NONE;
}
@@ -1006,7 +1006,7 @@ static png_error convert_bitmap_to_image_rgb(png_info *pnginfo, const bitmap_t &
chunks to the given file
-------------------------------------------------*/
-static png_error write_png_stream(core_file *fp, png_info *pnginfo, const bitmap_t &bitmap, int palette_length, const rgb_t *palette)
+static png_error write_png_stream(util::core_file &fp, png_info *pnginfo, const bitmap_t &bitmap, int palette_length, const rgb_t *palette)
{
UINT8 tempbuff[16];
png_text *text;
@@ -1061,7 +1061,7 @@ handle_error:
}
-png_error png_write_bitmap(core_file *fp, png_info *info, bitmap_t &bitmap, int palette_length, const rgb_t *palette)
+png_error png_write_bitmap(util::core_file &fp, png_info *info, bitmap_t &bitmap, int palette_length, const rgb_t *palette)
{
png_info pnginfo;
png_error error;
@@ -1074,7 +1074,7 @@ png_error png_write_bitmap(core_file *fp, png_info *info, bitmap_t &bitmap, int
}
/* write the PNG signature */
- if (core_fwrite(fp, PNG_Signature, 8) != 8)
+ if (fp.write(PNG_Signature, 8) != 8)
{
if (info == &pnginfo)
png_free(&pnginfo);
@@ -1097,7 +1097,7 @@ png_error png_write_bitmap(core_file *fp, png_info *info, bitmap_t &bitmap, int
********************************************************************************/
/**
- * @fn png_error mng_capture_start(core_file *fp, bitmap_t &bitmap, double rate)
+ * @fn png_error mng_capture_start(util::core_file &fp, bitmap_t &bitmap, double rate)
*
* @brief Mng capture start.
*
@@ -1108,12 +1108,12 @@ png_error png_write_bitmap(core_file *fp, png_info *info, bitmap_t &bitmap, int
* @return A png_error.
*/
-png_error mng_capture_start(core_file *fp, bitmap_t &bitmap, double rate)
+png_error mng_capture_start(util::core_file &fp, bitmap_t &bitmap, double rate)
{
UINT8 mhdr[28];
png_error error;
- if (core_fwrite(fp, MNG_Signature, 8) != 8)
+ if (fp.write(MNG_Signature, 8) != 8)
return PNGERR_FILE_ERROR;
memset(mhdr, 0, 28);
@@ -1131,7 +1131,7 @@ png_error mng_capture_start(core_file *fp, bitmap_t &bitmap, double rate)
}
/**
- * @fn png_error mng_capture_frame(core_file *fp, png_info *info, bitmap_t &bitmap, int palette_length, const rgb_t *palette)
+ * @fn png_error mng_capture_frame(util::core_file &fp, png_info *info, bitmap_t &bitmap, int palette_length, const rgb_t *palette)
*
* @brief Mng capture frame.
*
@@ -1144,13 +1144,13 @@ png_error mng_capture_start(core_file *fp, bitmap_t &bitmap, double rate)
* @return A png_error.
*/
-png_error mng_capture_frame(core_file *fp, png_info *info, bitmap_t &bitmap, int palette_length, const rgb_t *palette)
+png_error mng_capture_frame(util::core_file &fp, png_info *info, bitmap_t &bitmap, int palette_length, const rgb_t *palette)
{
return write_png_stream(fp, info, bitmap, palette_length, palette);
}
/**
- * @fn png_error mng_capture_stop(core_file *fp)
+ * @fn png_error mng_capture_stop(util::core_file &fp)
*
* @brief Mng capture stop.
*
@@ -1159,7 +1159,7 @@ png_error mng_capture_frame(core_file *fp, png_info *info, bitmap_t &bitmap, int
* @return A png_error.
*/
-png_error mng_capture_stop(core_file *fp)
+png_error mng_capture_stop(util::core_file &fp)
{
return write_chunk(fp, nullptr, MNG_CN_MEND, 0);
}
diff --git a/src/lib/util/png.h b/src/lib/util/png.h
index 52e5111d199..00522f12f5c 100644
--- a/src/lib/util/png.h
+++ b/src/lib/util/png.h
@@ -119,15 +119,15 @@ struct png_info
void png_free(png_info *pnginfo);
-png_error png_read_file(core_file *fp, png_info *pnginfo);
-png_error png_read_bitmap(core_file *fp, bitmap_argb32 &bitmap);
+png_error png_read_file(util::core_file &fp, png_info *pnginfo);
+png_error png_read_bitmap(util::core_file &fp, bitmap_argb32 &bitmap);
png_error png_expand_buffer_8bit(png_info *p);
png_error png_add_text(png_info *pnginfo, const char *keyword, const char *text);
-png_error png_write_bitmap(core_file *fp, png_info *info, bitmap_t &bitmap, int palette_length, const rgb_t *palette);
+png_error png_write_bitmap(util::core_file &fp, png_info *info, bitmap_t &bitmap, int palette_length, const rgb_t *palette);
-png_error mng_capture_start(core_file *fp, bitmap_t &bitmap, double rate);
-png_error mng_capture_frame(core_file *fp, png_info *info, bitmap_t &bitmap, int palette_length, const rgb_t *palette);
-png_error mng_capture_stop(core_file *fp);
+png_error mng_capture_start(util::core_file &fp, bitmap_t &bitmap, double rate);
+png_error mng_capture_frame(util::core_file &fp, png_info *info, bitmap_t &bitmap, int palette_length, const rgb_t *palette);
+png_error mng_capture_stop(util::core_file &fp);
#endif /* __PNG_H__ */
diff --git a/src/lib/util/strformat.h b/src/lib/util/strformat.h
index ac7301dc6bd..8eb5f791ed0 100644
--- a/src/lib/util/strformat.h
+++ b/src/lib/util/strformat.h
@@ -185,6 +185,21 @@
#include <type_traits>
#include <utility>
+#if defined(__GLIBCXX__) && (__GLIBCXX__ < 20150413)
+namespace std
+{
+template<class _Container>
+ inline constexpr auto
+ cbegin(const _Container& __cont) noexcept(noexcept(std::begin(__cont)))-> decltype(std::begin(__cont))
+ { return std::begin(__cont); }
+
+template<class _Container>
+ inline constexpr auto
+ cend(const _Container& __cont) noexcept(noexcept(std::end(__cont)))-> decltype(std::end(__cont))
+ { return std::end(__cont); }
+}
+#endif
+
namespace util {
namespace detail {
//**************************************************************************
@@ -1040,7 +1055,7 @@ public:
{
return (m_end && (m_end == it)) || (m_check_nul && (format_chars<char_type>::nul == *it));
}
- std::size_t size() const
+ std::size_t argument_count() const
{
return m_argument_count;
}
@@ -1096,7 +1111,7 @@ protected:
format_argument<Stream> const *arguments,
std::enable_if_t<handle_container<std::remove_reference_t<Format> >::value, std::size_t> argument_count)
: m_begin(fmt.empty() ? nullptr : &*std::cbegin(fmt))
- , m_end(fmt.empty() ? nullptr : &*std::cend(fmt))
+ , m_end(fmt.empty() ? nullptr : (m_begin + std::distance(std::cbegin(fmt), std::cend(fmt))))
, m_check_nul(true)
, m_arguments(arguments)
, m_argument_count(argument_count)
@@ -1131,6 +1146,9 @@ class format_argument_pack_impl
, public format_argument_pack<Stream>
{
public:
+ using typename format_argument_pack<Stream>::iterator;
+ using format_argument_pack<Stream>::operator[];
+
template <typename Format, typename... Params>
format_argument_pack_impl(Format &&fmt, Params &&... args)
: std::array<format_argument<Stream>, Count>({ { format_argument<Stream>(std::forward<Params>(args))... } })
@@ -1147,15 +1165,9 @@ public:
//**************************************************************************
-// ARGUMENT PACK CREATOR FUNCTIONS
+// ARGUMENT PACK CREATOR FUNCTION
//**************************************************************************
-template <typename Stream = std::ostream, typename... Params>
-inline std::array<format_argument<Stream>, sizeof...(Params)> make_format_arguments(Params &&... args)
-{
- return std::array<format_argument<Stream>, sizeof...(Params)>({ { format_argument<Stream>(std::forward<Params>(args))... } });
-}
-
template <typename Stream = std::ostream, typename Format, typename... Params>
inline format_argument_pack_impl<Stream, sizeof...(Params)> make_format_argument_pack(Format &&fmt, Params &&... args)
{
@@ -1164,54 +1176,16 @@ inline format_argument_pack_impl<Stream, sizeof...(Params)> make_format_argument
//**************************************************************************
-// FORMAT STRING PARSING HELPERS
+// FORMAT STRING PARSING HELPER
//**************************************************************************
template <typename Format>
-class format_helper_base : public format_chars<std::remove_cv_t<std::remove_reference_t<decltype(*std::cbegin(std::declval<Format>()))> > >
-{
-public:
- typedef std::remove_reference_t<decltype(std::cbegin(std::declval<Format>()))> iterator;
- static iterator begin(Format const &fmt) { return std::cbegin(fmt); }
- static bool at_end(Format const &fmt, iterator const &it) { return std::cend(fmt) == it; }
-};
-
-template <typename Character>
-class format_helper_base<Character *> : public format_chars<std::remove_cv_t<Character> >
-{
-public:
- typedef Character const *iterator;
- static iterator begin(Character const *fmt) { return fmt; }
- static bool at_end(Character const *fmt, iterator const &it) { return format_helper_base::nul == *it; }
-};
-
-template <typename Character, std::size_t Length>
-class format_helper_base<Character [Length]> : public format_chars<std::remove_cv_t<Character> >
-{
-public:
- typedef Character const *iterator;
- static iterator begin(std::remove_const_t<Character> (&fmt)[Length]) { return std::cbegin(fmt); }
- static iterator begin(std::add_const_t<Character> (&fmt)[Length]) { return std::cbegin(fmt); }
- static bool at_end(std::remove_const_t<Character> (&fmt)[Length], iterator const &it) { return (std::cend(fmt) == it) || (format_chars<Character>::nul == *it); }
- static bool at_end(std::add_const_t<Character> (&fmt)[Length], iterator const &it) { return (std::cend(fmt) == it) || (format_helper_base::nul == *it); }
-};
-
-template <typename Stream>
-class format_helper_base<format_argument_pack<Stream> > : public format_chars<typename format_argument_pack<Stream>::char_type>
-{
-public:
- typedef typename format_argument_pack<Stream>::iterator iterator;
- static iterator begin(format_argument_pack<Stream> const &fmt) { return fmt.format_begin(); }
- static bool at_end(format_argument_pack<Stream> const &fmt, iterator const &it) { return fmt.format_at_end(it); }
-};
-
-template <typename Format>
-class format_helper : public format_helper_base<Format>
+class format_helper : public format_chars<typename Format::char_type>
{
public:
static bool parse_format(
Format const &fmt,
- typename format_helper::iterator &it,
+ typename Format::iterator &it,
format_flags &flags,
int &next_position,
int &argument_position,
@@ -1219,7 +1193,7 @@ public:
int &precision_position)
{
static_assert((format_helper::nine - format_helper::zero) == 9, "Digits must be contiguous");
- assert(!format_helper::at_end(fmt, it));
+ assert(!fmt.format_at_end(it));
assert(format_helper::percent == *it);
int num;
@@ -1231,8 +1205,8 @@ public:
precision_position = -1;
// Leading zeroes are tricky - they could be a zero-pad flag or part of a position specifier
- bool const leading_zero(!format_helper::at_end(fmt, it) && (format_helper::zero == *it));
- while (!format_helper::at_end(fmt, it) && (format_helper::zero == *it)) ++it;
+ bool const leading_zero(!fmt.format_at_end(it) && (format_helper::zero == *it));
+ while (!fmt.format_at_end(it) && (format_helper::zero == *it)) ++it;
// Digits encountered at this point could be a field width or a position specifier
num = 0;
@@ -1258,7 +1232,7 @@ public:
}
// Parse flag characters
- while (!format_helper::at_end(fmt, it))
+ while (!fmt.format_at_end(it))
{
switch (*it)
{
@@ -1275,7 +1249,7 @@ public:
}
// Check for literal or parameterised field width
- if (!format_helper::at_end(fmt, it))
+ if (!fmt.format_at_end(it))
{
if (is_digit(*it))
{
@@ -1302,14 +1276,14 @@ public:
}
// Check for literal or parameterised precision
- if (!format_helper::at_end(fmt, it) && (*it == format_helper::point))
+ if (!fmt.format_at_end(it) && (*it == format_helper::point))
{
++it;
if (have_digit(fmt, it))
{
flags.set_precision(read_number(fmt, it));
}
- else if (!format_helper::at_end(fmt, it) && (format_helper::asterisk == *it))
+ else if (!fmt.format_at_end(it) && (format_helper::asterisk == *it))
{
++it;
if (have_digit(fmt, it))
@@ -1333,11 +1307,11 @@ public:
}
// Check for length modifiers
- if (!format_helper::at_end(fmt, it)) switch (*it)
+ if (!fmt.format_at_end(it)) switch (*it)
{
case format_helper::h:
++it;
- if (!format_helper::at_end(fmt, it) && (format_helper::h == *it))
+ if (!fmt.format_at_end(it) && (format_helper::h == *it))
{
++it;
flags.set_length(format_flags::length::character);
@@ -1349,7 +1323,7 @@ public:
break;
case format_helper::l:
++it;
- if (!format_helper::at_end(fmt, it) && (format_helper::l == *it))
+ if (!fmt.format_at_end(it) && (format_helper::l == *it))
{
++it;
flags.set_length(format_flags::length::long_long_integer);
@@ -1379,13 +1353,13 @@ public:
{
++it;
format_flags::length length = format_flags::length::size_type;
- if (!format_helper::at_end(fmt, it))
+ if (!fmt.format_at_end(it))
{
if ((typename format_helper::char_type(format_helper::zero) + 3) == *it)
{
- typename format_helper::iterator tmp(it);
+ typename Format::iterator tmp(it);
++tmp;
- if (!format_helper::at_end(fmt, tmp) && ((typename format_helper::char_type(format_helper::zero) + 2) == *tmp))
+ if (!fmt.format_at_end(tmp) && ((typename format_helper::char_type(format_helper::zero) + 2) == *tmp))
{
length = format_flags::length::integer_32;
it = ++tmp;
@@ -1393,9 +1367,9 @@ public:
}
else if ((typename format_helper::char_type(format_helper::zero) + 6) == *it)
{
- typename format_helper::iterator tmp(it);
+ typename Format::iterator tmp(it);
++tmp;
- if (!format_helper::at_end(fmt, tmp) && ((typename format_helper::char_type(format_helper::zero) + 4) == *tmp))
+ if (!fmt.format_at_end(tmp) && ((typename format_helper::char_type(format_helper::zero) + 4) == *tmp))
{
length = format_flags::length::integer_64;
it = ++tmp;
@@ -1414,8 +1388,8 @@ public:
}
// Now we should find a conversion specifier
- assert(!format_helper::at_end(fmt, it)); // missing conversion
- if (format_helper::at_end(fmt, it)) return false;
+ assert(!fmt.format_at_end(it)); // missing conversion
+ if (fmt.format_at_end(it)) return false;
switch (*it)
{
case format_helper::d:
@@ -1498,14 +1472,14 @@ public:
}
private:
- static bool have_dollar(Format const &fmt, typename format_helper::iterator const &it)
+ static bool have_dollar(Format const &fmt, typename Format::iterator const &it)
{
- return !format_helper::at_end(fmt, it) && (*it == format_helper::dollar);
+ return !fmt.format_at_end(it) && (*it == format_helper::dollar);
}
- static bool have_digit(Format const &fmt, typename format_helper::iterator const &it)
+ static bool have_digit(Format const &fmt, typename Format::iterator const &it)
{
- return !format_helper::at_end(fmt, it) && is_digit(*it);
+ return !fmt.format_at_end(it) && is_digit(*it);
}
static bool is_digit(typename format_helper::char_type value)
@@ -1524,7 +1498,7 @@ private:
num = (num * 10) + digit_value(digit);
}
- static int read_number(Format const &fmt, typename format_helper::iterator &it)
+ static int read_number(Format const &fmt, typename Format::iterator &it)
{
assert(have_digit(fmt, it));
int value = 0;
@@ -1538,11 +1512,11 @@ private:
// CORE FORMATTING FUNCTION
//**************************************************************************
-template <typename Stream, typename Format, typename Params>
-typename Stream::off_type stream_format(Stream &str, Format &&fmt, Params &&args)
+template <typename Stream, typename Base>
+typename Stream::off_type stream_format(Stream &str, format_argument_pack<Base> const &args)
{
- typedef format_helper<std::remove_cv_t<std::remove_reference_t<Format> > > format_helper;
- typedef typename format_helper::iterator iterator;
+ typedef format_helper<format_argument_pack<Base> > format_helper;
+ typedef typename format_argument_pack<Base>::iterator iterator;
class stream_preserver
{
public:
@@ -1572,21 +1546,21 @@ typename Stream::off_type stream_format(Stream &str, Format &&fmt, Params &&args
typename Stream::pos_type const begin(str.tellp());
stream_preserver const preserver(str);
int next_pos(1);
- iterator start = format_helper::begin(fmt);
- for (iterator it = start; !format_helper::at_end(fmt, start); )
+ iterator start = args.format_begin();
+ for (iterator it = start; !args.format_at_end(start); )
{
- while (!format_helper::at_end(fmt, it) && (format_helper::percent != *it)) ++it;
+ while (!args.format_at_end(it) && (format_helper::percent != *it)) ++it;
if (start != it)
{
str.write(&*start, it - start);
start = it;
}
- if (!format_helper::at_end(fmt, it))
+ if (!args.format_at_end(it))
{
// Try to parse a percent format specification
format_flags flags;
int arg_pos, width_pos, prec_pos;
- if (!format_helper::parse_format(fmt, it, flags, next_pos, arg_pos, width_pos, prec_pos))
+ if (!format_helper::parse_format(args, it, flags, next_pos, arg_pos, width_pos, prec_pos))
continue;
// Handle parameterised width
@@ -1594,8 +1568,8 @@ typename Stream::off_type stream_format(Stream &str, Format &&fmt, Params &&args
{
assert(flags.get_field_width() == 0U);
assert(0 < width_pos);
- assert(args.size() >= unsigned(width_pos));
- if ((0 < width_pos) && (args.size() >= unsigned(width_pos)))
+ assert(args.argument_count() >= unsigned(width_pos));
+ if ((0 < width_pos) && (args.argument_count() >= unsigned(width_pos)))
{
int width;
if (args[width_pos - 1].make_integer(width))
@@ -1622,8 +1596,8 @@ typename Stream::off_type stream_format(Stream &str, Format &&fmt, Params &&args
{
assert(flags.get_precision() < 0);
assert(0 < prec_pos);
- assert(args.size() >= unsigned(prec_pos));
- if ((0 < prec_pos) && (args.size() >= unsigned(prec_pos)))
+ assert(args.argument_count() >= unsigned(prec_pos));
+ if ((0 < prec_pos) && (args.argument_count() >= unsigned(prec_pos)))
{
int precision;
if (args[prec_pos - 1].make_integer(precision))
@@ -1648,8 +1622,8 @@ typename Stream::off_type stream_format(Stream &str, Format &&fmt, Params &&args
else
{
assert(0 < arg_pos);
- assert(args.size() >= unsigned(arg_pos));
- if ((0 >= arg_pos) || (args.size() < unsigned(arg_pos)))
+ assert(args.argument_count() >= unsigned(arg_pos));
+ if ((0 >= arg_pos) || (args.argument_count() < unsigned(arg_pos)))
continue;
if (format_flags::conversion::tell == flags.get_conversion())
{
@@ -1683,19 +1657,19 @@ typename Stream::off_type stream_format(Stream &str, Format &&fmt, Params &&args
template <typename Stream, typename Format, typename... Params>
inline typename Stream::off_type stream_format(Stream &str, Format const &fmt, Params &&... args)
{
- return detail::stream_format(str, fmt, detail::make_format_arguments<Stream>(std::forward<Params>(args)...));
+ return detail::stream_format(str, detail::make_format_argument_pack<Stream>(fmt, std::forward<Params>(args)...));
}
template <typename Stream, typename Base>
inline typename Stream::off_type stream_format(Stream &str, detail::format_argument_pack<Base> const &args)
{
- return detail::stream_format(str, args, args);
+ return detail::stream_format(str, args);
}
template <typename Stream, typename Base>
inline typename Stream::off_type stream_format(Stream &str, detail::format_argument_pack<Base> &&args)
{
- return detail::stream_format(str, args, args);
+ return detail::stream_format(str, args);
}
@@ -1722,41 +1696,41 @@ inline String string_format(std::locale const &locale, Format &&fmt, Params &&..
return str.str();
};
-template <typename String = std::string, typename Format, typename Stream>
-inline String string_format(Format &&fmt, detail::format_argument_pack<Stream> const &args)
+template <typename String = std::string, typename Stream>
+inline String string_format(detail::format_argument_pack<Stream> const &args)
{
typedef std::basic_ostringstream<typename String::value_type, typename String::traits_type, typename String::allocator_type> ostream;
ostream str;
- stream_format(str, std::forward<Format>(fmt), args);
+ detail::stream_format(str, args);
return str.str();
};
-template <typename String = std::string, typename Format, typename Stream>
-inline String string_format(Format &&fmt, detail::format_argument_pack<Stream> &&args)
+template <typename String = std::string, typename Stream>
+inline String string_format(detail::format_argument_pack<Stream> &&args)
{
typedef std::basic_ostringstream<typename String::value_type, typename String::traits_type, typename String::allocator_type> ostream;
ostream str;
- stream_format(str, std::forward<Format>(fmt), std::move(args));
+ detail::stream_format(str, std::move(args));
return str.str();
};
-template <typename String = std::string, typename Format, typename Stream>
-inline String string_format(std::locale const &locale, Format &&fmt, detail::format_argument_pack<Stream> const &args)
+template <typename String = std::string, typename Stream>
+inline String string_format(std::locale const &locale, detail::format_argument_pack<Stream> const &args)
{
typedef std::basic_ostringstream<typename String::value_type, typename String::traits_type, typename String::allocator_type> ostream;
ostream str;
str.imbue(locale);
- stream_format(str, std::forward<Format>(fmt), args);
+ detail::stream_format(str, args);
return str.str();
};
-template <typename String = std::string, typename Format, typename Stream>
-inline String string_format(std::locale const &locale, Format &&fmt, detail::format_argument_pack<Stream> &&args)
+template <typename String = std::string, typename Stream>
+inline String string_format(std::locale const &locale, detail::format_argument_pack<Stream> &&args)
{
typedef std::basic_ostringstream<typename String::value_type, typename String::traits_type, typename String::allocator_type> ostream;
ostream str;
str.imbue(locale);
- stream_format(str, std::forward<Format>(fmt), std::move(args));
+ detail::stream_format(str, std::move(args));
return str.str();
};
diff --git a/src/lib/util/vecstream.h b/src/lib/util/vecstream.h
index fb472df95cd..bf144501253 100644
--- a/src/lib/util/vecstream.h
+++ b/src/lib/util/vecstream.h
@@ -19,6 +19,10 @@
#include <algorithm>
#include <cassert>
+#include <ios>
+#include <istream>
+#include <ostream>
+#include <memory>
#include <ostream>
#include <streambuf>
#include <string>
@@ -103,15 +107,16 @@ public:
void swap(basic_vectorbuf &that)
{
+ using std::swap;
std::basic_streambuf<CharT, Traits>::swap(that);
- std::swap(m_mode, that.m_mode);
- m_storage.swap(that.m_storage);
- std::swap(m_threshold, that.m_threshold);
+ swap(m_mode, that.m_mode);
+ swap(m_storage, that.m_storage);
+ swap(m_threshold, that.m_threshold);
}
void reserve(typename vector_type::size_type size)
{
- if ((m_mode & std::ios_base::out) && (m_storage.size() < size))
+ if ((m_mode & std::ios_base::out) && (m_storage.capacity() < size))
{
m_storage.reserve(size);
adjust();
@@ -145,8 +150,8 @@ protected:
bool const out(which & std::ios_base::out);
if ((!in && !out) ||
(in && out && (std::ios_base::cur == dir)) ||
- (in && (!(m_mode & std::ios_base::in) || !this->gptr())) ||
- (out && (!(m_mode & std::ios_base::out) || !this->pptr())))
+ (in && !(m_mode & std::ios_base::in)) ||
+ (out && !(m_mode & std::ios_base::out)))
{
return pos_type(off_type(-1));
}
@@ -382,6 +387,16 @@ typedef basic_ovectorstream<wchar_t> wovectorstream;
typedef basic_vectorstream<char> vectorstream;
typedef basic_vectorstream<wchar_t> wvectorstream;
+template <typename CharT, typename Traits, typename Allocator>
+void swap(basic_vectorbuf<CharT, Traits, Allocator> &a, basic_vectorbuf<CharT, Traits, Allocator> &b) { a.swap(b); }
+
+template <typename CharT, typename Traits, typename Allocator>
+void swap(basic_ivectorstream<CharT, Traits, Allocator> &a, basic_ivectorstream<CharT, Traits, Allocator> &b) { a.swap(b); }
+template <typename CharT, typename Traits, typename Allocator>
+void swap(basic_ovectorstream<CharT, Traits, Allocator> &a, basic_ovectorstream<CharT, Traits, Allocator> &b) { a.swap(b); }
+template <typename CharT, typename Traits, typename Allocator>
+void swap(basic_vectorstream<CharT, Traits, Allocator> &a, basic_vectorstream<CharT, Traits, Allocator> &b) { a.swap(b); }
+
} // namespace util
#endif // __MAME_UTIL_VECSTREAM_H__
diff --git a/src/lib/util/xmlfile.cpp b/src/lib/util/xmlfile.cpp
index 620f12a66b3..db288b0a807 100644
--- a/src/lib/util/xmlfile.cpp
+++ b/src/lib/util/xmlfile.cpp
@@ -52,7 +52,7 @@ static xml_data_node *add_child(xml_data_node *parent, const char *name, const c
static xml_attribute_node *add_attribute(xml_data_node *node, const char *name, const char *value);
/* recursive tree operations */
-static void write_node_recursive(xml_data_node *node, int indent, core_file *file);
+static void write_node_recursive(xml_data_node *node, int indent, util::core_file &file);
static void free_node_recursive(xml_data_node *node);
@@ -139,7 +139,7 @@ xml_data_node *xml_file_create(void)
nodes
-------------------------------------------------*/
-xml_data_node *xml_file_read(core_file *file, xml_parse_options *opts)
+xml_data_node *xml_file_read(util::core_file &file, xml_parse_options *opts)
{
xml_parse_info parse_info;
int done;
@@ -154,8 +154,8 @@ xml_data_node *xml_file_read(core_file *file, xml_parse_options *opts)
char tempbuf[TEMP_BUFFER_SIZE];
/* read as much as we can */
- int bytes = core_fread(file, tempbuf, sizeof(tempbuf));
- done = core_feof(file);
+ int bytes = file.read(tempbuf, sizeof(tempbuf));
+ done = file.eof();
/* parse the data */
if (XML_Parse(parse_info.parser, tempbuf, bytes, done) == XML_STATUS_ERROR)
@@ -223,15 +223,15 @@ xml_data_node *xml_string_read(const char *string, xml_parse_options *opts)
xml_file_write - write an XML tree to a file
-------------------------------------------------*/
-void xml_file_write(xml_data_node *node, core_file *file)
+void xml_file_write(xml_data_node *node, util::core_file &file)
{
/* ensure this is a root node */
if (node->name != nullptr)
return;
/* output a simple header */
- core_fprintf(file, "<?xml version=\"1.0\"?>\n");
- core_fprintf(file, "<!-- This file is autogenerated; comments and unknown tags will be stripped -->\n");
+ file.printf("<?xml version=\"1.0\"?>\n");
+ file.printf("<!-- This file is autogenerated; comments and unknown tags will be stripped -->\n");
/* loop over children of the root and output */
for (node = node->child; node; node = node->next)
@@ -1002,7 +1002,7 @@ static xml_attribute_node *add_attribute(xml_data_node *node, const char *name,
-------------------------------------------------*/
/**
- * @fn static void write_node_recursive(xml_data_node *node, int indent, core_file *file)
+ * @fn static void write_node_recursive(xml_data_node *node, int indent, util::core_file &file)
*
* @brief Writes a node recursive.
*
@@ -1011,30 +1011,30 @@ static xml_attribute_node *add_attribute(xml_data_node *node, const char *name,
* @param [in,out] file If non-null, the file.
*/
-static void write_node_recursive(xml_data_node *node, int indent, core_file *file)
+static void write_node_recursive(xml_data_node *node, int indent, util::core_file &file)
{
xml_attribute_node *anode;
xml_data_node *child;
/* output this tag */
- core_fprintf(file, "%*s<%s", indent, "", node->name);
+ file.printf("%*s<%s", indent, "", node->name);
/* output any attributes */
for (anode = node->attribute; anode; anode = anode->next)
- core_fprintf(file, " %s=\"%s\"", anode->name, anode->value);
+ file.printf(" %s=\"%s\"", anode->name, anode->value);
/* if there are no children and no value, end the tag here */
if (node->child == nullptr && node->value == nullptr)
- core_fprintf(file, " />\n");
+ file.printf(" />\n");
/* otherwise, close this tag and output more stuff */
else
{
- core_fprintf(file, ">\n");
+ file.printf(">\n");
/* if there is a value, output that here */
if (node->value != nullptr)
- core_fprintf(file, "%*s%s\n", indent + 4, "", node->value);
+ file.printf("%*s%s\n", indent + 4, "", node->value);
/* loop over children and output them as well */
if (node->child != nullptr)
@@ -1044,7 +1044,7 @@ static void write_node_recursive(xml_data_node *node, int indent, core_file *fil
}
/* write a closing tag */
- core_fprintf(file, "%*s</%s>\n", indent, "", node->name);
+ file.printf("%*s</%s>\n", indent, "", node->name);
}
}
diff --git a/src/lib/util/xmlfile.h b/src/lib/util/xmlfile.h
index 06412abbefe..e116366643f 100644
--- a/src/lib/util/xmlfile.h
+++ b/src/lib/util/xmlfile.h
@@ -97,13 +97,13 @@ struct xml_parse_options
xml_data_node *xml_file_create(void);
/* parse an XML file into its nodes */
-xml_data_node *xml_file_read(core_file *file, xml_parse_options *opts);
+xml_data_node *xml_file_read(util::core_file &file, xml_parse_options *opts);
/* parse an XML string into its nodes */
xml_data_node *xml_string_read(const char *string, xml_parse_options *opts);
/* write an XML tree to a file */
-void xml_file_write(xml_data_node *node, core_file *file);
+void xml_file_write(xml_data_node *node, util::core_file &file);
/* free an XML file object */
void xml_file_free(xml_data_node *node);
diff --git a/src/lib/util/zippath.cpp b/src/lib/util/zippath.cpp
index 84674eb1fe2..efe7c710481 100644
--- a/src/lib/util/zippath.cpp
+++ b/src/lib/util/zippath.cpp
@@ -298,7 +298,7 @@ static file_error file_error_from_zip_error(zip_error ziperr)
-------------------------------------------------*/
/**
- * @fn static file_error create_core_file_from_zip(zip_file *zip, const zip_file_header *header, core_file *&file)
+ * @fn static file_error create_core_file_from_zip(zip_file *zip, const zip_file_header *header, util::core_file::ptr &file)
*
* @brief Creates core file from zip.
*
@@ -309,7 +309,7 @@ static file_error file_error_from_zip_error(zip_error ziperr)
* @return The new core file from zip.
*/
-static file_error create_core_file_from_zip(zip_file *zip, const zip_file_header *header, core_file *&file)
+static file_error create_core_file_from_zip(zip_file *zip, const zip_file_header *header, util::core_file::ptr &file)
{
file_error filerr;
zip_error ziperr;
@@ -329,7 +329,7 @@ static file_error create_core_file_from_zip(zip_file *zip, const zip_file_header
goto done;
}
- filerr = core_fopen_ram_copy(ptr, header->uncompressed_length, OPEN_FLAG_READ, &file);
+ filerr = util::core_file::open_ram_copy(ptr, header->uncompressed_length, OPEN_FLAG_READ, file);
if (filerr != FILERR_NONE)
goto done;
@@ -345,7 +345,7 @@ done:
-------------------------------------------------*/
/**
- * @fn file_error zippath_fopen(const char *filename, UINT32 openflags, core_file *&file, std::string &revised_path)
+ * @fn file_error zippath_fopen(const char *filename, UINT32 openflags, util::core_file::ptr &file, std::string &revised_path)
*
* @brief Zippath fopen.
*
@@ -357,7 +357,7 @@ done:
* @return A file_error.
*/
-file_error zippath_fopen(const char *filename, UINT32 openflags, core_file *&file, std::string &revised_path)
+file_error zippath_fopen(const char *filename, UINT32 openflags, util::core_file::ptr &file, std::string &revised_path)
{
file_error filerr = FILERR_NOT_FOUND;
zip_error ziperr;
@@ -421,7 +421,7 @@ file_error zippath_fopen(const char *filename, UINT32 openflags, core_file *&fil
}
if (subpath.length() == 0)
- filerr = core_fopen(filename, openflags, &file);
+ filerr = util::core_file::open(filename, openflags, file);
else
filerr = FILERR_NOT_FOUND;
diff --git a/src/lib/util/zippath.h b/src/lib/util/zippath.h
index 960b50851e7..ce40c87ba8d 100644
--- a/src/lib/util/zippath.h
+++ b/src/lib/util/zippath.h
@@ -45,7 +45,7 @@ std::string &zippath_combine(std::string &dst, const char *path1, const char *pa
/* ----- file operations ----- */
/* opens a zip path file */
-file_error zippath_fopen(const char *filename, UINT32 openflags, core_file *&file, std::string &revised_path);
+file_error zippath_fopen(const char *filename, UINT32 openflags, util::core_file::ptr &file, std::string &revised_path);
/* ----- directory operations ----- */
diff --git a/src/mame/audio/atarijsa.cpp b/src/mame/audio/atarijsa.cpp
index 6b9781c9e49..26581c21550 100644
--- a/src/mame/audio/atarijsa.cpp
+++ b/src/mame/audio/atarijsa.cpp
@@ -308,7 +308,7 @@ atari_jsa_base_device::atari_jsa_base_device(const machine_config &mconfig, devi
void atari_jsa_base_device::device_start()
{
// configure CPU bank
- m_cpu_bank->configure_entries(0, 4, m_jsacpu->region()->base() + 0x10000, 0x1000);
+ m_cpu_bank->configure_entries(0, 4, m_jsacpu->region()->base(), 0x1000);
// resolve devices
m_test_read_cb.resolve_safe(0);
@@ -580,7 +580,7 @@ void atari_jsa_oki_base_device::device_start()
{
m_oki2_banklo->configure_entries(0, 2, m_oki2->region()->base() + 0x00000, 0x00000);
m_oki2_banklo->configure_entries(2, 2, m_oki2->region()->base() + 0x20000, 0x20000);
- m_oki2_bankhi->set_base(m_oki1->region()->base() + 0x60000);
+ m_oki2_bankhi->set_base(m_oki2->region()->base() + 0x60000);
}
}
diff --git a/src/mame/audio/cyberbal.cpp b/src/mame/audio/cyberbal.cpp
index 60383a64503..249a220efc8 100644
--- a/src/mame/audio/cyberbal.cpp
+++ b/src/mame/audio/cyberbal.cpp
@@ -15,8 +15,7 @@
void cyberbal_state::cyberbal_sound_reset()
{
/* reset the sound system */
- m_bank_base = &memregion("audiocpu")->base()[0x10000];
- membank("soundbank")->set_base(&m_bank_base[0x0000]);
+ membank("soundbank")->set_entry(0);
m_fast_68k_int = m_io_68k_int = 0;
m_sound_data_from_68k = m_sound_data_from_6502 = 0;
m_sound_data_from_68k_ready = m_sound_data_from_6502_ready = 0;
@@ -51,7 +50,7 @@ READ8_MEMBER(cyberbal_state::sound_6502_stat_r)
WRITE8_MEMBER(cyberbal_state::sound_bank_select_w)
{
- membank("soundbank")->set_base(&m_bank_base[0x1000 * ((data >> 6) & 3)]);
+ membank("soundbank")->set_entry((data >> 6) & 3);
machine().bookkeeping().coin_counter_w(1, (data >> 5) & 1);
machine().bookkeeping().coin_counter_w(0, (data >> 4) & 1);
m_daccpu->set_input_line(INPUT_LINE_RESET, (data & 0x08) ? CLEAR_LINE : ASSERT_LINE);
diff --git a/src/mame/audio/flower.cpp b/src/mame/audio/flower.cpp
deleted file mode 100644
index fc8ef87b559..00000000000
--- a/src/mame/audio/flower.cpp
+++ /dev/null
@@ -1,337 +0,0 @@
-// license:???
-// copyright-holders:hap, insideoutboy
-/* Clarue Flower sound driver.
-Initial version was based on the Wiping sound driver, which was based on the old namco.c sound driver.
-
-TODO:
-- timing (see main driver file), but also of samplerate and effects counter
-- what do the unknown bits in soundregs do?
-- Are channel effects correct? It's currently mostly guesswork, the pitch effects sound pretty convincing though.
- Considering that the game sound hardware isn't complicated (no dedicated soundchip) these bits are possibly
- for something way simpler, such as a length counter. PCB sound recordings would be useful!
-
-*/
-
-#include "emu.h"
-#include "includes/flower.h"
-
-#define FLOWER_VERBOSE 0 // show register writes
-
-#define MIXER_SAMPLERATE 48000 /* ? (native freq is probably in the MHz range) */
-#define MIXER_DEFGAIN 48
-
-
-const device_type FLOWER = &device_creator<flower_sound_device>;
-
-flower_sound_device::flower_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : device_t(mconfig, FLOWER, "Flower Audio Custom", tag, owner, clock, "flower_sound", __FILE__),
- device_sound_interface(mconfig, *this)
-{
-}
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void flower_sound_device::device_config_complete()
-{
-}
-
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
-void flower_sound_device::device_start()
-{
- flower_sound_channel *voice;
-
- m_effect_timer = timer_alloc(TIMER_CLOCK_EFFECT);
- m_stream = machine().sound().stream_alloc(*this, 0, 1, MIXER_SAMPLERATE);
- m_mixer_buffer = std::make_unique<short[]>(MIXER_SAMPLERATE);
- make_mixer_table(8, MIXER_DEFGAIN);
-
- /* extract globals from the interface */
- m_last_channel = m_channel_list + 8;
-
- m_sample_rom = machine().root_device().memregion("sound1")->base();
- m_volume_rom = machine().root_device().memregion("sound2")->base();
-
- /* register for savestates */
- for (int i = 0; i < 8; i++)
- {
- voice = &m_channel_list[i];
-
- save_item(NAME(voice->freq), i+1);
- save_item(NAME(voice->pos), i+1);
- save_item(NAME(voice->volume), i+1);
- save_item(NAME(voice->voltab), i+1);
- save_item(NAME(voice->effect), i+1);
- save_item(NAME(voice->ecount), i+1);
- save_item(NAME(voice->oneshot), i+1);
- save_item(NAME(voice->active), i+1);
- save_item(NAME(voice->start), i+1);
- }
-}
-
-//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void flower_sound_device::device_reset()
-{
- flower_sound_channel *voice;
- attotime period;
-
- /* reset effect timer, period is unknown/guessed */
- period = attotime::from_hz(MIXER_SAMPLERATE / 256);
- m_effect_timer->adjust(period, 0, period);
-
- /* reset all the voices */
- for (auto & elem : m_channel_list)
- {
- voice = &elem;
-
- voice->freq = 0;
- voice->pos = 0;
- voice->volume = 0;
- voice->voltab = 0;
- voice->effect = 0;
- voice->ecount = 0;
- voice->oneshot = 1;
- voice->active = 0;
- voice->start = 0;
- }
-
- memset(m_soundregs1, 0, 0x40);
- memset(m_soundregs2, 0, 0x40);
-}
-
-/* build a table to divide by the number of voices; gain is specified as gain*16 */
-void flower_sound_device::make_mixer_table(int voices, int gain)
-{
- int count = voices * 128;
-
- /* allocate memory */
- m_mixer_table = std::make_unique<INT16[]>(256 * voices);
-
- /* find the middle of the table */
- m_mixer_lookup = m_mixer_table.get() + (128 * voices);
-
- /* fill in the table - 16 bit case */
- for (int i = 0; i < count; i++)
- {
- int val = i * gain * 16 / voices;
- if (val > 32767) val = 32767;
- m_mixer_lookup[ i] = val;
- m_mixer_lookup[-i] =-val;
- }
-}
-
-
-/* clock sound channel effect counters */
-void flower_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
-{
- switch (id)
- {
- case TIMER_CLOCK_EFFECT:
- flower_sound_channel *voice;
- m_stream->update();
-
- for (voice = m_channel_list; voice < m_last_channel; voice++)
- voice->ecount += (voice->ecount < (1<<22));
- break;
-
- default:
- assert_always(FALSE, "Unknown id in flower_sound_device::device_timer");
- }
-}
-
-/********************************************************************************/
-
-#if FLOWER_VERBOSE
-static int r_numwrites[2][8] = {{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}};
-void flower_sound_device::show_soundregs()
-{
- int set,reg,chan;
- char text[0x100];
- char message[0x1000] = {0};
- UINT8 *base = m_soundregs1;
-
- for (set=0;set<2;set++)
- {
- for (reg=0;reg<8;reg++)
- {
- sprintf(text,"R%d%d:",set+1,reg);
- strcat(message,text);
-
- for (chan=0;chan<8;chan++)
- {
- sprintf(text," %02X",base[reg + 8*chan]);
- strcat(message,text);
- }
- sprintf(text," - %07d\n",r_numwrites[set][reg]);
- strcat(message,text);
- }
- strcat(message,"\n");
- base = m_soundregs2;
- }
- popmessage("%s",message);
-}
-#endif // FLOWER_VERBOSE
-
-
-/* register functions (preliminary):
-offset: cccrrr c=channel, r=register
-
-set 1:
-R 76543210
-0 xxxxxxxx frequency (which nibble?)
-1 xxxxxxxx *
-2 xxxxxxxx *
-3 xxxxxxxx *
-4 ...x.... one-shot sample
-5 ...x.... ??? same as R4?
-6 ........ unused
-7 xxxx.... volume
-
-set 2:
-R 76543210
-0 ....xxxx start address
-1 ....xxxx *
-2 ....xxxx *
-3 ....xxxx *
-4 xxxx assume it's channel pitch/volume effects
- xxxx start address
-5 x... ???
- xxxx start address
-6 ........ unused
-7 ......xx volume table + start trigger
-
-*/
-
-WRITE8_MEMBER( flower_sound_device::sound1_w )
-{
- flower_sound_channel *voice = &m_channel_list[offset >> 3 & 7];
- int c = offset & 0xf8;
- UINT8 *base1 = m_soundregs1;
-// UINT8 *base2 = m_soundregs2;
-
- m_stream->update();
- base1[offset] = data;
-#if FLOWER_VERBOSE
- r_numwrites[0][offset & 7]++;
- show_soundregs();
-#endif
-
- // recompute voice parameters
- voice->freq = (base1[c+2] & 0xf) << 12 | (base1[c+3] & 0xf) << 8 | (base1[c+0] & 0xf) << 4 | (base1[c+1] & 0xf);
- voice->volume = base1[c+7] >> 4;
-}
-
-WRITE8_MEMBER( flower_sound_device::sound2_w )
-{
- flower_sound_channel *voice = &m_channel_list[offset >> 3 & 7];
- int i, c = offset & 0xf8;
- UINT8 *base1 = m_soundregs1;
- UINT8 *base2 = m_soundregs2;
-
- m_stream->update();
- base2[offset] = data;
-#if FLOWER_VERBOSE
- r_numwrites[1][offset & 7]++;
- show_soundregs();
-#endif
-
- // reg 7 is start trigger!
- if ((offset & 7) != 7)
- return;
-
- voice->voltab = (base2[c+7] & 3) << 4;
- voice->oneshot = (~base1[c+4] & 0x10) >> 4;
- voice->effect = base2[c+4] >> 4;
- voice->ecount = 0;
- voice->pos = 0;
- voice->active = 1;
-
- // full start address is 6 nibbles
- voice->start = 0;
- for (i = 5; i >= 0; i--)
- voice->start = (voice->start << 4) | (base2[c+i] & 0xf);
-}
-
-
-//-------------------------------------------------
-// sound_stream_update - handle a stream update
-//-------------------------------------------------
-
-void flower_sound_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
-{
- stream_sample_t *buffer = outputs[0];
- flower_sound_channel *voice;
- short *mix;
- int i;
-
- /* zap the contents of the mixer buffer */
- memset(m_mixer_buffer.get(), 0, samples * sizeof(short));
-
- /* loop over each voice and add its contribution */
- for (voice = m_channel_list; voice < m_last_channel; voice++)
- {
- int f = voice->freq;
- int v = voice->volume;
-
- if (!voice->active)
- continue;
-
- // effects
- // bit 0: volume slide down?
- if (voice->effect & 1 && !voice->oneshot)
- {
- // note: one-shot samples are fixed volume
- v -= (voice->ecount >> 4);
- if (v < 0) v = 0;
- }
- // bit 1: used often, but hard to figure out what for
- // bit 2: probably pitch slide
- if (voice->effect & 4)
- {
- f -= (voice->ecount << 7);
- if (f < 0) f = 0;
- }
- // bit 3: not used much, maybe pitch slide the other way?
-
- v |= voice->voltab;
- mix = m_mixer_buffer.get();
-
- for (i = 0; i < samples; i++)
- {
- // add sample
- if (voice->oneshot)
- {
- UINT8 sample = m_sample_rom[(voice->start + voice->pos) >> 7 & 0x7fff];
- if (sample == 0xff)
- {
- voice->active = 0;
- break;
- }
- else
- *mix++ += m_volume_rom[v << 8 | sample] - 0x80;
- }
- else
- {
- UINT8 sample = m_sample_rom[(voice->start >> 7 & 0x7e00) | (voice->pos >> 7 & 0x1ff)];
- *mix++ += m_volume_rom[v << 8 | sample] - 0x80;
- }
-
- // update counter
- voice->pos += f;
- }
- }
-
- /* mix it down */
- mix = m_mixer_buffer.get();
- for (i = 0; i < samples; i++)
- *buffer++ = m_mixer_lookup[*mix++];
-}
diff --git a/src/mame/audio/nl_kidniki.inc b/src/mame/audio/nl_kidniki.inc
index bdb178f82c4..d9040214583 100644
--- a/src/mame/audio/nl_kidniki.inc
+++ b/src/mame/audio/nl_kidniki.inc
@@ -1,4 +1,5 @@
-
+// license:BSD-3-Clause
+// copyright-holders:Andrew Gardner, Couriersud
#include "netlist/devices/net_lib.h"
#ifndef USE_FRONTIERS
diff --git a/src/mame/audio/segam1audio.cpp b/src/mame/audio/segam1audio.cpp
index 3e5a37120a3..0eb84eed88a 100644
--- a/src/mame/audio/segam1audio.cpp
+++ b/src/mame/audio/segam1audio.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Olivier Galibert
+// copyright-holders:R. Belmont
/***************************************************************************
Sega Model 1 sound board (68000 + 2x 315-5560 "MultiPCM")
@@ -16,7 +16,8 @@
#define YM3438_TAG "m1ym"
static ADDRESS_MAP_START( segam1audio_map, AS_PROGRAM, 16, segam1audio_device )
- AM_RANGE(0x000000, 0x0bffff) AM_ROM AM_REGION(":m1sndcpu", 0)
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_REGION(":m1sndcpu", 0)
+ AM_RANGE(0x080000, 0x09ffff) AM_ROM AM_REGION(":m1sndcpu", 0x20000) // mirror of upper ROM socket
AM_RANGE(0xc20000, 0xc20001) AM_READWRITE(m1_snd_68k_latch_r, m1_snd_68k_latch1_w )
AM_RANGE(0xc20002, 0xc20003) AM_READWRITE(m1_snd_v60_ready_r, m1_snd_68k_latch2_w )
AM_RANGE(0xc40000, 0xc40007) AM_DEVREADWRITE8(MULTIPCM_1_TAG, multipcm_device, read, write, 0x00ff )
diff --git a/src/mame/audio/segam1audio.h b/src/mame/audio/segam1audio.h
index e188a5502a4..9cba756c5e2 100644
--- a/src/mame/audio/segam1audio.h
+++ b/src/mame/audio/segam1audio.h
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Olivier Galibert
+// copyright-holders:R. Belmont
#pragma once
#ifndef __SEGAM1AUDIO_H__
diff --git a/src/mame/audio/taito_en.cpp b/src/mame/audio/taito_en.cpp
index 7fc4a193a17..4e518f0fce7 100644
--- a/src/mame/audio/taito_en.cpp
+++ b/src/mame/audio/taito_en.cpp
@@ -20,10 +20,10 @@ const device_type TAITO_EN = &device_creator<taito_en_device>;
taito_en_device::taito_en_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, TAITO_EN, "Taito Ensoniq Sound System", tag, owner, clock, "taito_en", __FILE__),
- m_audiocpu(*this, ":audiocpu"),
- m_ensoniq(*this, ":ensoniq"),
- m_duart68681(*this, ":duart68681"),
- m_mb87078(*this, ":mb87078"),
+ m_audiocpu(*this, "audiocpu"),
+ m_ensoniq(*this, "ensoniq"),
+ m_duart68681(*this, "duart68681"),
+ m_mb87078(*this, "mb87078"),
m_snd_shared_ram(*this, ":snd_shared"),
m_es5510_dol_latch(0),
m_es5510_dil_latch(0),
@@ -56,11 +56,11 @@ void taito_en_device::device_start()
void taito_en_device::device_reset()
{
/* Sound cpu program loads to 0xc00000 so we use a bank */
- UINT16 *ROM = (UINT16 *)machine().root_device().memregion("audiocpu")->base();
- UINT16 *sound_ram = (UINT16 *)machine().root_device().memshare("share1")->ptr();
- machine().root_device().membank("bank1")->set_base(&ROM[0x80000]);
- machine().root_device().membank("bank2")->set_base(&ROM[0x90000]);
- machine().root_device().membank("bank3")->set_base(&ROM[0xa0000]);
+ UINT16 *ROM = (UINT16 *)memregion("audiocpu")->base();
+ UINT16 *sound_ram = (UINT16 *)memshare("share1")->ptr();
+ membank("bank1")->set_base(&ROM[0x80000]);
+ membank("bank2")->set_base(&ROM[0x90000]);
+ membank("bank3")->set_base(&ROM[0xa0000]);
sound_ram[0] = ROM[0x80000]; /* Stack and Reset vectors */
sound_ram[1] = ROM[0x80001];
@@ -105,7 +105,7 @@ WRITE8_MEMBER( taito_en_device::en_68000_share_w )
WRITE16_MEMBER( taito_en_device::en_es5505_bank_w )
{
- UINT32 max_banks_this_game = (space.machine().root_device().memregion("ensoniq.0")->bytes()/0x200000)-1;
+ UINT32 max_banks_this_game = (memregion(":ensoniq.0")->bytes()/0x200000)-1;
/* mask out unused bits */
data &= max_banks_this_game;
@@ -146,7 +146,7 @@ READ16_MEMBER( taito_en_device::es5510_dsp_r )
WRITE16_MEMBER( taito_en_device::es5510_dsp_w )
{
- UINT8 *snd_mem = (UINT8 *)space.machine().root_device().memregion("ensoniq.0")->base();
+ UINT8 *snd_mem = (UINT8 *)memregion(":ensoniq.0")->base();
// if (offset>4 && offset!=0x80 && offset!=0xa0 && offset!=0xc0 && offset!=0xe0)
// logerror("%06x: DSP write offset %04x %04x\n",space.device().safe_pc(),offset,data);
@@ -218,14 +218,14 @@ WRITE16_MEMBER( taito_en_device::es5510_dsp_w )
*
*************************************/
-static ADDRESS_MAP_START( en_sound_map, AS_PROGRAM, 16, driver_device )
+static ADDRESS_MAP_START( en_sound_map, AS_PROGRAM, 16, taito_en_device )
AM_RANGE(0x000000, 0x00ffff) AM_RAM AM_MIRROR(0x30000) AM_SHARE("share1")
- AM_RANGE(0x140000, 0x140fff) AM_DEVREADWRITE8("taito_en", taito_en_device, en_68000_share_r, en_68000_share_w, 0xff00)
+ AM_RANGE(0x140000, 0x140fff) AM_READWRITE8(en_68000_share_r, en_68000_share_w, 0xff00)
AM_RANGE(0x200000, 0x20001f) AM_DEVREADWRITE("ensoniq", es5505_device, read, write)
- AM_RANGE(0x260000, 0x2601ff) AM_DEVREADWRITE("taito_en", taito_en_device, es5510_dsp_r, es5510_dsp_w) //todo: hook up cpu/es5510
+ AM_RANGE(0x260000, 0x2601ff) AM_READWRITE(es5510_dsp_r, es5510_dsp_w) //todo: hook up cpu/es5510
AM_RANGE(0x280000, 0x28001f) AM_DEVREADWRITE8("duart68681", mc68681_device, read, write, 0x00ff)
- AM_RANGE(0x300000, 0x30003f) AM_DEVWRITE("taito_en", taito_en_device, en_es5505_bank_w)
- AM_RANGE(0x340000, 0x340003) AM_DEVWRITE8("taito_en", taito_en_device, en_volume_w, 0xff00)
+ AM_RANGE(0x300000, 0x30003f) AM_WRITE(en_es5505_bank_w)
+ AM_RANGE(0x340000, 0x340003) AM_WRITE8(en_volume_w, 0xff00)
AM_RANGE(0xc00000, 0xc1ffff) AM_ROMBANK("bank1")
AM_RANGE(0xc20000, 0xc3ffff) AM_ROMBANK("bank2")
AM_RANGE(0xc40000, 0xc7ffff) AM_ROMBANK("bank3")
@@ -295,16 +295,15 @@ WRITE_LINE_MEMBER(taito_en_device::duart_irq_handler)
MACHINE_CONFIG_FRAGMENT( taito_en_sound )
/* basic machine hardware */
- MCFG_TAITO_EN_ADD("taito_en")
MCFG_CPU_ADD("audiocpu", M68000, XTAL_30_4761MHz / 2)
MCFG_CPU_PROGRAM_MAP(en_sound_map)
MCFG_MC68681_ADD("duart68681", XTAL_16MHz / 4)
MCFG_MC68681_SET_EXTERNAL_CLOCKS(XTAL_16MHz/2/8, XTAL_16MHz/2/16, XTAL_16MHz/2/16, XTAL_16MHz/2/8)
- MCFG_MC68681_IRQ_CALLBACK(DEVWRITELINE("taito_en", taito_en_device, duart_irq_handler))
+ MCFG_MC68681_IRQ_CALLBACK(WRITELINE(taito_en_device, duart_irq_handler))
MCFG_DEVICE_ADD("mb87078", MB87078, 0)
- MCFG_MB87078_GAIN_CHANGED_CB(DEVWRITE8("taito_en", taito_en_device, mb87078_gain_changed))
+ MCFG_MB87078_GAIN_CHANGED_CB(WRITE8(taito_en_device, mb87078_gain_changed))
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@@ -315,3 +314,13 @@ MACHINE_CONFIG_FRAGMENT( taito_en_sound )
MCFG_SOUND_ROUTE(0, "lspeaker", 0.08)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.08)
MACHINE_CONFIG_END
+
+//-------------------------------------------------
+// machine_config_additions - device-specific
+// machine configurations
+//-------------------------------------------------
+
+machine_config_constructor taito_en_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( taito_en_sound );
+}
diff --git a/src/mame/audio/taito_en.h b/src/mame/audio/taito_en.h
index 395a313a07a..0d4fee8a30f 100644
--- a/src/mame/audio/taito_en.h
+++ b/src/mame/audio/taito_en.h
@@ -35,6 +35,7 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual machine_config_constructor device_mconfig_additions() const override;
private:
// inherited devices/pointers
@@ -56,8 +57,3 @@ private:
};
extern const device_type TAITO_EN;
-
-MACHINE_CONFIG_EXTERN( taito_en_sound );
-
-#define MCFG_TAITO_EN_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, TAITO_EN, 0)
diff --git a/src/mame/drivers/8080bw.cpp b/src/mame/drivers/8080bw.cpp
index 4df457ce129..b5d7bbe462f 100644
--- a/src/mame/drivers/8080bw.cpp
+++ b/src/mame/drivers/8080bw.cpp
@@ -789,7 +789,7 @@ MACHINE_CONFIG_START( spacecom, _8080bw_state )
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1)
MCFG_SCREEN_UPDATE_DRIVER(_8080bw_state, screen_update_spacecom)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_FRAGMENT_ADD(invaders_audio)
@@ -2543,7 +2543,7 @@ MACHINE_CONFIG_START( shuttlei, _8080bw_state )
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 24*8-1)
MCFG_SCREEN_UPDATE_DRIVER(_8080bw_state, screen_update_shuttlei)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_FRAGMENT_ADD(invaders_samples_audio)
diff --git a/src/mame/drivers/a51xx.cpp b/src/mame/drivers/a51xx.cpp
index 2284450bde4..5d51870eaad 100644
--- a/src/mame/drivers/a51xx.cpp
+++ b/src/mame/drivers/a51xx.cpp
@@ -128,7 +128,7 @@ static MACHINE_CONFIG_START( a5120, a51xx_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", a51xx)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/a7150.cpp b/src/mame/drivers/a7150.cpp
index 3559e6548b2..f6e4d8398fc 100644
--- a/src/mame/drivers/a7150.cpp
+++ b/src/mame/drivers/a7150.cpp
@@ -67,7 +67,7 @@ static MACHINE_CONFIG_START( a7150, a7150_state )
MCFG_SCREEN_UPDATE_DRIVER(a7150_state, screen_update_a7150)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/ac1.cpp b/src/mame/drivers/ac1.cpp
index bf67bbfff9e..ba3f64c8836 100644
--- a/src/mame/drivers/ac1.cpp
+++ b/src/mame/drivers/ac1.cpp
@@ -145,7 +145,7 @@ static MACHINE_CONFIG_START( ac1, ac1_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ac1 )
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
diff --git a/src/mame/drivers/ace.cpp b/src/mame/drivers/ace.cpp
index 46b86ba5e09..ace8a5a1b07 100644
--- a/src/mame/drivers/ace.cpp
+++ b/src/mame/drivers/ace.cpp
@@ -331,7 +331,7 @@ static MACHINE_CONFIG_START( ace, aceal_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ace)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
/* ???? */
diff --git a/src/mame/drivers/aerofgt.cpp b/src/mame/drivers/aerofgt.cpp
index af333697ce9..2ad00982f1a 100644
--- a/src/mame/drivers/aerofgt.cpp
+++ b/src/mame/drivers/aerofgt.cpp
@@ -129,10 +129,9 @@ WRITE16_MEMBER(aerofgt_state::aerfboo2_okim6295_banking_w)
WRITE8_MEMBER(aerofgt_state::aerfboot_okim6295_banking_w)
{
- UINT8 *oki = memregion("oki")->base();
/*bit 2 (0x4) setted too?*/
if (data & 0x4)
- memcpy(&oki[0x20000], &oki[((data & 0x3) * 0x20000) + 0x40000], 0x20000);
+ membank("okibank")->set_entry(data & 0x3);
}
static ADDRESS_MAP_START( pspikes_map, AS_PROGRAM, 16, aerofgt_state )
@@ -418,6 +417,11 @@ static ADDRESS_MAP_START( karatblzbl_sound_map, AS_PROGRAM, 8, aerofgt_state )
AM_RANGE(0x7800, 0x7fff) AM_RAM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( oki_map, AS_0, 8, aerofgt_state ) //only for aerfboot for now
+ AM_RANGE(0x00000, 0x1ffff) AM_ROM
+ AM_RANGE(0x20000, 0x3ffff) AM_ROMBANK("okibank")
+ADDRESS_MAP_END
+
static INPUT_PORTS_START( pspikes )
PORT_START("IN0")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
@@ -1799,6 +1803,7 @@ static MACHINE_CONFIG_START( aerfboot, aerofgt_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_OKIM6295_ADD("oki", 1056000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@@ -2696,9 +2701,9 @@ ROM_START( aerfboot )
ROM_LOAD( "afb_ep13.td", 0x000000, 0x40000, CRC(1830f70c) SHA1(1759de9b56e4999defc08b2423eff38ec98c4f17) )
ROM_LOAD( "afb_ep11.tb", 0x040000, 0x40000, CRC(6298c0eb) SHA1(ede63849973742c67637eac0ec9cda95ea2ecebc) )
- ROM_REGION( 0xc0000, "oki", ROMREGION_ERASEFF ) /* sound samples */
+ ROM_REGION( 0xa0000, "oki", ROMREGION_ERASEFF ) /* sound samples */
ROM_LOAD( "afb_ep5.u29", 0x000000, 0x20000, CRC(3559609a) SHA1(6f0b633bf74f41487fc98dcdc43a83eb67f3d14c) )
- ROM_LOAD( "afb_ep4.u30", 0x040000, 0x80000, CRC(f9652163) SHA1(d8c1fcf44b350cc65378869e4eb188ea232b4948) )
+ ROM_LOAD( "afb_ep4.u30", 0x020000, 0x80000, CRC(f9652163) SHA1(d8c1fcf44b350cc65378869e4eb188ea232b4948) )
ROM_END
ROM_START( aerfboo2 )
@@ -2756,6 +2761,12 @@ ROM_START( wbbc97 )
ROM_END
+DRIVER_INIT_MEMBER(aerofgt_state, banked_oki)
+{
+ membank("okibank")->configure_entries(0, 4, memregion("oki")->base() + 0x20000, 0x20000);
+}
+
+
GAME( 1990, spinlbrk, 0, spinlbrk, spinlbrk, driver_device, 0, ROT0, "V-System Co.", "Spinal Breakers (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1990, spinlbrku,spinlbrk, spinlbrk, spinlbrku, driver_device,0, ROT0, "V-System Co.", "Spinal Breakers (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1990, spinlbrkj,spinlbrk, spinlbrk, spinlbrk, driver_device, 0, ROT0, "V-System Co.", "Spinal Breakers (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
@@ -2785,5 +2796,5 @@ GAME( 1992, aerofgt, 0, aerofgt, aerofgt, driver_device, 0, ROT270, "V
GAME( 1992, aerofgtb, aerofgt, aerofgtb, aerofgtb, driver_device, 0, ROT270, "Video System Co.", "Aero Fighters (Taiwan / Japan, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) // probably intended for Taiwan because the Japanese name is Sonic Wings (below)
GAME( 1992, aerofgtc, aerofgt, aerofgtb, aerofgtb, driver_device, 0, ROT270, "Video System Co.", "Aero Fighters (Taiwan / Japan, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1992, sonicwi, aerofgt, aerofgtb, aerofgtb, driver_device, 0, ROT270, "Video System Co.", "Sonic Wings (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
-GAME( 1992, aerfboot, aerofgt, aerfboot, aerofgtb, driver_device, 0, ROT270, "bootleg", "Aero Fighters (bootleg set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND )
+GAME( 1992, aerfboot, aerofgt, aerfboot, aerofgtb, aerofgt_state, banked_oki, ROT270, "bootleg", "Aero Fighters (bootleg set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND )
GAME( 1992, aerfboo2, aerofgt, aerfboo2, aerofgtb, driver_device, 0, ROT270, "bootleg", "Aero Fighters (bootleg set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/drivers/alesis.cpp b/src/mame/drivers/alesis.cpp
index ceda2d749d8..132c60cc7bf 100644
--- a/src/mame/drivers/alesis.cpp
+++ b/src/mame/drivers/alesis.cpp
@@ -372,7 +372,7 @@ static MACHINE_CONFIG_START( hr16, alesis_state )
MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_PALETTE_INIT_OWNER(alesis_state, alesis)
MCFG_CASSETTE_ADD( "cassette" )
diff --git a/src/mame/drivers/alto2.cpp b/src/mame/drivers/alto2.cpp
index 7f1884639a5..a7007273401 100644
--- a/src/mame/drivers/alto2.cpp
+++ b/src/mame/drivers/alto2.cpp
@@ -270,7 +270,7 @@ static MACHINE_CONFIG_START( alto2, alto2_state )
MCFG_CPU_IO_MAP(alto2_iomem_map)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::white)
MCFG_SCREEN_RAW_PARAMS(XTAL_20_16MHz,
ALTO2_DISPLAY_TOTAL_WIDTH, 0, ALTO2_DISPLAY_WIDTH,
ALTO2_DISPLAY_TOTAL_HEIGHT, 0, ALTO2_DISPLAY_HEIGHT + ALTO2_FAKE_STATUS_H)
@@ -282,7 +282,7 @@ static MACHINE_CONFIG_START( alto2, alto2_state )
MCFG_DEFAULT_LAYOUT( layout_vertical )
- MCFG_PALETTE_ADD_WHITE_AND_BLACK("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DIABLO_DRIVES_ADD()
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/amstr_pc.cpp b/src/mame/drivers/amstr_pc.cpp
index d33fa47a6b3..613b1717bb9 100644
--- a/src/mame/drivers/amstr_pc.cpp
+++ b/src/mame/drivers/amstr_pc.cpp
@@ -31,7 +31,7 @@ More information can be found at http://www.seasip.info/AmstradXT/1640tech/index
#include "cpu/i86/i86.h"
#include "machine/mc146818.h"
-#include "includes/genpc.h"
+#include "machine/genpc.h"
#include "bus/isa/isa.h"
#include "bus/isa/isa_cards.h"
@@ -71,8 +71,6 @@ public:
DECLARE_READ8_MEMBER( pc1640_port4278_r );
DECLARE_READ8_MEMBER( pc1640_port278_r );
- DECLARE_DRIVER_INIT(pc1640);
-
struct {
UINT8 x,y; //byte clipping needed
} m_mouse;
@@ -86,45 +84,30 @@ public:
int m_dipstate;
};
-static ADDRESS_MAP_START( ppc512_map, AS_PROGRAM, 16, amstrad_pc_state )
- AM_RANGE(0x00000, 0x7ffff) AM_RAMBANK("bank10")
- AM_RANGE(0x80000, 0xbffff) AM_NOP
- AM_RANGE(0xc0000, 0xc7fff) AM_ROM
- AM_RANGE(0xc8000, 0xcffff) AM_ROM
- AM_RANGE(0xd0000, 0xeffff) AM_NOP
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
-ADDRESS_MAP_END
-
static ADDRESS_MAP_START( ppc640_map, AS_PROGRAM, 16, amstrad_pc_state )
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xbffff) AM_NOP
- AM_RANGE(0xc0000, 0xc7fff) AM_ROM
- AM_RANGE(0xc8000, 0xcffff) AM_ROM
- AM_RANGE(0xd0000, 0xeffff) AM_NOP
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
-static ADDRESS_MAP_START(ppc512_io, AS_IO, 16, amstrad_pc_state )
- AM_RANGE(0x0060, 0x0065) AM_READWRITE8(pc1640_port60_r, pc1640_port60_w, 0xffff)
- AM_RANGE(0x0070, 0x0071) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffff)
- AM_RANGE(0x0078, 0x0079) AM_READWRITE8(pc1640_mouse_x_r, pc1640_mouse_x_w, 0xffff)
- AM_RANGE(0x007a, 0x007b) AM_READWRITE8(pc1640_mouse_y_r, pc1640_mouse_y_w, 0xffff)
- AM_RANGE(0x0200, 0x0207) AM_DEVREADWRITE8("pc_joy", pc_joy_device, joy_port_r, joy_port_w, 0xffff)
- AM_RANGE(0x0278, 0x027b) AM_READ8(pc200_port278_r, 0xffff) AM_DEVWRITE8("lpt_2", pc_lpt_device, write, 0x00ff)
- AM_RANGE(0x0378, 0x037b) AM_READ8(pc200_port378_r, 0xffff) AM_DEVWRITE8("lpt_1", pc_lpt_device, write, 0x00ff)
- AM_RANGE(0x03bc, 0x03bf) AM_DEVREADWRITE8("lpt_0", pc_lpt_device, read, write, 0x00ff)
+static ADDRESS_MAP_START( pc2086_map, AS_PROGRAM, 16, amstrad_pc_state )
+ AM_RANGE(0xc0000, 0xc9fff) AM_ROM AM_REGION("bios", 0)
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0x10000)
ADDRESS_MAP_END
static ADDRESS_MAP_START(pc200_io, AS_IO, 16, amstrad_pc_state )
AM_RANGE(0x0060, 0x0065) AM_READWRITE8(pc1640_port60_r, pc1640_port60_w, 0xffff)
AM_RANGE(0x0078, 0x0079) AM_READWRITE8(pc1640_mouse_x_r, pc1640_mouse_x_w, 0xffff)
AM_RANGE(0x007a, 0x007b) AM_READWRITE8(pc1640_mouse_y_r, pc1640_mouse_y_w, 0xffff)
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE8("mb", pc_noppi_mb_device, map, 0xffff)
AM_RANGE(0x0200, 0x0207) AM_DEVREADWRITE8("pc_joy", pc_joy_device, joy_port_r, joy_port_w, 0xffff)
AM_RANGE(0x0278, 0x027b) AM_READ8(pc200_port278_r, 0xffff) AM_DEVWRITE8("lpt_2", pc_lpt_device, write, 0x00ff)
AM_RANGE(0x0378, 0x037b) AM_READ8(pc200_port378_r, 0xffff) AM_DEVWRITE8("lpt_1", pc_lpt_device, write, 0x00ff)
AM_RANGE(0x03bc, 0x03bf) AM_DEVREADWRITE8("lpt_0", pc_lpt_device, read, write, 0x00ff)
ADDRESS_MAP_END
+static ADDRESS_MAP_START(ppc512_io, AS_IO, 16, amstrad_pc_state )
+ AM_RANGE(0x0070, 0x0071) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffff)
+ AM_IMPORT_FROM(pc200_io)
+ADDRESS_MAP_END
/* pc20 (v2)
fc078
@@ -250,14 +233,6 @@ port 03de write/read
7d 01 01 mouse button right
*/
-DRIVER_INIT_MEMBER(amstrad_pc_state,pc1640)
-{
- address_space &io_space = m_maincpu->space( AS_IO );
-
- io_space.install_read_handler(0x278, 0x27b, read8_delegate(FUNC(amstrad_pc_state::pc1640_port278_r),this), 0xffff);
- io_space.install_read_handler(0x4278, 0x427b, read8_delegate(FUNC(amstrad_pc_state::pc1640_port4278_r),this), 0xffff);
-}
-
WRITE8_MEMBER( amstrad_pc_state::pc1640_port60_w )
{
switch (offset) {
@@ -306,7 +281,7 @@ READ8_MEMBER( amstrad_pc_state::pc1640_port60_r )
case 2:
data = m_port62;
- if (m_mb->m_pit_out2)
+ if (m_mb->pit_out2())
data |= 0x20;
break;
}
@@ -525,14 +500,17 @@ static MACHINE_CONFIG_START( pc200, amstrad_pc_state )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_EXTRA_OPTIONS("512K")
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( pc2086, pc200 )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(pc2086_map)
+MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( ppc512, pc200 )
- MCFG_DEVICE_REMOVE("maincpu")
-
- MCFG_CPU_ADD("maincpu", V30, 8000000)
- MCFG_CPU_PROGRAM_MAP(ppc512_map)
+static MACHINE_CONFIG_DERIVED( ppc640, pc200 )
+ MCFG_CPU_REPLACE("maincpu", V30, 8000000)
+ MCFG_CPU_PROGRAM_MAP(ppc640_map)
MCFG_CPU_IO_MAP(ppc512_io)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb)
@@ -542,9 +520,10 @@ static MACHINE_CONFIG_DERIVED( ppc512, pc200 )
MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( ppc640, ppc512 )
- MCFG_CPU_MODIFY("maincpu")
- MCFG_CPU_PROGRAM_MAP(ppc640_map)
+static MACHINE_CONFIG_DERIVED( ppc512, ppc640 )
+ MCFG_DEVICE_MODIFY(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("512K")
+ MCFG_RAM_EXTRA_OPTIONS("640K")
MACHINE_CONFIG_END
/*
@@ -564,18 +543,18 @@ Sinclair PC200 ROMs (from a v1.2 PC200):
V1.2:5EA8 V1.2:A058
*/
ROM_START( pc200 )
-// ROM_REGION(0x100000,"maincpu", 0)
- ROM_REGION16_LE(0x100000,"maincpu", 0)
+// ROM_REGION(0x100000,"bios", 0)
+ ROM_REGION16_LE(0x10000,"bios", 0)
// special bios at 0xe0000 !?
ROM_SYSTEM_BIOS(0, "v15", "v1.5")
- ROMX_LOAD("40185-2.ic129", 0xfc001, 0x2000, CRC(41302eb8) SHA1(8b4b2afea543b96b45d6a30365281decc15f2932), ROM_SKIP(1) | ROM_BIOS(1)) // v2
- ROMX_LOAD("40184-2.ic132", 0xfc000, 0x2000, CRC(71b84616) SHA1(4135102a491b25fc659d70b957e07649f3eacf24), ROM_SKIP(1) | ROM_BIOS(1)) // v2
+ ROMX_LOAD("40185-2.ic129", 0xc001, 0x2000, CRC(41302eb8) SHA1(8b4b2afea543b96b45d6a30365281decc15f2932), ROM_SKIP(1) | ROM_BIOS(1)) // v2
+ ROMX_LOAD("40184-2.ic132", 0xc000, 0x2000, CRC(71b84616) SHA1(4135102a491b25fc659d70b957e07649f3eacf24), ROM_SKIP(1) | ROM_BIOS(1)) // v2
ROM_SYSTEM_BIOS(1, "v13", "v1.3")
- ROMX_LOAD("40185v13.ic129", 0xfc001, 0x2000, CRC(f082f08e) SHA1(b332db419033588a7380bfecdf46104974347341), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD("40184v13.ic132", 0xfc000, 0x2000, CRC(5daf6068) SHA1(93a2ccfb0e29c8f2c98f06c64bb0ea0b3acafb13), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD("40185v13.ic129", 0xc001, 0x2000, CRC(f082f08e) SHA1(b332db419033588a7380bfecdf46104974347341), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD("40184v13.ic132", 0xc000, 0x2000, CRC(5daf6068) SHA1(93a2ccfb0e29c8f2c98f06c64bb0ea0b3acafb13), ROM_SKIP(1) | ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "v12", "v1.2")
- ROMX_LOAD("40185.ic129", 0xfc001, 0x2000, CRC(c2b4eeac) SHA1(f11015fadf0c16d86ce2c5047be3e6a4782044f7), ROM_SKIP(1) | ROM_BIOS(3))
- ROMX_LOAD("40184.ic132", 0xfc000, 0x2000, CRC(b22704a6) SHA1(dadd573db6cd34f339f2f0ae55b07537924c024a), ROM_SKIP(1) | ROM_BIOS(3))
+ ROMX_LOAD("40185.ic129", 0xc001, 0x2000, CRC(c2b4eeac) SHA1(f11015fadf0c16d86ce2c5047be3e6a4782044f7), ROM_SKIP(1) | ROM_BIOS(3))
+ ROMX_LOAD("40184.ic132", 0xc000, 0x2000, CRC(b22704a6) SHA1(dadd573db6cd34f339f2f0ae55b07537924c024a), ROM_SKIP(1) | ROM_BIOS(3))
// also mapped to f0000, f4000, f8000
ROM_REGION( 0x800, "keyboard", 0 )
ROM_LOAD( "40112.ic801", 0x000, 0x800, CRC(842a954c) SHA1(93ca6badf20e0215025fe109959eddead8c52f38) )
@@ -583,25 +562,25 @@ ROM_END
ROM_START( pc20 )
-// ROM_REGION(0x100000,"maincpu", 0)
- ROM_REGION16_LE(0x100000,"maincpu", 0)
+// ROM_REGION(0x100000,"bios", 0)
+ ROM_REGION16_LE(0x10000,"bios", 0)
// special bios at 0xe0000 !?
// This is probably referring to a check for the Amstrad RP5-2 diagnostic
// card, which can be plugged into an Amstrad XT for troubleshooting purposes.
// - John Elliott
- ROM_LOAD16_BYTE("pc20v2.0", 0xfc001, 0x2000, CRC(41302eb8) SHA1(8b4b2afea543b96b45d6a30365281decc15f2932)) // v2
- ROM_LOAD16_BYTE("pc20v2.1", 0xfc000, 0x2000, CRC(71b84616) SHA1(4135102a491b25fc659d70b957e07649f3eacf24)) // v2
+ ROM_LOAD16_BYTE("pc20v2.0", 0xc001, 0x2000, CRC(41302eb8) SHA1(8b4b2afea543b96b45d6a30365281decc15f2932)) // v2
+ ROM_LOAD16_BYTE("pc20v2.1", 0xc000, 0x2000, CRC(71b84616) SHA1(4135102a491b25fc659d70b957e07649f3eacf24)) // v2
// also mapped to f0000, f4000, f8000
ROM_END
ROM_START( ppc512 )
-// ROM_REGION(0x100000,"maincpu", 0)
- ROM_REGION16_LE(0x100000,"maincpu", 0)
+// ROM_REGION(0x100000,"bios", 0)
+ ROM_REGION16_LE(0x10000,"bios", 0)
// special bios at 0xe0000 !?
- ROM_LOAD16_BYTE("40107.v1", 0xfc000, 0x2000, CRC(4e37e769) SHA1(88be3d3375ec3b0a7041dbcea225b197e50d4bfe)) // v1.9
- ROM_LOAD16_BYTE("40108.v1", 0xfc001, 0x2000, CRC(4f0302d9) SHA1(e4d69ca98c3b98f3705a2902b16746360043f039)) // v1.9
+ ROM_LOAD16_BYTE("40107.v1", 0xc000, 0x2000, CRC(4e37e769) SHA1(88be3d3375ec3b0a7041dbcea225b197e50d4bfe)) // v1.9
+ ROM_LOAD16_BYTE("40108.v1", 0xc001, 0x2000, CRC(4f0302d9) SHA1(e4d69ca98c3b98f3705a2902b16746360043f039)) // v1.9
// also mapped to f0000, f4000, f8000
ROM_REGION( 0x800, "keyboard", 0 ) // PPC512 / PPC640 / PC200 102-key keyboard
ROM_LOAD( "40112.ic801", 0x000, 0x800, CRC(842a954c) SHA1(93ca6badf20e0215025fe109959eddead8c52f38) )
@@ -609,11 +588,11 @@ ROM_END
ROM_START( ppc640 )
-// ROM_REGION(0x100000,"maincpu", 0)
- ROM_REGION16_LE(0x100000,"maincpu", 0)
+// ROM_REGION(0x100000,"bios", 0)
+ ROM_REGION16_LE(0x10000,"bios", 0)
// special bios at 0xe0000 !?
- ROM_LOAD16_BYTE("40107.v2", 0xfc000, 0x2000, CRC(0785b63e) SHA1(4dbde6b9e9500298bb6241a8daefd85927f1ad28)) // v2.1
- ROM_LOAD16_BYTE("40108.v2", 0xfc001, 0x2000, CRC(5351cf8c) SHA1(b4dbf11b39378ab4afd2107d3fe54a99fffdedeb)) // v2.1
+ ROM_LOAD16_BYTE("40107.v2", 0xc000, 0x2000, CRC(0785b63e) SHA1(4dbde6b9e9500298bb6241a8daefd85927f1ad28)) // v2.1
+ ROM_LOAD16_BYTE("40108.v2", 0xc001, 0x2000, CRC(5351cf8c) SHA1(b4dbf11b39378ab4afd2107d3fe54a99fffdedeb)) // v2.1
// also mapped to f0000, f4000, f8000
ROM_REGION(0x2000,"subcpu", 0)
ROM_LOAD("40135.ic192", 0x00000, 0x2000, CRC(75d99199) SHA1(a76d39fda3d5140e1fb9ce70fcddbdfb8f891dc6))
@@ -624,10 +603,10 @@ ROM_END
ROM_START( pc2086 )
- ROM_REGION16_LE( 0x100000, "maincpu", 0 )
- ROM_LOAD( "40186.ic171", 0xc0000, 0x8000, CRC(959f00ba) SHA1(5df1efe4203cd076292a7713bd7ebd1196dca577) )
- ROM_LOAD16_BYTE( "40179.ic129", 0xfc000, 0x2000, CRC(003605e4) SHA1(b882e97ee81b9ba0e7d969c63da3f2052f23b4b9) )
- ROM_LOAD16_BYTE( "40180.ic132", 0xfc001, 0x2000, CRC(28ee5e58) SHA1(93e045609466fcec74e2bb72578bb7405281cf7b) )
+ ROM_REGION16_LE( 0x20000, "bios", 0 )
+ ROM_LOAD( "40186.ic171", 0x00000, 0x8000, CRC(959f00ba) SHA1(5df1efe4203cd076292a7713bd7ebd1196dca577) )
+ ROM_LOAD16_BYTE( "40179.ic129", 0x1c000, 0x2000, CRC(003605e4) SHA1(b882e97ee81b9ba0e7d969c63da3f2052f23b4b9) )
+ ROM_LOAD16_BYTE( "40180.ic132", 0x1c001, 0x2000, CRC(28ee5e58) SHA1(93e045609466fcec74e2bb72578bb7405281cf7b) )
ROM_REGION( 0x800, "keyboard", 0 ) // PC2086 / PC3086 102-key keyboard
ROM_LOAD( "40178.ic801", 0x000, 0x800, CRC(f72f1c2e) SHA1(34897e78b3d10f96b36d81778e97c4a9a1b8618b) )
@@ -635,10 +614,10 @@ ROM_END
ROM_START( pc3086 )
- ROM_REGION16_LE( 0x100000, "maincpu", 0 )
- ROM_LOAD( "c000.bin", 0xc0000, 0x8000, CRC(5a6c38e9) SHA1(382d2028e0dc5515a68843829563ce29018edb08) )
- ROM_LOAD( "c800.bin", 0xc8000, 0x2000, CRC(3329c6d5) SHA1(982e852278185d69acde47a4f3942bc09ed76777) )
- ROM_LOAD( "fc00.bin", 0xfc000, 0x4000, CRC(b5630753) SHA1(98c344831cc4dc59ebb39bbb1961964a8d39fe20) )
+ ROM_REGION16_LE( 0x20000, "bios", 0 )
+ ROM_LOAD( "c000.bin", 0x00000, 0x8000, CRC(5a6c38e9) SHA1(382d2028e0dc5515a68843829563ce29018edb08) )
+ ROM_LOAD( "c800.bin", 0x08000, 0x2000, CRC(3329c6d5) SHA1(982e852278185d69acde47a4f3942bc09ed76777) )
+ ROM_LOAD( "fc00.bin", 0x1c000, 0x4000, CRC(b5630753) SHA1(98c344831cc4dc59ebb39bbb1961964a8d39fe20) )
ROM_REGION( 0x800, "keyboard", 0 ) // PC2086 / PC3086 102-key keyboard
ROM_LOAD( "40178.ic801", 0x000, 0x800, CRC(f72f1c2e) SHA1(34897e78b3d10f96b36d81778e97c4a9a1b8618b) )
@@ -655,5 +634,5 @@ COMP( 1987, ppc512, ibm5150, 0, ppc512, pc200, driver_device,
COMP( 1987, ppc640, ibm5150, 0, ppc640, pc200, driver_device, 0, "Amstrad plc", "Amstrad PPC640", MACHINE_NOT_WORKING)
COMP( 1988, pc20, ibm5150, 0, pc200, pc200, driver_device, 0, "Amstrad plc", "Amstrad PC20" , MACHINE_NOT_WORKING)
COMP( 1988, pc200, ibm5150, 0, pc200, pc200, driver_device, 0, "Sinclair Research Ltd", "PC200 Professional Series", MACHINE_NOT_WORKING)
-COMP( 1988, pc2086, ibm5150, 0, pc200, pc200, driver_device, 0, "Amstrad plc", "Amstrad PC2086", MACHINE_NOT_WORKING )
-COMP( 1990, pc3086, ibm5150, 0, pc200, pc200, driver_device, 0, "Amstrad plc", "Amstrad PC3086", MACHINE_NOT_WORKING )
+COMP( 1988, pc2086, ibm5150, 0, pc2086, pc200, driver_device, 0, "Amstrad plc", "Amstrad PC2086", MACHINE_NOT_WORKING )
+COMP( 1990, pc3086, ibm5150, 0, pc2086, pc200, driver_device, 0, "Amstrad plc", "Amstrad PC3086", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/amust.cpp b/src/mame/drivers/amust.cpp
index 7f359feabcc..a827079b408 100644
--- a/src/mame/drivers/amust.cpp
+++ b/src/mame/drivers/amust.cpp
@@ -397,13 +397,13 @@ static MACHINE_CONFIG_START( amust, amust_state )
MCFG_MACHINE_RESET_OVERRIDE(amust_state, amust)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", amust)
/* sound hardware */
diff --git a/src/mame/drivers/apple1.cpp b/src/mame/drivers/apple1.cpp
index 51449676180..d2858672814 100644
--- a/src/mame/drivers/apple1.cpp
+++ b/src/mame/drivers/apple1.cpp
@@ -594,7 +594,7 @@ static MACHINE_CONFIG_START( apple1, apple1_state )
MCFG_SCREEN_UPDATE_DRIVER(apple1_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD( A1_PIA_TAG, PIA6821, 0)
MCFG_PIA_READPA_HANDLER(READ8(apple1_state, pia_keyboard_r))
diff --git a/src/mame/drivers/apricot.cpp b/src/mame/drivers/apricot.cpp
index 126cd1d6452..2f185f1c8ac 100644
--- a/src/mame/drivers/apricot.cpp
+++ b/src/mame/drivers/apricot.cpp
@@ -392,13 +392,13 @@ static MACHINE_CONFIG_START( apricot, apricot_state )
MCFG_RAM_DEFAULT_SIZE("256k")
// video hardware
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_SIZE(800, 400)
MCFG_SCREEN_VISIBLE_AREA(0, 800-1, 0, 400-1)
MCFG_SCREEN_REFRESH_RATE(72)
MCFG_SCREEN_UPDATE_DRIVER(apricot_state, screen_update_apricot)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette")
+ MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
MCFG_MC6845_ADD("ic30", HD6845, "screen", XTAL_15MHz / 10)
MCFG_MC6845_SHOW_BORDER_AREA(false)
diff --git a/src/mame/drivers/argo.cpp b/src/mame/drivers/argo.cpp
index a9925128402..ccf0841218a 100644
--- a/src/mame/drivers/argo.cpp
+++ b/src/mame/drivers/argo.cpp
@@ -360,7 +360,7 @@ static MACHINE_CONFIG_START( argo, argo_state )
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/argox.cpp b/src/mame/drivers/argox.cpp
index 3ee71615d5c..aa52674a1f3 100644
--- a/src/mame/drivers/argox.cpp
+++ b/src/mame/drivers/argox.cpp
@@ -1,4 +1,4 @@
-// license:GPL2+
+// license:GPL-2.0+
// copyright-holders:Felipe Sanches
/***************************************************************************
diff --git a/src/mame/drivers/asst128.cpp b/src/mame/drivers/asst128.cpp
index 7ee9e464a66..11712e55973 100644
--- a/src/mame/drivers/asst128.cpp
+++ b/src/mame/drivers/asst128.cpp
@@ -1,13 +1,10 @@
// license:BSD-3-Clause
// copyright-holders:Sergey Svishchev
#include "emu.h"
-#include "includes/genpc.h"
+#include "machine/genpc.h"
+#include "bus/pc_kbd/keyboards.h"
#include "machine/pc_fdc.h"
-#include "cpu/i86/i86.h"
-#include "bus/isa/isa.h"
-#include "bus/isa/isa_cards.h"
#include "formats/asst128_dsk.h"
-#include "bus/pc_kbd/keyboards.h"
class asst128_mb_device : public ibm5150_mb_device
{
@@ -16,22 +13,16 @@ public:
asst128_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: ibm5150_mb_device(mconfig, tag, owner, clock) { }
-protected:
- // device-level overrides
- void device_start() override;
+ DECLARE_ADDRESS_MAP(map, 8);
};
-void asst128_mb_device::device_start()
-{
- install_device(0x0020, 0x0021, 0, 0, read8_delegate(FUNC(pic8259_device::read), (pic8259_device*)m_pic8259), write8_delegate(FUNC(pic8259_device::write), (pic8259_device*)m_pic8259) );
- install_device(0x0040, 0x0043, 0, 0, read8_delegate(FUNC(pit8253_device::read), (pit8253_device*)m_pit8253), write8_delegate(FUNC(pit8253_device::write), (pit8253_device*)m_pit8253) );
- install_device(0x0060, 0x0063, 0, 0, read8_delegate(FUNC(i8255_device::read), (i8255_device*)m_ppi8255), write8_delegate(FUNC(i8255_device::write), (i8255_device*)m_ppi8255) );
- install_device(0x0080, 0x0087, 0, 0, read8_delegate(FUNC(ibm5160_mb_device::pc_page_r), this), write8_delegate(FUNC(ibm5160_mb_device::pc_page_w),this) );
- install_device(0x00a0, 0x00a1, 0, 0, read8_delegate(), write8_delegate(FUNC(ibm5160_mb_device::nmi_enable_w),this));
- /* MESS managed RAM */
- if ( m_ram->pointer() )
- membank( "bank10" )->set_base( m_ram->pointer() );
-}
+DEVICE_ADDRESS_MAP_START( map, 8, asst128_mb_device )
+ AM_RANGE(0x0020, 0x002f) AM_DEVREADWRITE("pic8259", pic8259_device, read, write)
+ AM_RANGE(0x0040, 0x004f) AM_DEVREADWRITE("pit8253", pit8253_device, read, write)
+ AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
+ AM_RANGE(0x0080, 0x008f) AM_WRITE(pc_page_w)
+ AM_RANGE(0x00a0, 0x00a1) AM_WRITE(nmi_enable_w)
+ADDRESS_MAP_END
const device_type ASST128_MOTHERBOARD = &device_creator<asst128_mb_device>;
@@ -42,12 +33,10 @@ public:
asst128_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
- , m_mb(*this, "mb")
, m_fdc(*this, "fdc")
{ }
- required_device<cpu_device> m_maincpu;
- required_device<asst128_mb_device> m_mb;
+ required_device<cpu_device> m_maincpu;
required_device<pc_fdc_xt_device> m_fdc;
DECLARE_FLOPPY_FORMATS( asst128_formats );
@@ -59,8 +48,8 @@ public:
void asst128_state::machine_start()
{
memory_region* font = memregion(":board0:cga_mc1502:gfx1");
- memcpy(font->base(), memregion("maincpu")->base()+0xffa6e, 0x0400);
- memcpy(font->base()+0x0400, memregion("maincpu")->base()+0xf4000, 0x0400);
+ memcpy(font->base(), memregion("bios")->base()+0xfa6e, 0x0400);
+ memcpy(font->base()+0x0400, memregion("bios")->base()+0x4000, 0x0400);
}
WRITE8_MEMBER(asst128_state::asst128_fdc_dor_w)
@@ -71,16 +60,12 @@ WRITE8_MEMBER(asst128_state::asst128_fdc_dor_w)
static ADDRESS_MAP_START( asst128_map, AS_PROGRAM, 16, asst128_state)
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x7ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xbffff) AM_NOP
- AM_RANGE(0xc0000, 0xc7fff) AM_ROM
- AM_RANGE(0xc8000, 0xcffff) AM_ROM
- AM_RANGE(0xd0000, 0xeffff) AM_NOP
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START(asst128_io, AS_IO, 16, asst128_state)
ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE8("mb", asst128_mb_device, map, 0xffff)
AM_RANGE(0x0200, 0x0207) AM_DEVREADWRITE8("pc_joy", pc_joy_device, joy_port_r, joy_port_w, 0xffff)
AM_RANGE(0x03f2, 0x03f3) AM_WRITE8(asst128_fdc_dor_w, 0xffff)
AM_RANGE(0x03f4, 0x03f5) AM_DEVICE8("fdc:upd765", upd765a_device, map, 0xffff)
@@ -108,10 +93,7 @@ static MACHINE_CONFIG_START( asst128, asst128_state )
asst128_mb_device::static_set_cputag(*device, "maincpu");
MCFG_DEVICE_INPUT_DEFAULTS(asst128)
-// MCFG_DEVICE_REMOVE("mb:dma8237")
-
- MCFG_DEVICE_REMOVE("mb:cassette")
- MCFG_CASSETTE_ADD("mb:cassette")
+ MCFG_DEVICE_MODIFY("mb:cassette")
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)
MCFG_ISA8_SLOT_ADD("mb:isa", "board0", pc_isa8_cards, "cga_mc1502", true)
@@ -127,14 +109,15 @@ static MACHINE_CONFIG_START( asst128, asst128_state )
MCFG_PC_JOY_ADD("pc_joy")
MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_DEFAULT_SIZE("512K")
+ MCFG_RAM_EXTRA_OPTIONS("64K, 128K, 256K")
MACHINE_CONFIG_END
ROM_START( asst128 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
- ROM_LOAD( "extbios.bin", 0xf4000, 0x2000, CRC(e3bf22de) SHA1(d4319edc82c0015ca0adc6c8771e887659717e62))
- ROM_LOAD( "basic.bin", 0xf6000, 0x8000, CRC(a4ec66f6) SHA1(80e934986022681ccde180e92aa108e716c4f19b))
- ROM_LOAD( "mainbios.bin", 0xfe000, 0x2000, CRC(8426cbf5) SHA1(41d14137ffa651977041da22aa8071c0f7854158))
+ ROM_REGION16_LE(0x10000,"bios", 0)
+ ROM_LOAD( "extbios.bin", 0x4000, 0x2000, CRC(e3bf22de) SHA1(d4319edc82c0015ca0adc6c8771e887659717e62))
+ ROM_LOAD( "basic.bin", 0x6000, 0x8000, CRC(a4ec66f6) SHA1(80e934986022681ccde180e92aa108e716c4f19b))
+ ROM_LOAD( "mainbios.bin", 0xe000, 0x2000, CRC(8426cbf5) SHA1(41d14137ffa651977041da22aa8071c0f7854158))
// XXX needs dumping
ROM_REGION(0x2000,"gfx1", ROMREGION_ERASE00)
diff --git a/src/mame/drivers/at.cpp b/src/mame/drivers/at.cpp
index 55c2d1d9536..8263a879c04 100644
--- a/src/mame/drivers/at.cpp
+++ b/src/mame/drivers/at.cpp
@@ -358,6 +358,8 @@ static MACHINE_CONFIG_DERIVED( xb42639, atvga )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( k286i, ibm5162 )
+ MCFG_DEVICE_MODIFY("kbd")
+ MCFG_DEVICE_SLOT_INTERFACE(pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL, false)
MCFG_ISA16_SLOT_ADD("mb:isabus","isa5", pc_isa16_cards, nullptr, false)
MCFG_ISA16_SLOT_ADD("mb:isabus","isa6", pc_isa16_cards, nullptr, false)
MCFG_ISA16_SLOT_ADD("mb:isabus","isa7", pc_isa16_cards, nullptr, false)
diff --git a/src/mame/drivers/atarig1.cpp b/src/mame/drivers/atarig1.cpp
index b060c183f77..b4633e6ef69 100644
--- a/src/mame/drivers/atarig1.cpp
+++ b/src/mame/drivers/atarig1.cpp
@@ -517,9 +517,8 @@ ROM_START( hydra )
ROM_LOAD16_BYTE( "136079-1030.bin", 0x60000, 0x10000, CRC(b31fd41f) SHA1(1738d31b3262b32f89ce64fe262682b6bb544e79) )
ROM_LOAD16_BYTE( "136079-1031.bin", 0x60001, 0x10000, CRC(453d076f) SHA1(a7fd8e5efebf56c22e0a7e0b224597b4dba4692a) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "hydraa0.bin", 0x10000, 0x4000, CRC(619d7319) SHA1(3c58f18ca5c93ae049bfca91043718fff43e674c) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "hydraa0.bin", 0x00000, 0x10000, CRC(619d7319) SHA1(3c58f18ca5c93ae049bfca91043718fff43e674c) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_LOAD( "136079-1017.bin", 0x000000, 0x10000, CRC(bd77b747) SHA1(da57e305468c159ca3d2cfae807a85e643bbf053) ) /* playfield, planes 0-3 odd */
@@ -577,9 +576,8 @@ ROM_START( hydrap )
ROM_LOAD16_BYTE( "hydhi3.bin", 0x60000, 0x10000, CRC(29e9e03e) SHA1(0b03482834c1c8fcdd902d513c23c0cc04900f5f) )
ROM_LOAD16_BYTE( "hydlo3.bin", 0x60001, 0x10000, CRC(7b5047f0) SHA1(99b59dfebc0df0b876e69a885a3e3b07ef958fd4) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "hydraa0.bin", 0x10000, 0x4000, BAD_DUMP CRC(619d7319) SHA1(3c58f18ca5c93ae049bfca91043718fff43e674c) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "hydraa0.bin", 0x00000, 0x10000, BAD_DUMP CRC(619d7319) SHA1(3c58f18ca5c93ae049bfca91043718fff43e674c) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_LOAD( "136079-1017.bin", 0x000000, 0x10000, CRC(bd77b747) SHA1(da57e305468c159ca3d2cfae807a85e643bbf053) ) /* playfield, planes 0-3 odd */
@@ -637,9 +635,8 @@ ROM_START( hydrap2 )
ROM_LOAD16_BYTE( "30c", 0x60001, 0x10000, CRC(89604306) SHA1(ccac6eabb174903f4ee144fce53a169daa734e07) )
ROM_LOAD16_BYTE( "30e", 0x60000, 0x10000, CRC(25221b17) SHA1(bb14117f256c3db6881bb91cace297d4c636e684) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "aud.1b", 0x10000, 0x4000, CRC(e1b5188a) SHA1(e9f2a78df49fa085a9363ca194e2ceb5fa5409c4) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "aud.1b", 0x00000, 0x10000, CRC(e1b5188a) SHA1(e9f2a78df49fa085a9363ca194e2ceb5fa5409c4) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_LOAD( "136079-1017.bin", 0x000000, 0x10000, CRC(bd77b747) SHA1(da57e305468c159ca3d2cfae807a85e643bbf053) ) /* playfield, planes 0-3 odd */
@@ -726,9 +723,8 @@ ROM_START( pitfight )
ROM_LOAD16_BYTE( "136081-9030.15d", 0x20000, 0x10000, CRC(3bace9ef) SHA1(29072871b268f343fa1e7fcc9682674df2b2e34f) )
ROM_LOAD16_BYTE( "136081-9031.15b", 0x20001, 0x10000, CRC(c717f011) SHA1(3c5d6c12b85285422345a1aba3f8c497f74c6889) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136081-1060.1b", 0x10000, 0x4000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
@@ -822,9 +818,8 @@ ROM_START( pitfight7 )
ROM_LOAD16_BYTE( "136081-7030.15d", 0x20000, 0x10000, CRC(5fd5a0b1) SHA1(5d4711e8d10176b6989c4db012dbb4e29860590c) )
ROM_LOAD16_BYTE( "136081-7031.15b", 0x20001, 0x10000, CRC(e14a1d0c) SHA1(734fa1cd5ad835fa77c686006993ea9358e3b072) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136081-1060.1b", 0x10000, 0x4000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
@@ -885,9 +880,8 @@ ROM_START( pitfight6 )
ROM_LOAD16_BYTE( "136081-6030.15d", 0x20000, 0x10000, CRC(72b4b249) SHA1(295c707783ca40d6b68eb36b4511774e889bf447) )
ROM_LOAD16_BYTE( "136081-6031.15b", 0x20001, 0x10000, CRC(f0c5d03b) SHA1(53aed44930ebaad98d833bc86837c57ac623937d) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136081-1060.1b", 0x10000, 0x4000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
@@ -936,9 +930,8 @@ ROM_START( pitfight5 )
ROM_LOAD16_BYTE( "136081-5030.15d", 0x20000, 0x10000, CRC(6a094723) SHA1(a77046a8c5fab81cf0207122e494c32aab3b220d) )
ROM_LOAD16_BYTE( "136081-5031.15b", 0x20001, 0x10000, CRC(47400d94) SHA1(07ba297a9b3ae574bc501a24fb6e46db7a5b3de5) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136081-1060.1b", 0x10000, 0x4000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
@@ -987,9 +980,8 @@ ROM_START( pitfight4 )
ROM_LOAD16_BYTE( "136081-3030.15d", 0x20000, 0x10000, CRC(b053e779) SHA1(f143f0e16850ad98366db208e956f7402d1ca848) )
ROM_LOAD16_BYTE( "136081-3031.15b", 0x20001, 0x10000, CRC(2b8c4d13) SHA1(6f1679ef5974bf44848bfa6db0b9b05f71f6e7d6) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136081-1060.1b", 0x10000, 0x4000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
@@ -1050,9 +1042,8 @@ ROM_START( pitfight3 )
ROM_LOAD16_BYTE( "136081-3030.15d", 0x20000, 0x10000, CRC(b053e779) SHA1(f143f0e16850ad98366db208e956f7402d1ca848) )
ROM_LOAD16_BYTE( "136081-3031.15b", 0x20001, 0x10000, CRC(2b8c4d13) SHA1(6f1679ef5974bf44848bfa6db0b9b05f71f6e7d6) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136081-1060.1b", 0x10000, 0x4000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
@@ -1113,9 +1104,8 @@ ROM_START( pitfightj )
ROM_LOAD16_BYTE( "136081-3430.15d", 0x20000, 0x10000, CRC(80707ac0) SHA1(39ddd228bb630bbdf32c76c7906e54f6a62c06ad) )
ROM_LOAD16_BYTE( "136081-3431.15b", 0x20001, 0x10000, CRC(9bf43aa6) SHA1(b41c30118a0c0032303d1b1de471aac292a4968a) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136081-2060.1b", 0x10000, 0x4000, CRC(4317a9f3) SHA1(310154be47fd16b417699338e04e08f3ed973198) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136081-2060.1b", 0x00000, 0x10000, CRC(4317a9f3) SHA1(310154be47fd16b417699338e04e08f3ed973198) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
@@ -1176,9 +1166,8 @@ ROM_START( pitfightb )
ROM_LOAD16_BYTE( "pit8.bin", 0x20000, 0x10000, CRC(b74a8258) SHA1(779990ed95c25dd0a8e9f30c4d9a8d69162d14fc) )
ROM_LOAD16_BYTE( "pit6.bin", 0x20001, 0x10000, CRC(40204ecd) SHA1(73d827e119cc1408356e28c1e67f6c8e287eeb15) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136081-1060.1b", 0x10000, 0x4000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
diff --git a/src/mame/drivers/atarig42.cpp b/src/mame/drivers/atarig42.cpp
index b44f1f901dd..2a3ed72b35e 100644
--- a/src/mame/drivers/atarig42.cpp
+++ b/src/mame/drivers/atarig42.cpp
@@ -602,9 +602,8 @@ ROM_START( roadriot )
ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, CRC(7c5498e7) SHA1(9d8b235baf7b75bef8ef9b168647c5b2b80b2cb3) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */
- ROM_LOAD( "136089-1047.12c", 0x10000, 0x4000, CRC(849dd26c) SHA1(05a0b2a5f7ee4437448b5f076d3066d96dec2320) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 6502 code */
+ ROM_LOAD( "136089-1047.12c", 0x00000, 0x10000, CRC(849dd26c) SHA1(05a0b2a5f7ee4437448b5f076d3066d96dec2320) )
ROM_REGION( 0xc0000, "gfx1", 0 )
ROM_LOAD( "136089-1041.22d", 0x000000, 0x20000, CRC(b7451f92) SHA1(9fd17913630e457e406e596f2d86afff98787750) ) /* playfield, planes 0-1 */
@@ -660,9 +659,8 @@ ROM_START( roadrioto )
ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, CRC(7c5498e7) SHA1(9d8b235baf7b75bef8ef9b168647c5b2b80b2cb3) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */
- ROM_LOAD( "136089-1047.12c", 0x10000, 0x4000, CRC(849dd26c) SHA1(05a0b2a5f7ee4437448b5f076d3066d96dec2320) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 6502 code */
+ ROM_LOAD( "136089-1047.12c", 0x00000, 0x10000, CRC(849dd26c) SHA1(05a0b2a5f7ee4437448b5f076d3066d96dec2320) )
ROM_REGION( 0xc0000, "gfx1", 0 )
ROM_LOAD( "136089-1041.22d", 0x000000, 0x20000, CRC(b7451f92) SHA1(9fd17913630e457e406e596f2d86afff98787750) ) /* playfield, planes 0-1 */
@@ -719,9 +717,8 @@ ROM_START( guardian )
ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, NO_DUMP )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */
- ROM_LOAD( "136092-0080-snd.12c", 0x10000, 0x4000, CRC(0388f805) SHA1(49c11313bc4192dbe294cf68b652cb19047889fd) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 6502 code */
+ ROM_LOAD( "136092-0080-snd.12c", 0x00000, 0x10000, CRC(0388f805) SHA1(49c11313bc4192dbe294cf68b652cb19047889fd) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_LOAD( "136092-0037a.23e", 0x000000, 0x80000, CRC(ca10b63e) SHA1(243a2a440e1bc9135d3dbe6553d39c54b9bdcd13) ) /* playfield, planes 0-1 */
diff --git a/src/mame/drivers/atarigx2.cpp b/src/mame/drivers/atarigx2.cpp
index 157e3e4f708..5f73dfd9434 100644
--- a/src/mame/drivers/atarigx2.cpp
+++ b/src/mame/drivers/atarigx2.cpp
@@ -1512,9 +1512,8 @@ ROM_START( spclords )
ROM_LOAD32_BYTE( "main2rc.095", 0x000002, 0x020000, CRC(49d30630) SHA1(2d0f2abe5d17b4cf575f80687502fac33c7f3206) )
ROM_LOAD32_BYTE( "main3rc.095", 0x000003, 0x020000, CRC(3872424c) SHA1(db08ad9386dfe8fa4e2a83a2505118a636247279) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136095.80a", 0x10000, 0x4000, CRC(33bc0ede) SHA1(2ee30d9125057cdfbdb83e4dbf28306c35a9c233) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136095.80a", 0x00000, 0x10000, CRC(33bc0ede) SHA1(2ee30d9125057cdfbdb83e4dbf28306c35a9c233) )
ROM_REGION( 0x60000, "gfx1", 0 )
ROM_LOAD( "136095.30a", 0x00000, 0x20000, CRC(27e0cfec) SHA1(03df57757d091f9a0b8c8d98d091dd759f570788) ) /* playfield, planes 0-1 */
@@ -1558,9 +1557,8 @@ ROM_START( spclordsb )
ROM_LOAD32_BYTE( "136095.23b", 0x00002, 0x20000, CRC(bc64ab63) SHA1(999851a39123f6a01cb83d97ea744e12590b6e7e) )
ROM_LOAD32_BYTE( "136095.24b", 0x00003, 0x20000, CRC(7284a01a) SHA1(afa866c97b4c3df7fda3c196072231096beaa0db) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136095.80a", 0x10000, 0x4000, CRC(33bc0ede) SHA1(2ee30d9125057cdfbdb83e4dbf28306c35a9c233) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136095.80a", 0x00000, 0x10000, CRC(33bc0ede) SHA1(2ee30d9125057cdfbdb83e4dbf28306c35a9c233) )
ROM_REGION( 0x60000, "gfx1", 0 )
ROM_LOAD( "136095.30a", 0x00000, 0x20000, CRC(27e0cfec) SHA1(03df57757d091f9a0b8c8d98d091dd759f570788) ) /* playfield, planes 0-1 */
@@ -1604,9 +1602,8 @@ ROM_START( spclordsg )
ROM_LOAD32_BYTE( "german2.095", 0x000002, 0x020000, CRC(9527df10) SHA1(c18434c1f40fa23a6cc78df7104c7e2e6888d189) )
ROM_LOAD32_BYTE( "german3.095", 0x000003, 0x020000, CRC(0aaaad66) SHA1(382b859be652d7d83319907d354d294643cef2b4) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136095.80a", 0x10000, 0x4000, CRC(33bc0ede) SHA1(2ee30d9125057cdfbdb83e4dbf28306c35a9c233) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136095.80a", 0x00000, 0x10000, CRC(33bc0ede) SHA1(2ee30d9125057cdfbdb83e4dbf28306c35a9c233) )
ROM_REGION( 0x60000, "gfx1", 0 )
ROM_LOAD( "136095.30a", 0x00000, 0x20000, CRC(27e0cfec) SHA1(03df57757d091f9a0b8c8d98d091dd759f570788) ) /* playfield, planes 0-1 */
@@ -1650,9 +1647,8 @@ ROM_START( spclordsa )
ROM_LOAD32_BYTE( "136095.23a", 0x00002, 0x20000, CRC(20a0e443) SHA1(54597342901d6b38dddbe754f41ceeddcc4e5289) )
ROM_LOAD32_BYTE( "136095.24a", 0x00003, 0x20000, CRC(d3f0439c) SHA1(f9245f448b77187b4cd5d9436b5caebd2800be5d))
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136095.80a", 0x10000, 0x4000, CRC(33bc0ede) SHA1(2ee30d9125057cdfbdb83e4dbf28306c35a9c233) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136095.80a", 0x00000, 0x10000, CRC(33bc0ede) SHA1(2ee30d9125057cdfbdb83e4dbf28306c35a9c233) )
ROM_REGION( 0x60000, "gfx1", 0 )
ROM_LOAD( "136095.30a", 0x00000, 0x20000, CRC(27e0cfec) SHA1(03df57757d091f9a0b8c8d98d091dd759f570788) ) /* playfield, planes 0-1 */
@@ -1696,9 +1692,8 @@ ROM_START( motofren )
ROM_LOAD32_BYTE( "136094-moto2.37e", 0x000002, 0x020000, CRC(6b1c7626) SHA1(b318a5856bcbd6a8fc7eb92e4b9a576b8c16cbf3) )
ROM_LOAD32_BYTE( "136094-moto3.37j", 0x000003, 0x020000, CRC(44c3cd2a) SHA1(a16046586cbaa000e056115c92b5f22bf49869ad) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136094-0080a.12c", 0x10000, 0x4000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136094-0080a.12c", 0x00000, 0x10000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_LOAD( "136094-0036a.2d", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
@@ -1744,9 +1739,8 @@ ROM_START( motofrenmd )
ROM_LOAD32_BYTE( "136094-0223a.37e", 0x00002, 0x20000, CRC(cdb04a4a) SHA1(ee342bdb5654e8b841b1f60e46d1bcae7c4e5cd2) )
ROM_LOAD32_BYTE( "136094-0224a.37j", 0x00003, 0x20000, CRC(f3a9949f) SHA1(d3fa68fc63c505dd4c9d0e0c7f0625cc24ac9571) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136094-0080b.12c", 0x10000, 0x4000, CRC(5e542608) SHA1(8a10b5fac6ac120c7aae2edaa12413c9b8345d87) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136094-0080b.12c", 0x00000, 0x10000, CRC(5e542608) SHA1(8a10b5fac6ac120c7aae2edaa12413c9b8345d87) )
ROM_REGION( 0x180000, "gfx1", 0 ) /* Although verified, the manual states the label codes as 136094-0030 through 136094-0032 */
ROM_LOAD( "136094-0036a.2d", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
@@ -1796,9 +1790,8 @@ ROM_START( motofrei )
ROM_LOAD32_BYTE( "136094-motoi2.37e", 0x000002, 0x020000, CRC(7a26217f) SHA1(1271a000e2976480a3b959609a5597498886be4f) )
ROM_LOAD32_BYTE( "136094-motoi3.37j", 0x000003, 0x020000, CRC(ff5ca6ad) SHA1(1e26db56940ce1db819d2179f4ce3962e0b5b732) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136094-0080a.12c", 0x10000, 0x4000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136094-0080a.12c", 0x00000, 0x10000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_LOAD( "136094-0036a.2d", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
@@ -1845,9 +1838,8 @@ ROM_START( motofreg )
ROM_LOAD32_BYTE( "136094-motog2.37e", 0x000002, 0x020000, CRC(01400d54) SHA1(cd539497465857a804b5bc228bb0c93afd1e684e) )
ROM_LOAD32_BYTE( "136094-motog3.37j", 0x000003, 0x020000, CRC(c467c136) SHA1(9407bdf65ee6261e30227e6b87e2a35da8ee124e) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136094-0080a.12c", 0x10000, 0x4000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136094-0080a.12c", 0x00000, 0x10000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_LOAD( "136094-0036a.2d", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
@@ -1894,9 +1886,8 @@ ROM_START( motofmdg )
ROM_LOAD32_BYTE( "136094-mdg2.37e", 0x000002, 0x020000, CRC(0b8bfe6e) SHA1(7220032a07928fd8a887c63ffcab4ec526733cae) )
ROM_LOAD32_BYTE( "136094-mdg3.37j", 0x000003, 0x020000, CRC(1dcd0d09) SHA1(0f6801694498688ed94588ac4b828ac56f3a16ec) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136094-0080a.12c", 0x10000, 0x4000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136094-0080a.12c", 0x00000, 0x10000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_LOAD( "136094-0036a.2d", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
@@ -1942,9 +1933,8 @@ ROM_START( motofrenft )
ROM_LOAD32_BYTE( "136094-ft2.37e", 0x000002, 0x020000, CRC(30eb94bb) SHA1(b7a2b41570d2110aaedea8a3b9d120af31671bbd) )
ROM_LOAD32_BYTE( "136094-ft3.37j", 0x000003, 0x020000, CRC(a92e05e3) SHA1(354b6bbb058d10c4da55cb58bf05eae83350ba08) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136094-0080a.12c", 0x10000, 0x4000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136094-0080a.12c", 0x00000, 0x10000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_LOAD( "136094-0036a.2d", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
@@ -1990,9 +1980,8 @@ ROM_START( motofrenmf )
ROM_LOAD32_BYTE( "136094-ftmd2.37e", 0x000002, 0x020000, CRC(769223fc) SHA1(acfafae3d81a6a3a4ff82c6381590ac31ad80f23) )
ROM_LOAD32_BYTE( "136094-ftmd3.37j", 0x000003, 0x020000, CRC(96382cc0) SHA1(ba2b6b105c552077767d1185886761fce3ec2885) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136094-0080a.12c", 0x10000, 0x4000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136094-0080a.12c", 0x00000, 0x10000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_LOAD( "136094-0036a.2d", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
@@ -2081,9 +2070,8 @@ ROM_START( rrreveng )
/* all roms above are from this PCB however the sound board was missing - assumed to be the same */
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "rr65snd.bin", 0x10000, 0x4000, CRC(d78429da) SHA1(a4d36d74986f08c793f15f2e67cb97a8c91c5e90) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "rr65snd.bin", 0x00000, 0x10000, CRC(d78429da) SHA1(a4d36d74986f08c793f15f2e67cb97a8c91c5e90) )
ROM_REGION( 0x80000, "jsa:oki1", 0 )
ROM_LOAD( "rralpc0.bin", 0x00000, 0x80000, CRC(1f7b6ecf) SHA1(1787a2e89618e1338d70a54684dbc7d44c5f5559) )
@@ -2100,9 +2088,8 @@ ROM_START( rrrevenga ) /* Same program roms as the set below, but shares more ro
ROM_LOAD32_BYTE( "rrprglh.37e", 0x00002, 0x20000, CRC(2b03a6fc) SHA1(7c95a0307b854bd37fd327ff1af1b69aa60fb2fd) )
ROM_LOAD32_BYTE( "rrprgll.37j", 0x00003, 0x20000, CRC(acf078da) SHA1(3506e105d3b208864ce12ab20e6250cb3a0005d6) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "rr65snd.bin", 0x10000, 0x4000, CRC(d78429da) SHA1(a4d36d74986f08c793f15f2e67cb97a8c91c5e90) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "rr65snd.bin", 0x00000, 0x10000, CRC(d78429da) SHA1(a4d36d74986f08c793f15f2e67cb97a8c91c5e90) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_LOAD( "rralpl.2d", 0x000000, 0x80000, CRC(00488dad) SHA1(604f08a219db0438dcbf21337ebd497f353bd812) ) /* playfield, planes 0-1 */
@@ -2160,9 +2147,8 @@ ROM_START( rrrevengb )
ROM_LOAD32_BYTE( "rrprglh.37e", 0x00002, 0x20000, CRC(2b03a6fc) SHA1(7c95a0307b854bd37fd327ff1af1b69aa60fb2fd) )
ROM_LOAD32_BYTE( "rrprgll.37j", 0x00003, 0x20000, CRC(acf078da) SHA1(3506e105d3b208864ce12ab20e6250cb3a0005d6) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "rr65snd.bin", 0x10000, 0x4000, CRC(d78429da) SHA1(a4d36d74986f08c793f15f2e67cb97a8c91c5e90) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "rr65snd.bin", 0x00000, 0x10000, CRC(d78429da) SHA1(a4d36d74986f08c793f15f2e67cb97a8c91c5e90) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_LOAD( "rralpl.2d", 0x000000, 0x80000, CRC(00488dad) SHA1(604f08a219db0438dcbf21337ebd497f353bd812) ) /* playfield, planes 0-1 */
diff --git a/src/mame/drivers/atarist.cpp b/src/mame/drivers/atarist.cpp
index f06e1a98ed7..9a3fc88c5d3 100644
--- a/src/mame/drivers/atarist.cpp
+++ b/src/mame/drivers/atarist.cpp
@@ -2383,7 +2383,7 @@ static MACHINE_CONFIG_START( stbook, stbook_state )
MCFG_SCREEN_SIZE(640, 400)
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 399)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
// sound hardware
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/attache.cpp b/src/mame/drivers/attache.cpp
index 0c6a1c9d3b5..69bcb219ee6 100644
--- a/src/mame/drivers/attache.cpp
+++ b/src/mame/drivers/attache.cpp
@@ -931,7 +931,7 @@ static MACHINE_CONFIG_START( attache, attache_state )
MCFG_QUANTUM_TIME(attotime::from_hz(60))
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(64)) /* not accurate */
MCFG_SCREEN_SIZE(640,240)
@@ -939,7 +939,7 @@ static MACHINE_CONFIG_START( attache, attache_state )
MCFG_SCREEN_UPDATE_DRIVER(attache_state, screen_update)
MCFG_SCREEN_VBLANK_DRIVER(attache_state, vblank_int)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette")
+ MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("psg", AY8912, XTAL_8MHz / 4)
diff --git a/src/mame/drivers/aussiebyte.cpp b/src/mame/drivers/aussiebyte.cpp
index 5cf1b650dea..eb790c0ae00 100644
--- a/src/mame/drivers/aussiebyte.cpp
+++ b/src/mame/drivers/aussiebyte.cpp
@@ -458,7 +458,7 @@ static MACHINE_CONFIG_START( aussiebyte, aussiebyte_state )
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
MCFG_SCREEN_UPDATE_DEVICE("crtc", sy6545_1_device, screen_update)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", crt8002)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/ax20.cpp b/src/mame/drivers/ax20.cpp
index f51f0dc925c..8d5ca0fae06 100644
--- a/src/mame/drivers/ax20.cpp
+++ b/src/mame/drivers/ax20.cpp
@@ -128,6 +128,7 @@ static MACHINE_CONFIG_START( ax20, ax20_state )
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_COLOR(rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DRIVER(ax20_state, screen_update)
@@ -135,7 +136,7 @@ static MACHINE_CONFIG_START( ax20, ax20_state )
MCFG_SCREEN_VISIBLE_AREA(0, 80*8-1, 0, 24*12-1)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ax20)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_I8272A_ADD("fdc", true)
diff --git a/src/mame/drivers/badlands.cpp b/src/mame/drivers/badlands.cpp
index e8157cedee2..f0443dac434 100644
--- a/src/mame/drivers/badlands.cpp
+++ b/src/mame/drivers/badlands.cpp
@@ -217,7 +217,7 @@ MACHINE_RESET_MEMBER(badlands_state,badlands)
atarigen_state::machine_reset();
scanline_timer_reset(*m_screen, 32);
- memcpy(m_bank_base, &m_bank_source_data[0x0000], 0x1000);
+ membank("soundbank")->set_entry(0);
}
@@ -359,7 +359,7 @@ WRITE8_MEMBER(badlands_state::audio_io_w)
*/
/* update the bank */
- memcpy(m_bank_base, &m_bank_source_data[0x1000 * ((data >> 6) & 3)], 0x1000);
+ membank("soundbank")->set_entry((data >> 6) & 3);
break;
}
}
@@ -405,7 +405,8 @@ static ADDRESS_MAP_START( audio_map, AS_PROGRAM, 8, badlands_state )
AM_RANGE(0x0000, 0x1fff) AM_RAM
AM_RANGE(0x2000, 0x2001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0x2800, 0x2bff) AM_READWRITE(audio_io_r, audio_io_w)
- AM_RANGE(0x3000, 0xffff) AM_ROM
+ AM_RANGE(0x3000, 0x3fff) AM_ROMBANK("soundbank")
+ AM_RANGE(0x4000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -552,9 +553,8 @@ ROM_START( badlands )
ROM_LOAD16_BYTE( "136074-1009.17f", 0x20000, 0x10000, CRC(0e2e807f) SHA1(5b61de066dca12c44335aa68a13c821845657866) )
ROM_LOAD16_BYTE( "136074-1007.24f", 0x20001, 0x10000, CRC(99a20c2c) SHA1(9b0a5a5dafb8816e72330d302c60339b600b49a8) )
- ROM_REGION( 0x14000, "audiocpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136074-1018.9c", 0x10000, 0x4000, CRC(a05fd146) SHA1(d97abbcf7897ca720cc18ff3a323f41cd3b23c34) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136074-1018.9c", 0x00000, 0x10000, CRC(a05fd146) SHA1(d97abbcf7897ca720cc18ff3a323f41cd3b23c34) )
ROM_REGION( 0x60000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "136074-1012.4n", 0x000000, 0x10000, CRC(5d124c6c) SHA1(afebaaf90b3751f5e873fc4c45f1d5385ef86a6e) ) /* playfield */
@@ -589,8 +589,7 @@ ROM_END
DRIVER_INIT_MEMBER(badlands_state,badlands)
{
/* initialize the audio system */
- m_bank_base = &memregion("audiocpu")->base()[0x03000];
- m_bank_source_data = &memregion("audiocpu")->base()[0x10000];
+ membank("soundbank")->configure_entries(0, 4, memregion("audiocpu")->base(), 0x01000);
}
@@ -601,7 +600,7 @@ DRIVER_INIT_MEMBER(badlands_state,badlands)
*
*************************************/
-GAME( 1989, badlands, 0, badlands, badlands, badlands_state, badlands, ROT0, "Atari Games", "Bad Lands", 0 )
+GAME( 1989, badlands, 0, badlands, badlands, badlands_state, badlands, ROT0, "Atari Games", "Bad Lands", MACHINE_SUPPORTS_SAVE )
/* Badlands - Playmark Bootleg support - split this into its own file?
diff --git a/src/mame/drivers/batman.cpp b/src/mame/drivers/batman.cpp
index 69b0aae9e7a..bde69a49251 100644
--- a/src/mame/drivers/batman.cpp
+++ b/src/mame/drivers/batman.cpp
@@ -251,9 +251,8 @@ ROM_START( batman )
ROM_LOAD16_BYTE( "136085-2034.9r", 0x80000, 0x20000, CRC(05388c62) SHA1(de037203d94e72e2922c89256da080ae023ca0e7) )
ROM_LOAD16_BYTE( "136085-2035.5r", 0x80001, 0x20000, CRC(e77c92dd) SHA1(6d475092f7628114960d26b8ec1c5eae5e61ce25) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "136085-1040.12c", 0x10000, 0x4000, CRC(080db83c) SHA1(ec084b7c1dc5878acd6d081e2e8b8d1e8b3d8a45) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136085-1040.12c", 0x00000, 0x10000, CRC(080db83c) SHA1(ec084b7c1dc5878acd6d081e2e8b8d1e8b3d8a45) )
ROM_REGION( 0x20000, "gfx1", 0 )
ROM_LOAD( "136085-2009.10m", 0x00000, 0x20000, CRC(a82d4923) SHA1(38e03eebd95347a383f3d7357462252961bd3c7f) ) /* alphanumerics */
diff --git a/src/mame/drivers/bcs3.cpp b/src/mame/drivers/bcs3.cpp
index cd885352dba..eab460c0cc3 100644
--- a/src/mame/drivers/bcs3.cpp
+++ b/src/mame/drivers/bcs3.cpp
@@ -389,7 +389,7 @@ static MACHINE_CONFIG_START( bcs3, bcs3_state )
MCFG_SCREEN_UPDATE_DRIVER(bcs3_state, screen_update_bcs3)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", bcs3)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL_5MHz / 2)
MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
@@ -416,7 +416,7 @@ static MACHINE_CONFIG_START( bcs3a, bcs3_state )
MCFG_SCREEN_UPDATE_DRIVER(bcs3_state, screen_update_bcs3a)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", bcs3)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL_7MHz / 2)
MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
diff --git a/src/mame/drivers/beathead.cpp b/src/mame/drivers/beathead.cpp
index 79221b41aa4..59de21205b5 100644
--- a/src/mame/drivers/beathead.cpp
+++ b/src/mame/drivers/beathead.cpp
@@ -400,9 +400,8 @@ MACHINE_CONFIG_END
*************************************/
ROM_START( beathead )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "bhsnd.bin", 0x10000, 0x4000, CRC(dfd33f02) SHA1(479a4838c89691d5a4654a4cd84b6433a9e86109) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "bhsnd.bin", 0x00000, 0x10000, CRC(dfd33f02) SHA1(479a4838c89691d5a4654a4cd84b6433a9e86109) )
ROM_REGION32_LE( 0x400000, "user1", 0 ) /* 4MB for ASAP code */
ROM_LOAD32_BYTE( "bhprog0.bin", 0x000000, 0x80000, CRC(87975721) SHA1(862cb3a290c829aedea26ee7100c50a12e9517e7) )
diff --git a/src/mame/drivers/beehive.cpp b/src/mame/drivers/beehive.cpp
index e152a41cc54..6881abbf0bd 100644
--- a/src/mame/drivers/beehive.cpp
+++ b/src/mame/drivers/beehive.cpp
@@ -293,7 +293,7 @@ static MACHINE_CONFIG_START( beehive, beehive_state )
MCFG_CPU_IO_MAP(beehive_io)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DRIVER(beehive_state, screen_update)
@@ -301,7 +301,7 @@ static MACHINE_CONFIG_START( beehive, beehive_state )
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/bfm_sc4.cpp b/src/mame/drivers/bfm_sc4.cpp
index 1d1d2a783fe..77db9437149 100644
--- a/src/mame/drivers/bfm_sc4.cpp
+++ b/src/mame/drivers/bfm_sc4.cpp
@@ -40,6 +40,7 @@
#include "includes/bfm_sc45.h"
#include "bfm_sc45_helper.h"
+#include "sc4fd7tha.lh"
#include "sc4dnd.lh"
#include "sc4dndtp.lh"
#include "sc4dnddw.lh"
@@ -48053,17 +48054,17 @@ DRIVER_INIT_MEMBER(sc4_state,sc4fd7th)
// PR6804 FRANKIE DETTORI PR6804 FRANKIE SOUNDS
-GAMEL( 200?, sc4fd7th ,0, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 1)", MACHINE_FLAGS, layout_bfm_sc4 )
-GAMEL( 200?, sc4fd7tha ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 2)", MACHINE_FLAGS, layout_bfm_sc4 )
-GAMEL( 200?, sc4fd7thb ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 3)", MACHINE_FLAGS, layout_bfm_sc4 )
-GAMEL( 200?, sc4fd7the ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 4)", MACHINE_FLAGS, layout_bfm_sc4 )
-GAMEL( 200?, sc4fd7thf ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 5)", MACHINE_FLAGS, layout_bfm_sc4 )
-GAMEL( 200?, sc4fd7thg ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 6)", MACHINE_FLAGS, layout_bfm_sc4 )
+GAMEL( 200?, sc4fd7th ,0, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 1)", MACHINE_FLAGS, layout_sc4fd7tha )
+GAMEL( 200?, sc4fd7tha ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 2)", MACHINE_FLAGS, layout_sc4fd7tha )
+GAMEL( 200?, sc4fd7thb ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 3)", MACHINE_FLAGS, layout_sc4fd7tha )
+GAMEL( 200?, sc4fd7the ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 4)", MACHINE_FLAGS, layout_sc4fd7tha )
+GAMEL( 200?, sc4fd7thf ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 5)", MACHINE_FLAGS, layout_sc4fd7tha )
+GAMEL( 200?, sc4fd7thg ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 6)", MACHINE_FLAGS, layout_sc4fd7tha )
// PR6804 FRANKIE DETTORI SP98 PR6804 FRANKIE SOUNDS
-GAMEL( 200?, sc4fd7thc ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 1)", MACHINE_FLAGS, layout_bfm_sc4 )
-GAMEL( 200?, sc4fd7thd ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 2)", MACHINE_FLAGS, layout_bfm_sc4 )
-GAMEL( 200?, sc4fd7thh ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 3)", MACHINE_FLAGS, layout_bfm_sc4 )
-GAMEL( 200?, sc4fd7thi ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 4)", MACHINE_FLAGS, layout_bfm_sc4 )
+GAMEL( 200?, sc4fd7thc ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 1)", MACHINE_FLAGS, layout_sc4fd7tha )
+GAMEL( 200?, sc4fd7thd ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 2)", MACHINE_FLAGS, layout_sc4fd7tha )
+GAMEL( 200?, sc4fd7thh ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 3)", MACHINE_FLAGS, layout_sc4fd7tha )
+GAMEL( 200?, sc4fd7thi ,sc4fd7th, sc4_4reel, sc4, sc4_state, sc4fd7th, ROT0, "BFM","Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 4)", MACHINE_FLAGS, layout_sc4fd7tha )
DRIVER_INIT_MEMBER(sc4_state,sc4frsu)
diff --git a/src/mame/drivers/bigbord2.cpp b/src/mame/drivers/bigbord2.cpp
index 013e53c92e5..7b00129e939 100644
--- a/src/mame/drivers/bigbord2.cpp
+++ b/src/mame/drivers/bigbord2.cpp
@@ -552,7 +552,7 @@ static MACHINE_CONFIG_START( bigbord2, bigbord2_state )
MCFG_SCREEN_RAW_PARAMS(XTAL_10_69425MHz, 700, 0, 560, 260, 0, 240)
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", bigbord2)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* keyboard */
MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc", bigbord2_state, ctc_tick, attotime::from_hz(MAIN_CLOCK))
diff --git a/src/mame/drivers/binbug.cpp b/src/mame/drivers/binbug.cpp
index ba135c2b0ed..fa05ab12f59 100644
--- a/src/mame/drivers/binbug.cpp
+++ b/src/mame/drivers/binbug.cpp
@@ -297,7 +297,7 @@ static MACHINE_CONFIG_START( binbug, binbug_state )
MCFG_S2650_FLAG_HANDLER(WRITELINE(binbug_state, binbug_serial_w))
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::amber)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DRIVER(binbug_state, screen_update)
@@ -306,7 +306,7 @@ static MACHINE_CONFIG_START( binbug, binbug_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", dg640)
- MCFG_PALETTE_ADD_MONOCHROME_AMBER("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* Keyboard */
MCFG_RS232_PORT_ADD(KEYBOARD_TAG, default_rs232_devices, "keyboard")
@@ -534,7 +534,7 @@ static MACHINE_CONFIG_START( dg680, dg680_state )
MCFG_CPU_CONFIG(dg680_daisy_chain)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::amber)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DRIVER(binbug_state, screen_update)
@@ -543,7 +543,7 @@ static MACHINE_CONFIG_START( dg680, dg680_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", dg640)
- MCFG_PALETTE_ADD_MONOCHROME_AMBER("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* Keyboard */
MCFG_DEVICE_ADD("keyb", GENERIC_KEYBOARD, 0)
diff --git a/src/mame/drivers/bitgraph.cpp b/src/mame/drivers/bitgraph.cpp
index 511f4fb2a1b..7a8e3231683 100644
--- a/src/mame/drivers/bitgraph.cpp
+++ b/src/mame/drivers/bitgraph.cpp
@@ -466,7 +466,7 @@ static MACHINE_CONFIG_FRAGMENT( bg_motherboard )
MCFG_SCREEN_UPDATE_DRIVER(bitgraph_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD(ACIA0_TAG, ACIA6850, 0)
MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE(RS232_H_TAG, rs232_port_device, write_txd))
diff --git a/src/mame/drivers/bk.cpp b/src/mame/drivers/bk.cpp
index 6248aceff65..adb25ef5bc2 100644
--- a/src/mame/drivers/bk.cpp
+++ b/src/mame/drivers/bk.cpp
@@ -174,7 +174,7 @@ static MACHINE_CONFIG_START( bk0010, bk_state )
MCFG_SCREEN_UPDATE_DRIVER(bk_state, screen_update_bk0010)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/bking.cpp b/src/mame/drivers/bking.cpp
index 9b1dcc9a100..6d25f92bba9 100644
--- a/src/mame/drivers/bking.cpp
+++ b/src/mame/drivers/bking.cpp
@@ -1,5 +1,5 @@
-// license:???
-// copyright-holders:Ed Mueller, Mike Balfour, Zsolt Vasvari
+// license:BSD-3-Clause
+// copyright-holders:Mike Balfour, Zsolt Vasvari
/***************************************************************************
diff --git a/src/mame/drivers/blockade.cpp b/src/mame/drivers/blockade.cpp
index 406444ec463..cba736f6139 100644
--- a/src/mame/drivers/blockade.cpp
+++ b/src/mame/drivers/blockade.cpp
@@ -477,7 +477,7 @@ static MACHINE_CONFIG_START( blockade, blockade_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", blockade)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
diff --git a/src/mame/drivers/blstroid.cpp b/src/mame/drivers/blstroid.cpp
index f3931a93e5e..f208e11cb69 100644
--- a/src/mame/drivers/blstroid.cpp
+++ b/src/mame/drivers/blstroid.cpp
@@ -227,9 +227,8 @@ ROM_START( blstroid )
ROM_LOAD16_BYTE( "136057-4124.4c", 0x020000, 0x010000, CRC(fd2365df) SHA1(63ed3f9a92fed985f9ddb93687f11a24c8309f56) )
ROM_LOAD16_BYTE( "136057-4122.4b", 0x020001, 0x010000, CRC(c364706e) SHA1(e03cd60d139000607d83240b0b48865eafb1188b) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136057-1135.2k", 0x010000, 0x004000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136057-1135.2k", 0x00000, 0x10000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
ROM_REGION( 0x040000, "gfx1", 0 )
ROM_LOAD( "136057-1101.1l", 0x000000, 0x010000, CRC(3c2daa5b) SHA1(2710a05e95afd8452104c4f4a9250a3b7d728a42) )
@@ -264,9 +263,8 @@ ROM_START( blstroid3 )
ROM_LOAD16_BYTE( "136057-3124.4c", 0x020000, 0x010000, CRC(a9140c31) SHA1(02518bf998c0c74dff66f3192dcb1f91b1812cf8) )
ROM_LOAD16_BYTE( "136057-3122.4b", 0x020001, 0x010000, CRC(137fbb17) SHA1(3dda03ecdb2dc9a9cd78aeaa502497662496a26d) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136057-1135.2k", 0x010000, 0x004000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136057-1135.2k", 0x00000, 0x10000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
ROM_REGION( 0x040000, "gfx1", 0 )
ROM_LOAD( "136057-1101.1l", 0x000000, 0x010000, CRC(3c2daa5b) SHA1(2710a05e95afd8452104c4f4a9250a3b7d728a42) )
@@ -301,9 +299,8 @@ ROM_START( blstroid2 )
ROM_LOAD16_BYTE( "136057-2124.4c", 0x020000, 0x010000, CRC(d0fa38fe) SHA1(8aeae50dff6bcd14ac5faf10f15724b7f7430f5c) )
ROM_LOAD16_BYTE( "136057-2122.4b", 0x020001, 0x010000, CRC(744bf921) SHA1(bb9118bfc04745df2eb78e1d1e70f7fc2e0509d4) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136057-1135.2k", 0x010000, 0x004000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136057-1135.2k", 0x00000, 0x10000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
ROM_REGION( 0x040000, "gfx1", 0 )
ROM_LOAD( "136057-1101.1l", 0x000000, 0x010000, CRC(3c2daa5b) SHA1(2710a05e95afd8452104c4f4a9250a3b7d728a42) )
@@ -338,9 +335,8 @@ ROM_START( blstroidg )
ROM_LOAD16_BYTE( "136057-2224.4c", 0x020000, 0x010000, CRC(849249d4) SHA1(61d6eaff7df54f0353639e192eb6074a80916e29) )
ROM_LOAD16_BYTE( "136057-2222.4b", 0x020001, 0x010000, CRC(bdeaba0d) SHA1(f479514b5d9543f9e12aa1ac48e20bf054cb18d0) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136057-1135.2k", 0x010000, 0x004000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136057-1135.2k", 0x00000, 0x10000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
ROM_REGION( 0x040000, "gfx1", 0 )
ROM_LOAD( "136057-1101.1l", 0x000000, 0x010000, CRC(3c2daa5b) SHA1(2710a05e95afd8452104c4f4a9250a3b7d728a42) )
@@ -375,9 +371,8 @@ ROM_START( blstroidh )
ROM_LOAD16_BYTE( "eheadh1.c5", 0x20000, 0x10000, CRC(0b7a3cb6) SHA1(7dc585ff536055e85b0849aa075f2fdab34a8e1c) )
ROM_LOAD16_BYTE( "eheadl1.b5", 0x20001, 0x10000, CRC(43971694) SHA1(a39a8da244645bb56081fd71609a33d8b7d78478) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136057-1135.2k", 0x010000, 0x004000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136057-1135.2k", 0x00000, 0x10000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
ROM_REGION( 0x040000, "gfx1", 0 )
ROM_LOAD( "136057-1101.1l", 0x000000, 0x010000, CRC(3c2daa5b) SHA1(2710a05e95afd8452104c4f4a9250a3b7d728a42) )
diff --git a/src/mame/drivers/bw12.cpp b/src/mame/drivers/bw12.cpp
index e0b9a4584de..8942f44fe1d 100644
--- a/src/mame/drivers/bw12.cpp
+++ b/src/mame/drivers/bw12.cpp
@@ -544,7 +544,7 @@ static MACHINE_CONFIG_START( common, bw12_state )
MCFG_CPU_IO_MAP(bw12_io)
/* video hardware */
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::amber)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update)
@@ -552,7 +552,7 @@ static MACHINE_CONFIG_START( common, bw12_state )
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", bw12)
- MCFG_PALETTE_ADD_MONOCHROME_AMBER("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_16MHz/8)
MCFG_MC6845_SHOW_BORDER_AREA(true)
diff --git a/src/mame/drivers/c10.cpp b/src/mame/drivers/c10.cpp
index a2333d810b7..b3826e30986 100644
--- a/src/mame/drivers/c10.cpp
+++ b/src/mame/drivers/c10.cpp
@@ -167,7 +167,7 @@ static MACHINE_CONFIG_START( c10, c10_state )
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", c10)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
DRIVER_INIT_MEMBER(c10_state,c10)
diff --git a/src/mame/drivers/c900.cpp b/src/mame/drivers/c900.cpp
index 18e5238c3eb..aa6f50ec20c 100644
--- a/src/mame/drivers/c900.cpp
+++ b/src/mame/drivers/c900.cpp
@@ -116,7 +116,7 @@ static MACHINE_CONFIG_START( c900, c900_state )
MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0)
MCFG_GENERIC_TERMINAL_KEYBOARD_CB(WRITE8(c900_state, kbd_put))
MCFG_GFXDECODE_ADD("gfxdecode", "palette", c900)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
ROM_START( c900 )
diff --git a/src/mame/drivers/canon_s80.cpp b/src/mame/drivers/canon_s80.cpp
index 2ee2325ce0e..307c8d69dd0 100644
--- a/src/mame/drivers/canon_s80.cpp
+++ b/src/mame/drivers/canon_s80.cpp
@@ -1,4 +1,4 @@
-// license:GPL2+
+// license:GPL-2.0+
// copyright-holders:FelipeSanches
/*
* canon_s80.c
diff --git a/src/mame/drivers/carjmbre.cpp b/src/mame/drivers/carjmbre.cpp
index 3c387d19531..68a1330fefd 100644
--- a/src/mame/drivers/carjmbre.cpp
+++ b/src/mame/drivers/carjmbre.cpp
@@ -1,5 +1,5 @@
-// license:???
-// copyright-holders:insideoutboy, Nicola Salmoria
+// license:BSD-3-Clause
+// copyright-holders:hap
/***************************************************************************
Car Jamboree
@@ -28,80 +28,245 @@
8910 SW
8910
-Notes:
+***************************************************************************/
+
+#include "emu.h"
+#include "cpu/z80/z80.h"
+#include "video/resnet.h"
+#include "sound/ay8910.h"
+
+class carjmbre_state : public driver_device
+{
+public:
+ carjmbre_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_audiocpu(*this, "audiocpu"),
+ m_videoram(*this, "videoram"),
+ m_spriteram(*this, "spriteram"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_palette(*this, "palette")
+ { }
+
+ // devices/pointers
+ required_device<cpu_device> m_maincpu;
+ required_device<cpu_device> m_audiocpu;
+ required_shared_ptr<UINT8> m_videoram;
+ required_shared_ptr<UINT8> m_spriteram;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
+
+ bool m_nmi_enabled;
+ UINT8 m_bgcolor;
+ tilemap_t *m_tilemap;
+
+ DECLARE_WRITE8_MEMBER(bgcolor_w);
+ DECLARE_WRITE8_MEMBER(videoram_w);
+ DECLARE_WRITE8_MEMBER(nmi_enable_w);
+ DECLARE_WRITE8_MEMBER(flipscreen_w);
+ INTERRUPT_GEN_MEMBER(vblank_nmi);
+
+ DECLARE_PALETTE_INIT(carjmbre);
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
+ TILE_GET_INFO_MEMBER(get_tile_info);
+
+protected:
+ virtual void machine_start() override;
+ virtual void video_start() override;
+};
+
+void carjmbre_state::machine_start()
+{
+ // zerofill
+ m_nmi_enabled = false;
+ m_bgcolor = 0;
+
+ // register for savestates
+ save_item(NAME(m_nmi_enabled));
+ save_item(NAME(m_bgcolor));
+}
-- some sprite glitches from sprite number/colour changes happening on
- different frames, possibly original behaviour. eg cars changing colour
- just before exploding, animals displaying as the wrong sprite for one
- frame when entering the arena
-- colours look wrong, maybe address bitswap?
+/***************************************************************************
-- background colour calculation is a guess
+ Video
***************************************************************************/
-#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "sound/ay8910.h"
-#include "includes/carjmbre.h"
+// palette info from Popper schematics (OEC 1983, very similar video hw)
+static const res_net_decode_info carjmbre_decode_info =
+{
+ 1, // there may be two proms needed to construct color
+ 0, 63, // start/end
+ // R, G, B,
+ { 0, 0, 0, }, // offsets
+ { 0, 3, 6, }, // shifts
+ {0x07,0x07,0x03, } // masks
+};
+
+static const res_net_info carjmbre_net_info =
+{
+ RES_NET_VCC_5V | RES_NET_VBIAS_5V | RES_NET_VIN_TTL_OUT,
+ {
+ { RES_NET_AMP_NONE, 0, 0, 3, { 1000, 470, 220 } },
+ { RES_NET_AMP_NONE, 0, 0, 3, { 1000, 470, 220 } },
+ { RES_NET_AMP_NONE, 0, 0, 2, { 470, 220, 0 } }
+ }
+};
+
+PALETTE_INIT_MEMBER(carjmbre_state, carjmbre)
+{
+ const UINT8 *color_prom = memregion("proms")->base();
+ std::vector<rgb_t> rgb;
+
+ compute_res_net_all(rgb, color_prom, carjmbre_decode_info, carjmbre_net_info);
+ palette.set_pen_colors(0, rgb);
+ palette.palette()->normalize_range(0, 63);
+}
+
+WRITE8_MEMBER(carjmbre_state::bgcolor_w)
+{
+ // guessed, seems to match with flyer
+ m_bgcolor = ~data & 0x3f;
+}
+
+
+// tilemap
+
+WRITE8_MEMBER(carjmbre_state::videoram_w)
+{
+ m_videoram[offset] = data;
+ m_tilemap->mark_tile_dirty(offset & 0x3ff);
+}
+
+TILE_GET_INFO_MEMBER(carjmbre_state::get_tile_info)
+{
+ int attr = m_videoram[tile_index | 0x400];
+ int code = (m_videoram[tile_index] & 0xff) | (attr << 1 & 0x100);
+ SET_TILE_INFO_MEMBER(0, code, attr & 0xf, 0);
+}
-/*************************************
- *
- * Memory maps
- *
- *************************************/
+void carjmbre_state::video_start()
+{
+ m_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(carjmbre_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
+ m_tilemap->set_transparent_pen(0);
+}
+
+
+UINT32 carjmbre_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ bitmap.fill(m_bgcolor, cliprect);
+ m_tilemap->draw(screen, bitmap, cliprect, 0, 0);
+ draw_sprites(bitmap, cliprect);
+ return 0;
+}
-WRITE8_MEMBER(carjmbre_state::nmi_mask_w)
+
+// sprites
+
+void carjmbre_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- m_nmi_mask = data & 1;
+ for (int offs = m_spriteram.bytes() - 4; offs >= 0; offs -= 4)
+ {
+ int sy = m_spriteram[offs];
+ int code = m_spriteram[offs + 1];
+ int color = m_spriteram[offs + 2] & 0xf;
+ int flipx = m_spriteram[offs + 2] >> 6 & 1;
+ int flipy = m_spriteram[offs + 2] >> 7 & 1;
+ int sx = m_spriteram[offs + 3];
+
+ // align to tilemap
+ if (flip_screen())
+ {
+ sy += 1;
+ sx = 233 - sx;
+ flipx = !flipx;
+ flipy = !flipy;
+ }
+ else
+ {
+ sy = 241 - sy;
+ sx -= 7;
+ }
+
+ m_gfxdecode->gfx(1)->transpen(bitmap, cliprect, code, color, flipx, flipy, sx, sy, 0);
+ }
}
-static ADDRESS_MAP_START( carjmbre_map, AS_PROGRAM, 8, carjmbre_state )
+
+/***************************************************************************
+
+ I/O, Memory Maps
+
+***************************************************************************/
+
+// maincpu side
+
+INTERRUPT_GEN_MEMBER(carjmbre_state::vblank_nmi)
+{
+ if (m_nmi_enabled)
+ m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
+}
+
+WRITE8_MEMBER(carjmbre_state::nmi_enable_w)
+{
+ // d0: enable/clear vblank nmi
+ m_nmi_enabled = bool(data & 1);
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+}
+
+WRITE8_MEMBER(carjmbre_state::flipscreen_w)
+{
+ // d0: flip screen (cocktail mode)
+ flip_screen_set(data & 1);
+}
+
+static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, carjmbre_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0x8000, 0x87ff) AM_RAM
-// AM_RANGE(0x8800, 0x8800) AM_READNOP // watchdog?
- AM_RANGE(0x8803, 0x8803) AM_WRITE(nmi_mask_w)
- AM_RANGE(0x8805, 0x8805) AM_WRITE(carjmbre_bgcolor_w) // guessed
- AM_RANGE(0x8806, 0x8806) AM_WRITE(carjmbre_8806_w) // video related?
- AM_RANGE(0x8807, 0x8807) AM_WRITE(carjmbre_flipscreen_w)
-// AM_RANGE(0x8fc1, 0x8fc1) AM_WRITENOP // overrun during initial screen clear
-// AM_RANGE(0x8fe1, 0x8fe1) AM_WRITENOP // overrun during initial screen clear
- AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(carjmbre_videoram_w) AM_SHARE("videoram")
- AM_RANGE(0x9800, 0x985f) AM_MIRROR(0x80) AM_WRITEONLY AM_SHARE("spriteram")
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
- AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2")
+ AM_RANGE(0x8803, 0x8803) AM_WRITE(nmi_enable_w)
+ AM_RANGE(0x8805, 0x8805) AM_WRITE(bgcolor_w)
+ AM_RANGE(0x8807, 0x8807) AM_WRITE(flipscreen_w)
+ AM_RANGE(0x8000, 0x87ff) AM_RAM // 6116
+ AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") // 2114*4
+ AM_RANGE(0x9800, 0x98ff) AM_RAM AM_SHARE("spriteram") // 5101*2
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("IN1")
+ AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN2")
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW") AM_WRITE(soundlatch_byte_w)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( carjmbre_sound_map, AS_PROGRAM, 8, carjmbre_state )
+
+// audiocpu side
+
+static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, carjmbre_state )
AM_RANGE(0x0000, 0x0fff) AM_MIRROR(0x1000) AM_ROM
- AM_RANGE(0x2000, 0x27ff) AM_RAM
+ AM_RANGE(0x2000, 0x27ff) AM_RAM // 6116
ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( carjmbre_sound_io_map, AS_IO, 8, carjmbre_state )
+static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, carjmbre_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_READ(soundlatch_byte_r)
- AM_RANGE(0x10, 0x10) AM_WRITENOP //?? written on init/0xff sound command reset
AM_RANGE(0x20, 0x21) AM_DEVWRITE("ay1", ay8910_device, address_data_w)
- AM_RANGE(0x22, 0x22) AM_WRITENOP //?? written before and after 0x21 with same value
- AM_RANGE(0x24, 0x24) AM_READNOP //??
+ AM_RANGE(0x22, 0x22) AM_WRITENOP // bdir/bc2/bc1 1/0/1 inactive write
+ AM_RANGE(0x24, 0x24) AM_DEVREAD("ay1", ay8910_device, data_r)
AM_RANGE(0x30, 0x31) AM_DEVWRITE("ay2", ay8910_device, address_data_w)
- AM_RANGE(0x32, 0x32) AM_WRITENOP //?? written before and after 0x31 with same value
+ AM_RANGE(0x32, 0x32) AM_WRITENOP // bdir/bc2/bc1 1/0/1 inactive write
+ AM_RANGE(0x34, 0x34) AM_DEVREAD("ay2", ay8910_device, data_r)
ADDRESS_MAP_END
-/*************************************
- *
- * Input ports
- *
- *************************************/
+
+
+/***************************************************************************
+
+ Inputs
+
+***************************************************************************/
static INPUT_PORTS_START( carjmbre )
- PORT_START("P1")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) //coin error if held high for 1s
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) //or if many coins inserted quickly
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY
@@ -109,7 +274,7 @@ static INPUT_PORTS_START( carjmbre )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY
- PORT_START("P2")
+ PORT_START("IN2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START2 )
@@ -120,46 +285,37 @@ static INPUT_PORTS_START( carjmbre )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL
PORT_START("DSW")
- PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2")
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW:1,2")
PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x03, DEF_STR( Free_Play ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW:3")
PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 1C_6C ) )
- PORT_DIPNAME( 0x18, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:4,5")
+ PORT_DIPNAME( 0x18, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW:4,5")
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x10, "5" )
- PORT_DIPSETTING( 0x18, "Free") // 250 (cheat)
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:6")
- PORT_DIPSETTING( 0x00, "10k, then every 100k" )
- PORT_DIPSETTING( 0x20, "20k, then every 100k" )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x18, "Free")
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW:6")
+ PORT_DIPSETTING( 0x00, "10k then every 100k" )
+ PORT_DIPSETTING( 0x20, "20k then every 100k" )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW:7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW:8")
PORT_DIPSETTING( 0x80, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
INPUT_PORTS_END
-/*************************************
- *
- * Graphics definitions
- *
- *************************************/
-static const gfx_layout carjmbre_charlayout =
-{
- 8,8,
- RGN_FRAC(2,4),
- 2,
- { RGN_FRAC(0,4), RGN_FRAC(2,4) },
- { STEP8(0,1) },
- { STEP8(0,8) },
- 8*8
-};
+
+/***************************************************************************
+
+ Machine Config
+
+***************************************************************************/
static const gfx_layout carjmbre_spritelayout =
{
@@ -173,104 +329,79 @@ static const gfx_layout carjmbre_spritelayout =
};
static GFXDECODE_START( carjmbre )
- GFXDECODE_ENTRY( "gfx1", 0, carjmbre_charlayout, 0, 16 )
+ GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x2_planar, 0, 16 )
GFXDECODE_ENTRY( "gfx2", 0, carjmbre_spritelayout, 0, 16 )
GFXDECODE_END
-/*************************************
- *
- * Machine driver
- *
- *************************************/
-
-void carjmbre_state::machine_reset()
-{
- m_flipscreen = 0;
- m_bgcolor = 0;
-}
-
-INTERRUPT_GEN_MEMBER(carjmbre_state::vblank_irq)
-{
- if(m_nmi_mask)
- device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
-}
-
static MACHINE_CONFIG_START( carjmbre, carjmbre_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_18_432MHz/6)
- MCFG_CPU_PROGRAM_MAP(carjmbre_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", carjmbre_state, vblank_irq)
-
+ MCFG_CPU_PROGRAM_MAP(main_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", carjmbre_state, vblank_nmi)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_18_432MHz/6/2)
- MCFG_CPU_PROGRAM_MAP(carjmbre_sound_map)
- MCFG_CPU_IO_MAP(carjmbre_sound_io_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", carjmbre_state, irq0_line_hold)
+ MCFG_CPU_PROGRAM_MAP(sound_map)
+ MCFG_CPU_IO_MAP(sound_io_map)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(carjmbre_state, screen_update_carjmbre)
+ MCFG_SCREEN_UPDATE_DRIVER(carjmbre_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", carjmbre)
MCFG_PALETTE_ADD("palette", 64)
MCFG_PALETTE_INIT_OWNER(carjmbre_state, carjmbre)
-
+
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
-
MCFG_SOUND_ADD("ay1", AY8910, XTAL_18_432MHz/6/2)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.12)
-
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MCFG_SOUND_ADD("ay2", AY8910, XTAL_18_432MHz/6/2)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.12)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
-/*************************************
- *
- * ROM definition
- *
- *************************************/
+
+
+/***************************************************************************
+
+ Game drivers
+
+***************************************************************************/
ROM_START( carjmbre )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "c1", 0x0000, 0x1000, CRC(62b21739) SHA1(710e5c52f27603aa8f864f6f28d7272f21271d60) )
- ROM_LOAD( "c2", 0x1000, 0x1000, CRC(9ab1a0fa) SHA1(519cf67b98e62b2b42232788ba01ab6637880afc) )
- ROM_LOAD( "c3", 0x2000, 0x1000, CRC(bb29e100) SHA1(93e3cfcf7f8b0b36327f402d9a64c04c3b2c7549) )
- ROM_LOAD( "c4", 0x3000, 0x1000, CRC(c63d8f97) SHA1(9f08fd1cd24a1fb4011864c06580985e009d9af4) )
- ROM_LOAD( "c5", 0x4000, 0x1000, CRC(4d593942) SHA1(30cc649a4be3d7f3705f55d8d0dadb0b63d59ec9) )
- ROM_LOAD( "c6", 0x5000, 0x1000, CRC(fb576963) SHA1(5bf5c54a7c12aa55272629c12b414bf49cda0f1f) )
- ROM_LOAD( "c7", 0x6000, 0x1000, CRC(2b8c4511) SHA1(428a48d6b14455d66720a115bc5f35293dc50de7) )
- ROM_LOAD( "c8", 0x7000, 0x1000, CRC(51cc22a7) SHA1(f614368bfee04f084c70bf145801ac46e5631acb) )
+ ROM_LOAD( "c1", 0x0000, 0x1000, CRC(62b21739) SHA1(710e5c52f27603aa8f864f6f28d7272f21271d60) )
+ ROM_LOAD( "c2", 0x1000, 0x1000, CRC(9ab1a0fa) SHA1(519cf67b98e62b2b42232788ba01ab6637880afc) )
+ ROM_LOAD( "c3", 0x2000, 0x1000, CRC(bb29e100) SHA1(93e3cfcf7f8b0b36327f402d9a64c04c3b2c7549) )
+ ROM_LOAD( "c4", 0x3000, 0x1000, CRC(c63d8f97) SHA1(9f08fd1cd24a1fb4011864c06580985e009d9af4) )
+ ROM_LOAD( "c5", 0x4000, 0x1000, CRC(4d593942) SHA1(30cc649a4be3d7f3705f55d8d0dadb0b63d59ec9) )
+ ROM_LOAD( "c6", 0x5000, 0x1000, CRC(fb576963) SHA1(5bf5c54a7c12aa55272629c12b414bf49cda0f1f) )
+ ROM_LOAD( "c7", 0x6000, 0x1000, CRC(2b8c4511) SHA1(428a48d6b14455d66720a115bc5f35293dc50de7) )
+ ROM_LOAD( "c8", 0x7000, 0x1000, CRC(51cc22a7) SHA1(f614368bfee04f084c70bf145801ac46e5631acb) )
ROM_REGION( 0x10000, "audiocpu", 0 )
- ROM_LOAD( "c15", 0x0000, 0x1000, CRC(7d7779d1) SHA1(f8f5246be4cc9632076d3330fc3d3343b911dfee) )
+ ROM_LOAD( "c15", 0x0000, 0x1000, CRC(7d7779d1) SHA1(f8f5246be4cc9632076d3330fc3d3343b911dfee) )
ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "c9", 0x0000, 0x1000, CRC(2accb821) SHA1(ce2804536fc1abd3377dc864c8c9976ca28c1b6e) )
- ROM_LOAD( "c10", 0x1000, 0x1000, CRC(75ddbe56) SHA1(5e1363967a822265618793ccb74bf3ef5e0e00b5) )
+ ROM_LOAD( "c10", 0x0000, 0x1000, CRC(75ddbe56) SHA1(5e1363967a822265618793ccb74bf3ef5e0e00b5) )
+ ROM_LOAD( "c9", 0x1000, 0x1000, CRC(2accb821) SHA1(ce2804536fc1abd3377dc864c8c9976ca28c1b6e) )
ROM_REGION( 0x4000, "gfx2", 0 )
- ROM_LOAD( "c11", 0x0000, 0x1000, CRC(d90cd126) SHA1(7ee110cf19b45ee654016ba0ce92f3db6ea2ed92) )
- ROM_LOAD( "c12", 0x1000, 0x1000, CRC(b3bb39d7) SHA1(89c901be6fae2356ce4d2653e94bf28d6bcf41fe) )
- ROM_LOAD( "c13", 0x2000, 0x1000, CRC(3004010b) SHA1(00d5d2185014159112eb90d8ed50092a3b4ab664) )
- ROM_LOAD( "c14", 0x3000, 0x1000, CRC(fb5f0d31) SHA1(7a27af91efc836bb48c6ed3b283b7c5f7b31c4b5) )
+ ROM_LOAD( "c11", 0x0000, 0x1000, CRC(d90cd126) SHA1(7ee110cf19b45ee654016ba0ce92f3db6ea2ed92) )
+ ROM_LOAD( "c12", 0x1000, 0x1000, CRC(b3bb39d7) SHA1(89c901be6fae2356ce4d2653e94bf28d6bcf41fe) )
+ ROM_LOAD( "c13", 0x2000, 0x1000, CRC(3004010b) SHA1(00d5d2185014159112eb90d8ed50092a3b4ab664) )
+ ROM_LOAD( "c14", 0x3000, 0x1000, CRC(fb5f0d31) SHA1(7a27af91efc836bb48c6ed3b283b7c5f7b31c4b5) )
ROM_REGION( 0x0040, "proms", 0 )
- ROM_LOAD( "c.d19", 0x0000, 0x0020, CRC(220bceeb) SHA1(46b9f867d014596e2aa7503f104dc721965f0ed5) )
- ROM_LOAD( "c.d18", 0x0020, 0x0020, CRC(7b9ed1b0) SHA1(ec5e1f56e5a2fc726083866c08ac0e1de0ed6ace) )
+ ROM_LOAD( "c.d19", 0x0000, 0x0020, CRC(220bceeb) SHA1(46b9f867d014596e2aa7503f104dc721965f0ed5) )
+ ROM_LOAD( "c.d18", 0x0020, 0x0020, CRC(7b9ed1b0) SHA1(ec5e1f56e5a2fc726083866c08ac0e1de0ed6ace) )
ROM_END
-/*************************************
- *
- * Game driver
- *
- *************************************/
-GAME( 1983, carjmbre, 0, carjmbre, carjmbre, driver_device, 0, ROT90, "Omori Electric Co., Ltd.", "Car Jamboree", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
+GAME( 1983, carjmbre, 0, carjmbre, carjmbre, driver_device, 0, ROT90, "Omori Electric Co., Ltd.", "Car Jamboree", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/cat.cpp b/src/mame/drivers/cat.cpp
index fd892b3b877..f85db656ba5 100644
--- a/src/mame/drivers/cat.cpp
+++ b/src/mame/drivers/cat.cpp
@@ -1050,7 +1050,7 @@ static MACHINE_CONFIG_START( cat, cat_state )
MCFG_SCREEN_UPDATE_DRIVER(cat_state, screen_update_cat)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_VIDEO_START_OVERRIDE(cat_state,cat)
diff --git a/src/mame/drivers/cbm2.cpp b/src/mame/drivers/cbm2.cpp
index 4fe040e64f2..df8460f71d3 100644
--- a/src/mame/drivers/cbm2.cpp
+++ b/src/mame/drivers/cbm2.cpp
@@ -2230,7 +2230,7 @@ static MACHINE_CONFIG_START( cbm2lp_ntsc, cbm2_state )
MCFG_QUANTUM_PERFECT_CPU(M6509_TAG)
// video hardware
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DEVICE(MC68B45_TAG, mc6845_device, screen_update)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -2238,7 +2238,7 @@ static MACHINE_CONFIG_START( cbm2lp_ntsc, cbm2_state )
MCFG_SCREEN_SIZE(768, 312)
MCFG_SCREEN_VISIBLE_AREA(0, 768-1, 0, 312-1)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_MC6845_ADD(MC68B45_TAG, MC6845, SCREEN_TAG, XTAL_18MHz/9)
MCFG_MC6845_SHOW_BORDER_AREA(true)
diff --git a/src/mame/drivers/cd2650.cpp b/src/mame/drivers/cd2650.cpp
index 03cde2f4d6c..ac844445d72 100644
--- a/src/mame/drivers/cd2650.cpp
+++ b/src/mame/drivers/cd2650.cpp
@@ -277,7 +277,7 @@ static MACHINE_CONFIG_START( cd2650, cd2650_state )
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 159)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", cd2650)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* quickload */
MCFG_QUICKLOAD_ADD("quickload", cd2650_state, cd2650, "pgm", 1)
diff --git a/src/mame/drivers/chihiro.cpp b/src/mame/drivers/chihiro.cpp
index 0b81164dd90..be4ec8ea3c2 100644
--- a/src/mame/drivers/chihiro.cpp
+++ b/src/mame/drivers/chihiro.cpp
@@ -609,6 +609,7 @@ protected:
UINT8 read_buffer[0x20];
UINT8 write_buffer[0x20];
chihiro_state *chihirosystem;
+ static const int size_factor = 2;
};
//**************************************************************************
@@ -665,10 +666,12 @@ int ide_baseboard_device::read_sector(UINT32 lba, void *buffer)
/*
It assumes there are 4 "partitions", the size of the first one depends on bits 3-0 of io port 40f4:
- Value Size lba
- 0 0x40000-0x8000
- ...
- 4 0x400000-0x8000
+ Value Size lba
+ 0 0x40000-0x8000
+ 1 0x80000-0x8000
+ 2 0x100000-0x8000
+ 3 0x200000-0x8000
+ 4 0x400000-0x8000
The size of the second one is always 0x8000 sectors, and is used as a special communication area
This is a list of the partitions in the minimum size case:
Name Start lba Size lba Size
@@ -686,13 +689,13 @@ int ide_baseboard_device::read_sector(UINT32 lba, void *buffer)
logerror("baseboard: read sector lba %08x\n", lba);
if (lba >= 0x08000000) {
off = (lba & 0x7ff) * 512;
- data = memregion(":others")->base();
+ data = memregion(":mediaboard")->base();
memcpy(buffer, data + off, 512);
return 1;
}
- if (lba >= 0xf8000) {
+ if (lba >= ((0x40000 << size_factor) - 0x8000)) {
memset(buffer, 0, 512);
- lba = lba - 0xf8000;
+ lba = lba - ((0x40000 << size_factor) - 0x8000);
if (lba == 0x4800)
memcpy(buffer, read_buffer, 0x20);
else if (lba == 0x4801)
@@ -709,8 +712,8 @@ int ide_baseboard_device::read_sector(UINT32 lba, void *buffer)
int ide_baseboard_device::write_sector(UINT32 lba, const void *buffer)
{
logerror("baseboard: write sector lba %08x\n", lba);
- if (lba >= 0xf8000) {
- lba = lba - 0xf8000;
+ if (lba >= ((0x40000 << size_factor) - 0x8000)) {
+ lba = lba - ((0x40000 << size_factor) - 0x8000);
if (lba == 0x4800)
memcpy(read_buffer, buffer, 0x20);
else if (lba == 0x4801) {
@@ -804,18 +807,18 @@ READ32_MEMBER(chihiro_state::mediaboard_r)
logerror("I/O port read %04x mask %08X\n", offset * 4 + 0x4000, mem_mask);
r = 0;
- if ((offset == 7) && ACCESSING_BITS_16_31)
+ if ((offset == 0x1c/4) && ACCESSING_BITS_16_31)
r = 0x10000000;
- if ((offset == 8) && ACCESSING_BITS_0_15)
+ if ((offset == 0x20/4) && ACCESSING_BITS_0_15)
r = 0x000000a0;
- if ((offset == 8) && ACCESSING_BITS_16_31)
+ if ((offset == 0x20/4) && ACCESSING_BITS_16_31)
r = 0x42580000;
- if ((offset == 9) && ACCESSING_BITS_0_15)
+ if ((offset == 0x24/4) && ACCESSING_BITS_0_15)
r = 0x00004d41;
- if ((offset == 0x3c) && ACCESSING_BITS_0_15)
+ if ((offset == 0xf0/4) && ACCESSING_BITS_0_15)
r = 0x00000000; // bits 15-0 0 if media board present
- if ((offset == 0x3d) && ACCESSING_BITS_0_15)
- r = 0x00000002; // bits 3-0 size of dimm board memory. Must be 2
+ if ((offset == 0xf4/4) && ACCESSING_BITS_0_15)
+ r = 2; // bits 3-0 size of dimm board memory. 0=128 1=256 2=512 3=1024 Must be 2
return r;
}
@@ -823,7 +826,7 @@ WRITE32_MEMBER(chihiro_state::mediaboard_w)
{
logerror("I/O port write %04x mask %08X value %08X\n", offset * 4 + 0x4000, mem_mask, data);
// irq 10
- if ((offset == 0x38) && ACCESSING_BITS_8_15)
+ if ((offset == 0xe0/4) && ACCESSING_BITS_8_15)
xbox_base_devs.pic8259_2->ir2_w(0);
}
@@ -890,12 +893,13 @@ MACHINE_CONFIG_END
ROM_REGION( 0x100000, "bios", 0) \
ROM_SYSTEM_BIOS( 0, "bios0", "Chihiro Bios" ) \
ROM_LOAD_BIOS( 0, "chihiro_xbox_bios.bin", 0x000000, 0x80000, CRC(66232714) SHA1(b700b0041af8f84835e45d1d1250247bf7077188) ) \
- ROM_REGION( 0x404080, "others", 0) \
+ ROM_REGION( 0x200000, "mediaboard", 0) \
ROM_LOAD16_WORD_SWAP_BIOS( 0, "fpr21042_m29w160et.bin", 0x000000, 0x200000, CRC(a4fcab0b) SHA1(a13cf9c5cdfe8605d82150b7573652f419b30197) ) \
- ROM_LOAD16_WORD_SWAP_BIOS( 0, "ic10_g24lc64.bin", 0x200000, 0x2000, CRC(cfc5e06f) SHA1(3ababd4334d8d57abb22dd98bd2d347df39648d9) ) \
- ROM_LOAD16_WORD_SWAP_BIOS( 0, "ic11_24lc024.bin", 0x202000, 0x80, CRC(8dc8374e) SHA1(cc03a0650bfac4bf6cb66e414bbef121cba53efe) ) \
- ROM_LOAD16_WORD_SWAP_BIOS( 0, "pc20_g24lc64.bin", 0x202080, 0x2000, CRC(7742ab62) SHA1(82dad6e2a75bab4a4840dc6939462f1fb9b95101) ) \
- ROM_LOAD16_WORD_SWAP_BIOS( 0, "ver1305.bin", 0x204080, 0x200000, CRC(a738ea1c) SHA1(45d94d0c39be1cb3db9fab6610a88a550adda4e9) )
+ ROM_REGION( 0x204080, "others", 0) \
+ ROM_LOAD16_WORD_SWAP_BIOS( 0, "ic10_g24lc64.bin", 0x0000, 0x2000, CRC(cfc5e06f) SHA1(3ababd4334d8d57abb22dd98bd2d347df39648d9) ) \
+ ROM_LOAD16_WORD_SWAP_BIOS( 0, "ic11_24lc024.bin", 0x2000, 0x80, CRC(8dc8374e) SHA1(cc03a0650bfac4bf6cb66e414bbef121cba53efe) ) \
+ ROM_LOAD16_WORD_SWAP_BIOS( 0, "pc20_g24lc64.bin", 0x2080, 0x2000, CRC(7742ab62) SHA1(82dad6e2a75bab4a4840dc6939462f1fb9b95101) ) \
+ ROM_LOAD16_WORD_SWAP_BIOS( 0, "ver1305.bin", 0x4080, 0x200000, CRC(a738ea1c) SHA1(45d94d0c39be1cb3db9fab6610a88a550adda4e9) )
ROM_START( chihiro )
CHIHIRO_BIOS
diff --git a/src/mame/drivers/circus.cpp b/src/mame/drivers/circus.cpp
index eb51605922b..518fb0488e0 100644
--- a/src/mame/drivers/circus.cpp
+++ b/src/mame/drivers/circus.cpp
@@ -299,7 +299,7 @@ static MACHINE_CONFIG_START( circus, circus_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", circus)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -334,7 +334,7 @@ static MACHINE_CONFIG_START( robotbwl, circus_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", robotbwl)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -376,7 +376,7 @@ static MACHINE_CONFIG_START( crash, circus_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", circus)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -410,7 +410,7 @@ static MACHINE_CONFIG_START( ripcord, circus_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", circus)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/compis.cpp b/src/mame/drivers/compis.cpp
index 7432eba2781..063aae353ad 100644
--- a/src/mame/drivers/compis.cpp
+++ b/src/mame/drivers/compis.cpp
@@ -636,7 +636,7 @@ static MACHINE_CONFIG_START( compis, compis_state )
MCFG_80186_TMROUT1_HANDLER(DEVWRITELINE(DEVICE_SELF, compis_state, tmr1_w))
// video hardware
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
@@ -649,7 +649,7 @@ static MACHINE_CONFIG_START( compis, compis_state )
MCFG_UPD7220_DISPLAY_PIXELS_CALLBACK_OWNER(compis_state, hgdc_display_pixels)
MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
// devices
MCFG_DEVICE_ADD(I80130_TAG, I80130, XTAL_16MHz/2)
diff --git a/src/mame/drivers/comquest.cpp b/src/mame/drivers/comquest.cpp
index 5329f09e1d4..a4000192f2e 100644
--- a/src/mame/drivers/comquest.cpp
+++ b/src/mame/drivers/comquest.cpp
@@ -257,7 +257,7 @@ static MACHINE_CONFIG_START( comquest, comquest_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", comquest )
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
diff --git a/src/mame/drivers/concept.cpp b/src/mame/drivers/concept.cpp
index 5d10bf4e2f9..4d8bc11819b 100644
--- a/src/mame/drivers/concept.cpp
+++ b/src/mame/drivers/concept.cpp
@@ -221,7 +221,7 @@ static MACHINE_CONFIG_START( concept, concept_state )
MCFG_SCREEN_UPDATE_DRIVER(concept_state, screen_update_concept)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/copsnrob.cpp b/src/mame/drivers/copsnrob.cpp
index c53c4e8ecec..92177ecaea6 100644
--- a/src/mame/drivers/copsnrob.cpp
+++ b/src/mame/drivers/copsnrob.cpp
@@ -260,7 +260,7 @@ static MACHINE_CONFIG_START( copsnrob, copsnrob_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", copsnrob)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
diff --git a/src/mame/drivers/cxhumax.cpp b/src/mame/drivers/cxhumax.cpp
index d1ed5d1b5e0..fa2a956b2fe 100644
--- a/src/mame/drivers/cxhumax.cpp
+++ b/src/mame/drivers/cxhumax.cpp
@@ -1067,7 +1067,7 @@ static MACHINE_CONFIG_START( cxhumax, cxhumax_state )
MCFG_SCREEN_VISIBLE_AREA(0, 1920-1, 0, 1080-1)
MCFG_SCREEN_UPDATE_DRIVER(cxhumax_state, screen_update_cxhumax)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/cyberbal.cpp b/src/mame/drivers/cyberbal.cpp
index f7d8d0a0466..3b911cf0efc 100644
--- a/src/mame/drivers/cyberbal.cpp
+++ b/src/mame/drivers/cyberbal.cpp
@@ -48,7 +48,7 @@ void cyberbal_state::update_interrupts()
}
-MACHINE_START_MEMBER(cyberbal_state,cyberbal)
+MACHINE_START_MEMBER(cyberbal_state,cyberbal2p)
{
atarigen_state::machine_start();
@@ -60,6 +60,13 @@ MACHINE_START_MEMBER(cyberbal_state,cyberbal)
save_item(NAME(m_sound_data_from_6502_ready));
}
+MACHINE_START_MEMBER(cyberbal_state,cyberbal)
+{
+ MACHINE_START_CALL_MEMBER(cyberbal2p);
+
+ membank("soundbank")->configure_entries(0, 4, memregion("audiocpu")->base(), 0x1000);
+}
+
MACHINE_RESET_MEMBER(cyberbal_state,cyberbal)
{
@@ -476,7 +483,7 @@ static MACHINE_CONFIG_START( cyberbal2p, cyberbal_state )
MCFG_CPU_PROGRAM_MAP(cyberbal2p_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", atarigen_state, video_int_gen)
- MCFG_MACHINE_START_OVERRIDE(cyberbal_state,cyberbal)
+ MCFG_MACHINE_START_OVERRIDE(cyberbal_state,cyberbal2p)
MCFG_MACHINE_RESET_OVERRIDE(cyberbal_state,cyberbal2p)
MCFG_ATARI_EEPROM_2816_ADD("eeprom")
@@ -522,9 +529,8 @@ ROM_START( cyberbal )
ROM_LOAD16_BYTE( "136064-4123.1m", 0x000000, 0x010000, CRC(fb872740) SHA1(15e6721d466fe56d7c97c6801e214b32803a0a0d) )
ROM_LOAD16_BYTE( "136064-4124.1kl", 0x000001, 0x010000, CRC(87babad9) SHA1(acdc6b5976445e203de19eb03697e307fe6da77d) )
- ROM_REGION( 0x14000, "audiocpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136064-2131.2f", 0x010000, 0x004000, CRC(bd7e3d84) SHA1(f87878042fc79fa3883136b31ac15ddc22c6023c) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136064-2131.2f", 0x000000, 0x010000, CRC(bd7e3d84) SHA1(f87878042fc79fa3883136b31ac15ddc22c6023c) )
ROM_REGION( 0x40000, "extra", 0 ) /* 4*64k for 68000 code */
ROM_LOAD16_BYTE( "136064-2127.3cd", 0x000000, 0x010000, CRC(3e5feb1f) SHA1(9f92f496adbdf74e394e0d710d6471b9666ba5e5) )
@@ -583,9 +589,8 @@ ROM_START( cyberbal2 )
ROM_LOAD16_BYTE( "136064-2123.1m", 0x000000, 0x010000, CRC(502676e8) SHA1(c0f1f1ce50d3df21cb81244268faef6c303cdfab) )
ROM_LOAD16_BYTE( "136064-2124.1kl", 0x000001, 0x010000, CRC(30f55915) SHA1(ab93ec46f282ab9a0cd47c989537a7e036975e3f) )
- ROM_REGION( 0x14000, "audiocpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136064-2131.2f", 0x010000, 0x004000, CRC(bd7e3d84) SHA1(f87878042fc79fa3883136b31ac15ddc22c6023c) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136064-2131.2f", 0x000000, 0x010000, CRC(bd7e3d84) SHA1(f87878042fc79fa3883136b31ac15ddc22c6023c) )
ROM_REGION( 0x40000, "extra", 0 ) /* 4*64k for 68000 code */
ROM_LOAD16_BYTE( "136064-2127.3cd", 0x000000, 0x010000, CRC(3e5feb1f) SHA1(9f92f496adbdf74e394e0d710d6471b9666ba5e5) )
@@ -637,9 +642,8 @@ ROM_START( cyberbalp )
ROM_LOAD16_BYTE( "136064-0123.1m", 0x000000, 0x010000, CRC(59bac810) SHA1(d4742b2b554c2ad62a2ea7152db3f06a06cddd67) )
ROM_LOAD16_BYTE( "136064-0124.1kl", 0x000001, 0x010000, CRC(e48e6dd3) SHA1(4d45bc66c0a3eb1174db7f19c5dee54dabad68f3) )
- ROM_REGION( 0x14000, "audiocpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136064-0131.2f", 0x010000, 0x004000, CRC(c72b71ce) SHA1(6d3d8f437cf55ccaaa4490daa69f402902944686) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136064-0131.2f", 0x000000, 0x010000, CRC(c72b71ce) SHA1(6d3d8f437cf55ccaaa4490daa69f402902944686) )
ROM_REGION( 0x40000, "extra", 0 ) /* 4*64k for 68000 code */
ROM_LOAD16_BYTE( "136064-0127.3cd", 0x000000, 0x010000, CRC(37ad3420) SHA1(e9c1ea59f5f9a133822a49027b4abf02af855ca2) )
@@ -697,9 +701,8 @@ ROM_START( cyberbal2p )
ROM_LOAD16_BYTE( "136071-1025.27c", 0x060000, 0x010000, CRC(95ff68c6) SHA1(43f716a4c44fe1a38fcc6e2600bac948bb603504) )
ROM_LOAD16_BYTE( "136071-1026.27d", 0x060001, 0x010000, CRC(f61c4898) SHA1(9e4a14eac6d197f63c3392af3d804e81c034cb09) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136071-1042.1b", 0x010000, 0x004000, CRC(e63cf125) SHA1(449880f561660ba67ac2d7f8ce6333768e0ae0be) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136071-1042.1b", 0x00000, 0x10000, CRC(e63cf125) SHA1(449880f561660ba67ac2d7f8ce6333768e0ae0be) )
ROM_REGION( 0x140000, "gfx1", 0 )
ROM_LOAD( "136071-1001.55l", 0x000000, 0x020000, CRC(586ba107) SHA1(f15d4489f5834ea5fe695f43cb9d1c2401179870) )
@@ -747,9 +750,8 @@ ROM_START( cyberbal2p3 )
ROM_LOAD16_BYTE( "136071-1025.27c", 0x060000, 0x010000, CRC(95ff68c6) SHA1(43f716a4c44fe1a38fcc6e2600bac948bb603504) )
ROM_LOAD16_BYTE( "136071-1026.27d", 0x060001, 0x010000, CRC(f61c4898) SHA1(9e4a14eac6d197f63c3392af3d804e81c034cb09) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136071-1042.1b", 0x010000, 0x004000, CRC(e63cf125) SHA1(449880f561660ba67ac2d7f8ce6333768e0ae0be) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136071-1042.1b", 0x00000, 0x10000, CRC(e63cf125) SHA1(449880f561660ba67ac2d7f8ce6333768e0ae0be) )
ROM_REGION( 0x140000, "gfx1", 0 )
ROM_LOAD( "136071-1001.55l", 0x000000, 0x020000, CRC(586ba107) SHA1(f15d4489f5834ea5fe695f43cb9d1c2401179870) )
@@ -797,9 +799,8 @@ ROM_START( cyberbal2p2 )
ROM_LOAD16_BYTE( "136071-1025.27c", 0x060000, 0x010000, CRC(95ff68c6) SHA1(43f716a4c44fe1a38fcc6e2600bac948bb603504) )
ROM_LOAD16_BYTE( "136071-1026.27d", 0x060001, 0x010000, CRC(f61c4898) SHA1(9e4a14eac6d197f63c3392af3d804e81c034cb09) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136071-1042.1b", 0x010000, 0x004000, CRC(e63cf125) SHA1(449880f561660ba67ac2d7f8ce6333768e0ae0be) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136071-1042.1b", 0x00000, 0x10000, CRC(e63cf125) SHA1(449880f561660ba67ac2d7f8ce6333768e0ae0be) )
ROM_REGION( 0x140000, "gfx1", 0 )
ROM_LOAD( "136071-1001.55l", 0x000000, 0x020000, CRC(586ba107) SHA1(f15d4489f5834ea5fe695f43cb9d1c2401179870) )
@@ -847,9 +848,8 @@ ROM_START( cyberbal2p1 )
ROM_LOAD16_BYTE( "136071-1025.27c", 0x060000, 0x010000, CRC(95ff68c6) SHA1(43f716a4c44fe1a38fcc6e2600bac948bb603504) )
ROM_LOAD16_BYTE( "136071-1026.27d", 0x060001, 0x010000, CRC(f61c4898) SHA1(9e4a14eac6d197f63c3392af3d804e81c034cb09) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136071-1042.1b", 0x010000, 0x004000, CRC(e63cf125) SHA1(449880f561660ba67ac2d7f8ce6333768e0ae0be) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136071-1042.1b", 0x00000, 0x10000, CRC(e63cf125) SHA1(449880f561660ba67ac2d7f8ce6333768e0ae0be) )
ROM_REGION( 0x140000, "gfx1", 0 )
ROM_LOAD( "136071-1001.55l", 0x000000, 0x020000, CRC(586ba107) SHA1(f15d4489f5834ea5fe695f43cb9d1c2401179870) )
@@ -893,9 +893,8 @@ ROM_START( cyberbalt )
ROM_LOAD16_BYTE( "136073-2009.3m", 0x020000, 0x010000, CRC(88bfc6dd) SHA1(ac2a67c8b4dbae62497236d624d333992195c218) )
ROM_LOAD16_BYTE( "136073-2010.3kl", 0x020001, 0x010000, CRC(3a121f29) SHA1(ebd088187abb863f2a632812811479dca7e31802) )
- ROM_REGION( 0x14000, "audiocpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136073-1029.2f", 0x010000, 0x004000, CRC(afee87e1) SHA1(da5e91167c68eecd2cb4436ac64cda14e5f6eae7) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136073-1029.2f", 0x000000, 0x010000, CRC(afee87e1) SHA1(da5e91167c68eecd2cb4436ac64cda14e5f6eae7) )
ROM_REGION( 0x40000, "extra", 0 )
ROM_LOAD16_BYTE( "136073-2011.3cd", 0x000000, 0x010000, CRC(bb5c5926) SHA1(6f7424418559841053d0c874ac8bb72c793d0d62) )
@@ -945,9 +944,8 @@ ROM_START( cyberbalt1 )
ROM_LOAD16_BYTE( "136073-1009.3m", 0x020000, 0x010000, CRC(3933e089) SHA1(4bd453bddabeafd07d193a1bc8ac0792e7aa99c3) )
ROM_LOAD16_BYTE( "136073-1010.3kl", 0x020001, 0x010000, CRC(e7a7cae8) SHA1(91e0c6a1b0c138a0e6a599011518fe10df44e76e) )
- ROM_REGION( 0x14000, "audiocpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136073-1029.2f", 0x010000, 0x004000, CRC(afee87e1) SHA1(da5e91167c68eecd2cb4436ac64cda14e5f6eae7) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136073-1029.2f", 0x000000, 0x010000, CRC(afee87e1) SHA1(da5e91167c68eecd2cb4436ac64cda14e5f6eae7) )
ROM_REGION( 0x40000, "extra", 0 )
ROM_LOAD16_BYTE( "136073-1011.3cd", 0x000000, 0x010000, CRC(22d3e09c) SHA1(18298951659badef39f839341c4d66958fcc86aa) )
diff --git a/src/mame/drivers/d6800.cpp b/src/mame/drivers/d6800.cpp
index 03e9c0f94ce..af68192003d 100644
--- a/src/mame/drivers/d6800.cpp
+++ b/src/mame/drivers/d6800.cpp
@@ -391,7 +391,7 @@ static MACHINE_CONFIG_START( d6800, d6800_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(25))
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/dai3wksi.cpp b/src/mame/drivers/dai3wksi.cpp
index 08bfc4febc7..879163b3fb9 100644
--- a/src/mame/drivers/dai3wksi.cpp
+++ b/src/mame/drivers/dai3wksi.cpp
@@ -1,4 +1,4 @@
-// license:???
+// license:BSD-3-Clause
// copyright-holders:Hau,Derrick Renaud
/*
diff --git a/src/mame/drivers/dct11em.cpp b/src/mame/drivers/dct11em.cpp
index 6140955e06a..a97bb28978b 100644
--- a/src/mame/drivers/dct11em.cpp
+++ b/src/mame/drivers/dct11em.cpp
@@ -65,7 +65,7 @@ static MACHINE_CONFIG_START( dct11em, dct11em_state )
MCFG_SCREEN_UPDATE_DRIVER(dct11em_state, screen_update_dct11em)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/dim68k.cpp b/src/mame/drivers/dim68k.cpp
index 57ca5cba7d1..614bfd0e2a1 100644
--- a/src/mame/drivers/dim68k.cpp
+++ b/src/mame/drivers/dim68k.cpp
@@ -315,7 +315,7 @@ static MACHINE_CONFIG_START( dim68k, dim68k_state )
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 250-1)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", dim68k)
/* sound hardware */
diff --git a/src/mame/drivers/dms5000.cpp b/src/mame/drivers/dms5000.cpp
index 953f9aebe74..49ed1049d85 100644
--- a/src/mame/drivers/dms5000.cpp
+++ b/src/mame/drivers/dms5000.cpp
@@ -70,7 +70,7 @@ static MACHINE_CONFIG_START( dms5000, dms5000_state )
MCFG_SCREEN_UPDATE_DRIVER(dms5000_state, screen_update_dms5000)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/dmv.cpp b/src/mame/drivers/dmv.cpp
index 8940c1263fa..6683abc3ab2 100644
--- a/src/mame/drivers/dmv.cpp
+++ b/src/mame/drivers/dmv.cpp
@@ -727,7 +727,7 @@ static MACHINE_CONFIG_START( dmv, dmv_state )
MCFG_DMV_KEYBOARD_ADD("keyboard")
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DEVICE("upd7220", upd7220_device, screen_update)
@@ -735,7 +735,7 @@ static MACHINE_CONFIG_START( dmv, dmv_state )
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", dmv)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEFAULT_LAYOUT(layout_dmv)
// devices
diff --git a/src/mame/drivers/dvk_kcgd.cpp b/src/mame/drivers/dvk_kcgd.cpp
index 6ddebb26b09..c13774fd3ce 100644
--- a/src/mame/drivers/dvk_kcgd.cpp
+++ b/src/mame/drivers/dvk_kcgd.cpp
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Sergey Svishchev
/***************************************************************************
KCGD (Kontroller Cvetnogo Graficheskogo Displeya = Colour Graphics
diff --git a/src/mame/drivers/dvk_ksm.cpp b/src/mame/drivers/dvk_ksm.cpp
index a136035ca0f..9d1273c70ff 100644
--- a/src/mame/drivers/dvk_ksm.cpp
+++ b/src/mame/drivers/dvk_ksm.cpp
@@ -338,7 +338,7 @@ static MACHINE_CONFIG_START( ksm, ksm_state )
MCFG_TIMER_DRIVER_ADD_PERIODIC("scantimer", ksm_state, scanline_callback, attotime::from_hz(50*28*11))
MCFG_TIMER_START_DELAY(attotime::from_hz(XTAL_15_4MHz/KSM_HORZ_START))
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DRIVER(ksm_state, screen_update)
MCFG_SCREEN_RAW_PARAMS(XTAL_15_4MHz, KSM_TOTAL_HORZ, KSM_HORZ_START,
KSM_HORZ_START+KSM_DISP_HORZ, KSM_TOTAL_VERT, KSM_VERT_START,
@@ -347,7 +347,7 @@ static MACHINE_CONFIG_START( ksm, ksm_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ksm)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_PIC8259_ADD( "pic8259", INPUTLINE("maincpu", 0), VCC, NULL )
diff --git a/src/mame/drivers/ec184x.cpp b/src/mame/drivers/ec184x.cpp
index e0a1ed23348..8e965534720 100644
--- a/src/mame/drivers/ec184x.cpp
+++ b/src/mame/drivers/ec184x.cpp
@@ -11,8 +11,7 @@
#include "emu.h"
-#include "includes/genpc.h"
-
+#include "machine/genpc.h"
#include "bus/isa/xsu_cards.h"
#include "bus/pc_kbd/keyboards.h"
#include "cpu/i86/i86.h"
@@ -168,63 +167,37 @@ MACHINE_RESET_MEMBER( ec184x_state, ec1841 )
static ADDRESS_MAP_START( ec1840_map, AS_PROGRAM, 8, ec184x_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x7ffff) AM_RAM
- AM_RANGE(0xa0000, 0xbffff) AM_NOP
- AM_RANGE(0xc0000, 0xc7fff) AM_ROM
- AM_RANGE(0xc8000, 0xcffff) AM_ROM
- AM_RANGE(0xdc000, 0xdffff) AM_RAM
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ec1841_map, AS_PROGRAM, 16, ec184x_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x7ffff) AM_RAM
- AM_RANGE(0xa0000, 0xbffff) AM_NOP
- AM_RANGE(0xc0000, 0xc7fff) AM_ROM
- AM_RANGE(0xc8000, 0xcffff) AM_ROM
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ec1847_map, AS_PROGRAM, 8, ec184x_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xbffff) AM_NOP
- AM_RANGE(0xc0000, 0xc7fff) AM_ROM
- AM_RANGE(0xc8000, 0xcffff) AM_ROM
- AM_RANGE(0xdc000, 0xdffff) AM_RAM
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ AM_RANGE(0xe0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ec1840_io, AS_IO, 8, ec184x_state )
ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", ibm5150_mb_device, map)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ec1841_io, AS_IO, 16, ec184x_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x02b0, 0x02b3) AM_READWRITE8(memboard_r, memboard_w, 0xffff);
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE8("mb", ec1841_mb_device, map, 0xffff)
+ AM_RANGE(0x02b0, 0x02b3) AM_READWRITE8(memboard_r, memboard_w, 0xffff)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ec1847_io, AS_IO, 8, ec184x_state )
ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", ibm5160_mb_device, map)
// AM_RANGE(0x0210, 0x021f) AM_RAM // internal (non-standard?) bus extender
ADDRESS_MAP_END
-static INPUT_PORTS_START( ec1841 )
-INPUT_PORTS_END
-
-static DEVICE_INPUT_DEFAULTS_START( ec1840 )
- DEVICE_INPUT_DEFAULTS("DSW0", 0x31, 0x21)
-DEVICE_INPUT_DEFAULTS_END
-
-static DEVICE_INPUT_DEFAULTS_START( ec1841 )
- DEVICE_INPUT_DEFAULTS("DSW0", 0x31, 0x21)
-DEVICE_INPUT_DEFAULTS_END
-
-static DEVICE_INPUT_DEFAULTS_START( ec1847 )
- DEVICE_INPUT_DEFAULTS("DSW0", 0x31, 0x31)
-DEVICE_INPUT_DEFAULTS_END
-
// XXX verify everything
static MACHINE_CONFIG_START( ec1840, ec184x_state )
MCFG_CPU_ADD("maincpu", I8088, 4096000)
@@ -233,7 +206,6 @@ static MACHINE_CONFIG_START( ec1840, ec184x_state )
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb)
MCFG_IBM5150_MOTHERBOARD_ADD("mb","maincpu")
- MCFG_DEVICE_INPUT_DEFAULTS(ec1840)
MCFG_ISA8_SLOT_ADD("mb:isa", "isa1", ec184x_isa8_cards, "ec1840.0002", false)
MCFG_ISA8_SLOT_ADD("mb:isa", "isa2", ec184x_isa8_cards, "ec1841.0003", false) // actually ec1840.0003 -- w/o mouse port
@@ -259,7 +231,6 @@ static MACHINE_CONFIG_START( ec1841, ec184x_state )
MCFG_MACHINE_RESET_OVERRIDE(ec184x_state, ec1841)
MCFG_EC1841_MOTHERBOARD_ADD("mb", "maincpu")
- MCFG_DEVICE_INPUT_DEFAULTS(ec1841)
MCFG_ISA8_SLOT_ADD("mb:isa", "isa1", ec184x_isa8_cards, "ec1841.0002", false) // cga
MCFG_ISA8_SLOT_ADD("mb:isa", "isa2", ec184x_isa8_cards, "ec1841.0003", false) // fdc + mouse port
@@ -285,7 +256,6 @@ static MACHINE_CONFIG_START( ec1847, ec184x_state )
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb)
MCFG_IBM5160_MOTHERBOARD_ADD("mb","maincpu")
- MCFG_DEVICE_INPUT_DEFAULTS(ec1847)
MCFG_ISA8_SLOT_ADD("mb:isa", "isa1", pc_isa8_cards, "hercules", false) // cga, ega and vga(?) are options too
MCFG_ISA8_SLOT_ADD("mb:isa", "isa2", pc_isa8_cards, "fdc_xt", false)
@@ -301,83 +271,83 @@ static MACHINE_CONFIG_START( ec1847, ec184x_state )
MACHINE_CONFIG_END
ROM_START( ec1840 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
+ ROM_REGION16_LE(0x10000,"bios", 0)
ROM_DEFAULT_BIOS("v4")
// supports MDA only
ROM_SYSTEM_BIOS(0, "v1", "EC-1840.01")
- ROMX_LOAD( "000-01.bin", 0xfe000, 0x0800, CRC(c3ab1fad) SHA1(8168bdee30698f4f9aa7bbb6dfabe62dd723cec5), ROM_SKIP(1) | ROM_BIOS(1))
- ROMX_LOAD( "001-01.bin", 0xff000, 0x0800, CRC(601d1155) SHA1(9684d33b92743749704587a48e679ef7a3b20f9c), ROM_SKIP(1) | ROM_BIOS(1))
- ROMX_LOAD( "002-01.bin", 0xfe001, 0x0800, CRC(ce4dddb7) SHA1(f9b1da60c848e68ff1c154d695a36a0833de4804), ROM_SKIP(1) | ROM_BIOS(1))
- ROMX_LOAD( "003-01.bin", 0xff001, 0x0800, CRC(14b40431) SHA1(ce7fffa41897405ee64fd4e86015e774f8bd108a), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "000-01.bin", 0xe000, 0x0800, CRC(c3ab1fad) SHA1(8168bdee30698f4f9aa7bbb6dfabe62dd723cec5), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "001-01.bin", 0xf000, 0x0800, CRC(601d1155) SHA1(9684d33b92743749704587a48e679ef7a3b20f9c), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "002-01.bin", 0xe001, 0x0800, CRC(ce4dddb7) SHA1(f9b1da60c848e68ff1c154d695a36a0833de4804), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "003-01.bin", 0xf001, 0x0800, CRC(14b40431) SHA1(ce7fffa41897405ee64fd4e86015e774f8bd108a), ROM_SKIP(1) | ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "v4", "EC-1840.04")
- ROMX_LOAD( "000-04-971b.bin", 0xfe000, 0x0800, CRC(06aeaee8) SHA1(9f954e4c48156d573a8e0109e7ca652be9e6036a), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD( "001-04-92b7.bin", 0xff000, 0x0800, CRC(3fae650a) SHA1(c98b777fdeceadd72d6eb9465b3501b9ead55a08), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD( "002-04-9e17.bin", 0xfe001, 0x0800, CRC(d59712df) SHA1(02ea1b3ae9662f5c64c58920a32ca9db0f6fbd12), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD( "003-04-3ccb.bin", 0xff001, 0x0800, CRC(7fc362c7) SHA1(538e13639ad2b4c30bd72582e323181e63513306), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "000-04-971b.bin", 0xe000, 0x0800, CRC(06aeaee8) SHA1(9f954e4c48156d573a8e0109e7ca652be9e6036a), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "001-04-92b7.bin", 0xf000, 0x0800, CRC(3fae650a) SHA1(c98b777fdeceadd72d6eb9465b3501b9ead55a08), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "002-04-9e17.bin", 0xe001, 0x0800, CRC(d59712df) SHA1(02ea1b3ae9662f5c64c58920a32ca9db0f6fbd12), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "003-04-3ccb.bin", 0xf001, 0x0800, CRC(7fc362c7) SHA1(538e13639ad2b4c30bd72582e323181e63513306), ROM_SKIP(1) | ROM_BIOS(2))
ROM_REGION(0x2000,"gfx1", ROMREGION_ERASE00)
ROM_END
ROM_START( ec1841 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
+ ROM_REGION16_LE(0x10000,"bios", 0)
ROM_DEFAULT_BIOS("v2")
ROM_SYSTEM_BIOS(0, "v1", "EC-1841.01")
- ROMX_LOAD( "012-01-3107.bin", 0xfc000, 0x0800, CRC(77957396) SHA1(785f1dceb6e2b4618f5c5f0af15eb74a8c951448), ROM_SKIP(1) | ROM_BIOS(1))
- ROMX_LOAD( "013-01-203f.bin", 0xfc001, 0x0800, CRC(768bd3d5) SHA1(2e948f2ad262de306d889b7964c3f1aad45ff5bc), ROM_SKIP(1) | ROM_BIOS(1))
- ROMX_LOAD( "014-01-fa40.bin", 0xfd000, 0x0800, CRC(47722b58) SHA1(a6339ee8af516f834826b7828a5cf79cb650480c), ROM_SKIP(1) | ROM_BIOS(1))
- ROMX_LOAD( "015-01-bf1d.bin", 0xfd001, 0x0800, CRC(b585b5ea) SHA1(d0ebed586eb13031477c2e071c50416682f80489), ROM_SKIP(1) | ROM_BIOS(1))
- ROMX_LOAD( "016-01-65f7.bin", 0xfe000, 0x0800, CRC(28a07db4) SHA1(17fbcd60dacd1d3f8d8355db429f97e4d1d1ac88), ROM_SKIP(1) | ROM_BIOS(1))
- ROMX_LOAD( "017-01-5be1.bin", 0xfe001, 0x0800, CRC(928bda26) SHA1(ee889184067e2680b29a8ef1c3a76cf5afd4c78d), ROM_SKIP(1) | ROM_BIOS(1))
- ROMX_LOAD( "018-01-7090.bin", 0xff000, 0x0800, CRC(75ca7d7e) SHA1(6356426820c5326a7893a437d54b02f250ef8609), ROM_SKIP(1) | ROM_BIOS(1))
- ROMX_LOAD( "019-01-0492.bin", 0xff001, 0x0800, CRC(8a9d593e) SHA1(f3936d2cb4e6d130dd732973f126c3aa20612463), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "012-01-3107.bin", 0xc000, 0x0800, CRC(77957396) SHA1(785f1dceb6e2b4618f5c5f0af15eb74a8c951448), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "013-01-203f.bin", 0xc001, 0x0800, CRC(768bd3d5) SHA1(2e948f2ad262de306d889b7964c3f1aad45ff5bc), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "014-01-fa40.bin", 0xd000, 0x0800, CRC(47722b58) SHA1(a6339ee8af516f834826b7828a5cf79cb650480c), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "015-01-bf1d.bin", 0xd001, 0x0800, CRC(b585b5ea) SHA1(d0ebed586eb13031477c2e071c50416682f80489), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "016-01-65f7.bin", 0xe000, 0x0800, CRC(28a07db4) SHA1(17fbcd60dacd1d3f8d8355db429f97e4d1d1ac88), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "017-01-5be1.bin", 0xe001, 0x0800, CRC(928bda26) SHA1(ee889184067e2680b29a8ef1c3a76cf5afd4c78d), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "018-01-7090.bin", 0xf000, 0x0800, CRC(75ca7d7e) SHA1(6356426820c5326a7893a437d54b02f250ef8609), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "019-01-0492.bin", 0xf001, 0x0800, CRC(8a9d593e) SHA1(f3936d2cb4e6d130dd732973f126c3aa20612463), ROM_SKIP(1) | ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "v2", "EC-1841.02")
- ROMX_LOAD( "012-02-37f6.bin", 0xfc000, 0x0800, CRC(8f5c6a20) SHA1(874b62f9cee8d3b974f33732f94eff10fc002c44), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD( "013-02-2552.bin", 0xfc001, 0x0800, CRC(e3c10128) SHA1(d6ed743ebe9c130925c9f17aad1a45db9194c967), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD( "014-02-0fbe.bin", 0xfd000, 0x0800, CRC(f8517e5e) SHA1(8034cd6ff5778365dc9daa494524f1753a74f1ed), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD( "015-02-d736.bin", 0xfd001, 0x0800, CRC(8538c52a) SHA1(ee981ce90870b6546a18f2a2e64d71b0038ce0dd), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD( "016-02-5b2c.bin", 0xfe000, 0x0800, CRC(3d1d1e67) SHA1(c527e29796537787c0f6c329f3c203f6131ca77f), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD( "017-02-4b9d.bin", 0xfe001, 0x0800, CRC(1b985264) SHA1(5ddcb9c13564be208c5068c105444a87159c67ee), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD( "018-02-7090.bin", 0xff000, 0x0800, CRC(75ca7d7e) SHA1(6356426820c5326a7893a437d54b02f250ef8609), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD( "019-02-0493.bin", 0xff001, 0x0800, CRC(61aae23d) SHA1(7b3aa24a63ee31b194297eb1e61c3827edfcb95a), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "012-02-37f6.bin", 0xc000, 0x0800, CRC(8f5c6a20) SHA1(874b62f9cee8d3b974f33732f94eff10fc002c44), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "013-02-2552.bin", 0xc001, 0x0800, CRC(e3c10128) SHA1(d6ed743ebe9c130925c9f17aad1a45db9194c967), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "014-02-0fbe.bin", 0xd000, 0x0800, CRC(f8517e5e) SHA1(8034cd6ff5778365dc9daa494524f1753a74f1ed), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "015-02-d736.bin", 0xd001, 0x0800, CRC(8538c52a) SHA1(ee981ce90870b6546a18f2a2e64d71b0038ce0dd), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "016-02-5b2c.bin", 0xe000, 0x0800, CRC(3d1d1e67) SHA1(c527e29796537787c0f6c329f3c203f6131ca77f), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "017-02-4b9d.bin", 0xe001, 0x0800, CRC(1b985264) SHA1(5ddcb9c13564be208c5068c105444a87159c67ee), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "018-02-7090.bin", 0xf000, 0x0800, CRC(75ca7d7e) SHA1(6356426820c5326a7893a437d54b02f250ef8609), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "019-02-0493.bin", 0xf001, 0x0800, CRC(61aae23d) SHA1(7b3aa24a63ee31b194297eb1e61c3827edfcb95a), ROM_SKIP(1) | ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "v3", "EC-1841.03")
- ROMX_LOAD( "012-03-37e7.bin", 0xfc000, 0x0800, CRC(49992bd5) SHA1(119121e1b4af1c44b9b8c2edabe7dc1d3019c4a6), ROM_SKIP(1) | ROM_BIOS(3))
- ROMX_LOAD( "013-03-2554.bin", 0xfc001, 0x0800, CRC(834bd7d7) SHA1(e37514fc4cb8a5cbe68e7564e0e07d5116c4021a), ROM_SKIP(1) | ROM_BIOS(3))
- ROMX_LOAD( "014-03-0fbe.bin", 0xfd000, 0x0800, CRC(f8517e5e) SHA1(8034cd6ff5778365dc9daa494524f1753a74f1ed), ROM_SKIP(1) | ROM_BIOS(3))
- ROMX_LOAD( "015-03-d736.bin", 0xfd001, 0x0800, CRC(8538c52a) SHA1(ee981ce90870b6546a18f2a2e64d71b0038ce0dd), ROM_SKIP(1) | ROM_BIOS(3))
- ROMX_LOAD( "016-03-5b2c.bin", 0xfe000, 0x0800, CRC(3d1d1e67) SHA1(c527e29796537787c0f6c329f3c203f6131ca77f), ROM_SKIP(1) | ROM_BIOS(3))
- ROMX_LOAD( "017-03-4b9d.bin", 0xfe001, 0x0800, CRC(1b985264) SHA1(5ddcb9c13564be208c5068c105444a87159c67ee), ROM_SKIP(1) | ROM_BIOS(3))
- ROMX_LOAD( "018-03-7090.bin", 0xff000, 0x0800, CRC(75ca7d7e) SHA1(6356426820c5326a7893a437d54b02f250ef8609), ROM_SKIP(1) | ROM_BIOS(3))
- ROMX_LOAD( "019-03-0493.bin", 0xff001, 0x0800, CRC(61aae23d) SHA1(7b3aa24a63ee31b194297eb1e61c3827edfcb95a), ROM_SKIP(1) | ROM_BIOS(3))
+ ROMX_LOAD( "012-03-37e7.bin", 0xc000, 0x0800, CRC(49992bd5) SHA1(119121e1b4af1c44b9b8c2edabe7dc1d3019c4a6), ROM_SKIP(1) | ROM_BIOS(3))
+ ROMX_LOAD( "013-03-2554.bin", 0xc001, 0x0800, CRC(834bd7d7) SHA1(e37514fc4cb8a5cbe68e7564e0e07d5116c4021a), ROM_SKIP(1) | ROM_BIOS(3))
+ ROMX_LOAD( "014-03-0fbe.bin", 0xd000, 0x0800, CRC(f8517e5e) SHA1(8034cd6ff5778365dc9daa494524f1753a74f1ed), ROM_SKIP(1) | ROM_BIOS(3))
+ ROMX_LOAD( "015-03-d736.bin", 0xd001, 0x0800, CRC(8538c52a) SHA1(ee981ce90870b6546a18f2a2e64d71b0038ce0dd), ROM_SKIP(1) | ROM_BIOS(3))
+ ROMX_LOAD( "016-03-5b2c.bin", 0xe000, 0x0800, CRC(3d1d1e67) SHA1(c527e29796537787c0f6c329f3c203f6131ca77f), ROM_SKIP(1) | ROM_BIOS(3))
+ ROMX_LOAD( "017-03-4b9d.bin", 0xe001, 0x0800, CRC(1b985264) SHA1(5ddcb9c13564be208c5068c105444a87159c67ee), ROM_SKIP(1) | ROM_BIOS(3))
+ ROMX_LOAD( "018-03-7090.bin", 0xf000, 0x0800, CRC(75ca7d7e) SHA1(6356426820c5326a7893a437d54b02f250ef8609), ROM_SKIP(1) | ROM_BIOS(3))
+ ROMX_LOAD( "019-03-0493.bin", 0xf001, 0x0800, CRC(61aae23d) SHA1(7b3aa24a63ee31b194297eb1e61c3827edfcb95a), ROM_SKIP(1) | ROM_BIOS(3))
ROM_END
ROM_START( ec1845 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
- ROMX_LOAD( "184500.bin", 0xfc000, 0x0800, CRC(7c472ef7) SHA1(3af53f27b49bbc731bf51f9300fbada23a1bfcfc), ROM_SKIP(1))
- ROMX_LOAD( "184501.bin", 0xfc001, 0x0800, CRC(db240dc6) SHA1(d7bb022213d09bbf2a8107fe4f1cd27b23939e18), ROM_SKIP(1))
- ROMX_LOAD( "184502.bin", 0xfd000, 0x0800, CRC(149e7e29) SHA1(7f2a297588fef1bc750c57e6ae0d5acf3d27c486), ROM_SKIP(1))
- ROMX_LOAD( "184503.bin", 0xfd001, 0x0800, CRC(e28cbd74) SHA1(cf1fba4e67c8e1dd8cdda547118e84b704029b03), ROM_SKIP(1))
- ROMX_LOAD( "184504.bin", 0xfe000, 0x0800, CRC(55fa7a1d) SHA1(58f7abab08b9d2f0a1c1636e11bb72af2694c95f), ROM_SKIP(1))
- ROMX_LOAD( "184505.bin", 0xfe001, 0x0800, CRC(c807e3f5) SHA1(08117e449f0d04f96041cff8d34893f500f3760d), ROM_SKIP(1))
- ROMX_LOAD( "184506.bin", 0xff000, 0x0800, CRC(24f5c27c) SHA1(7822dd7f715ef00ccf6d8408be8bbfe01c2eba20), ROM_SKIP(1))
- ROMX_LOAD( "184507.bin", 0xff001, 0x0800, CRC(75122203) SHA1(7b0fbdf1315230633e39574ac7360163bc7361e1), ROM_SKIP(1))
+ ROM_REGION16_LE(0x10000,"bios", 0)
+ ROMX_LOAD( "184500.bin", 0xc000, 0x0800, CRC(7c472ef7) SHA1(3af53f27b49bbc731bf51f9300fbada23a1bfcfc), ROM_SKIP(1))
+ ROMX_LOAD( "184501.bin", 0xc001, 0x0800, CRC(db240dc6) SHA1(d7bb022213d09bbf2a8107fe4f1cd27b23939e18), ROM_SKIP(1))
+ ROMX_LOAD( "184502.bin", 0xd000, 0x0800, CRC(149e7e29) SHA1(7f2a297588fef1bc750c57e6ae0d5acf3d27c486), ROM_SKIP(1))
+ ROMX_LOAD( "184503.bin", 0xd001, 0x0800, CRC(e28cbd74) SHA1(cf1fba4e67c8e1dd8cdda547118e84b704029b03), ROM_SKIP(1))
+ ROMX_LOAD( "184504.bin", 0xe000, 0x0800, CRC(55fa7a1d) SHA1(58f7abab08b9d2f0a1c1636e11bb72af2694c95f), ROM_SKIP(1))
+ ROMX_LOAD( "184505.bin", 0xe001, 0x0800, CRC(c807e3f5) SHA1(08117e449f0d04f96041cff8d34893f500f3760d), ROM_SKIP(1))
+ ROMX_LOAD( "184506.bin", 0xf000, 0x0800, CRC(24f5c27c) SHA1(7822dd7f715ef00ccf6d8408be8bbfe01c2eba20), ROM_SKIP(1))
+ ROMX_LOAD( "184507.bin", 0xf001, 0x0800, CRC(75122203) SHA1(7b0fbdf1315230633e39574ac7360163bc7361e1), ROM_SKIP(1))
ROM_END
ROM_START( ec1847 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
+ ROM_REGION16_LE(0x20000,"bios", 0)
ROM_SYSTEM_BIOS(0, "vXXX", "EC-1847.0x")
- ROMX_LOAD( "308_d47_2764.bin", 0xc8000, 0x2000, CRC(f06924f2) SHA1(83a5dedf1c06f875c598f087bbc087524bc9bfa3), ROM_BIOS(1))
- ROMX_LOAD( "188m_d47_2764.bin", 0xf4000, 0x2000, CRC(bc8742c7) SHA1(3af09d14e891e976b7a9a2a6e1af63f0eabe5426), ROM_BIOS(1))
- ROMX_LOAD( "188m_d48_2764.bin", 0xfe000, 0x2000, CRC(7d290e95) SHA1(e73e6c8e19477fce5de3f95b89693dc6ad6781ab), ROM_BIOS(1))
+ ROMX_LOAD( "308_d47_2764.bin", 0x08000, 0x2000, CRC(f06924f2) SHA1(83a5dedf1c06f875c598f087bbc087524bc9bfa3), ROM_BIOS(1))
+ ROMX_LOAD( "188m_d47_2764.bin", 0x14000, 0x2000, CRC(bc8742c7) SHA1(3af09d14e891e976b7a9a2a6e1af63f0eabe5426), ROM_BIOS(1))
+ ROMX_LOAD( "188m_d48_2764.bin", 0x1e000, 0x2000, CRC(7d290e95) SHA1(e73e6c8e19477fce5de3f95b89693dc6ad6781ab), ROM_BIOS(1))
ROM_REGION(0x2000,"gfx1", ROMREGION_ERASE00)
ROM_LOAD( "317_d28_2732.bin", 0x00000, 0x1000, CRC(8939599b) SHA1(53d02460cf93596882a96758ef4bac5fa1ce55b2)) // monochrome font
ROM_END
/* YEAR ROM NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
-COMP ( 1987, ec1840, ibm5150, 0, ec1840, ec1841, driver_device, 0, "<unknown>", "EC-1840", MACHINE_NOT_WORKING)
-COMP ( 1987, ec1841, ibm5150, 0, ec1841, ec1841, ec184x_state, ec1841, "<unknown>", "EC-1841", 0)
-COMP ( 1989, ec1845, ibm5150, 0, ec1841, ec1841, ec184x_state, ec1841, "<unknown>", "EC-1845", MACHINE_NOT_WORKING)
-COMP ( 1990, ec1847, ibm5150, 0, ec1847, ec1841, driver_device, 0, "<unknown>", "EC-1847", MACHINE_NOT_WORKING)
+COMP ( 1987, ec1840, ibm5150, 0, ec1840, 0, driver_device, 0, "<unknown>", "EC-1840", MACHINE_NOT_WORKING)
+COMP ( 1987, ec1841, ibm5150, 0, ec1841, 0, ec184x_state, ec1841, "<unknown>", "EC-1841", 0)
+COMP ( 1989, ec1845, ibm5150, 0, ec1841, 0, ec184x_state, ec1841, "<unknown>", "EC-1845", MACHINE_NOT_WORKING)
+COMP ( 1990, ec1847, ibm5150, 0, ec1847, 0, driver_device, 0, "<unknown>", "EC-1847", MACHINE_NOT_WORKING)
diff --git a/src/mame/drivers/ec65.cpp b/src/mame/drivers/ec65.cpp
index 8d458b174b7..f54762a053f 100644
--- a/src/mame/drivers/ec65.cpp
+++ b/src/mame/drivers/ec65.cpp
@@ -182,7 +182,7 @@ static MACHINE_CONFIG_START( ec65, ec65_state )
MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ec65)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_MC6845_ADD(MC6845_TAG, MC6845, "screen", XTAL_16MHz / 8)
MCFG_MC6845_SHOW_BORDER_AREA(false)
@@ -220,7 +220,7 @@ static MACHINE_CONFIG_START( ec65k, ec65k_state )
MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ec65)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_MC6845_ADD(MC6845_TAG, MC6845, "screen", XTAL_16MHz / 8)
MCFG_MC6845_SHOW_BORDER_AREA(false)
diff --git a/src/mame/drivers/eprom.cpp b/src/mame/drivers/eprom.cpp
index 6a5644ea313..575689aca8a 100644
--- a/src/mame/drivers/eprom.cpp
+++ b/src/mame/drivers/eprom.cpp
@@ -529,9 +529,8 @@ ROM_START( eprom )
ROM_LOAD16_BYTE( "136069-2034.10u", 0x00001, 0x10000, CRC(5d7afca2) SHA1(a37ecd2909049dd0b3ddbe602f0173c44b065f6f) )
ROM_COPY( "maincpu", 0x60000, 0x60000, 0x20000 )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "136069-1040.7b", 0x10000, 0x4000, CRC(86e93695) SHA1(63ddab02df139dd41a8260c303798b2a550b9fe6) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136069-1040.7b", 0x00000, 0x10000, CRC(86e93695) SHA1(63ddab02df139dd41a8260c303798b2a550b9fe6) )
ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "136069-1020.47s", 0x00000, 0x10000, CRC(0de9d98d) SHA1(c2f963a8a4573e135a2825929cbc5535ce3b0215) )
@@ -582,9 +581,8 @@ ROM_START( eprom2 )
ROM_LOAD16_BYTE( "136069-1034.10u", 0x00001, 0x10000, CRC(c68f58dd) SHA1(0ec300f32e67b710ac33efb60b8eccceb43faca6) )
ROM_COPY( "maincpu", 0x60000, 0x60000, 0x20000 )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "136069-1040.7b", 0x10000, 0x4000, CRC(86e93695) SHA1(63ddab02df139dd41a8260c303798b2a550b9fe6) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136069-1040.7b", 0x00000, 0x10000, CRC(86e93695) SHA1(63ddab02df139dd41a8260c303798b2a550b9fe6) )
ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "136069-1020.47s", 0x00000, 0x10000, CRC(0de9d98d) SHA1(c2f963a8a4573e135a2825929cbc5535ce3b0215) )
@@ -622,9 +620,8 @@ ROM_START( klaxp1 )
ROM_LOAD16_BYTE( "klax_ft1.50a", 0x00000, 0x10000, CRC(87ee72d1) SHA1(39ae6f8406f0768480bcc80d395a14d9c2c65dca) )
ROM_LOAD16_BYTE( "klax_ft1.40a", 0x00001, 0x10000, CRC(ba139fdb) SHA1(98a8ac5e0349b934f55d0d9de85abacd3fd0d77d) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "klaxsnd.10c", 0x10000, 0x4000, CRC(744734cb) SHA1(3630428d69ddd2a4d5dd76bb4ee9485c943129e9) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "klaxsnd.10c", 0x00000, 0x10000, CRC(744734cb) SHA1(3630428d69ddd2a4d5dd76bb4ee9485c943129e9) )
ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "klaxprot.43s", 0x00000, 0x10000, CRC(a523c966) SHA1(8e284901cd1c68b25aa9dec1c87374b93cceeb40) )
@@ -646,9 +643,8 @@ ROM_START( klaxp2 )
ROM_LOAD16_BYTE( "klax_ft2.50a", 0x00000, 0x10000, CRC(7d401937) SHA1(8db0560528a86b9cb01c4598a49694bd44b00dba) )
ROM_LOAD16_BYTE( "klax_ft2.40a", 0x00001, 0x10000, CRC(c5ca33a9) SHA1(c2e2948f987ba43f61c043baed06ffea8787be43) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "klaxsnd.10c", 0x10000, 0x4000, CRC(744734cb) SHA1(3630428d69ddd2a4d5dd76bb4ee9485c943129e9) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "klaxsnd.10c", 0x00000, 0x10000, CRC(744734cb) SHA1(3630428d69ddd2a4d5dd76bb4ee9485c943129e9) )
ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "klaxprot.43s", 0x00000, 0x10000, CRC(a523c966) SHA1(8e284901cd1c68b25aa9dec1c87374b93cceeb40) )
@@ -672,9 +668,8 @@ ROM_START( guts )
ROM_LOAD16_BYTE( "guts-hi1.50b", 0x20000, 0x10000, CRC(a231f65d) SHA1(9c8ccd265ed0e9f6d7181d216ed41a0c5cc0cd5f) )
ROM_LOAD16_BYTE( "guts-lo1.40b", 0x20001, 0x10000, CRC(dbdd4910) SHA1(9ca22321398b6397902aa99a3ef46f1a78ccc438) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "guts-snd.10c", 0x10000, 0x4000, CRC(9fe065d7) SHA1(0d202af3d6c62fdcfc3bb2ea95bbf4e37c0d43cf) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "guts-snd.10c", 0x00000, 0x10000, CRC(9fe065d7) SHA1(0d202af3d6c62fdcfc3bb2ea95bbf4e37c0d43cf) )
ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "guts-mo0.bin", 0x00000, 0x10000, CRC(b8d8d8da) SHA1(6426607402aa9f1c872290910eefc57a8dd60e17) )
diff --git a/src/mame/drivers/esq5505.cpp b/src/mame/drivers/esq5505.cpp
index fa0d3dc8a56..db14c6b1a2a 100644
--- a/src/mame/drivers/esq5505.cpp
+++ b/src/mame/drivers/esq5505.cpp
@@ -306,11 +306,11 @@ void esq5505_state::machine_reset()
if (floppy)
{
- m_duart->ip0_w(ASSERT_LINE);
+ m_duart->ip0_w(CLEAR_LINE);
}
else
{
- m_duart->ip0_w(CLEAR_LINE);
+ m_duart->ip0_w(ASSERT_LINE);
}
}
}
@@ -347,7 +347,7 @@ READ16_MEMBER(esq5505_state::lower_r)
m_ram = (UINT16 *)(void *)memshare("osram")->ptr();
}
- if (m_maincpu->get_fc() == 0x6) // supervisor mode = ROM
+ if (!space.debugger_access() && m_maincpu->get_fc() == 0x6) // supervisor mode = ROM
{
return m_rom[offset];
}
@@ -363,7 +363,7 @@ WRITE16_MEMBER(esq5505_state::lower_w)
if (offset < 0x4000)
{
- if (m_maincpu->get_fc() != 0x6) // if not supervisor mode, RAM
+ if (space.debugger_access() || m_maincpu->get_fc() != 0x6) // if not supervisor mode, RAM
{
COMBINE_DATA(&m_ram[offset]);
}
diff --git a/src/mame/drivers/europc.cpp b/src/mame/drivers/europc.cpp
index 8a1f92ecfb0..c2171d44749 100644
--- a/src/mame/drivers/europc.cpp
+++ b/src/mame/drivers/europc.cpp
@@ -2,11 +2,9 @@
// copyright-holders:Wilbert Pol
#include "emu.h"
#include "coreutil.h"
-#include "includes/genpc.h"
+#include "machine/genpc.h"
#include "machine/nvram.h"
#include "machine/pckeybrd.h"
-#include "bus/isa/isa.h"
-#include "bus/isa/isa_cards.h"
class europc_pc_state : public driver_device
{
@@ -325,18 +323,18 @@ WRITE8_MEMBER( europc_pc_state::europc_rtc_w )
DRIVER_INIT_MEMBER(europc_pc_state,europc)
{
- UINT8 *rom = &memregion("maincpu")->base()[0];
+ UINT8 *rom = &memregion("bios")->base()[0];
int i;
/*
fix century rom bios bug !
if year <79 month (and not CENTURY) is loaded with 0x20
*/
- if (rom[0xff93e]==0xb6){ // mov dh,
+ if (rom[0xf93e]==0xb6){ // mov dh,
UINT8 a;
- rom[0xff93e]=0xb5; // mov ch,
- for (i=0xf8000, a=0; i<0xfffff; i++ ) a+=rom[i];
- rom[0xfffff]=256-a;
+ rom[0xf93e]=0xb5; // mov ch,
+ for (i=0x8000, a=0; i<0xffff; i++ ) a+=rom[i];
+ rom[0xffff]=256-a;
}
memset(&m_rtc_data,0,sizeof(m_rtc_data));
@@ -383,7 +381,7 @@ READ8_MEMBER( europc_pc_state::europc_pio_r )
data = m_port61;
break;
case 2:
- if (m_mb->m_pit_out2)
+ if (m_mb->pit_out2())
data |= 0x20;
break;
}
@@ -462,17 +460,13 @@ INPUT_PORTS_END
static ADDRESS_MAP_START( europc_map, AS_PROGRAM, 8, europc_pc_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xaffff) AM_NOP
- AM_RANGE(0xc0000, 0xc7fff) AM_NOP
- AM_RANGE(0xc8000, 0xcffff) AM_ROM
- AM_RANGE(0xd0000, 0xeffff) AM_NOP
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START(europc_io, AS_IO, 8, europc_pc_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0060, 0x0063) AM_READWRITE(europc_pio_r, europc_pio_w)
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", pc_noppi_mb_device, map)
AM_RANGE(0x0250, 0x025f) AM_READWRITE(europc_jim_r, europc_jim_w)
AM_RANGE(0x02e0, 0x02e0) AM_READ(europc_jim2_r)
ADDRESS_MAP_END
@@ -497,12 +491,13 @@ static MACHINE_CONFIG_START( europc, europc_pc_state )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_EXTRA_OPTIONS("64K, 128K, 256K, 512K")
MACHINE_CONFIG_END
ROM_START( europc )
- ROM_REGION(0x100000,"maincpu", 0)
+ ROM_REGION(0x10000,"bios", 0)
// hdd bios integrated!
- ROM_LOAD("50145", 0xf8000, 0x8000, CRC(1775a11d) SHA1(54430d4d0462860860397487c9c109e6f70db8e3)) // V2.07
+ ROM_LOAD("50145", 0x8000, 0x8000, CRC(1775a11d) SHA1(54430d4d0462860860397487c9c109e6f70db8e3)) // V2.07
ROM_END
COMP( 1988, europc, ibm5150, 0, europc, europc, europc_pc_state, europc, "Schneider Rdf. AG", "EURO PC", MACHINE_NOT_WORKING)
diff --git a/src/mame/drivers/fastinvaders.cpp b/src/mame/drivers/fastinvaders.cpp
index fad9c9eaf95..1dad27b04d5 100644
--- a/src/mame/drivers/fastinvaders.cpp
+++ b/src/mame/drivers/fastinvaders.cpp
@@ -661,7 +661,7 @@ MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", fastinvaders_state, scanline_timer,
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", fastinvaders)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
// TODO
diff --git a/src/mame/drivers/fc100.cpp b/src/mame/drivers/fc100.cpp
index 7b32ffc4a18..efe540eae31 100644
--- a/src/mame/drivers/fc100.cpp
+++ b/src/mame/drivers/fc100.cpp
@@ -523,8 +523,9 @@ static MACHINE_CONFIG_START( fc100, fc100_state )
// other lines not connected
MCFG_SCREEN_MC6847_NTSC_ADD("screen", "vdg")
+ MCFG_SCREEN_COLOR(rgb_t::amber)
MCFG_GFXDECODE_ADD("gfxdecode", "f4palette", fc100)
- MCFG_PALETTE_ADD_MONOCHROME_AMBER("f4palette")
+ MCFG_PALETTE_ADD_MONOCHROME("f4palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp
index 45b4181c393..75edef3a3c6 100644
--- a/src/mame/drivers/fidel6502.cpp
+++ b/src/mame/drivers/fidel6502.cpp
@@ -700,12 +700,12 @@ static INPUT_PORTS_START( sc12 )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h8")
PORT_START("IN.8")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("RV/Pawn")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("DM/Knight")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("TB/Bishop")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("LV/Rook")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("PV/Queen")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("PB/King")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("RV / Pawn")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("DM / Knight")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("TB / Bishop")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("LV / Rook")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("PV / Queen")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("PB / King")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RE")
INPUT_PORTS_END
@@ -715,12 +715,12 @@ static INPUT_PORTS_START( fexcel )
PORT_MODIFY("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Move/Pawn")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Hint/Knight")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Take Back/Bishop")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Level/Rook")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Options/Queen")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Verify/King")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Move / Pawn")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Hint / Knight")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Take Back / Bishop")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Level / Rook")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Options / Queen")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Verify / King")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
INPUT_PORTS_END
@@ -960,12 +960,12 @@ ROM_END
******************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
-COMP( 1981, csc, 0, 0, csc, csc, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-COMP( 1981, cscsp, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-COMP( 1981, cscg, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-COMP( 1981, cscfr, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1981, csc, 0, 0, csc, csc, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1981, cscsp, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1981, cscg, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1981, cscfr, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-COMP( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 12-B", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 12-B", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-COMP( 1987, fexcel, 0, 0, fexcel, fexcel, driver_device, 0, "Fidelity Electronics", "Excellence (model 6080/6093)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-COMP( 1987, fexcelv, 0, 0, fexcelv, fexcelv, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1987, fexcel, 0, 0, fexcel, fexcel, driver_device, 0, "Fidelity Electronics", "Excellence (model 6080/6093)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1987, fexcelv, 0, 0, fexcelv, fexcelv, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/fidel68k.cpp b/src/mame/drivers/fidel68k.cpp
index 00cb94cc985..fcf546c8964 100644
--- a/src/mame/drivers/fidel68k.cpp
+++ b/src/mame/drivers/fidel68k.cpp
@@ -366,12 +366,12 @@ static INPUT_PORTS_START( eag )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a8")
PORT_START("IN.8")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("PB/King")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("PV/Queen")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("TM/Rook")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("ST/Bishop")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("TB/Knight")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("LV/Pawn")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("PB / King")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("PV / Queen")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("TM / Rook")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("ST / Bishop")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("TB / Knight")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("LV / Pawn")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Option")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("RV")
INPUT_PORTS_END
@@ -467,7 +467,7 @@ ROM_END
******************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
-COMP( 1989, feagv2, 0, 0, eag, eag, driver_device, 0, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-COMP( 1990, feagv7, 0, 0, eagv7, eag, driver_device, 0, "Fidelity Electronics", "Elite Avant Garde (model 6117-7)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-COMP( 1990, feagv10, 0, 0, eagv10, eag, driver_device, 0, "Fidelity Electronics", "Elite Avant Garde (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-COMP( 2002, feagv11, feagv10, 0, eagv11, eag, driver_device, 0, "hack (Wilfried Bucke)", "Elite Avant Garde (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1989, feagv2, 0, 0, eag, eag, driver_device, 0, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1990, feagv7, 0, 0, eagv7, eag, driver_device, 0, "Fidelity Electronics", "Elite Avant Garde (model 6117-7)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1990, feagv10, 0, 0, eagv10, eag, driver_device, 0, "Fidelity Electronics", "Elite Avant Garde (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 2002, feagv11, feagv10, 0, eagv11, eag, driver_device, 0, "hack (Wilfried Bucke)", "Elite Avant Garde (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/fidelz80.cpp b/src/mame/drivers/fidelz80.cpp
index 197b2845d5a..31568a6f601 100644
--- a/src/mame/drivers/fidelz80.cpp
+++ b/src/mame/drivers/fidelz80.cpp
@@ -1707,23 +1707,23 @@ ROM_END
******************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
-COMP( 1978, cc10, 0, 0, cc10, cc10, driver_device, 0, "Fidelity Electronics", "Chess Challenger 10 (rev. B)", MACHINE_SUPPORTS_SAVE )
-COMP( 1979, cc7, 0, 0, bcc, bcc, driver_device, 0, "Fidelity Electronics", "Chess Challenger 7 (rev. B)", MACHINE_SUPPORTS_SAVE )
-
-COMP( 1979, vcc, 0, 0, vcc, vcc, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (English)", MACHINE_SUPPORTS_SAVE )
-COMP( 1979, vccsp, vcc, 0, vcc, vccsp, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE )
-COMP( 1979, vccg, vcc, 0, vcc, vccg, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (German)", MACHINE_SUPPORTS_SAVE )
-COMP( 1979, vccfr, vcc, 0, vcc, vccfr, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (French)", MACHINE_SUPPORTS_SAVE )
-
-COMP( 1980, uvc, vcc, 0, vcc, vcc, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (English)", MACHINE_SUPPORTS_SAVE )
-COMP( 1980, uvcsp, vcc, 0, vcc, vccsp, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE )
-COMP( 1980, uvcg, vcc, 0, vcc, vccg, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (German)", MACHINE_SUPPORTS_SAVE )
-COMP( 1980, uvcfr, vcc, 0, vcc, vccfr, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (French)", MACHINE_SUPPORTS_SAVE )
-
-COMP( 1980, vsc, 0, 0, vsc, vsc, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-COMP( 1980, vscsp, vsc, 0, vsc, vscg, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-COMP( 1980, vscg, vsc, 0, vsc, vscg, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-COMP( 1980, vscfr, vsc, 0, vsc, vscg, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-
-COMP( 1979, vbrc, 0, 0, vbrc, vbrc, driver_device, 0, "Fidelity Electronics", "Voice Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
-COMP( 1980, bridgec3, vbrc, 0, vbrc, vbrc, driver_device, 0, "Fidelity Electronics", "Voice Bridge Challenger III", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+CONS( 1978, cc10, 0, 0, cc10, cc10, driver_device, 0, "Fidelity Electronics", "Chess Challenger 10 (rev. B)", MACHINE_SUPPORTS_SAVE )
+CONS( 1979, cc7, 0, 0, bcc, bcc, driver_device, 0, "Fidelity Electronics", "Chess Challenger 7 (rev. B)", MACHINE_SUPPORTS_SAVE )
+
+CONS( 1979, vcc, 0, 0, vcc, vcc, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (English)", MACHINE_SUPPORTS_SAVE )
+CONS( 1979, vccsp, vcc, 0, vcc, vccsp, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE )
+CONS( 1979, vccg, vcc, 0, vcc, vccg, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (German)", MACHINE_SUPPORTS_SAVE )
+CONS( 1979, vccfr, vcc, 0, vcc, vccfr, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (French)", MACHINE_SUPPORTS_SAVE )
+
+CONS( 1980, uvc, vcc, 0, vcc, vcc, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (English)", MACHINE_SUPPORTS_SAVE )
+CONS( 1980, uvcsp, vcc, 0, vcc, vccsp, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE )
+CONS( 1980, uvcg, vcc, 0, vcc, vccg, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (German)", MACHINE_SUPPORTS_SAVE )
+CONS( 1980, uvcfr, vcc, 0, vcc, vccfr, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (French)", MACHINE_SUPPORTS_SAVE )
+
+CONS( 1980, vsc, 0, 0, vsc, vsc, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1980, vscsp, vsc, 0, vsc, vscg, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1980, vscg, vsc, 0, vsc, vscg, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1980, vscfr, vsc, 0, vsc, vscg, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+
+CONS( 1979, vbrc, 0, 0, vbrc, vbrc, driver_device, 0, "Fidelity Electronics", "Voice Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+CONS( 1980, bridgec3, vbrc, 0, vbrc, vbrc, driver_device, 0, "Fidelity Electronics", "Voice Bridge Challenger III", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/fk1.cpp b/src/mame/drivers/fk1.cpp
index e250aada256..d3d32f1dc5e 100644
--- a/src/mame/drivers/fk1.cpp
+++ b/src/mame/drivers/fk1.cpp
@@ -411,7 +411,7 @@ static MACHINE_CONFIG_START( fk1, fk1_state )
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(fk1_state,fk1_irq_callback)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DRIVER(fk1_state, screen_update)
@@ -419,7 +419,7 @@ static MACHINE_CONFIG_START( fk1, fk1_state )
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
MCFG_PIT8253_CLK0(50)
diff --git a/src/mame/drivers/flower.cpp b/src/mame/drivers/flower.cpp
index 06891e9c4a2..26197104508 100644
--- a/src/mame/drivers/flower.cpp
+++ b/src/mame/drivers/flower.cpp
@@ -1,12 +1,13 @@
-// license:???
-// copyright-holders:insideoutboy, David Haywood, Stephh
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+// **** SKELETON DRIVER **** original removed due to unresolved licensing.
+
/*
Flower (c)1986 Komax (USA license)
(c)1986 Sega/Alpha (Sega game number 834-5998)
- - Driver by InsideOutBoy, further improvements by MAME team
-
There is a PCB picture that shows two stickers, the first says
"Flower (c) 1986 Clarue" while the second one is an original
serial number tag also showing "Clarue". GFX ROM contents also
@@ -74,215 +75,22 @@ CHIP # POSITION TYPE
#include "emu.h"
#include "cpu/z80/z80.h"
-#include "includes/flower.h"
-
-
-WRITE8_MEMBER(flower_state::flower_maincpu_irq_ack)
-{
- m_maincpu->set_input_line(0, CLEAR_LINE);
-}
-WRITE8_MEMBER(flower_state::flower_subcpu_irq_ack)
+class flower_state : public driver_device
{
- m_subcpu->set_input_line(0, CLEAR_LINE);
-}
+public:
+ flower_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ { }
+};
-WRITE8_MEMBER(flower_state::flower_soundcpu_irq_ack)
-{
- m_audiocpu->set_input_line(0, CLEAR_LINE);
-}
-WRITE8_MEMBER(flower_state::flower_coin_counter_w)
-{
- machine().bookkeeping().coin_counter_w(0, data & 1);
-}
-
-WRITE8_MEMBER(flower_state::flower_coin_lockout_w)
-{
- machine().bookkeeping().coin_lockout_global_w(~data & 1);
-}
-WRITE8_MEMBER(flower_state::sound_command_w)
-{
- soundlatch_byte_w(space, 0, data);
-
- if (*m_sn_nmi_enable & 1)
- m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
-}
-
-static ADDRESS_MAP_START( flower_cpu1_2, AS_PROGRAM, 8, flower_state )
- AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0xa000, 0xa000) AM_WRITE(flower_coin_lockout_w)
- AM_RANGE(0xa001, 0xa001) AM_WRITE(flower_flipscreen_w)
- AM_RANGE(0xa002, 0xa002) AM_WRITE(flower_maincpu_irq_ack)
- AM_RANGE(0xa003, 0xa003) AM_WRITE(flower_subcpu_irq_ack)
- AM_RANGE(0xa004, 0xa004) AM_WRITE(flower_coin_counter_w)
- AM_RANGE(0xa005, 0xa005) AM_WRITENOP // subcpu nmi (unused)
- AM_RANGE(0xa100, 0xa100) AM_READ_PORT("IN0CPU1")
- AM_RANGE(0xa101, 0xa101) AM_READ_PORT("IN1CPU1")
- AM_RANGE(0xa102, 0xa102) AM_READ_PORT("IN0CPU0")
- AM_RANGE(0xa103, 0xa103) AM_READ_PORT("IN1CPU0")
- AM_RANGE(0xa400, 0xa400) AM_WRITE(sound_command_w)
- AM_RANGE(0xc000, 0xddff) AM_RAM AM_SHARE("mainram1")
- AM_RANGE(0xde00, 0xdfff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(flower_textram_w) AM_SHARE("textram")
- AM_RANGE(0xe000, 0xefff) AM_RAM AM_SHARE("mainram2") // only cleared?
- AM_RANGE(0xf000, 0xf1ff) AM_RAM_WRITE(flower_bg0ram_w) AM_SHARE("bg0ram")
- AM_RANGE(0xf200, 0xf200) AM_RAM AM_SHARE("bg0_scroll")
- AM_RANGE(0xf800, 0xf9ff) AM_RAM_WRITE(flower_bg1ram_w) AM_SHARE("bg1ram")
- AM_RANGE(0xfa00, 0xfa00) AM_RAM AM_SHARE("bg1_scroll")
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( flower_sound_cpu, AS_PROGRAM, 8, flower_state )
- AM_RANGE(0x0000, 0x3fff) AM_ROM
- AM_RANGE(0x4000, 0x4000) AM_WRITE(flower_soundcpu_irq_ack)
- AM_RANGE(0x4001, 0x4001) AM_WRITEONLY AM_SHARE("sn_nmi_enable")
- AM_RANGE(0x6000, 0x6000) AM_READ(soundlatch_byte_r)
- AM_RANGE(0x8000, 0x803f) AM_DEVWRITE("flower", flower_sound_device, sound1_w)
- AM_RANGE(0xa000, 0xa03f) AM_DEVWRITE("flower", flower_sound_device, sound2_w)
- AM_RANGE(0xc000, 0xc7ff) AM_RAM
-ADDRESS_MAP_END
-
-
-INPUT_CHANGED_MEMBER(flower_state::coin_inserted)
-{
- m_maincpu->set_input_line(INPUT_LINE_NMI, newval ? CLEAR_LINE : ASSERT_LINE);
-}
static INPUT_PORTS_START( flower )
- PORT_START("IN0CPU0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, flower_state,coin_inserted, 0)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )
- PORT_DIPNAME( 0x08, 0x08, "Energy Decrease" ) PORT_DIPLOCATION("SW2:4")
- PORT_DIPSETTING( 0x08, "Slow" )
- PORT_DIPSETTING( 0x00, "Fast" )
- PORT_DIPNAME( 0x10, 0x10, "Invulnerability (Cheat)") PORT_DIPLOCATION("SW2:5")
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "Keep Weapons When Destroyed" ) PORT_DIPLOCATION("SW2:6") // check code at 0x74a2
- PORT_DIPSETTING( 0x20, DEF_STR( No ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7") // "Enemy Bullets"
- PORT_DIPSETTING( 0x40, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
- PORT_DIPNAME( 0x80, 0x80, "Shot Range" ) PORT_DIPLOCATION("SW2:8") // check code at 0x75f9
- PORT_DIPSETTING( 0x80, "Short" )
- PORT_DIPSETTING( 0x00, "Long" )
-
- PORT_START("IN1CPU0")
- PORT_DIPNAME( 0x07, 0x05, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2,3")
- PORT_DIPSETTING( 0x07, "1" )
- PORT_DIPSETTING( 0x06, "2" )
- PORT_DIPSETTING( 0x05, "3" )
- PORT_DIPSETTING( 0x04, "4" )
- PORT_DIPSETTING( 0x03, "5" )
- PORT_DIPSETTING( 0x02, "6" )
- PORT_DIPSETTING( 0x01, "7" )
- PORT_DIPSETTING( 0x00, "Infinite (Cheat)")
- PORT_DIPNAME( 0x18, 0x18, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:4,5")
- PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x18, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:6") // check code at 0x759f
- PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:7")
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:8")
- PORT_DIPSETTING( 0x80, "30k, then every 50k" )
- PORT_DIPSETTING( 0x00, "50k, then every 80k" )
-
- PORT_START("IN0CPU1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Laser")
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 Missile")
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 Cutter")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("IN1CPU1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Laser")
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL PORT_NAME("P2 Missile")
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL PORT_NAME("P2 Cutter")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
-static const gfx_layout flower_charlayout =
-{
- 8,8,
- RGN_FRAC(1,1),
- 2,
- { 0, 4 },
- { STEP4(0,1), STEP4(8,1) },
- { STEP8(0,16) },
- 8*8*2
-};
-
-static const gfx_layout flower_tilelayout =
-{
- 16,16,
- RGN_FRAC(1,2),
- 4,
- { 0, 4, RGN_FRAC(1,2), RGN_FRAC(1,2)+4 },
- { STEP4(0,1), STEP4(8,1), STEP4(8*8*2,1), STEP4(8*8*2+8,1) },
- { STEP8(0,16), STEP8(8*8*4,16) },
- 16*16*2
-};
-
-static GFXDECODE_START( flower )
- GFXDECODE_ENTRY( "gfx1", 0, flower_charlayout, 0, 64 )
- GFXDECODE_ENTRY( "gfx2", 0, flower_tilelayout, 0, 16 )
- GFXDECODE_ENTRY( "gfx3", 0, flower_tilelayout, 0, 16 )
-GFXDECODE_END
-
-
static MACHINE_CONFIG_START( flower, flower_state )
-
- /* basic machine hardware */
- // clock divider (of all cpus) is unknown. /6 (3.072 MHz) is too slow
- // cpus are Z80 "A" type, official maximum speed of 4 MHz, but 4.6 MHz has been proven to work in practice
- MCFG_CPU_ADD("maincpu", Z80,XTAL_18_432MHz/4)
- MCFG_CPU_PROGRAM_MAP(flower_cpu1_2)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", flower_state, irq0_line_hold)
-
- MCFG_CPU_ADD("subcpu", Z80,XTAL_18_432MHz/4)
- MCFG_CPU_PROGRAM_MAP(flower_cpu1_2)
- MCFG_CPU_PERIODIC_INT_DRIVER(flower_state, irq0_line_hold, 120) // controls game speed? irqsource and frequency unknown
-
- MCFG_CPU_ADD("audiocpu", Z80,XTAL_18_432MHz/4)
- MCFG_CPU_PROGRAM_MAP(flower_sound_cpu)
- MCFG_CPU_PERIODIC_INT_DRIVER(flower_state, irq0_line_hold, 90) // controls music speed. irqsource and frequency unknown, same as subcpu perhaps?
-
- // tight sync, slowdowns otherwise
-// MCFG_QUANTUM_PERFECT_CPU("maincpu")
- MCFG_QUANTUM_TIME(attotime::from_hz(6000))
-
- /* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60) // ?
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(34*8, 33*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 34*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(flower_state, screen_update_flower)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", flower)
- MCFG_PALETTE_ADD_RRRRGGGGBBBB_PROMS("palette", 256)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_MONO("mono")
-
- MCFG_SOUND_ADD("flower", FLOWER, 0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@@ -373,5 +181,5 @@ ROM_START( flowerj ) /* Sega/Alpha version. Sega game number 834-5998 */
ROM_END
-GAME( 1986, flower, 0, flower, flower, driver_device, 0, ROT0, "Clarue (Komax license)", "Flower (US)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1986, flowerj, flower, flower, flower, driver_device, 0, ROT0, "Clarue (Sega / Alpha Denshi Co. license)", "Flower (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
+GAME( 1986, flower, 0, flower, flower, driver_device, 0, ROT0, "Clarue (Komax license)", "Flower (US)", MACHINE_IS_SKELETON )
+GAME( 1986, flowerj, flower, flower, flower, driver_device, 0, ROT0, "Clarue (Sega / Alpha Denshi Co. license)", "Flower (Japan)", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/galastrm.cpp b/src/mame/drivers/galastrm.cpp
index b3a303b083d..796b3130948 100644
--- a/src/mame/drivers/galastrm.cpp
+++ b/src/mame/drivers/galastrm.cpp
@@ -1,4 +1,4 @@
-// license:???
+// license:BSD-3-Clause
// copyright-holders:Hau
/*
@@ -314,7 +314,7 @@ static MACHINE_CONFIG_START( galastrm, galastrm_state )
MCFG_TC0480SCP_PALETTE("palette")
/* sound hardware */
- MCFG_FRAGMENT_ADD(taito_en_sound)
+ MCFG_DEVICE_ADD("taito_en", TAITO_EN, 0)
MACHINE_CONFIG_END
/***************************************************************************/
@@ -326,7 +326,7 @@ ROM_START( galastrm )
ROM_LOAD32_BYTE( "c99_13.ic103", 0x00002, 0x40000, CRC(885fcb35) SHA1(be10e109c461c1f776e98efa1b2a4d588aa0c41c) )
ROM_LOAD32_BYTE( "c99_14.ic104", 0x00003, 0x40000, CRC(457ef6b1) SHA1(06c2613d46addacd380a0f2413cd795b17ac9474) )
- ROM_REGION( 0x180000, "audiocpu", 0 )
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 )
ROM_LOAD16_BYTE( "c99_23.ic8", 0x100000, 0x20000, CRC(5718ee92) SHA1(33cfa60c5bceb1525498f27b598067d2dc620431) )
ROM_LOAD16_BYTE( "c99_22.ic7", 0x100001, 0x20000, CRC(b90f7c42) SHA1(e2fa9ee10ad61ae1a672c3357c0072b79ec7fbcb) )
diff --git a/src/mame/drivers/galaxy.cpp b/src/mame/drivers/galaxy.cpp
index 7104b6f3bf9..8a6a884ea8d 100644
--- a/src/mame/drivers/galaxy.cpp
+++ b/src/mame/drivers/galaxy.cpp
@@ -187,7 +187,7 @@ static MACHINE_CONFIG_START( galaxy, galaxy_state )
MCFG_SCREEN_UPDATE_DRIVER(galaxy_state, screen_update_galaxy)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", galaxy)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* snapshot */
@@ -229,7 +229,7 @@ static MACHINE_CONFIG_START( galaxyp, galaxy_state )
MCFG_SCREEN_VISIBLE_AREA(0, 384-1, 0, 208-1)
MCFG_SCREEN_UPDATE_DRIVER(galaxy_state, screen_update_galaxy)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* snapshot */
diff --git a/src/mame/drivers/galeb.cpp b/src/mame/drivers/galeb.cpp
index 64d24d912e0..d595a603966 100644
--- a/src/mame/drivers/galeb.cpp
+++ b/src/mame/drivers/galeb.cpp
@@ -143,7 +143,7 @@ static MACHINE_CONFIG_START( galeb, galeb_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", galeb )
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* audio hardware */
diff --git a/src/mame/drivers/galgame.cpp b/src/mame/drivers/galgame.cpp
index 0855699da39..07c9b348eec 100644
--- a/src/mame/drivers/galgame.cpp
+++ b/src/mame/drivers/galgame.cpp
@@ -334,7 +334,7 @@ static MACHINE_CONFIG_START( galaxygame, galaxygame_state )
MCFG_SCREEN_UPDATE_DRIVER(galaxygame_state, screen_update_galaxygame)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/gamepock.cpp b/src/mame/drivers/gamepock.cpp
index 89c06dd40dd..1dc26145819 100644
--- a/src/mame/drivers/gamepock.cpp
+++ b/src/mame/drivers/gamepock.cpp
@@ -59,7 +59,7 @@ static MACHINE_CONFIG_START( gamepock, gamepock_state )
MCFG_DEFAULT_LAYOUT(layout_lcd)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/genpc.cpp b/src/mame/drivers/genpc.cpp
index 72d267b69af..2b8bf334f84 100644
--- a/src/mame/drivers/genpc.cpp
+++ b/src/mame/drivers/genpc.cpp
@@ -9,13 +9,12 @@
***************************************************************************/
-#include "emu.h"
-#include "includes/genpc.h"
+#include "emu.h"
+#include "machine/genpc.h"
#include "cpu/nec/nec.h"
#include "cpu/i86/i86.h"
-#include "machine/pc_lpt.h"
#include "bus/pc_kbd/keyboards.h"
#include "softlist.h"
@@ -31,37 +30,25 @@ public:
static ADDRESS_MAP_START( pc8_map, AS_PROGRAM, 8, genpc_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xbffff) AM_NOP
- AM_RANGE(0xc0000, 0xc7fff) AM_ROM
- AM_RANGE(0xc8000, 0xcffff) AM_ROM
- AM_RANGE(0xd0000, 0xeffff) AM_NOP
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( pc16_map, AS_PROGRAM, 16, genpc_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xbffff) AM_NOP
- AM_RANGE(0xc0000, 0xc7fff) AM_ROM
- AM_RANGE(0xc8000, 0xcffff) AM_ROM
- AM_RANGE(0xd0000, 0xeffff) AM_NOP
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
-
static ADDRESS_MAP_START(pc8_io, AS_IO, 8, genpc_state )
ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", ibm5160_mb_device, map)
ADDRESS_MAP_END
static ADDRESS_MAP_START(pc16_io, AS_IO, 16, genpc_state )
ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE8("mb", ibm5160_mb_device, map, 0xffff)
ADDRESS_MAP_END
-static INPUT_PORTS_START( pcgen )
-INPUT_PORTS_END
-
static DEVICE_INPUT_DEFAULTS_START(cga)
DEVICE_INPUT_DEFAULTS("DSW0",0x30, 0x20)
DEVICE_INPUT_DEFAULTS_END
@@ -70,7 +57,6 @@ static DEVICE_INPUT_DEFAULTS_START(vga)
DEVICE_INPUT_DEFAULTS("DSW0",0x30, 0x00)
DEVICE_INPUT_DEFAULTS_END
-
static MACHINE_CONFIG_START( pcmda, genpc_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", V20, 4772720)
@@ -93,147 +79,65 @@ static MACHINE_CONFIG_START( pcmda, genpc_state )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_EXTRA_OPTIONS("64K, 128K, 256K, 512K")
/* software lists */
MCFG_SOFTWARE_LIST_ADD("disk_list","ibm5150")
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( pcherc, genpc_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", V20, 4772720)
- MCFG_CPU_PROGRAM_MAP(pc8_map)
- MCFG_CPU_IO_MAP(pc8_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb)
-
- MCFG_IBM5160_MOTHERBOARD_ADD("mb","maincpu")
-
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa1", pc_isa8_cards, "hercules", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa2", pc_isa8_cards, "com", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa3", pc_isa8_cards, "fdc_xt", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa4", pc_isa8_cards, "hdc", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa5", pc_isa8_cards, "adlib", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa6", pc_isa8_cards, nullptr, false)
-
- /* keyboard */
- MCFG_PC_KBDC_SLOT_ADD("mb:pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270)
-
- /* internal ram */
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("640K")
-
- /* software lists */
- MCFG_SOFTWARE_LIST_ADD("disk_list","ibm5150")
+static MACHINE_CONFIG_DERIVED( pcherc, pcmda )
+ MCFG_DEVICE_MODIFY("isa1")
+ MCFG_DEVICE_SLOT_INTERFACE(pc_isa8_cards, "hercules", false)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( pccga, genpc_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", I8086, 4772720)
+static MACHINE_CONFIG_DERIVED( pccga, pcmda )
+ MCFG_CPU_REPLACE("maincpu", I8086, 4772720)
MCFG_CPU_PROGRAM_MAP(pc16_map)
MCFG_CPU_IO_MAP(pc16_io)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb)
-
- MCFG_IBM5160_MOTHERBOARD_ADD("mb","maincpu")
+ MCFG_DEVICE_MODIFY("mb")
MCFG_DEVICE_INPUT_DEFAULTS(cga)
-
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa1", pc_isa8_cards, "cga", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa2", pc_isa8_cards, "com", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa3", pc_isa8_cards, "fdc_xt", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa4", pc_isa8_cards, "hdc", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa5", pc_isa8_cards, "sblaster1_0", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa6", pc_isa8_cards, nullptr, false)
-
- /* keyboard */
- MCFG_PC_KBDC_SLOT_ADD("mb:pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270)
-
- /* internal ram */
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("640K")
-
- /* software lists */
- MCFG_SOFTWARE_LIST_ADD("disk_list","ibm5150")
+ MCFG_DEVICE_MODIFY("isa1")
+ MCFG_DEVICE_SLOT_INTERFACE(pc_isa8_cards, "cga", false)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( pcega, genpc_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", I8086, 4772720)
- MCFG_CPU_PROGRAM_MAP(pc16_map)
- MCFG_CPU_IO_MAP(pc16_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb)
-
- MCFG_IBM5160_MOTHERBOARD_ADD("mb","maincpu")
+static MACHINE_CONFIG_DERIVED( pcega, pccga )
+ MCFG_DEVICE_MODIFY("isa1")
+ MCFG_DEVICE_SLOT_INTERFACE(pc_isa8_cards, "ega", false)
+ MCFG_DEVICE_MODIFY("mb")
MCFG_DEVICE_INPUT_DEFAULTS(vga)
-
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa1", pc_isa8_cards, "com", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa2", pc_isa8_cards, "fdc_xt", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa3", pc_isa8_cards, "hdc", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa4", pc_isa8_cards, "sblaster1_0", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa5", pc_isa8_cards, "ega", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa6", pc_isa8_cards, nullptr, false)
-
- /* keyboard */
- MCFG_PC_KBDC_SLOT_ADD("mb:pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270)
-
- /* internal ram */
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("640K")
-
- /* software lists */
- MCFG_SOFTWARE_LIST_ADD("disk_list","ibm5150")
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( xtvga, genpc_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", I8086, 4772720)
- MCFG_CPU_PROGRAM_MAP(pc16_map)
- MCFG_CPU_IO_MAP(pc16_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb)
-
- MCFG_IBM5160_MOTHERBOARD_ADD("mb","maincpu")
- MCFG_DEVICE_INPUT_DEFAULTS(vga)
-
- MCFG_ISA8_SLOT_ADD("mb:isa","isa1", pc_isa8_cards, "com", false)
- MCFG_ISA8_SLOT_ADD("mb:isa","isa2", pc_isa8_cards, "fdc_xt", false)
- MCFG_ISA8_SLOT_ADD("mb:isa","isa3", pc_isa8_cards, "hdc", false)
- MCFG_ISA8_SLOT_ADD("mb:isa","isa4", pc_isa8_cards, "sblaster1_0", false)
- MCFG_ISA8_SLOT_ADD("mb:isa","isa5", pc_isa8_cards, "svga_et4k", false)
- MCFG_ISA8_SLOT_ADD("mb:isa","isa6", pc_isa8_cards, nullptr, false)
-
- /* keyboard */
- MCFG_PC_KBDC_SLOT_ADD("mb:pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270)
-
- /* internal ram */
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("640K")
-
- /* software lists */
- MCFG_SOFTWARE_LIST_ADD("disk_list","ibm5150")
+static MACHINE_CONFIG_DERIVED( xtvga, pcega )
+ MCFG_DEVICE_MODIFY("isa1")
+ MCFG_DEVICE_SLOT_INTERFACE(pc_isa8_cards, "svga_et4k", false)
MACHINE_CONFIG_END
ROM_START( pcmda )
- ROM_REGION(0x100000,"maincpu", 0)
+ ROM_REGION(0x10000,"bios", 0)
ROM_SYSTEM_BIOS(0, "anon", "XT Anonymous Generic Turbo BIOS")
- ROMX_LOAD("pcxt.rom", 0xfe000, 0x02000, CRC(031aafad) SHA1(a641b505bbac97b8775f91fe9b83d9afdf4d038f),ROM_BIOS(1))
+ ROMX_LOAD("pcxt.rom", 0xe000, 0x02000, CRC(031aafad) SHA1(a641b505bbac97b8775f91fe9b83d9afdf4d038f),ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "anon2007", "XT Anonymous Generic Turbo BIOS 2007")
- ROMX_LOAD( "pcxt2007.bin", 0xfe000, 0x2000, CRC(1d7bd86c) SHA1(33a500f599b4dad2fe6d7a5c3e89b13bd5dd2987),ROM_BIOS(2))
+ ROMX_LOAD( "pcxt2007.bin", 0xe000, 0x2000, CRC(1d7bd86c) SHA1(33a500f599b4dad2fe6d7a5c3e89b13bd5dd2987),ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "ami", "XT AMI")
- ROMX_LOAD( "ami.bin", 0xfe000, 0x2000, CRC(b381eb22) SHA1(9735193de119270c946a17ed58c3ab9554e0852e),ROM_BIOS(3))
+ ROMX_LOAD( "ami.bin", 0xe000, 0x2000, CRC(b381eb22) SHA1(9735193de119270c946a17ed58c3ab9554e0852e),ROM_BIOS(3))
ROM_SYSTEM_BIOS(3, "award", "XT Award 2.05")
- ROMX_LOAD( "award2.05.bin", 0xfe000, 0x2000, CRC(5b3953e5) SHA1(4a36171aa8d993008187f39f732b9296401b7b6c),ROM_BIOS(4))
+ ROMX_LOAD( "award2.05.bin", 0xe000, 0x2000, CRC(5b3953e5) SHA1(4a36171aa8d993008187f39f732b9296401b7b6c),ROM_BIOS(4))
ROM_SYSTEM_BIOS(4, "dtk", "XT DTK Erso bios 2.42")
- ROMX_LOAD( "dtk2.42.bin", 0xfe000, 0x2000, CRC(3f2d2a76) SHA1(02fa057f2c22ab199a8d9795ab1ae570f2b13a36),ROM_BIOS(5))
+ ROMX_LOAD( "dtk2.42.bin", 0xe000, 0x2000, CRC(3f2d2a76) SHA1(02fa057f2c22ab199a8d9795ab1ae570f2b13a36),ROM_BIOS(5))
ROM_SYSTEM_BIOS(5, "peter", "XT Peter Kohlman 3.75") // V20 Rom only
- ROMX_LOAD( "peterv203.75.bin", 0xfe000, 0x2000, CRC(b053a6a4) SHA1(f53218ad3d725f12d9149b22d8afcf6a8869a3bd),ROM_BIOS(6))
+ ROMX_LOAD( "peterv203.75.bin", 0xe000, 0x2000, CRC(b053a6a4) SHA1(f53218ad3d725f12d9149b22d8afcf6a8869a3bd),ROM_BIOS(6))
ROM_SYSTEM_BIOS(6, "pho227", "XT Phoenix Bios 2.27")
- ROMX_LOAD( "phoenix2.27.bin", 0xfe000, 0x2000, CRC(168ffef0) SHA1(69465db2f9246a614044d1f433d374506a13a07f),ROM_BIOS(7))
+ ROMX_LOAD( "phoenix2.27.bin", 0xe000, 0x2000, CRC(168ffef0) SHA1(69465db2f9246a614044d1f433d374506a13a07f),ROM_BIOS(7))
ROM_SYSTEM_BIOS(7, "pho251", "XT Phoenix Bios 2.51")
- ROMX_LOAD( "phoenix2.51.bin", 0xfe000, 0x2000, CRC(9b7e9c40) SHA1(c948a8d3d715e469105c6e2acd8b46ec274b25a8),ROM_BIOS(8))
+ ROMX_LOAD( "phoenix2.51.bin", 0xe000, 0x2000, CRC(9b7e9c40) SHA1(c948a8d3d715e469105c6e2acd8b46ec274b25a8),ROM_BIOS(8))
ROM_SYSTEM_BIOS(8, "turbo", "XT Turbo Bios 3.10")
- ROMX_LOAD( "turbo3.10.bin", 0xfe000, 0x2000, CRC(8aaca1e3) SHA1(9c03da16713e08c0112a04c8bdfa394e7341c1fc),ROM_BIOS(9))
+ ROMX_LOAD( "turbo3.10.bin", 0xe000, 0x2000, CRC(8aaca1e3) SHA1(9c03da16713e08c0112a04c8bdfa394e7341c1fc),ROM_BIOS(9))
ROM_END
#define rom_pcherc rom_pcmda
@@ -241,25 +145,25 @@ ROM_END
#define rom_pcega rom_pcmda
ROM_START( pc )
- ROM_REGION(0x100000,"maincpu", 0)
+ ROM_REGION(0x10000,"bios", 0)
ROM_SYSTEM_BIOS(0, "anon", "XT Anonymous Generic Turbo BIOS")
- ROMX_LOAD("pcxt.rom", 0xfe000, 0x02000, CRC(031aafad) SHA1(a641b505bbac97b8775f91fe9b83d9afdf4d038f),ROM_BIOS(1))
+ ROMX_LOAD("pcxt.rom", 0xe000, 0x02000, CRC(031aafad) SHA1(a641b505bbac97b8775f91fe9b83d9afdf4d038f),ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "anon2007", "XT Anonymous Generic Turbo BIOS 2007")
- ROMX_LOAD( "pcxt2007.bin", 0xfe000, 0x2000, CRC(1d7bd86c) SHA1(33a500f599b4dad2fe6d7a5c3e89b13bd5dd2987),ROM_BIOS(2))
+ ROMX_LOAD( "pcxt2007.bin", 0xe000, 0x2000, CRC(1d7bd86c) SHA1(33a500f599b4dad2fe6d7a5c3e89b13bd5dd2987),ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "ami", "XT AMI")
- ROMX_LOAD( "ami.bin", 0xfe000, 0x2000, CRC(b381eb22) SHA1(9735193de119270c946a17ed58c3ab9554e0852e),ROM_BIOS(3))
+ ROMX_LOAD( "ami.bin", 0xe000, 0x2000, CRC(b381eb22) SHA1(9735193de119270c946a17ed58c3ab9554e0852e),ROM_BIOS(3))
ROM_SYSTEM_BIOS(3, "award", "XT Award 2.05")
- ROMX_LOAD( "award2.05.bin", 0xfe000, 0x2000, CRC(5b3953e5) SHA1(4a36171aa8d993008187f39f732b9296401b7b6c),ROM_BIOS(4))
+ ROMX_LOAD( "award2.05.bin", 0xe000, 0x2000, CRC(5b3953e5) SHA1(4a36171aa8d993008187f39f732b9296401b7b6c),ROM_BIOS(4))
ROM_SYSTEM_BIOS(4, "dtk", "XT DTK Erso bios 2.42")
- ROMX_LOAD( "dtk2.42.bin", 0xfe000, 0x2000, CRC(3f2d2a76) SHA1(02fa057f2c22ab199a8d9795ab1ae570f2b13a36),ROM_BIOS(5))
+ ROMX_LOAD( "dtk2.42.bin", 0xe000, 0x2000, CRC(3f2d2a76) SHA1(02fa057f2c22ab199a8d9795ab1ae570f2b13a36),ROM_BIOS(5))
ROM_SYSTEM_BIOS(5, "peter", "XT Peter Kohlman 3.75")
- ROMX_LOAD( "peterv203.75.bin", 0xfe000, 0x2000, CRC(b053a6a4) SHA1(f53218ad3d725f12d9149b22d8afcf6a8869a3bd),ROM_BIOS(6))
+ ROMX_LOAD( "peterv203.75.bin", 0xe000, 0x2000, CRC(b053a6a4) SHA1(f53218ad3d725f12d9149b22d8afcf6a8869a3bd),ROM_BIOS(6))
ROM_SYSTEM_BIOS(6, "pho227", "XT Phoenix Bios 2.27")
- ROMX_LOAD( "phoenix2.27.bin", 0xfe000, 0x2000, CRC(168ffef0) SHA1(69465db2f9246a614044d1f433d374506a13a07f),ROM_BIOS(7))
+ ROMX_LOAD( "phoenix2.27.bin", 0xe000, 0x2000, CRC(168ffef0) SHA1(69465db2f9246a614044d1f433d374506a13a07f),ROM_BIOS(7))
ROM_SYSTEM_BIOS(7, "pho251", "XT Phoenix Bios 2.51")
- ROMX_LOAD( "phoenix2.51.bin", 0xfe000, 0x2000, CRC(9b7e9c40) SHA1(c948a8d3d715e469105c6e2acd8b46ec274b25a8),ROM_BIOS(8))
+ ROMX_LOAD( "phoenix2.51.bin", 0xe000, 0x2000, CRC(9b7e9c40) SHA1(c948a8d3d715e469105c6e2acd8b46ec274b25a8),ROM_BIOS(8))
ROM_SYSTEM_BIOS(8, "turbo", "XT Turbo Bios 3.10")
- ROMX_LOAD( "turbo3.10.bin", 0xfe000, 0x2000, CRC(8aaca1e3) SHA1(9c03da16713e08c0112a04c8bdfa394e7341c1fc),ROM_BIOS(9))
+ ROMX_LOAD( "turbo3.10.bin", 0xe000, 0x2000, CRC(8aaca1e3) SHA1(9c03da16713e08c0112a04c8bdfa394e7341c1fc),ROM_BIOS(9))
/* IBM 1501981(CGA) and 1501985(MDA) Character rom */
ROM_REGION(0x2000,"gfx1", 0)
ROM_LOAD("5788005.u33", 0x00000, 0x2000, CRC(0bf56d70) SHA1(c2a8b10808bf51a3c123ba3eb1e9dd608231916f)) /* "AMI 8412PI // 5788005 // (C) IBM CORP. 1981 // KOREA" */
@@ -274,8 +178,8 @@ ROM_END
***************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
-COMP( 1987, pc, ibm5150, 0, pccga, pcgen, driver_device, 0, "<generic>", "PC (CGA)" , 0)
-COMP( 1987, pcega, ibm5150, 0, pcega, pcgen, driver_device, 0, "<generic>", "PC (EGA)" , 0)
-COMP ( 1987, pcmda, ibm5150, 0, pcmda, pcgen, driver_device, 0, "<generic>", "PC (MDA)" , 0)
-COMP ( 1987, pcherc, ibm5150, 0, pcherc, pcgen, driver_device, 0, "<generic>", "PC (Hercules)" , 0)
-COMP ( 1987, xtvga, ibm5150, 0, xtvga, pcgen, driver_device, 0, "<generic>", "PC (VGA)" , MACHINE_NOT_WORKING)
+COMP( 1987, pc, ibm5150, 0, pccga, 0, driver_device, 0, "<generic>", "PC (CGA)" , 0)
+COMP( 1987, pcega, ibm5150, 0, pcega, 0, driver_device, 0, "<generic>", "PC (EGA)" , 0)
+COMP ( 1987, pcmda, ibm5150, 0, pcmda, 0, driver_device, 0, "<generic>", "PC (MDA)" , 0)
+COMP ( 1987, pcherc, ibm5150, 0, pcherc, 0, driver_device, 0, "<generic>", "PC (Hercules)" , 0)
+COMP ( 1987, xtvga, ibm5150, 0, xtvga, 0, driver_device, 0, "<generic>", "PC (VGA)" , MACHINE_NOT_WORKING)
diff --git a/src/mame/drivers/glasgow.cpp b/src/mame/drivers/glasgow.cpp
index d34fb059961..e8922472d5b 100644
--- a/src/mame/drivers/glasgow.cpp
+++ b/src/mame/drivers/glasgow.cpp
@@ -1,5 +1,5 @@
-// license:???
-// copyright-holders:Dirk Verwiebe, Robbbert, Cowering, Ralf Schaefer
+// license:BSD-3-Clause
+// copyright-holders:Dirk Verwiebe, Robbbert, Cowering
/***************************************************************************
Mephisto Glasgow 3 S chess computer
Dirk V.
@@ -39,27 +39,19 @@ How to play (quick guide)
Note about clickable artwork: You need to be running in windowed mode;
and you need to use newui.
-R.Schaefer Oct 2010
-
-1. everything concerning chessboard moved to machine mboard
-2. Border pieces added. This allow setting up and repair chess positons
-3. chessboard added for Amsterdam, Dallas 16 Bit, Dallas 32 Bit, Roma 32 Bit
-4. Save states added.
-
***************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "glasgow.lh"
#include "sound/beep.h"
-#include "includes/mboard.h"
-class glasgow_state : public mboard_state
+class glasgow_state : public driver_device
{
public:
glasgow_state(const machine_config &mconfig, device_type type, const char *tag)
- : mboard_state(mconfig, type, tag),
+ : driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_beep(*this, "beeper"),
m_line0(*this, "LINE0"),
@@ -121,7 +113,6 @@ WRITE16_MEMBER( glasgow_state::glasgow_lcd_flag_w )
else
{
m_led7 = 0;
- mboard_key_selector = 1;
}
}
@@ -129,28 +120,17 @@ READ16_MEMBER( glasgow_state::glasgow_keys_r )
{
UINT8 data = 0xff;
- /* See if any keys pressed */
- data = 3;
-
- if (mboard_key_select == m_line0->read())
- data &= 1;
-
- if (mboard_key_select == m_line1->read())
- data &= 2;
-
return data << 8;
}
WRITE16_MEMBER( glasgow_state::glasgow_keys_w )
{
- mboard_key_select = data >> 8;
}
WRITE16_MEMBER( glasgow_state::write_lcd )
{
UINT8 lcd_data = data >> 8;
- output().set_digit_value(m_lcd_shift_counter, mboard_lcd_invert & 1 ? lcd_data^0xff : lcd_data);
m_lcd_shift_counter--;
m_lcd_shift_counter &= 3;
logerror("LCD Offset = %d Data low = %x \n", offset, lcd_data);
@@ -159,12 +139,10 @@ WRITE16_MEMBER( glasgow_state::write_lcd )
WRITE16_MEMBER( glasgow_state::write_lcd_flag )
{
// UINT8 lcd_flag;
- mboard_lcd_invert = 0;
// lcd_flag=data >> 8;
//m_beep->set_state((data >> 8) & 1 ? 1 : 0);
if ((data >> 8) == 0)
{
- mboard_key_selector = 1;
m_led7 = 0;
}
else
@@ -191,16 +169,7 @@ WRITE16_MEMBER( glasgow_state::write_irq_flag )
READ16_MEMBER( glasgow_state::read_newkeys16 ) //Amsterdam, Roma
{
- UINT16 data;
-
- if (mboard_key_selector == 0)
- data = m_line0->read();
- else
- data = m_line1->read();
-
- logerror("read Keyboard Offset = %x Data = %x Select = %x \n", offset, data, mboard_key_selector);
- data <<= 8;
- return data ;
+ return 0;
}
@@ -220,9 +189,6 @@ READ16_MEMBER(glasgow_state::read_test)
WRITE32_MEMBER( glasgow_state::write_lcd32 )
{
- UINT8 lcd_data = data >> 8;
-
- output().set_digit_value(m_lcd_shift_counter, mboard_lcd_invert & 1 ? lcd_data^0xff : lcd_data);
m_lcd_shift_counter--;
m_lcd_shift_counter &= 3;
//logerror("LCD Offset = %d Data = %x \n ", offset, lcd_data);
@@ -232,11 +198,8 @@ WRITE32_MEMBER( glasgow_state::write_lcd_flag32 )
{
// UINT8 lcd_flag = data >> 24;
- mboard_lcd_invert = 0;
-
if ((data >> 24) == 0)
{
- mboard_key_selector = 1;
m_led7 = 0;
}
else
@@ -254,17 +217,7 @@ WRITE32_MEMBER( glasgow_state::write_lcd_flag32 )
READ32_MEMBER( glasgow_state::read_newkeys32 ) // Dallas 32, Roma 32
{
- UINT32 data;
-
- if (mboard_key_selector == 0)
- data = m_line0->read();
- else
- data = m_line1->read();
- //if (mboard_key_selector == 1) data = m_line0->read(); else data = 0;
- if(data)
- logerror("read Keyboard Offset = %x Data = %x\n", offset, data);
- data <<= 24;
- return data ;
+ return 0;
}
#ifdef UNUSED_FUNCTION
@@ -295,28 +248,20 @@ TIMER_DEVICE_CALLBACK_MEMBER(glasgow_state::update_nmi32)
void glasgow_state::machine_start()
{
- mboard_key_selector = 0;
m_irq_flag = 0;
m_lcd_shift_counter = 3;
-
- mboard_savestate_register();
}
MACHINE_START_MEMBER(glasgow_state,dallas32)
{
m_lcd_shift_counter = 3;
-
- mboard_savestate_register();
}
void glasgow_state::machine_reset()
{
m_lcd_shift_counter = 3;
-
- mboard_set_border_pieces();
- mboard_set_board();
}
static ADDRESS_MAP_START(glasgow_mem, AS_PROGRAM, 16, glasgow_state)
@@ -325,8 +270,6 @@ static ADDRESS_MAP_START(glasgow_mem, AS_PROGRAM, 16, glasgow_state)
AM_RANGE(0x00010000, 0x00010001) AM_WRITE(glasgow_lcd_w)
AM_RANGE(0x00010002, 0x00010003) AM_READWRITE(glasgow_keys_r,glasgow_keys_w)
AM_RANGE(0x00010004, 0x00010005) AM_WRITE(glasgow_lcd_flag_w)
- AM_RANGE(0x00010006, 0x00010007) AM_READWRITE(mboard_read_board_16,mboard_write_LED_16)
- AM_RANGE(0x00010008, 0x00010009) AM_WRITE(mboard_write_board_16)
AM_RANGE(0x0001c000, 0x0001ffff) AM_RAM // 16KB
ADDRESS_MAP_END
@@ -337,10 +280,7 @@ static ADDRESS_MAP_START(amsterd_mem, AS_PROGRAM, 16, glasgow_state)
AM_RANGE(0x00800002, 0x00800003) AM_WRITE(write_lcd)
AM_RANGE(0x00800008, 0x00800009) AM_WRITE(write_lcd_flag)
AM_RANGE(0x00800004, 0x00800005) AM_WRITE(write_irq_flag)
- AM_RANGE(0x00800010, 0x00800011) AM_WRITE(mboard_write_board_16)
- AM_RANGE(0x00800020, 0x00800021) AM_READ(mboard_read_board_16)
AM_RANGE(0x00800040, 0x00800041) AM_READ(read_newkeys16)
- AM_RANGE(0x00800088, 0x00800089) AM_WRITE(mboard_write_LED_16)
AM_RANGE(0x00ffc000, 0x00ffffff) AM_RAM // 16KB
ADDRESS_MAP_END
@@ -352,10 +292,7 @@ static ADDRESS_MAP_START(dallas32_mem, AS_PROGRAM, 32, glasgow_state)
AM_RANGE(0x00800000, 0x00800003) AM_WRITE(write_lcd32)
AM_RANGE(0x00800004, 0x00800007) AM_WRITE(write_beeper32)
AM_RANGE(0x00800008, 0x0080000B) AM_WRITE(write_lcd_flag32)
- AM_RANGE(0x00800010, 0x00800013) AM_WRITE(mboard_write_board_32)
- AM_RANGE(0x00800020, 0x00800023) AM_READ(mboard_read_board_32)
AM_RANGE(0x00800040, 0x00800043) AM_READ(read_newkeys32)
- AM_RANGE(0x00800088, 0x0080008b) AM_WRITE(mboard_write_LED_32)
ADDRESS_MAP_END
static INPUT_PORTS_START( new_keyboard ) //Amsterdam, Dallas 32, Roma, Roma 32
@@ -407,12 +344,10 @@ INPUT_PORTS_EXTERN( chessboard);
static INPUT_PORTS_START( oldkeys )
PORT_INCLUDE( old_keyboard )
- PORT_INCLUDE( chessboard )
INPUT_PORTS_END
static INPUT_PORTS_START( newkeys )
PORT_INCLUDE( new_keyboard )
- PORT_INCLUDE( chessboard )
INPUT_PORTS_END
static MACHINE_CONFIG_START( glasgow, glasgow_state )
@@ -424,7 +359,6 @@ static MACHINE_CONFIG_START( glasgow, glasgow_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_TIMER_DRIVER_ADD_PERIODIC("nmi_timer", glasgow_state, update_nmi, attotime::from_hz(50))
- MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", glasgow_state, mboard_update_artwork, attotime::from_hz(100))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( amsterd, glasgow )
@@ -500,10 +434,10 @@ ROM_END
***************************************************************************/
/* YEAR, NAME, PARENT, COMPAT, MACHINE, INPUT, INIT, COMPANY, FULLNAME, FLAGS */
-CONS( 1984, glasgow, 0, 0, glasgow, oldkeys, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto III S Glasgow", MACHINE_SUPPORTS_SAVE)
-CONS( 1984, amsterd, 0, 0, amsterd, newkeys, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Amsterdam", MACHINE_SUPPORTS_SAVE)
-CONS( 1984, dallas, glasgow, 0, glasgow, oldkeys, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Dallas", MACHINE_SUPPORTS_SAVE)
+CONS( 1984, glasgow, 0, 0, glasgow, oldkeys, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto III S Glasgow", MACHINE_NOT_WORKING)
+CONS( 1984, amsterd, 0, 0, amsterd, newkeys, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Amsterdam", MACHINE_NOT_WORKING)
+CONS( 1984, dallas, glasgow, 0, glasgow, oldkeys, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Dallas", MACHINE_NOT_WORKING)
CONS( 1984, roma, amsterd, 0, glasgow, newkeys, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Roma", MACHINE_NOT_WORKING)
-CONS( 1984, dallas32, amsterd, 0, dallas32, newkeys, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Dallas 32 Bit", MACHINE_SUPPORTS_SAVE)
-CONS( 1984, roma32, amsterd, 0, dallas32, newkeys, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Roma 32 Bit", MACHINE_SUPPORTS_SAVE)
-CONS( 1984, dallas16, amsterd, 0, amsterd, newkeys, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Dallas 16 Bit", MACHINE_SUPPORTS_SAVE)
+CONS( 1984, dallas32, amsterd, 0, dallas32, newkeys, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Dallas 32 Bit", MACHINE_NOT_WORKING)
+CONS( 1984, roma32, amsterd, 0, dallas32, newkeys, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Roma 32 Bit", MACHINE_NOT_WORKING)
+CONS( 1984, dallas16, amsterd, 0, amsterd, newkeys, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Dallas 16 Bit", MACHINE_NOT_WORKING)
diff --git a/src/mame/drivers/goldstar.cpp b/src/mame/drivers/goldstar.cpp
index 584767696c6..ffb6089d3b4 100644
--- a/src/mame/drivers/goldstar.cpp
+++ b/src/mame/drivers/goldstar.cpp
@@ -33,7 +33,7 @@
upgrades/conversions/hacks. Are any of them legit?
W-4 New Lucky 8 Lines
- Bingo - supposed to be a W-4 but unverified
+ Bingo
F-5 New Lucky 8 Lines w/ Witch Bonus - bootleg/hack??
W-6 Fever Chance
W-7 Skill Chance
@@ -183,6 +183,12 @@
Seems to be sooo slow.... (interrupts?)
+ * Bingo (Wing)
+
+ It has a different machine driver to support the different pos of gfx
+ layers. I strogly suspect there is a register to adjust the layer position.
+
+
***************************************************************************/
@@ -8091,6 +8097,35 @@ MACHINE_CONFIG_END
***************************************************************************/
+/*
+ Golden Star (bootleg of Cherry 1 Gold)
+ Processor: ZILOG Z0840006PSC Z80 CPU 9745 RN
+
+ EPROM:
+
+ Name: 1
+ File: gs1.bin
+ Type: TMS JL 27C010A-12 LX78AC96P
+
+ Name: 2
+ File: gs2.bin
+ Type: TMS JL 27C010A-10 LX73A5J4P
+
+ Nome: 3
+ File: gs3.bin
+ Type: TMS JL 29C010A-12 LX78AC96P
+
+ Nome: 4
+ File: gs4.bin
+ Type: TMS JL 27C010A-10 LX73A5J4P
+
+ Other IC's on MB
+
+ - ACTEL A1020B PL84C 9713
+ - 9703R MS6264L-70PC
+ - HOLTEK HT 6116-70 9806K0625
+
+*/
ROM_START( goldstar )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "gs4-cpu.bin", 0x0000, 0x10000, CRC(73e47d4d) SHA1(df2d8233572dc12e8a4b56e5d4f6c566e4ababc9) )
@@ -8105,7 +8140,17 @@ ROM_START( goldstar )
ROM_LOAD( "gs1-snd.bin", 0x0000, 0x20000, CRC(9d58960f) SHA1(c68edf95743e146398aabf6b9617d18e1f9bf25b) )
ROM_END
+/*
+ Golden Star (blue version)
+
+ This is the blue PCB version. EPROMs are marked with colored stickers.
+
+ The red and yellow EPROMs are for graphics. The red is identical to the one found in normal golden star,
+ while yellow match only 90% (probably the logo)
+ The blue one match the golden star ROM 1 and contains ADCPM audio.
+
+*/
ROM_START( goldstbl )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "gsb-cpu.bin", 0x0000, 0x10000, CRC(82b238c3) SHA1(1306e700e213f423bdd79b182aa11335796f7f38) )
@@ -8182,44 +8227,6 @@ ROM_END
/*
-
-Cherry I Gold
-
-Anno 1998
-Produttore
-N.revisione W4BON (rev.1)
-
-
-CPU
-
-1x TMPZ84C00AP-6 (u12)(main)
-2x D8255AC-2 (u45,u46) (missing)
-1x D71055C (u40) (missing)
-1x YM2149 (u39)
-1x SN76489AN (u38)
-1x oscillator 12.0C45
-
-ROMs
-
-1x I27256 (u3)
-1x I27C010 (u1)
-1x PROM N82S147AN (u2)
-1x M27C512 (u20)
-1x GAL20V8 (pl1)(read protected)
-1x PALCE20V8H (pl2)(read protected)
-1x ispLSI1024-60LJ (pl3)(read protected)
-3x PALCE16V8H (pl4,pl6,pl7)(read protected)
-1x PEEL22CV10 (pl5)(read protected)
-
-Note
-
-1x 36x2 edge connector
-1x 10x2 edge connector
-2x trimmer (volume)
-5x 8x2 switches dip (sw1-5)
-1x push lever (TS)
-
-
Cherry Gold (Cherry 10)
Anno 1997
@@ -8282,6 +8289,44 @@ ROM_START( chry10 )
ROM_END
+/*
+Cherry I Gold
+
+Anno 1998
+Produttore
+N.revisione W4BON (rev.1)
+
+
+CPU
+
+1x TMPZ84C00AP-6 (u12)(main)
+2x D8255AC-2 (u45,u46) (missing)
+1x D71055C (u40) (missing)
+1x YM2149 (u39)
+1x SN76489AN (u38)
+1x oscillator 12.0C45
+
+ROMs
+
+1x I27256 (u3)
+1x I27C010 (u1)
+1x PROM N82S147AN (u2)
+1x M27C512 (u20)
+1x GAL20V8 (pl1)(read protected)
+1x PALCE20V8H (pl2)(read protected)
+1x ispLSI1024-60LJ (pl3)(read protected)
+3x PALCE16V8H (pl4,pl6,pl7)(read protected)
+1x PEEL22CV10 (pl5)(read protected)
+
+Note
+
+1x 36x2 edge connector
+1x 10x2 edge connector
+2x trimmer (volume)
+5x 8x2 switches dip (sw1-5)
+1x push lever (TS)
+
+*/
ROM_START( chrygld )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "ol-v9.u20", 0x00000, 0x10000, CRC(b61c0695) SHA1(63c44b20fd7f76bdb33331273d2610e8cfd31add) )
diff --git a/src/mame/drivers/goupil.cpp b/src/mame/drivers/goupil.cpp
index 8269dfdb8ae..72164e13d92 100644
--- a/src/mame/drivers/goupil.cpp
+++ b/src/mame/drivers/goupil.cpp
@@ -486,23 +486,23 @@ ROM_START( goupilg1 )
ROM_DEFAULT_BIOS("v1_0")
ROM_SYSTEM_BIOS(0, "v1_0", "Version 1.0")
- ROMX_LOAD( "SMT_Goupil_G1_MON_1.bin", 0x0000, 0x0400, CRC(98B7BE69) SHA1(69E83FE78A43FCF2B08FB0BCEFB0D217A57B1ECB), ROM_BIOS(1) )
- ROM_LOAD ( "SMT_Goupil_G1_MON_2.bin", 0x0400, 0x0400, CRC(19386B81) SHA1(E52F63FD29D374319781E9677DE6D3FD61A3684C) )
+ ROMX_LOAD( "SMT_Goupil_G1_MON_1.bin", 0x0000, 0x0400, CRC(98b7be69) SHA1(69e83fe78a43fcf2b08fb0bcefb0d217a57b1ecb), ROM_BIOS(1) )
+ ROM_LOAD ( "SMT_Goupil_G1_MON_2.bin", 0x0400, 0x0400, CRC(19386b81) SHA1(e52f63fd29d374319781e9677de6d3fd61a3684c) )
- ROM_LOAD( "SMT_Goupil_G1_MOD_3.bin", 0x0800, 0x0400, CRC(E662F152) SHA1(11B91C5737E7572A2C18472B66BBD16B485132D5) )
+ ROM_LOAD( "SMT_Goupil_G1_MOD_3.bin", 0x0800, 0x0400, CRC(e662f152) SHA1(11b91c5737e7572a2c18472b66bbd16b485132d5) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_1.bin", 0x1000, 0x0400, CRC(AD105B12) SHA1(631CD4B997F76B57BF2509E4BFF30B1595C8BD13), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_2.bin", 0x1400, 0x0400, CRC(0C5C309C) SHA1(F1CAB4B0F9191E53113790A95F1AB7108F9406A1), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_3.bin", 0x1800, 0x0400, CRC(1F1EB127) SHA1(DBBB880C79D515ACBFCB2BE9A4C96962F3E4EDEA), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_4.bin", 0x1C00, 0x0400, CRC(09BE48E4) SHA1(86CAE0D159583C1D572A5754F3BB6B4A2E479359), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_5.bin", 0x2000, 0x0400, CRC(BDEB395C) SHA1(32A50468F1CA772EE45A1F5C61C66F3ECC774074), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_6.bin", 0x2400, 0x0400, CRC(850A4000) SHA1(720F0BB3E45877835219B7E1D943EF4F19B9977D), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_7.bin", 0x2800, 0x0400, CRC(586C7670) SHA1(13E2E96B9F1A53555CE0D55F657CF3C6B96F10A0), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_8.bin", 0x2C00, 0x0400, CRC(33281300) SHA1(CE631FA8157A3F8869C5FEFE24B7F40E06696DF9), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_9.bin", 0x3000, 0x0400, CRC(A3911201) SHA1(8623A0A2D83EB3A27A795030643C5C05A4350A9F), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_1.bin", 0x1000, 0x0400, CRC(ad105b12) SHA1(631cd4b997f76b57bf2509e4bff30b1595c8bd13), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_2.bin", 0x1400, 0x0400, CRC(0c5c309c) SHA1(f1cab4b0f9191e53113790a95f1ab7108f9406a1), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_3.bin", 0x1800, 0x0400, CRC(1f1eb127) SHA1(dbbb880c79d515acbfcb2be9a4c96962f3e4edea), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_4.bin", 0x1C00, 0x0400, CRC(09be48e4) SHA1(86cae0d159583c1d572a5754f3bb6b4a2e479359), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_5.bin", 0x2000, 0x0400, CRC(bdeb395c) SHA1(32a50468f1ca772ee45a1f5c61c66f3ecc774074), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_6.bin", 0x2400, 0x0400, CRC(850a4000) SHA1(720f0bb3e45877835219b7e1d943ef4f19b9977d), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_7.bin", 0x2800, 0x0400, CRC(586c7670) SHA1(13e2e96b9f1a53555ce0d55f657cf3c6b96f10a0), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_8.bin", 0x2C00, 0x0400, CRC(33281300) SHA1(ce631fa8157a3f8869c5fefe24b7f40e06696df9), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_9.bin", 0x3000, 0x0400, CRC(a3911201) SHA1(8623a0a2d83eb3a27a795030643c5c05a4350a9f), ROM_BIOS(1) )
ROM_REGION( 0x400, "ef9364", 0 )
- ROM_LOAD( "SMT_Goupil_G1_Charset.bin", 0x0000, 0x0400, CRC(8B6DA54B) SHA1(AC2204600F45C6DD0DF1E759B62ED25928F02A12) )
+ ROM_LOAD( "SMT_Goupil_G1_Charset.bin", 0x0000, 0x0400, CRC(8b6da54b) SHA1(ac2204600f45c6dd0df1e759b62ed25928f02a12) )
ROM_END
/* Driver */
diff --git a/src/mame/drivers/grfd2301.cpp b/src/mame/drivers/grfd2301.cpp
index cc9c16a74b2..cdbac8b8394 100644
--- a/src/mame/drivers/grfd2301.cpp
+++ b/src/mame/drivers/grfd2301.cpp
@@ -124,7 +124,7 @@ static MACHINE_CONFIG_START( grfd2301, grfd2301_state )
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 239)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
ROM_START( grfd2301 )
diff --git a/src/mame/drivers/groundfx.cpp b/src/mame/drivers/groundfx.cpp
index b4649993cb2..ff6d31a6870 100644
--- a/src/mame/drivers/groundfx.cpp
+++ b/src/mame/drivers/groundfx.cpp
@@ -347,7 +347,7 @@ static MACHINE_CONFIG_START( groundfx, groundfx_state )
MCFG_TC0480SCP_PALETTE("palette")
/* sound hardware */
- MCFG_FRAGMENT_ADD(taito_en_sound)
+ MCFG_DEVICE_ADD("taito_en", TAITO_EN, 0)
MACHINE_CONFIG_END
/***************************************************************************
@@ -361,7 +361,7 @@ ROM_START( groundfx )
ROM_LOAD32_BYTE( "d51-22.77", 0x00002, 0x80000, CRC(b6b04d88) SHA1(58685ee8fd788dcbfe318f1e3c06d93e2128034c) )
ROM_LOAD32_BYTE( "d51-21.59", 0x00003, 0x80000, CRC(21ecde2b) SHA1(c6d3738f34c8e24346e7784b14aeff300ae2d225) )
- ROM_REGION( 0x180000, "audiocpu", 0 )
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 )
ROM_LOAD16_BYTE( "d51-29.54", 0x100000, 0x40000, CRC(4b64f41d) SHA1(040427668d13f7320d23805098d6d0e1aa8d121e) )
ROM_LOAD16_BYTE( "d51-30.56", 0x100001, 0x40000, CRC(45f339fe) SHA1(cc7adfb2b86070f5bb426542e3b7ed2a50b3c39e) )
diff --git a/src/mame/drivers/gunbustr.cpp b/src/mame/drivers/gunbustr.cpp
index 4fc53982509..b4ffdf0ba70 100644
--- a/src/mame/drivers/gunbustr.cpp
+++ b/src/mame/drivers/gunbustr.cpp
@@ -306,7 +306,7 @@ static MACHINE_CONFIG_START( gunbustr, gunbustr_state )
MCFG_TC0480SCP_PALETTE("palette")
/* sound hardware */
- MCFG_FRAGMENT_ADD(taito_en_sound)
+ MCFG_DEVICE_ADD("taito_en", TAITO_EN, 0)
MACHINE_CONFIG_END
/***************************************************************************/
@@ -318,7 +318,7 @@ ROM_START( gunbustr )
ROM_LOAD32_BYTE( "d27-21.bin", 0x00002, 0x40000, CRC(60950a8a) SHA1(a0336bf6970baa6eaa998a112db840a7fd0452d7) )
ROM_LOAD32_BYTE( "d27-27.bin", 0x00003, 0x40000, CRC(fd7d3d4c) SHA1(df42e135b1e9b7e371971ba7c8a2e161f3623aa3) )
- ROM_REGION( 0x140000, "audiocpu", 0 ) /* Sound cpu */
+ ROM_REGION( 0x140000, "taito_en:audiocpu", 0 ) /* Sound cpu */
ROM_LOAD16_BYTE( "d27-25.bin", 0x100000, 0x20000, CRC(c88203cf) SHA1(a918d395b471acdce56dacabd7a1e1e023948365) )
ROM_LOAD16_BYTE( "d27-24.bin", 0x100001, 0x20000, CRC(084bd8bd) SHA1(93229bc7de4550ead1bb12f666ddbacbe357488d) )
@@ -352,7 +352,7 @@ ROM_START( gunbustru )
ROM_LOAD32_BYTE( "d27-21.bin", 0x00002, 0x40000, CRC(60950a8a) SHA1(a0336bf6970baa6eaa998a112db840a7fd0452d7) )
ROM_LOAD32_BYTE( "d27-26.bin", 0x00003, 0x40000, CRC(8a7a0dda) SHA1(59ee7c391c170ab05a3d3d940d833c65e265d9b3) )
- ROM_REGION( 0x140000, "audiocpu", 0 ) /* Sound cpu */
+ ROM_REGION( 0x140000, "taito_en:audiocpu", 0 ) /* Sound cpu */
ROM_LOAD16_BYTE( "d27-25.bin", 0x100000, 0x20000, CRC(c88203cf) SHA1(a918d395b471acdce56dacabd7a1e1e023948365) )
ROM_LOAD16_BYTE( "d27-24.bin", 0x100001, 0x20000, CRC(084bd8bd) SHA1(93229bc7de4550ead1bb12f666ddbacbe357488d) )
@@ -386,7 +386,7 @@ ROM_START( gunbustrj )
ROM_LOAD32_BYTE( "d27-21.bin", 0x00002, 0x40000, CRC(60950a8a) SHA1(a0336bf6970baa6eaa998a112db840a7fd0452d7) )
ROM_LOAD32_BYTE( "d27-20.bin", 0x00003, 0x40000, CRC(13735c60) SHA1(65b762b28d51b295f6fe190420af566b1b3d4a82) )
- ROM_REGION( 0x140000, "audiocpu", 0 ) /* Sound cpu */
+ ROM_REGION( 0x140000, "taito_en:audiocpu", 0 ) /* Sound cpu */
ROM_LOAD16_BYTE( "d27-25.bin", 0x100000, 0x20000, CRC(c88203cf) SHA1(a918d395b471acdce56dacabd7a1e1e023948365) )
ROM_LOAD16_BYTE( "d27-24.bin", 0x100001, 0x20000, CRC(084bd8bd) SHA1(93229bc7de4550ead1bb12f666ddbacbe357488d) )
diff --git a/src/mame/drivers/h19.cpp b/src/mame/drivers/h19.cpp
index 75e725ce7df..e479dfd7e08 100644
--- a/src/mame/drivers/h19.cpp
+++ b/src/mame/drivers/h19.cpp
@@ -394,14 +394,14 @@ static MACHINE_CONFIG_START( h19, h19_state )
//MCFG_DEVICE_PERIODIC_INT_DRIVER(h19_state, irq0_line_hold, 50) // for testing, causes a keyboard scan
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
MCFG_SCREEN_SIZE(640, 200)
MCFG_SCREEN_VISIBLE_AREA(0, 640 - 1, 0, 200 - 1)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", h19)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_12_288MHz / 8) // clk taken from schematics
MCFG_MC6845_SHOW_BORDER_AREA(false)
diff --git a/src/mame/drivers/harddriv.cpp b/src/mame/drivers/harddriv.cpp
index e5eb4267425..7b47dc59c7c 100644
--- a/src/mame/drivers/harddriv.cpp
+++ b/src/mame/drivers/harddriv.cpp
@@ -2598,9 +2598,8 @@ ROM_START( stunrun )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136070-2123.10c", 0x00000, 0x10000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
@@ -2639,9 +2638,8 @@ ROM_START( stunrunj )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136070-2123.10c", 0x00000, 0x10000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
@@ -2680,9 +2678,8 @@ ROM_START( stunrun5 )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136070-2123.10c", 0x00000, 0x10000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
@@ -2721,9 +2718,8 @@ ROM_START( stunrune )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136070-2123.10c", 0x00000, 0x10000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
@@ -2762,9 +2758,8 @@ ROM_START( stunrun4 )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136070-2123.10c", 0x00000, 0x10000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
@@ -2803,9 +2798,8 @@ ROM_START( stunrun3 )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136070-2123.10c", 0x00000, 0x10000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
@@ -2844,9 +2838,8 @@ ROM_START( stunrun3e )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136070-2123.10c", 0x00000, 0x10000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
@@ -2885,9 +2878,8 @@ ROM_START( stunrun2 )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136070-2123.10c", 0x00000, 0x10000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
@@ -2926,9 +2918,8 @@ ROM_START( stunrun2e )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136070-2123.10c", 0x00000, 0x10000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
@@ -2967,9 +2958,8 @@ ROM_START( stunrun0 )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136070-2123.10c", 0x00000, 0x10000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
@@ -3008,9 +2998,8 @@ ROM_START( stunrunp )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136070-2123.10c", 0x00000, 0x10000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
@@ -4218,9 +4207,8 @@ ROM_START( steeltal )
ROM_LOAD16_BYTE( "136087-1016.200y", 0x0e0000, 0x010000, CRC(db62362e) SHA1(e1d392aa00ac36296728257fa26c6aa68a4ebe5f) )
ROM_LOAD16_BYTE( "136087-1015.210y", 0x0e0001, 0x010000, CRC(ef517db7) SHA1(16e7e351326391480bf36c58d6b34ef4128b6627) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136087-5001.1f", 0x00000, 0x10000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
@@ -4282,9 +4270,8 @@ ROM_START( steeltalg )
ROM_LOAD16_BYTE( "136087-1016.200y", 0x0e0000, 0x010000, CRC(db62362e) SHA1(e1d392aa00ac36296728257fa26c6aa68a4ebe5f) )
ROM_LOAD16_BYTE( "136087-1015.210y", 0x0e0001, 0x010000, CRC(ef517db7) SHA1(16e7e351326391480bf36c58d6b34ef4128b6627) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136087-5001.1f", 0x00000, 0x10000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
@@ -4346,9 +4333,8 @@ ROM_START( steeltal1 )
ROM_LOAD16_BYTE( "136087-1016.200y", 0x0e0000, 0x010000, CRC(db62362e) SHA1(e1d392aa00ac36296728257fa26c6aa68a4ebe5f) )
ROM_LOAD16_BYTE( "136087-1015.210y", 0x0e0001, 0x010000, CRC(ef517db7) SHA1(16e7e351326391480bf36c58d6b34ef4128b6627) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136087-5001.1f", 0x00000, 0x10000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
@@ -4410,9 +4396,8 @@ ROM_START( steeltalp )
ROM_LOAD16_BYTE( "rom-200y.bin", 0xe0000, 0x10000, CRC(b568e1be) SHA1(5d62037892e040515e4262db43057f33436fa12d) )
ROM_LOAD16_BYTE( "rom-210y.bin", 0xe0001, 0x10000, CRC(3f5cdd3e) SHA1(c33c155158a5c69a7f2e61cd88b297dc14ecd479) )
- ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136087-5001.1f", 0x00000, 0x10000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
diff --git a/src/mame/drivers/headonb.cpp b/src/mame/drivers/headonb.cpp
index 5eddfa20c66..58873339e8e 100644
--- a/src/mame/drivers/headonb.cpp
+++ b/src/mame/drivers/headonb.cpp
@@ -174,7 +174,7 @@ static MACHINE_CONFIG_START( headonb, headonb_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", headonb)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
// TODO
diff --git a/src/mame/drivers/hh_cop400.cpp b/src/mame/drivers/hh_cop400.cpp
index 78ef6c2271c..38f833668fe 100644
--- a/src/mame/drivers/hh_cop400.cpp
+++ b/src/mame/drivers/hh_cop400.cpp
@@ -17,9 +17,11 @@
#include "sound/speaker.h"
// internal artwork
+#include "ctstein.lh" // clickable
#include "einvaderc.lh" // test-layout(but still playable)
#include "funjacks.lh"
#include "funrlgl.lh"
+#include "h2hbaskb.lh"
#include "lightfgt.lh" // clickable
//#include "hh_cop400_test.lh" // common test-layout - use external artwork
@@ -66,6 +68,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
void display_update();
void set_display_size(int maxx, int maxy);
+ void set_display_segmask(UINT32 digits, UINT32 mask);
void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update = true);
protected:
@@ -194,6 +197,17 @@ void hh_cop400_state::set_display_size(int maxx, int maxy)
m_display_maxy = maxy;
}
+void hh_cop400_state::set_display_segmask(UINT32 digits, UINT32 mask)
+{
+ // set a segment mask per selected digit, but leave unselected ones alone
+ for (int i = 0; i < 0x20; i++)
+ {
+ if (digits & 1)
+ m_display_segmask[i] = mask;
+ digits >>= 1;
+ }
+}
+
void hh_cop400_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update)
{
set_display_size(maxx, maxy);
@@ -234,8 +248,11 @@ UINT8 hh_cop400_state::read_inputs(int columns)
/***************************************************************************
Castle Toy Einstein
- * COP421 MCU labeled ~/927 COP421-NEZ/N
+ * COP421 MCU label ~/927 COP421-NEZ/N
* 4 lamps, 1-bit sound
+
+ This is a Simon clone, the tones are not harmonic. Two models exist, each
+ with a different batteries setup, assume they're same otherwise.
***************************************************************************/
@@ -245,26 +262,75 @@ public:
ctstein_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_cop400_state(mconfig, type, tag)
{ }
+
+ DECLARE_WRITE8_MEMBER(write_g);
+ DECLARE_WRITE8_MEMBER(write_l);
+ DECLARE_WRITE_LINE_MEMBER(write_sk);
+ DECLARE_READ8_MEMBER(read_l);
};
// handlers
-//..
+WRITE8_MEMBER(ctstein_state::write_g)
+{
+ // G0-G2: input mux
+ m_inp_mux = ~data & 7;
+}
+
+WRITE8_MEMBER(ctstein_state::write_l)
+{
+ // L0-L3: button lamps (strobed)
+ display_matrix(4, 1, data & 0xf, 1);
+ display_matrix(4, 1, data & 0xf, 0);
+}
+
+READ8_MEMBER(ctstein_state::read_l)
+{
+ // L4-L7: multiplexed inputs
+ return read_inputs(3) << 4 | 0xf;
+}
+
+WRITE_LINE_MEMBER(ctstein_state::write_sk)
+{
+ // SK: speaker out
+ m_speaker->level_w(state);
+}
// config
static INPUT_PORTS_START( ctstein )
+ PORT_START("IN.0") // G0 port L
+ PORT_CONFNAME( 0x0f, 0x01^0x0f, DEF_STR( Difficulty ) )
+ PORT_CONFSETTING( 0x01^0x0f, "1" )
+ PORT_CONFSETTING( 0x02^0x0f, "2" )
+ PORT_CONFSETTING( 0x04^0x0f, "3" )
+ PORT_CONFSETTING( 0x08^0x0f, "4" )
+
+ PORT_START("IN.1") // G1 port L
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SELECT ) PORT_NAME("Best Score")
+ PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("IN.2") // G2 port L
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Red Button")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Yellow Button")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Green Button")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Blue Button")
INPUT_PORTS_END
static MACHINE_CONFIG_START( ctstein, ctstein_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", COP421, 1000000) // approximation - RC osc. R=12K to +6V, C=100pf to GND
- MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false) // guessed
+ MCFG_CPU_ADD("maincpu", COP421, 860000) // approximation - RC osc. R=12K to +6V, C=100pf to GND
+ MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, false) // guessed
+ MCFG_COP400_WRITE_G_CB(WRITE8(ctstein_state, write_g))
+ MCFG_COP400_WRITE_L_CB(WRITE8(ctstein_state, write_l))
+ MCFG_COP400_WRITE_SK_CB(WRITELINE(ctstein_state, write_sk))
+ MCFG_COP400_READ_L_CB(READ8(ctstein_state, read_l))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_cop400_state, display_decay_tick, attotime::from_msec(1))
-// MCFG_DEFAULT_LAYOUT(layout_ctstein)
+ MCFG_DEFAULT_LAYOUT(layout_ctstein)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -278,10 +344,15 @@ MACHINE_CONFIG_END
/***************************************************************************
- Coleco Head to Head Basketball
- * COP420 MCU labeled COP420L-NEZ/N
+ Coleco Head to Head Basketball/Hockey/Soccer
+ * COP420 MCU label COP420L-NEZ/N
* 2-digit 7seg display, 41 other leds, 1-bit sound
-
+
+ 3 Head to Head games were released using this MCU/ROM. They play very much
+ the same, only differing on game time.
+
+ An earlier revision of this game runs on TMS1000.
+
***************************************************************************/
class h2hbaskb_state : public hh_cop400_state
@@ -290,26 +361,106 @@ public:
h2hbaskb_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_cop400_state(mconfig, type, tag)
{ }
+
+ DECLARE_WRITE8_MEMBER(write_d);
+ DECLARE_WRITE8_MEMBER(write_g);
+ DECLARE_WRITE8_MEMBER(write_l);
+ DECLARE_READ8_MEMBER(read_in);
+ DECLARE_WRITE_LINE_MEMBER(write_so);
};
// handlers
-//..
+WRITE8_MEMBER(h2hbaskb_state::write_d)
+{
+ // D: led select
+ m_d = data & 0xf;
+}
+
+WRITE8_MEMBER(h2hbaskb_state::write_g)
+{
+ // G: led select, input mux
+ m_inp_mux = ~data;
+ m_g = data & 0xf;
+}
+
+WRITE8_MEMBER(h2hbaskb_state::write_l)
+{
+ // D2,D3 double as multiplexer
+ UINT16 mask = ((m_d >> 2 & 1) * 0x00ff) | ((m_d >> 3 & 1) * 0xff00);
+ UINT16 sel = (m_g | m_d << 4 | m_g << 8 | m_d << 12) & mask;
+
+ // D2+G0,G1 are 7segs
+ set_display_segmask(3, 0x7f);
+
+ // L0-L6: digit segments A-G, L0-L4: led data
+ // strobe display
+ display_matrix(7, 16, data, sel);
+ display_matrix(7, 16, 0, sel);
+}
+
+READ8_MEMBER(h2hbaskb_state::read_in)
+{
+ // IN: multiplexed inputs
+ return (read_inputs(4) & 7) | (m_inp_matrix[4]->read() & 8);
+}
+
+WRITE_LINE_MEMBER(h2hbaskb_state::write_so)
+{
+ // SO: speaker out
+ m_speaker->level_w(state);
+}
// config
static INPUT_PORTS_START( h2hbaskb )
+ PORT_START("IN.0") // G0 port IN
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_16WAY PORT_NAME("P1 Pass CW") // clockwise
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_16WAY PORT_NAME("P1 Pass CCW") // counter-clockwise
+ PORT_CONFNAME( 0x04, 0x04, "Players" )
+ PORT_CONFSETTING( 0x04, "1" )
+ PORT_CONFSETTING( 0x00, "2" )
+
+ PORT_START("IN.1") // G1 port IN
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Shoot")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START ) PORT_NAME("Start/Display")
+ PORT_BIT( 0x04, 0x04, IPT_SPECIAL ) PORT_CONDITION("IN.4", 0x04, EQUALS, 0x04)
+
+ PORT_START("IN.2") // G2 port IN
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Defense Right")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Defense Left")
+ PORT_CONFNAME( 0x04, 0x04, "Skill Level" )
+ PORT_CONFSETTING( 0x04, "1" )
+ PORT_CONFSETTING( 0x00, "2" )
+
+ PORT_START("IN.3") // G3 port IN
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL PORT_NAME("P2 Goalie Right") // only for hockey/soccer
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Goalie Left") // "
+ PORT_CONFNAME( 0x04, 0x04, "Factory Test" )
+ PORT_CONFSETTING( 0x04, DEF_STR( Off ) )
+ PORT_CONFSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("IN.4") // G1+IN2, IN3 (factory set)
+ PORT_CONFNAME( 0x0c, 0x00, "Game" )
+ PORT_CONFSETTING( 0x00, "Basketball" )
+ PORT_CONFSETTING( 0x08, "Hockey" )
+ PORT_CONFSETTING( 0x0c, "Soccer" )
INPUT_PORTS_END
static MACHINE_CONFIG_START( h2hbaskb, h2hbaskb_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", COP420, 1000000) // approximation - RC osc. R=43K to +9V, C=101pf to GND
+ MCFG_CPU_ADD("maincpu", COP420, 1600000) // approximation - RC osc. R=43K to +9V, C=101pf to GND
MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false) // guessed
+ MCFG_COP400_WRITE_D_CB(WRITE8(h2hbaskb_state, write_d))
+ MCFG_COP400_WRITE_G_CB(WRITE8(h2hbaskb_state, write_g))
+ MCFG_COP400_WRITE_L_CB(WRITE8(h2hbaskb_state, write_l))
+ MCFG_COP400_READ_IN_CB(READ8(h2hbaskb_state, read_in))
+ MCFG_COP400_WRITE_SO_CB(WRITELINE(h2hbaskb_state, write_so))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_cop400_state, display_decay_tick, attotime::from_msec(1))
-// MCFG_DEFAULT_LAYOUT(layout_h2hbaskb)
+ MCFG_DEFAULT_LAYOUT(layout_h2hbaskb)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -324,7 +475,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Entex Space Invader
- * COP444L MCU labeled /B138 COPL444-HRZ/N INV II (die labeled HRZ COP 444L/A)
+ * COP444L MCU label /B138 COPL444-HRZ/N INV II (die label HRZ COP 444L/A)
* 3 7seg LEDs, LED matrix and overlay mask, 1-bit sound
The first version was on TMS1100 (see hh_tms1k.c), this is the reprogrammed
@@ -440,7 +591,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Mattel Funtronics Jacks
- * COP410L MCU bonded directly to PCB (die labeled COP410L/B NGS)
+ * COP410L MCU bonded directly to PCB (die label COP410L/B NGS)
* 8 LEDs, 1-bit sound
***************************************************************************/
@@ -547,7 +698,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Mattel Funtronics Red Light Green Light
- * COP410L MCU bonded directly to PCB (die labeled COP410L/B NHZ)
+ * COP410L MCU bonded directly to PCB (die label COP410L/B NHZ)
* 14 LEDs, 1-bit sound
known releases:
@@ -642,7 +793,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Milton Bradley Plus One
- * COP410L MCU in 8-pin DIP, labeled ~/029 MM 57405 (die labeled COP410L/B NNE)
+ * COP410L MCU in 8-pin DIP, label ~/029 MM 57405 (die label COP410L/B NNE)
* 4 sensors(1 on each die side), 1-bit sound
***************************************************************************/
@@ -653,16 +804,34 @@ public:
plus1_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_cop400_state(mconfig, type, tag)
{ }
+
+ DECLARE_WRITE8_MEMBER(write_d);
};
// handlers
-//..
+WRITE8_MEMBER(plus1_state::write_d)
+{
+ // D?: speaker out
+ m_speaker->level_w(data & 1);
+}
// config
static INPUT_PORTS_START( plus1 )
+ PORT_START("IN.0") // port G
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("IN.1") // port L
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static MACHINE_CONFIG_START( plus1, plus1_state )
@@ -670,6 +839,9 @@ static MACHINE_CONFIG_START( plus1, plus1_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", COP410, 1000000) // approximation - RC osc. R=51K to +5V, C=100pf to GND
MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, true) // guessed
+ MCFG_COP400_WRITE_D_CB(WRITE8(plus1_state, write_d))
+ MCFG_COP400_READ_G_CB(IOPORT("IN.0"))
+ MCFG_COP400_READ_L_CB(IOPORT("IN.1"))
/* no visual feedback! */
@@ -686,7 +858,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Milton Bradley (Electronic) Lightfight
- * COP421L MCU labeled /B119 COP421L-HLA/N
+ * COP421L MCU label /B119 COP421L-HLA/N
* LED matrix, 1-bit sound
Xbox-shaped electronic game for 2 or more players, with long diagonal buttons
@@ -870,11 +1042,11 @@ ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
-CONS( 1979, ctstein, 0, 0, ctstein, ctstein, driver_device, 0, "Castle Toy", "Einstein (Castle Toy)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+CONS( 1979, ctstein, 0, 0, ctstein, ctstein, driver_device, 0, "Castle Toy", "Einstein (Castle Toy)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1979, h2hbaskb, 0, 0, h2hbaskb, h2hbaskb, driver_device, 0, "Coleco", "Head to Head Basketball (COP420L)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+CONS( 1980, h2hbaskb, 0, 0, h2hbaskb, h2hbaskb, driver_device, 0, "Coleco", "Head to Head Basketball/Hockey/Soccer (COP420L version)", MACHINE_SUPPORTS_SAVE )
-CONS( 1981, einvaderc, einvader, 0, einvaderc, einvaderc, driver_device, 0, "Entex", "Space Invader (Entex, COP444)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK | MACHINE_NOT_WORKING )
+CONS( 1981, einvaderc, einvader, 0, einvaderc, einvaderc, driver_device, 0, "Entex", "Space Invader (Entex, COP444L version)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK | MACHINE_NOT_WORKING )
CONS( 1979, funjacks, 0, 0, funjacks, funjacks, driver_device, 0, "Mattel", "Funtronics Jacks", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
CONS( 1979, funrlgl, 0, 0, funrlgl, funrlgl, driver_device, 0, "Mattel", "Funtronics Red Light Green Light", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp
index 0ed890fc5d5..beee880e94e 100644
--- a/src/mame/drivers/hh_hmcs40.cpp
+++ b/src/mame/drivers/hh_hmcs40.cpp
@@ -58,10 +58,10 @@
@88 HD38820A 1984, Bandai Pair Match (PT-460) (1/2)
@89 HD38820A 1984, Bandai Pair Match (PT-460) (2/2)
- *75 HD44801A 1982, Alpha 8201 protection MCU (have dump)
+ 75 HD44801A 1982, Alpha 8201 protection MCU -> machine/alpha8201.*
- *35 HD44801B 1983, Alpha 8302 protection MCU (have dump)
- *42 HD44801B 1984, Alpha 8303 protection MCU (have dump)
+ 35 HD44801B 1983, Alpha 8302 protection MCU (see 8201)
+ 42 HD44801B 1984, Alpha 8303 protection MCU (see 8201)
(* denotes not yet emulated by MAME, @ denotes it's in this driver)
@@ -333,7 +333,7 @@ INPUT_CHANGED_MEMBER(hh_hmcs40_state::single_interrupt_line)
/***************************************************************************
Bambino Dribble Away Basketball (manufactured in Japan)
- * PCBs are labeled Emix Corp. ET-05
+ * PCB label Emix Corp. ET-05
* Hitachi HD38750A08 MCU
* green VFD display Emix-106, with bezel overlay
@@ -443,7 +443,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Bambino Knock-Em Out Boxing
- * PCBs are labeled Emix Corp. ET-06B
+ * PCB label Emix Corp. ET-06B
* Hitachi HD38750A07 MCU
* cyan VFD display Emix-103, with blue or green color overlay
@@ -577,7 +577,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Bandai Frisky Tom (manufactured in Japan)
- * PCBs are labeled Kaken Corp., PT-327A
+ * PCB label Kaken Corp., PT-327A
* Hitachi HD38800A77 MCU
* cyan/red/green VFD display Futaba DM-43ZK 2E
@@ -807,7 +807,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Bandai/Mattel Star Hawk (manufactured in Japan)
- * PCBs are labeled Kaken, PT-317B
+ * PCB label Kaken, PT-317B
* Hitachi HD38800A73 MCU
* cyan/red VFD display Futaba DM-41ZK, with partial color overlay + bezel
@@ -2623,7 +2623,7 @@ INPUT_PORTS_END
Entex Turtles (manufactured in Japan)
* PCB label 560359
* Hitachi QFP HD38820A43 MCU
- * COP411L sub MCU, labeled COP411L-KED/N
+ * COP411L sub MCU, label COP411L-KED/N
* cyan/red/green VFD display NEC FIP15BM32T
NOTE!: MAME external artwork is required
@@ -2814,7 +2814,7 @@ MACHINE_CONFIG_END
Entex Stargate (manufactured in Japan)
* PCB label 5603521/31
* Hitachi QFP HD38820A42 MCU
- * COP411L sub MCU, labeled ~/B8236 COP411L-KEC/N
+ * COP411L sub MCU, label ~/B8236 COP411L-KEC/N
* cyan/red/green VFD display NEC FIP15AM32T (EL628-003) no. 2-421, with partial color overlay
NOTE!: MAME external artwork is required
@@ -3403,8 +3403,7 @@ static INPUT_PORTS_START( mwcbaseb )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("P1 1")
INPUT_PORTS_END
-
-static const INT16 mwcbaseb_speaker_levels[] = { 0, 16384, -16384, 0, -16384, 0, -32768, -16384 };
+static const INT16 mwcbaseb_speaker_levels[] = { 0, 0x3fff, -0x4000, 0, -0x4000, 0, -0x8000, -0x4000 };
static MACHINE_CONFIG_START( mwcbaseb, mwcbaseb_state )
@@ -3521,7 +3520,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Tomy Kingman (manufactured in Japan)
- * PCBs are labeled THF-01II 2E138E01/2E128E02
+ * PCB label THF-01II 2E138E01/2E128E02
* Hitachi HD38800B23 MCU
* cyan/red/blue VFD display Futaba DM-65ZK 3A
@@ -3640,7 +3639,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Tomy(tronic) Tron (manufactured in Japan)
- * PCBs are labeled THN-02 2E114E07
+ * PCB label THN-02 2E114E07
* Hitachi HD38800A88 MCU
* cyan/red/green VFD display NEC FIP10AM24T no. 2-8 1
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index 0dea42a26fa..5ece38cb177 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -22,8 +22,8 @@
@MP0905B TMS0970 1977, Parker Brothers Codename Sector
*MP0057 TMS1000 1978, APH Student Speech+ (same ROM contents as TSI Speech+?)
*MP0158 TMS1000 1979, Entex Soccer
- *MP0168 TMS1000? 1979, Conic Basketball
- *MP0170 TMS1000? 1979, E.R.S. Football
+ *MP0168 TMS1000 1979, Conic Basketball
+ @MP0170 TMS1000 1979, Conic Football
@MP0914 TMS1000 1979, Entex Baseball 1
@MP0923 TMS1000 1979, Entex Baseball 2
@MP1030 TMS1100 1980, APF Mathemagician
@@ -36,11 +36,11 @@
*MP1219 TMS1100 1980, U.S. Games Super Sports 4
@MP1221 TMS1100 1980, Entex Raise The Devil
*MP1296 TMS1100? 1982, Entex Black Knight
- *MP1312 TMS1100 198?, Tandy/RadioShack Science Fair Microcomputer Trainer
+ @MP1312 TMS1100 1985, Gakken FX-Micom R-165/Tandy Radio Shack Science Fair Microcomputer Trainer
*MP1359 TMS1100? 1985, Capsela CRC2000
@MP1525 TMS1170 1980, Coleco Head to Head Baseball
*MP1604 ? 1981, Hanzawa Twinvader III/Tandy Cosmic Fire Away 3000 (? note: VFD-capable)
- @MP2105 TMS1370 1979, Gakken Poker
+ @MP2105 TMS1370 1979, Gakken/Entex Poker
*MP2139 TMS1370? 1982, Gakken Galaxy Invader 1000
@MP2726 TMS1040 1979, Tomy Break Up
*MP2788 TMS1040? 1980, Bandai Flight Time (? note: VFD-capable)
@@ -87,13 +87,13 @@
@MP7334 TMS1400 1981, Coleco Total Control 4
@MP7351 TMS1400 1982, Parker Brothers Master Merlin
@MP7551 TMS1670 1980, Entex Color Football 4 (6009)
- @MPF553 TMS1670 1980, Gakken Jackpot: Gin Rummy & Black Jack (note: assume F to be a misprint)
+ @MPF553 TMS1670 1980, Gakken/Entex Jackpot: Gin Rummy & Black Jack (note: assume F to be a misprint)
*MP7573 TMS1670? 1981, Entex Select-a-Game cartridge: Football 4 (? note: 40-pin, VFD-capable)
inconsistent:
*TMC1007 TMS1000 1976, TSI Speech+ (S14002-A)
- @CD7282SL TMS1100 1981, Tandy/RadioShack Tandy-12 (serial is similar to TI Speak & Spell series?)
+ @CD7282SL TMS1100 1981, Tandy Radio Shack Tandy-12 (serial is similar to TI Speak & Spell series?)
*M95041 ? 1983, Tsukuda Game Pachinko (? note: 40-pin, VFD-capable)
(* denotes not yet emulated by MAME, @ denotes it's in this driver)
@@ -120,6 +120,7 @@
#include "astro.lh"
#include "bankshot.lh"
#include "bigtrak.lh"
+#include "cnfball.lh"
#include "cnfball2.lh"
#include "cnsector.lh"
#include "comp4.lh"
@@ -131,6 +132,7 @@
#include "efootb4.lh"
#include "einvader.lh" // test-layout(but still playable)
#include "elecdet.lh"
+#include "fxmcr165.lh"
#include "gjackpot.lh"
#include "gpoker.lh"
#include "h2hbaseb.lh"
@@ -364,7 +366,7 @@ INPUT_CHANGED_MEMBER(hh_tms1k_state::power_button)
/***************************************************************************
APF Mathemagician
- * TMS1100 MCU, labeled MP1030 (no decap)
+ * TMS1100 MCU, label MP1030 (no decap)
* 2 x DS8870N - Hex LED Digit Driver
* 2 x DS8861N - MOS-to-LED 5-Segment Driver
* 10-digit 7seg LED display(2 custom ones) + 4 LEDs, no sound
@@ -542,7 +544,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Coleco Amaze-A-Tron, by Ralph Baer
- * TMS1100 MCU, labeled MP3405(die label too)
+ * TMS1100 MCU, label MP3405(die label too)
* 2-digit 7seg LED display + 2 LEDs(one red, one green), 1-bit sound
* 5*5 pressure-sensitive playing board(buttons), 4 game pieces
@@ -609,44 +611,44 @@ READ8_MEMBER(amaztron_state::read_k)
static INPUT_PORTS_START( amaztron )
PORT_START("IN.0") // R0
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 1")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 6")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 11")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 16")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 21")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 6")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 11")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 16")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 21")
PORT_START("IN.1") // R1
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 2")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 7")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 12")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 17")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 22")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 2")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 7")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 12")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 17")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 22")
PORT_START("IN.2") // R2
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 3")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 8")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 13")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 18")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 23")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 3")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 8")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 13")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 18")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 23")
PORT_START("IN.3") // R3
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 4")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 9")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 14")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 19")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 24")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 4")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 9")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 14")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 19")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 24")
PORT_START("IN.4") // R4
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 5")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 10")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 15")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 20")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square 25")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 5")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 10")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 15")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 20")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Square 25")
PORT_START("IN.5") // R5
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_SELECT) PORT_NAME("Game Select")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_START) PORT_NAME("Game Start")
- PORT_BIT(0x1c, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_NAME("Game Select")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START ) PORT_NAME("Game Start")
+ PORT_BIT( 0x1c, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static MACHINE_CONFIG_START( amaztron, amaztron_state )
@@ -834,7 +836,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Coleco Electronic Quarterback
- * TMS1100NLL MP3415 (die labeled MP3415)
+ * TMS1100NLL MP3415 (die label MP3415)
* 9-digit LED grid, 1-bit sound
known releases:
@@ -900,7 +902,7 @@ READ8_MEMBER(cqback_state::read_k)
static INPUT_PORTS_START( cqback )
PORT_START("IN.0") // K1
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY PORT_NAME("P1 Left/Right")
+ PORT_BIT( 0x01, 0x01, IPT_SPECIAL ) PORT_CONDITION("FAKE", 0x03, NOTEQUALS, 0x00) // left/right
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Kick/Pass")
@@ -919,6 +921,10 @@ static INPUT_PORTS_START( cqback )
PORT_CONFNAME( 0x01, 0x00, "Factory Test" )
PORT_CONFSETTING( 0x00, DEF_STR( Off ) )
PORT_CONFSETTING( 0x01, DEF_STR( On ) ) // TP1-TP2
+
+ PORT_START("FAKE") // fake port for left/right combination
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY
INPUT_PORTS_END
static MACHINE_CONFIG_START( cqback, cqback_state )
@@ -945,7 +951,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Coleco Head to Head Football
- * TMS1100NLLE (rev. E!) MP3460 (die labeled MP3460)
+ * TMS1100NLLE (rev. E!) MP3460 (die label MP3460)
* 2*SN75492N LED display drivers, 9-digit LED grid, 1-bit sound
known releases:
@@ -1024,7 +1030,7 @@ static INPUT_PORTS_START( h2hfootb )
PORT_CONFSETTING( 0x02, "2" )
PORT_START("IN.3") // K8
- PORT_BIT( 0x001, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY PORT_NAME("P1 Left/Right")
+ PORT_BIT( 0x001, 0x001, IPT_SPECIAL ) PORT_CONDITION("FAKE", 0x03, NOTEQUALS, 0x00) // left/right
PORT_BIT( 0x002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY
PORT_BIT( 0x004, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY
PORT_BIT( 0x008, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Kick/Pass")
@@ -1033,6 +1039,10 @@ static INPUT_PORTS_START( h2hfootb )
PORT_BIT( 0x040, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL PORT_16WAY
PORT_BIT( 0x080, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_16WAY
PORT_BIT( 0x100, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_16WAY
+
+ PORT_START("FAKE") // fake port for left/right combination
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY
INPUT_PORTS_END
static MACHINE_CONFIG_START( h2hfootb, h2hfootb_state )
@@ -1060,7 +1070,7 @@ MACHINE_CONFIG_END
Coleco Head to Head Baseball
* PCB labels Coleco rev C 73891/2
- * TMS1170NLN MP1525-N2 (die labeled MP1525)
+ * TMS1170NLN MP1525-N2 (die label MP1525)
* 9-digit cyan VFD display, and other LEDs behind bezel, 1-bit sound
known releases:
@@ -1199,7 +1209,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Coleco Total Control 4
- * TMS1400NLL MP7334-N2 (die labeled MP7334)
+ * TMS1400NLL MP7334-N2 (die label MP7334)
* 2x2-digit 7seg LED display + 4 LEDs, LED grid display, 1-bit sound
This is a head to head electronic tabletop LED-display sports console.
@@ -1354,6 +1364,131 @@ MACHINE_CONFIG_END
/***************************************************************************
+ Conic Electronic Football (1)
+ * TMS1000 MP0170 (die label MP0170)
+ * DS8874N, 3*9 LED array, 7 7seg LEDs, 1-bit sound
+
+ This is a clone of Mattel Football. Apparently Mattel has tried to keep imports
+ of infringing games from going through customs. Conic (Hong Kong) answered
+ by distributing the game under subsidiary brands - see list below.
+
+ known releases:
+ - Hong Kong: Conic Electronic Football
+ - USA(1): Football, ERS(Electronic Readout Systems)
+ - USA(2): Football, ELECsonic
+ - USA(3): Football, no brand!
+
+***************************************************************************/
+
+class cnfball_state : public hh_tms1k_state
+{
+public:
+ cnfball_state(const machine_config &mconfig, device_type type, const char *tag)
+ : hh_tms1k_state(mconfig, type, tag)
+ { }
+
+ void prepare_display();
+ DECLARE_WRITE16_MEMBER(write_r);
+ DECLARE_WRITE16_MEMBER(write_o);
+ DECLARE_READ8_MEMBER(read_k);
+};
+
+// handlers
+
+void cnfball_state::prepare_display()
+{
+ // declare 7segs, middle ones have DP
+ set_display_segmask(0xc3, 0x7f);
+ set_display_segmask(0x38, 0xff);
+
+ display_matrix(8+3, 10, m_o | (m_r << 6 & 0x700), m_grid);
+}
+
+WRITE16_MEMBER(cnfball_state::write_r)
+{
+ // R5,R8: N/C
+ // R6,R7: speaker out
+ m_speaker->level_w(data >> 6 & 3);
+
+ // R9,R10: input mux
+ m_inp_mux = data >> 9 & 3;
+
+ // R0: DS8874N CP: clock pulse edge-triggered
+ // note: DS8874N CP goes back to K8 too, game relies on it
+ if ((data ^ m_r) & 1)
+ m_grid = m_grid << 1 & 0x1ff;
+
+ // R1: DS8874N _DATA: reset shift register
+ if (~data & 2)
+ m_grid = 1;
+
+ // R2-R4: led data
+ m_r = data;
+ prepare_display();
+}
+
+WRITE16_MEMBER(cnfball_state::write_o)
+{
+ // O0-O7: digit segments
+ m_o = data;
+ prepare_display();
+}
+
+READ8_MEMBER(cnfball_state::read_k)
+{
+ // K: multiplexed inputs, K8 also tied to DS8874N CP(R0)
+ return read_inputs(2) | (m_r << 3 & 8);
+}
+
+
+// config
+
+static INPUT_PORTS_START( cnfball )
+ PORT_START("IN.0") // R9
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY
+ PORT_BIT( 0x04, 0x04, IPT_SPECIAL ) PORT_CONDITION("FAKE", 0x03, NOTEQUALS, 0x00) // left/right
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.1") // R10
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Kick")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Score")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Status")
+ PORT_CONFNAME( 0x08, 0x08, "Players" )
+ PORT_CONFSETTING( 0x08, "1" )
+ PORT_CONFSETTING( 0x00, "2" )
+
+ PORT_START("FAKE") // fake port for left/right combination
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY
+INPUT_PORTS_END
+
+static const INT16 cnfball_speaker_levels[] = { 0, 0x7fff, -0x8000, 0 };
+
+static MACHINE_CONFIG_START( cnfball, cnfball_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", TMS1000, 400000) // approximation - RC osc. R=39K, C=47pf
+ MCFG_TMS1XXX_READ_K_CB(READ8(cnfball_state, read_k))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16(cnfball_state, write_r))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16(cnfball_state, write_o))
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
+ MCFG_DEFAULT_LAYOUT(layout_cnfball)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SPEAKER_LEVELS(4, cnfball_speaker_levels)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+MACHINE_CONFIG_END
+
+
+
+
+
+/***************************************************************************
+
Conic Electronic Football II
* TMS1100 MP1181 (no decap)
* 9-digit LED grid, 1-bit sound
@@ -1479,7 +1614,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Entex (Electronic) Baseball (1)
- * TMS1000NLP MP0914 (die labeled MP0914A)
+ * TMS1000NLP MP0914 (die label MP0914A)
* 1 7seg LED, and other LEDs behind bezel, 1-bit sound
This is a handheld LED baseball game. One player controls the batter, the CPU
@@ -1614,8 +1749,8 @@ MACHINE_CONFIG_END
/***************************************************************************
Entex (Electronic) Baseball 2
- * PCBs are labeled: ZENY
- * TMS1000 MCU, MP0923 (die labeled MP0923)
+ * PCB label: ZENY
+ * TMS1000 MCU, MP0923 (die label MP0923)
* 3 7seg LEDs, and other LEDs behind bezel, 1-bit sound
The Japanese version was published by Gakken, black casing instead of white.
@@ -1739,8 +1874,8 @@ MACHINE_CONFIG_END
/***************************************************************************
Entex (Electronic) Baseball 3
- * PCBs are labeled: ZENY
- * TMS1100NLL 6007 MP1204 (rev. E!) (die labeled MP1204)
+ * PCB label: ZENY
+ * TMS1100NLL 6007 MP1204 (rev. E!) (die label MP1204)
* 2*SN75492N LED display driver
* 4 7seg LEDs, and other LEDs behind bezel, 1-bit sound
@@ -1920,7 +2055,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Entex Space Invader
- * TMS1100 MP1211 (die labeled MP1211)
+ * TMS1100 MP1211 (die label MP1211)
* 3 7seg LEDs, LED matrix and overlay mask, 1-bit sound
There are two versions of this game: the first release(this one) is on
@@ -2034,7 +2169,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Entex Color Football 4
- * TMS1670 6009 MP7551 (die also labeled MP7551)
+ * TMS1670 6009 MP7551 (die also label MP7551)
* 9-digit cyan VFD display, 60 red and green LEDs behind bezel, 1-bit sound
***************************************************************************/
@@ -2151,7 +2286,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Entex (Electronic) Basketball 2
- * TMS1100 6010 MP1218 (die also labeled MP1218)
+ * TMS1100 6010 MP1218 (die also label MP1218)
* 4 7seg LEDs, and other LEDs behind bezel, 1-bit sound
lamp translation table: led zz from game PCB = MAME lampyx:
@@ -2274,7 +2409,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Entex Raise The Devil
- * TMS1100 MP1221 (die labeled MP1221)
+ * TMS1100 MP1221 (die label MP1221)
* 4 7seg LEDs(rightmost one unused), and other LEDs behind bezel, 1-bit sound
lamp translation table: led zz from game PCB = MAME lampyx:
@@ -2417,7 +2552,7 @@ MACHINE_CONFIG_END
Gakken Poker
* PCB label POKER. gakken
- * TMS1370 MP2105 (die labeled MP2105)
+ * TMS1370 MP2105 (die label MP2105)
* 11-digit cyan VFD display Itron FG1114B, oscillator sound
known releases:
@@ -2562,7 +2697,7 @@ MACHINE_CONFIG_END
Gakken Jackpot: Gin Rummy & Black Jack
* PCB label gakken
- * TMS1670 MPF553 (die labeled MPF553)
+ * TMS1670 MPF553 (die label MPF553)
* 11-digit cyan VFD display Itron FG1114B, oscillator sound
known releases:
@@ -2673,8 +2808,146 @@ MACHINE_CONFIG_END
/***************************************************************************
+ Gakken FX-Micom R-165
+ * TMS1100 MCU, label MP1312, die label MP1312A
+ * 1 7seg led, 6 other leds, 1-bit sound
+
+ This is a simple educational home computer. Refer to the extensive manual
+ for more information. It was distributed later in the USA by Tandy Radio Shack,
+ under their Science Fair series. Another 25 years later, Gakken re-released
+ the R-165 as GMC-4, obviously on modern hardware, but fully compatible.
+
+ known releases:
+ - Japan: FX-Micom R-165
+ - USA: Science Fair Microcomputer Trainer, published by Tandy Radio Shack
+ Of note is the complete redesign of the case, adding more adjustable wiring
+
+***************************************************************************/
+
+class fxmcr165_state : public hh_tms1k_state
+{
+public:
+ fxmcr165_state(const machine_config &mconfig, device_type type, const char *tag)
+ : hh_tms1k_state(mconfig, type, tag)
+ { }
+
+ void prepare_display();
+ DECLARE_WRITE16_MEMBER(write_r);
+ DECLARE_WRITE16_MEMBER(write_o);
+ DECLARE_READ8_MEMBER(read_k);
+};
+
+// handlers
+
+void fxmcr165_state::prepare_display()
+{
+ // 7seg digit from O0-O6
+ m_display_segmask[0] = 0x7f;
+ m_display_state[0] = BITSWAP8(m_o,7,2,6,5,4,3,1,0) & 0x7f;
+
+ // leds from R4-R10
+ m_display_state[1] = m_r >> 4 & 0x7f;
+ set_display_size(7, 2);
+ display_update();
+}
+
+WRITE16_MEMBER(fxmcr165_state::write_r)
+{
+ // R0-R3: input mux low
+ m_inp_mux = (m_inp_mux & 0x10) | (data & 0xf);
+
+ // R7: speaker out
+ m_speaker->level_w(data >> 7 & 1);
+
+ // R4-R10: led data (direct)
+ m_r = data;
+ prepare_display();
+}
+
+WRITE16_MEMBER(fxmcr165_state::write_o)
+{
+ // O7: input mux high
+ m_inp_mux = (m_inp_mux & 0xf) | (data >> 3 & 0x10);
+
+ // O0-O6: digit segments (direct)
+ m_o = data;
+ prepare_display();
+}
+
+READ8_MEMBER(fxmcr165_state::read_k)
+{
+ // K: multiplexed inputs
+ return read_inputs(5);
+}
+
+
+// config
+
+/* physical button layout and labels is like this:
+
+ [C] [D] [E] [F] [ADR SET]
+ [8] [9] [A] [B] [INCR]
+ [4] [5] [6] [7] [RUN]
+ [0] [1] [2] [3] [RESET]
+*/
+
+static INPUT_PORTS_START( fxmcr165 )
+ PORT_START("IN.0") // R0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("C")
+
+ PORT_START("IN.1") // R1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("D")
+
+ PORT_START("IN.2") // R2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("A")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("E")
+
+ PORT_START("IN.3") // R3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("B")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("F")
+
+ PORT_START("IN.4") // O7
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("Reset")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Run")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_EQUALS) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("Increment")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("Address Set")
+INPUT_PORTS_END
+
+static MACHINE_CONFIG_START( fxmcr165, fxmcr165_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", TMS1100, XTAL_400kHz)
+ MCFG_TMS1XXX_READ_K_CB(READ8(fxmcr165_state, read_k))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16(fxmcr165_state, write_r))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16(fxmcr165_state, write_o))
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
+ MCFG_DEFAULT_LAYOUT(layout_fxmcr165)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+MACHINE_CONFIG_END
+
+
+
+
+
+/***************************************************************************
+
Ideal Electronic Detective
- * TMS0980NLL MP6100A (die labeled 0980B-00)
+ * TMS0980NLL MP6100A (die label 0980B-00)
* 10-digit 7seg LED display, 2-level sound
hardware (and concept) is very similar to Parker Brothers Stop Thief
@@ -2776,7 +3049,6 @@ static INPUT_PORTS_START( elecdet )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, power_button, (void *)false)
INPUT_PORTS_END
-
static const INT16 elecdet_speaker_levels[4] = { 0, 0x3fff, 0x3fff, 0x7fff };
static MACHINE_CONFIG_START( elecdet, elecdet_state )
@@ -2805,7 +3077,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Kenner Star Wars - Electronic Battle Command
- * TMS1100 MCU, labeled MP3438A
+ * TMS1100 MCU, label MP3438A
* 4x4 LED grid display + 2 separate LEDs and 2-digit 7segs, 1-bit sound
This is a small tabletop space-dogfighting game. To start the game,
@@ -2877,34 +3149,34 @@ READ8_MEMBER(starwbc_state::read_k)
static INPUT_PORTS_START( starwbc )
PORT_START("IN.0") // R0
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Basic Game")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Intermediate Game")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Advanced Game")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("Player Number")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_NAME("Basic Game")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_NAME("Intermediate Game")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_NAME("Advanced Game")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("Player Number")
PORT_START("IN.1") // R1
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Start Turn")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("End Turn")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Start Turn")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("End Turn")
PORT_START("IN.2") // R3
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Magna Scan") // only used in adv. game
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Enemy Scan") // only used in adv. game
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Screen Up")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Magna Scan") // only used in adv. game
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("Enemy Scan") // only used in adv. game
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Screen Up")
PORT_START("IN.3") // R5
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Evasive Maneuvers")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("Move")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Fire")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Battle Stations")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Evasive Maneuvers")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_NAME("Move")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("Fire")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("Battle Stations")
PORT_START("IN.4") // R7
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Left")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_UP) PORT_NAME("Up")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Right")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Left")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_UP) PORT_NAME("Up")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Right")
INPUT_PORTS_END
static MACHINE_CONFIG_START( starwbc, starwbc_state )
@@ -2931,7 +3203,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Kosmos Astro
- * TMS1470NLHL MP1133 (die labeled TMS1400 MP1133)
+ * TMS1470NLHL MP1133 (die label TMS1400 MP1133)
* 9digit 7seg VFD display + 8 LEDs(4 green, 4 yellow), no sound
This is an astrological calculator, and also supports 4-function
@@ -3055,7 +3327,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Mattel Dungeons & Dragons - Computer Labyrinth Game
- * TMS1100 M34012-N2LL (die labeled M34012)
+ * TMS1100 M34012-N2LL (die label M34012)
* 72 buttons, no LEDs, 1-bit sound
This is an electronic board game. It requires markers and wall pieces to play.
@@ -3236,7 +3508,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Milton Bradley Comp IV
- * TMC0904NL CP0904A (die labeled 4A0970D-04A)
+ * TMC0904NL CP0904A (die label 4A0970D-04A)
* 10 LEDs behind bezel, no sound
known releases:
@@ -3340,7 +3612,7 @@ MACHINE_CONFIG_END
Milton Bradley Simon, created by Ralph Baer
Revision A hardware:
- * TMS1000 (die labeled MP3226)
+ * TMS1000 (die label MP3226)
* DS75494 Hex digit LED driver, 4 big lamps, 1-bit sound
Newer revisions (also Pocket Simon) have a smaller 16-pin MB4850 chip
@@ -3441,7 +3713,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Milton Bradley Super Simon
- * TMS1100 MP3476NLL (die labeled MP3476)
+ * TMS1100 MP3476NLL (die label MP3476)
* 8 big lamps(2 turn on at same time), 1-bit sound
The semi-squel to Simon, not as popular. It includes more game variations
@@ -3583,7 +3855,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Milton Bradley Big Trak
- * TMS1000NLL MP3301A or MP3301ANLL E (rev. E!) (die labeled 1000E MP3301)
+ * TMS1000NLL MP3301A or MP3301ANLL E (rev. E!) (die label 1000E MP3301)
* SN75494N Hex digit LED driver, 1 lamp, 3-level sound
* gearbox with magnetic clutch, 1 IR led+sensor, 2 motors(middle wheels)
* 24-button keypad, ext in/out ports
@@ -3767,7 +4039,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Parker Brothers Code Name: Sector, by Bob Doyle
- * TMS0970 MCU, MP0905BNL ZA0379 (die labeled 0970F-05B)
+ * TMS0970 MCU, MP0905BNL ZA0379 (die label 0970F-05B)
* 6-digit 7seg LED display + 4 LEDs for compass, no sound
This is a tabletop submarine pursuit game. A grid board and small toy
@@ -3949,31 +4221,30 @@ READ8_MEMBER(merlin_state::read_k)
static INPUT_PORTS_START( merlin )
PORT_START("IN.0") // O0
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("Button 0")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Button 1")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Button 3")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Button 2")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("Button 0")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Button 1")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Button 3")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Button 2")
PORT_START("IN.1") // O1
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Button 4")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Button 5")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Button 7")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Button 6")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Button 4")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Button 5")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Button 7")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Button 6")
PORT_START("IN.2") // O2
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Button 8")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Button 9")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Same Game")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Button 10")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Button 8")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Button 9")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("Same Game")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Button 10")
PORT_START("IN.3") // O3
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("New Game")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("New Game")
INPUT_PORTS_END
-
static const INT16 merlin_speaker_levels[8] = { 0, 0x7fff/3, 0x7fff/3, 0x7fff/3*2, 0x7fff/3, 0x7fff/3*2, 0x7fff/3*2, 0x7fff };
static MACHINE_CONFIG_START( merlin, merlin_state )
@@ -4001,7 +4272,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Parker Brothers Master Merlin
- * TMS1400 MP7351-N2LL (die labeled 1400CR MP7351)
+ * TMS1400 MP7351-N2LL (die label 1400CR MP7351)
* 11 LEDs behind buttons, 3-level sound
The TMS1400CR MCU has the same pinout as a standard TMS1100. The hardware
@@ -4037,7 +4308,7 @@ static INPUT_PORTS_START( mmerlin )
PORT_INCLUDE( merlin )
PORT_MODIFY("IN.3")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Score") // instead of Hit Me
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Score") // instead of Hit Me
INPUT_PORTS_END
static MACHINE_CONFIG_START( mmerlin, mmerlin_state )
@@ -4065,7 +4336,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Parker Brothers Stop Thief, by Bob Doyle
- * TMS0980NLL MP6101B (die labeled 0980B-01A)
+ * TMS0980NLL MP6101B (die label 0980B-01A)
* 3-digit 7seg LED display, 6-level sound
Stop Thief is actually a board game, the electronic device emulated here
@@ -4153,7 +4424,6 @@ static INPUT_PORTS_START( stopthief )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, power_button, (void *)false)
INPUT_PORTS_END
-
static const INT16 stopthief_speaker_levels[7] = { 0, 0x7fff/6, 0x7fff/5, 0x7fff/4, 0x7fff/3, 0x7fff/2, 0x7fff };
static MACHINE_CONFIG_START( stopthief, stopthief_state )
@@ -4182,7 +4452,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Parker Brothers Bank Shot (known as Cue Ball in the UK), by Garry Kitchen
- * TMS1400NLL MP7313-N2 (die labeled MP7313)
+ * TMS1400NLL MP7313-N2 (die label MP7313)
* LED grid display, 1-bit sound
Bank Shot is an electronic pool game. To select a game, repeatedly press
@@ -4289,7 +4559,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Parker Brothers Split Second
- * TMS1400NLL MP7314-N2 (die labeled MP7314)
+ * TMS1400NLL MP7314-N2 (die label MP7314)
* LED grid display(default round LEDs, and rectangular shape ones), 1-bit sound
This is an electronic handheld reflex gaming device, it's straightforward
@@ -4401,7 +4671,7 @@ MACHINE_CONFIG_END
Parker Brothers Lost Treasure - The Electronic Deep-Sea Diving Game,
Featuring The Electronic Dive-Control Center
- * TMS1100 M34038-NLL (die labeled 1100E, M34038)
+ * TMS1100 M34038-NLL (die label 1100E, M34038)
* 11 LEDs, 4-bit sound
This is a board game. The electronic accessory is the emulated part here.
@@ -4460,31 +4730,34 @@ READ8_MEMBER(lostreas_state::read_k)
static INPUT_PORTS_START( lostreas )
PORT_START("IN.0") // O0
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
PORT_START("IN.1") // O1
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
PORT_START("IN.2") // O2
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_U) PORT_NAME("Air/Up")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("$ Value")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
+ PORT_BIT( 0x04, 0x04, IPT_SPECIAL ) PORT_CONDITION("FAKE", 0x03, NOTEQUALS, 0x00) // air/up
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_NAME("$ Value")
PORT_START("IN.3") // O3
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("E-W (silver)")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("N-S (silver)")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("E-W (gold)")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("N-S (gold)")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("E-W (silver)")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("N-S (silver)")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("E-W (gold)")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("N-S (gold)")
+
+ PORT_START("FAKE") // Air/Up buttons share the same position on the matrix
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Air")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_U) PORT_NAME("Up")
INPUT_PORTS_END
-
static const INT16 lostreas_speaker_levels[16] =
{
0, 0x7fff/15, 0x7fff/14, 0x7fff/13, 0x7fff/12, 0x7fff/11, 0x7fff/10, 0x7fff/9,
@@ -4516,7 +4789,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Tandy Radio Shack Computerized Arcade (1981, 1982, 1995)
- * TMS1100 MCU, labeled CD7282SL
+ * TMS1100 MCU, label CD7282SL
* 12 lamps behind buttons, 1-bit sound
This handheld contains 12 minigames. It looks and plays like "Fabulous Fred"
@@ -4677,7 +4950,7 @@ MACHINE_CONFIG_END
Tomy(tronics) Break Up (manufactured in Japan)
* PCB label TOMY B.O.
- * TMS1040 MP2726 TOMY WIPE (die labeled MP2726A)
+ * TMS1040 MP2726 TOMY WIPE (die label MP2726A)
* TMS1025N2LL I/O expander
* 2-digit 7seg display, 46 other leds, 1-bit sound
@@ -4879,7 +5152,7 @@ MACHINE_CONFIG_END
Tomy Power House Pinball
* PCB label TOMY P-B
- * TMS1100 MP1180 TOMY PINB (die labeled MP1180)
+ * TMS1100 MP1180 TOMY PINB (die label MP1180)
* 3 7seg LEDs, and other LEDs behind bezel, 1-bit sound
known releases:
@@ -5081,6 +5354,17 @@ ROM_START( tc4 )
ROM_END
+ROM_START( cnfball )
+ ROM_REGION( 0x0400, "maincpu", 0 )
+ ROM_LOAD( "mp0170", 0x0000, 0x0400, CRC(50e8a44f) SHA1(fea6ae03c4ef329d825f8688e6854df15023d47e) )
+
+ ROM_REGION( 867, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms1000_common2_micro.pla", 0, 867, CRC(d33da3cf) SHA1(13c4ebbca227818db75e6db0d45b66ba5e207776) )
+ ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_LOAD( "tms1000_cnfball_output.pla", 0, 365, CRC(0af52f64) SHA1(b4cf450e4d895eddb67448aa69e4f18a5a84e033) )
+ROM_END
+
+
ROM_START( cnfball2 )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "mp1181", 0x0000, 0x0800, CRC(4553a840) SHA1(2e1132c9bc51641f77ba7f2430b5a3b2766b3a3d) )
@@ -5191,6 +5475,17 @@ ROM_START( gjackpot )
ROM_END
+ROM_START( fxmcr165 )
+ ROM_REGION( 0x0800, "maincpu", 0 )
+ ROM_LOAD( "mp1312", 0x0000, 0x0800, CRC(6efc8bcc) SHA1(ced8a02b472a3178073691d3dccc0f19f57428fd) )
+
+ ROM_REGION( 867, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms1100_common1_micro.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) )
+ ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_LOAD( "tms1100_fxmcr165_output.pla", 0, 365, CRC(ce656866) SHA1(40e1614f5afcc7572fda596e1be453d54e95af0c) )
+ROM_END
+
+
ROM_START( elecdet )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mp6100a", 0x0000, 0x1000, CRC(6f396bb8) SHA1(1f104d4ca9bee0d4572be4779b7551dfe20c4f04) )
@@ -5440,18 +5735,20 @@ CONS( 1980, h2hfootb, 0, 0, h2hfootb, h2hfootb, driver_device, 0, "Col
CONS( 1980, h2hbaseb, 0, 0, h2hbaseb, h2hbaseb, driver_device, 0, "Coleco", "Head to Head Baseball", MACHINE_SUPPORTS_SAVE )
CONS( 1981, tc4, 0, 0, tc4, tc4, driver_device, 0, "Coleco", "Total Control 4", MACHINE_SUPPORTS_SAVE )
+CONS( 1979, cnfball, 0, 0, cnfball, cnfball, driver_device, 0, "Conic", "Electronic Football (Conic)", MACHINE_SUPPORTS_SAVE )
CONS( 1979, cnfball2, 0, 0, cnfball2, cnfball2, driver_device, 0, "Conic", "Electronic Football II (Conic)", MACHINE_SUPPORTS_SAVE )
CONS( 1979, ebball, 0, 0, ebball, ebball, driver_device, 0, "Entex", "Electronic Baseball (Entex)", MACHINE_SUPPORTS_SAVE )
CONS( 1979, ebball2, 0, 0, ebball2, ebball2, driver_device, 0, "Entex", "Electronic Baseball 2 (Entex)", MACHINE_SUPPORTS_SAVE )
CONS( 1980, ebball3, 0, 0, ebball3, ebball3, driver_device, 0, "Entex", "Electronic Baseball 3 (Entex)", MACHINE_SUPPORTS_SAVE )
-CONS( 1980, einvader, 0, 0, einvader, einvader, driver_device, 0, "Entex", "Space Invader (Entex, TMS1100)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
+CONS( 1980, einvader, 0, 0, einvader, einvader, driver_device, 0, "Entex", "Space Invader (Entex, TMS1100 version)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
CONS( 1980, efootb4 , 0, 0, efootb4, efootb4, driver_device, 0, "Entex", "Color Football 4 (Entex)", MACHINE_SUPPORTS_SAVE )
CONS( 1980, ebaskb2 , 0, 0, ebaskb2, ebaskb2, driver_device, 0, "Entex", "Electronic Basketball 2 (Entex)", MACHINE_SUPPORTS_SAVE )
CONS( 1980, raisedvl, 0, 0, raisedvl, raisedvl, driver_device, 0, "Entex", "Raise The Devil", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
CONS( 1979, gpoker, 0, 0, gpoker, gpoker, driver_device, 0, "Gakken", "Poker (Gakken, 1979 version)", MACHINE_SUPPORTS_SAVE )
CONS( 1980, gjackpot, 0, 0, gjackpot, gjackpot, driver_device, 0, "Gakken", "Jackpot: Gin Rummy & Black Jack", MACHINE_SUPPORTS_SAVE )
+COMP( 1983, fxmcr165, 0, 0, fxmcr165, fxmcr165, driver_device, 0, "Gakken", "FX-Micom R-165", MACHINE_SUPPORTS_SAVE )
CONS( 1979, elecdet, 0, 0, elecdet, elecdet, driver_device, 0, "Ideal", "Electronic Detective", MACHINE_SUPPORTS_SAVE ) // ***
@@ -5470,7 +5767,7 @@ CONS( 1979, bigtrak, 0, 0, bigtrak, bigtrak, driver_device, 0, "Mil
CONS( 1977, cnsector, 0, 0, cnsector, cnsector, driver_device, 0, "Parker Brothers", "Code Name: Sector", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW ) // ***
CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin - The Electronic Wizard", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1979, stopthie, 0, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner)", MACHINE_SUPPORTS_SAVE ) // ***
-CONS( 1979, stopthiep, stopthie, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (patent)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
+CONS( 1979, stopthiep, stopthie, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (patent)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // ***
CONS( 1980, bankshot, 0, 0, bankshot, bankshot, driver_device, 0, "Parker Brothers", "Bank Shot - Electronic Pool", MACHINE_SUPPORTS_SAVE )
CONS( 1980, splitsec, 0, 0, splitsec, splitsec, driver_device, 0, "Parker Brothers", "Split Second", MACHINE_SUPPORTS_SAVE )
CONS( 1982, mmerlin, 0, 0, mmerlin, mmerlin, driver_device, 0, "Parker Brothers", "Master Merlin", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/hh_ucom4.cpp b/src/mame/drivers/hh_ucom4.cpp
index 6d1368f63bc..bb7d99e82a7 100644
--- a/src/mame/drivers/hh_ucom4.cpp
+++ b/src/mame/drivers/hh_ucom4.cpp
@@ -231,7 +231,7 @@ UINT8 hh_ucom4_state::read_inputs(int columns)
Bambino UFO Master-Blaster Station (manufactured in Japan)
* PCB label Emix Corp. ET-02
- * NEC uCOM-44 MCU, labeled EMIX D552C 017
+ * NEC uCOM-44 MCU, label EMIX D552C 017
* cyan VFD display Emix-101, with blue color overlay
This is Bambino's first game, it is not known if ET-01 exists. Emix Corp.
@@ -310,8 +310,7 @@ static INPUT_PORTS_START( ufombs )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
-
-static const INT16 ufombs_speaker_levels[] = { 0, 32767, -32768, 0 };
+static const INT16 ufombs_speaker_levels[] = { 0, 0x7fff, -0x8000, 0 };
static MACHINE_CONFIG_START( ufombs, ufombs_state )
@@ -345,7 +344,7 @@ MACHINE_CONFIG_END
Bambino Superstar Football (manufactured in Japan)
* PCB label Emix Corp. ET-03
- * NEC uCOM-43 MCU, labeled D553C 031
+ * NEC uCOM-43 MCU, label D553C 031
* cyan VFD display Emix-102, with bezel
The game was rereleased in 1982 as Classic Football, with an improved VFD.
@@ -444,14 +443,17 @@ static INPUT_PORTS_START( ssfball )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) // multiplexed, handled in input_b_r
PORT_START("IN.3") // port A
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY PORT_NAME("Ball-carrier Left/Right")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY PORT_NAME("Ball-carrier Up")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY PORT_NAME("Ball-carrier Down")
+ PORT_BIT( 0x01, 0x01, IPT_SPECIAL ) PORT_CONDITION("FAKE", 0x03, NOTEQUALS, 0x00) // left/right
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Pass")
-INPUT_PORTS_END
+ PORT_START("FAKE") // fake port for left/right combination
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY
+INPUT_PORTS_END
-static const INT16 ssfball_speaker_levels[] = { 0, 32767, -32768, 0 };
+static const INT16 ssfball_speaker_levels[] = { 0, 0x7fff, -0x8000, 0 };
static MACHINE_CONFIG_START( ssfball, ssfball_state )
@@ -485,7 +487,7 @@ MACHINE_CONFIG_END
Bambino Kick The Goal Soccer
* PCB label Emix Corp. ET-10/08 (PCB is for 2 possible games)
- * NEC uCOM-44 MCU, labeled D552C 043
+ * NEC uCOM-44 MCU, label D552C 043
* cyan VFD display Emix-105, with bezel overlay
Press the Display button twice to start the game. Action won't start until
@@ -609,7 +611,7 @@ MACHINE_CONFIG_END
Bambino Safari (manufactured in Japan)
* PCB label Emix Corp. ET-11
- * NEC uCOM-44 MCU, labeled EMIX D552C 049
+ * NEC uCOM-44 MCU, label EMIX D552C 049
* cyan VFD display Emix-108
NOTE!: MAME external artwork is required
@@ -713,7 +715,7 @@ MACHINE_CONFIG_END
Bambino Space Laser Fight (manufactured in Japan)
* PCB label Emix Corp. ET-12
- * NEC uCOM-43 MCU, labeled D553C 055
+ * NEC uCOM-43 MCU, label D553C 055
* cyan VFD display Emix-104, with blue or green color overlay
This is basically a revamp of their earlier Boxing game (ET-06), case and
@@ -828,8 +830,7 @@ static INPUT_PORTS_START( splasfgt )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
-
-static const INT16 splasfgt_speaker_levels[] = { 0, 32767, -32768, 0 };
+static const INT16 splasfgt_speaker_levels[] = { 0, 0x7fff, -0x8000, 0 };
static MACHINE_CONFIG_START( splasfgt, splasfgt_state )
@@ -863,7 +864,7 @@ MACHINE_CONFIG_END
Bandai Crazy Climber (manufactured in Japan)
* PCB labels SM-020/SM-021
- * NEC uCOM-43 MCU, labeled D553C 170
+ * NEC uCOM-43 MCU, label D553C 170
* cyan/red/green VFD display NEC FIP6AM2-T no. 1-8 2, with partial color overlay and bezel
known releases:
@@ -962,7 +963,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Castle Toy Tactix
- * NEC uCOM-43 MCU, labeled D557LC 512
+ * NEC uCOM-43 MCU, label D557LC 512
* 16 LEDs behind buttons
Tactix is similar to Merlin, for 1 or 2 players. In 2-player mode, simply
@@ -1022,34 +1023,34 @@ READ8_MEMBER(tactix_state::input_r)
static INPUT_PORTS_START( tactix )
PORT_START("IN.0") // C0 port A
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Button 1")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Button 5")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Button 9")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Z) PORT_NAME("Button 13")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_NAME("Button 1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Button 5")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Button 9")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("Button 13")
PORT_START("IN.1") // C1 port A
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Button 2")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Button 6")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Button 10")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_X) PORT_NAME("Button 14")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_NAME("Button 2")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("Button 6")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Button 10")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Button 14")
PORT_START("IN.2") // C2 port A
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Button 3")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Button 7")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_NAME("Button 11")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Button 15")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_NAME("Button 3")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Button 7")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("Button 11")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Button 15")
PORT_START("IN.3") // C3 port A
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Button 4")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Button 8")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Button 12")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("Button 16")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_NAME("Button 4")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("Button 8")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("Button 12")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_NAME("Button 16")
PORT_START("IN.4") // E0 port A
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("New Game")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Comp Turn")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("New Game")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Comp Turn")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static MACHINE_CONFIG_START( tactix, tactix_state )
@@ -1080,7 +1081,7 @@ MACHINE_CONFIG_END
Epoch Invader From Space (manufactured in Japan)
* PCB labels 36010(A/B)
- * NEC uCOM-44 MCU, labeled D552C 054
+ * NEC uCOM-44 MCU, label D552C 054
* cyan VFD display NEC FIP9AM18T tube no. 0D, with color overlay
known releases:
@@ -1179,7 +1180,7 @@ MACHINE_CONFIG_END
Epoch Electronic Football (manufactured in Japan)
* PCB labels 36020(A/B/C)
- * NEC uCOM-43 MCU, labeled D553C 080
+ * NEC uCOM-43 MCU, label D553C 080
* cyan VFD display NEC FIP10AM15T tube no. 0F, with bezel overlay
known releases:
@@ -1247,7 +1248,7 @@ static INPUT_PORTS_START( efball )
PORT_START("IN.1") // port B
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY PORT_NAME("P1 Left/Right")
+ PORT_BIT( 0x04, 0x04, IPT_SPECIAL ) PORT_CONDITION("FAKE", 0x03, NOTEQUALS, 0x00) // left/right
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Pass")
PORT_START("IN.2") // port C
@@ -1255,6 +1256,10 @@ static INPUT_PORTS_START( efball )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL PORT_16WAY
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Kick Return")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Kick")
+
+ PORT_START("FAKE") // fake port for left/right combination
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY
INPUT_PORTS_END
static MACHINE_CONFIG_START( efball, efball_state )
@@ -1288,7 +1293,7 @@ MACHINE_CONFIG_END
Epoch Galaxy II (manufactured in Japan)
* PCB labels 19096/96062
- * NEC uCOM-43 MCU, labeled D553C 153
+ * NEC uCOM-43 MCU, label D553C 153
* cyan/red VFD display NEC FIP10xM20T, with color overlay. x = multiple VFD
revisions exist, with different graphics: rev B no. 1-8, rev. D no. 2-21.
@@ -1389,7 +1394,7 @@ MACHINE_CONFIG_END
Epoch Astro Command (manufactured in Japan)
* PCB labels 96111/96112
- * NEC uCOM-43 MCU, labeled D553C 202
+ * NEC uCOM-43 MCU, label D553C 202
* cyan/red VFD display NEC FIP9AM20T no. 42-42, with color overlay + bezel
known releases:
@@ -1496,7 +1501,7 @@ MACHINE_CONFIG_END
Epoch Dracula (manufactured in Japan)
* PCB label 96121
- * NEC uCOM-43 MCU, labeled D553C 206
+ * NEC uCOM-43 MCU, label D553C 206
* cyan/red/green VFD display NEC FIP8BM20T no. 2-42
known releases:
@@ -1588,7 +1593,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Mattel Computer Gin
- * NEC uCOM-43 MCU, labeled D650C 060
+ * NEC uCOM-43 MCU, label D650C 060
***************************************************************************/
@@ -1662,7 +1667,7 @@ MACHINE_CONFIG_END
Mego Mini-Vid Break Free (manufactured in Japan)
* PCB label Mego 79 rev F
- * NEC uCOM-43 MCU, labeled D553C 049
+ * NEC uCOM-43 MCU, label D553C 049
* cyan VFD display Futaba DM-4.5 91
note: MAME external artwork is not needed for this game
@@ -1766,8 +1771,8 @@ MACHINE_CONFIG_END
/***************************************************************************
Tomy(tronic) Cosmic Combat (manufactured in Japan)
- * PCBs are labeled 2E1019-E01
- * NEC uCOM-44 MCU, labeled D552C 042
+ * PCB label 2E1019-E01
+ * NEC uCOM-44 MCU, label D552C 042
* cyan VFD display NEC FIP32AM18Y tube no. 0E, with color overlay
known releases:
@@ -1861,8 +1866,8 @@ MACHINE_CONFIG_END
/***************************************************************************
Tomy(tronic) Tennis (manufactured in Japan)
- * PCB labeled TOMY TN-04 TENNIS
- * NEC uCOM-44 MCU, labeled D552C 048
+ * PCB label TOMY TN-04 TENNIS
+ * NEC uCOM-44 MCU, label D552C 048
* VFD display NEC FIP11AM15T tube no. 0F, with overlay
The initial release of this game was in 1979, known as Pro-Tennis,
@@ -2017,8 +2022,8 @@ MACHINE_CONFIG_END
/***************************************************************************
Tomy(tronic) Pac-Man (manufactured in Japan)
- * PCBs are labeled TN-08 2E108E01
- * NEC uCOM-43 MCU, labeled D553C 160
+ * PCB label TN-08 2E108E01
+ * NEC uCOM-43 MCU, label D553C 160
* cyan/red/green VFD display NEC FIP8AM18T no. 2-21
* bright yellow round casing
@@ -2123,8 +2128,8 @@ MACHINE_CONFIG_END
/***************************************************************************
Tomy(tronic) Scramble (manufactured in Japan)
- * PCBs are labeled TN-10 2E114E01
- * NEC uCOM-43 MCU, labeled D553C 192
+ * PCB label TN-10 2E114E01
+ * NEC uCOM-43 MCU, label D553C 192
* cyan/red/green VFD display NEC FIP10CM20T no. 2-41
known releases:
@@ -2223,8 +2228,8 @@ MACHINE_CONFIG_END
/***************************************************************************
Tomy(tronic) Caveman (manufactured in Japan)
- * PCBs are labeled TN-12 2E114E03
- * NEC uCOM-43 MCU, labeled D553C 209
+ * PCB label TN-12 2E114E03
+ * NEC uCOM-43 MCU, label D553C 209
* cyan/red/green VFD display NEC FIP8AM20T no. 2-42
known releases:
@@ -2319,8 +2324,8 @@ MACHINE_CONFIG_END
/***************************************************************************
Tomy Alien Chase (manufactured in Japan)
- * PCBs are labeled TN-16 2E121B01
- * NEC uCOM-43 MCU, labeled D553C 258
+ * PCB label TN-16 2E121B01
+ * NEC uCOM-43 MCU, label D553C 258
* red/green VFD display NEC FIP9AM24T, with color overlay, 2-sided*
*Player one views the VFD from the front (grid+filament side) while the
diff --git a/src/mame/drivers/hitme.cpp b/src/mame/drivers/hitme.cpp
index 7f285a41cc5..b0f27566303 100644
--- a/src/mame/drivers/hitme.cpp
+++ b/src/mame/drivers/hitme.cpp
@@ -328,7 +328,7 @@ static MACHINE_CONFIG_START( hitme, hitme_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", hitme)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/homelab.cpp b/src/mame/drivers/homelab.cpp
index 0d6fc6735f1..7c1ab0eb2cc 100644
--- a/src/mame/drivers/homelab.cpp
+++ b/src/mame/drivers/homelab.cpp
@@ -737,7 +737,7 @@ static MACHINE_CONFIG_START( homelab, homelab_state )
MCFG_CPU_VBLANK_INT_DRIVER("screen", homelab_state, homelab_frame)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
MCFG_SCREEN_SIZE(40*8, 25*8)
@@ -747,7 +747,7 @@ static MACHINE_CONFIG_START( homelab, homelab_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", homelab)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -768,7 +768,7 @@ static MACHINE_CONFIG_START( homelab3, homelab_state )
MCFG_MACHINE_RESET_OVERRIDE(homelab_state,homelab3)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
MCFG_SCREEN_SIZE(64*8, 32*8)
@@ -778,7 +778,7 @@ static MACHINE_CONFIG_START( homelab3, homelab_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", homelab)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -799,7 +799,7 @@ static MACHINE_CONFIG_START( brailab4, homelab_state )
MCFG_MACHINE_RESET_OVERRIDE(homelab_state,brailab4)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
MCFG_SCREEN_SIZE(64*8, 32*8)
@@ -809,7 +809,7 @@ static MACHINE_CONFIG_START( brailab4, homelab_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", homelab)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/homez80.cpp b/src/mame/drivers/homez80.cpp
index ccddfcddccd..ea517b55d81 100644
--- a/src/mame/drivers/homez80.cpp
+++ b/src/mame/drivers/homez80.cpp
@@ -296,7 +296,7 @@ static MACHINE_CONFIG_START( homez80, homez80_state )
MCFG_SCREEN_VISIBLE_AREA(0, 344-1, 0, 32*8-1)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", homez80 )
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/hp64k.cpp b/src/mame/drivers/hp64k.cpp
index 02f6fd696a1..d23e5525066 100644
--- a/src/mame/drivers/hp64k.cpp
+++ b/src/mame/drivers/hp64k.cpp
@@ -1350,11 +1350,11 @@ static MACHINE_CONFIG_START(hp64k , hp64k_state)
MCFG_I8275_DRQ_CALLBACK(WRITELINE(hp64k_state , hp64k_crtc_drq_w))
MCFG_I8275_VRTC_CALLBACK(WRITELINE(hp64k_state , hp64k_crtc_vrtc_w))
- MCFG_SCREEN_ADD("screen" , RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DEVICE("crtc" , i8275_device , screen_update)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_SIZE(720 , 390)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette")
+ MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
MCFG_FD1791_ADD("fdc" , XTAL_4MHz / 4)
MCFG_WD_FDC_FORCE_READY
diff --git a/src/mame/drivers/hp9845.cpp b/src/mame/drivers/hp9845.cpp
index a8fb77fa17c..1387432ea85 100644
--- a/src/mame/drivers/hp9845.cpp
+++ b/src/mame/drivers/hp9845.cpp
@@ -695,11 +695,11 @@ static MACHINE_CONFIG_START( hp9845b, hp9845b_state )
MCFG_HPHYBRID_PA_CHANGED(WRITE8(hp9845b_state , pa_w))
// video hardware
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DRIVER(hp9845b_state, screen_update)
MCFG_SCREEN_RAW_PARAMS(20849400 , 99 * 9 , 0 , 80 * 9 , 26 * 15 , 0 , 25 * 15)
MCFG_SCREEN_VBLANK_DRIVER(hp9845b_state, vblank_w)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", hp9845b_state, scanline_timer, "screen", 0, 1)
diff --git a/src/mame/drivers/hp9k.cpp b/src/mame/drivers/hp9k.cpp
index 9fa6ae09513..13972ae06b5 100644
--- a/src/mame/drivers/hp9k.cpp
+++ b/src/mame/drivers/hp9k.cpp
@@ -407,7 +407,7 @@ static MACHINE_CONFIG_START( hp9k, hp9k_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", hp9k)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_MC6845_ADD("mc6845", MC6845, "screen", XTAL_16MHz / 16)
MCFG_MC6845_SHOW_BORDER_AREA(false)
diff --git a/src/mame/drivers/huebler.cpp b/src/mame/drivers/huebler.cpp
index b3a3be497ce..1d5dda7ff73 100644
--- a/src/mame/drivers/huebler.cpp
+++ b/src/mame/drivers/huebler.cpp
@@ -340,7 +340,7 @@ static MACHINE_CONFIG_START( amu880, amu880_state )
MCFG_SCREEN_RAW_PARAMS(9000000, 576, 0*6, 64*6, 320, 0*10, 24*10)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", amu880)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* devices */
MCFG_DEVICE_ADD(Z80CTC_TAG, Z80CTC, XTAL_10MHz/4)
diff --git a/src/mame/drivers/ibmpc.cpp b/src/mame/drivers/ibmpc.cpp
index f49d500e829..a5b26b88854 100644
--- a/src/mame/drivers/ibmpc.cpp
+++ b/src/mame/drivers/ibmpc.cpp
@@ -258,11 +258,8 @@ XT U44 IBM.bin: IBM 5160 PC/XT Bank-selection decoding ROM (256x4 bit). Not mapp
#include "emu.h"
#include "cpu/i86/i86.h"
#include "machine/ram.h"
-#include "bus/isa/isa.h"
-#include "bus/isa/isa_cards.h"
-#include "machine/pc_lpt.h"
#include "bus/pc_kbd/keyboards.h"
-#include "includes/genpc.h"
+#include "machine/genpc.h"
#include "softlist.h"
class ibmpc_state : public driver_device
@@ -277,30 +274,18 @@ public:
static ADDRESS_MAP_START( pc8_map, AS_PROGRAM, 8, ibmpc_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xbffff) AM_NOP
- AM_RANGE(0xc0000, 0xc7fff) AM_ROM
- AM_RANGE(0xc8000, 0xcffff) AM_ROM
- AM_RANGE(0xd0000, 0xeffff) AM_NOP
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START(pc8_io, AS_IO, 8, ibmpc_state )
ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", ibm5160_mb_device, map)
ADDRESS_MAP_END
-static INPUT_PORTS_START( ibm5150 )
-INPUT_PORTS_END
-
static DEVICE_INPUT_DEFAULTS_START(cga)
DEVICE_INPUT_DEFAULTS("DSW0",0x30, 0x20)
DEVICE_INPUT_DEFAULTS_END
-//static DEVICE_INPUT_DEFAULTS_START(ega)
-// DEVICE_INPUT_DEFAULTS("DSW0",0x30, 0x00)
-//DEVICE_INPUT_DEFAULTS_END
-
-
static MACHINE_CONFIG_START( ibm5150, ibmpc_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", I8088, XTAL_14_31818MHz/3)
@@ -323,6 +308,7 @@ static MACHINE_CONFIG_START( ibm5150, ibmpc_state )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_EXTRA_OPTIONS("64K, 128K, 256K, 512K")
/* software lists */
MCFG_SOFTWARE_LIST_ADD("disk_list","ibm5150")
@@ -362,6 +348,7 @@ static MACHINE_CONFIG_START( ibm5160, ibmpc_state )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_EXTRA_OPTIONS("64K, 128K, 256K, 512K")
/* software lists */
MCFG_SOFTWARE_LIST_ADD("pc_disk_list","ibm5150")
@@ -370,7 +357,7 @@ MACHINE_CONFIG_END
ROM_START( ibm5150 )
- ROM_REGION(0x100000,"maincpu", 0)
+ ROM_REGION(0x10000,"bios", 0)
// ROM_LOAD("600963.u12", 0xc8000, 0x02000, CRC(f3daf85f) SHA1(3bd29538832d3084cbddeec92593988772755283)) /* Tandon/Western Digital Fixed Disk Adapter 600963-001__TYPE_5.U12.2764.bin - Meant for an IBM PC or XT which lacked bios support for HDDs */
/* Xebec 1210 and 1220 Z80-based ST409/ST412 MFM controllers */
@@ -383,27 +370,27 @@ ROM_START( ibm5150 )
ROM_DEFAULT_BIOS( "rev3" )
ROM_SYSTEM_BIOS( 0, "rev3", "IBM PC 5150 1501476 10/27/82" )
- ROMX_LOAD("5000019.u29", 0xf6000, 0x2000, CRC(80d3cf5d) SHA1(64769b7a8b60ffeefa04e4afbec778069a2840c9), ROM_BIOS(1)) /* ROM Basic 1.1 F6000-F7FFF; IBM P/N: 5000019, FRU: 6359109 */
- ROMX_LOAD("5000021.u30", 0xf8000, 0x2000, CRC(673a4acc) SHA1(082ae803994048e225150f771794ca305f73d731), ROM_BIOS(1)) /* ROM Basic 1.1 F8000-F9FFF; IBM P/N: 5000021, FRU: 6359111 */
- ROMX_LOAD("5000022.u31", 0xfa000, 0x2000, CRC(aac3fc37) SHA1(c9e0529470edf04da093bb8c8ae2536c688c1a74), ROM_BIOS(1)) /* ROM Basic 1.1 FA000-FBFFF; IBM P/N: 5000022, FRU: 6359112 */
- ROMX_LOAD("5000023.u32", 0xfc000, 0x2000, CRC(3062b3fc) SHA1(5134dd64721cbf093d059ee5d3fd09c7f86604c7), ROM_BIOS(1)) /* ROM Basic 1.1 FC000-FDFFF; IBM P/N: 5000023, FRU: 6359113 */
- ROMX_LOAD("1501476.u33", 0xfe000, 0x2000, CRC(e88792b3) SHA1(40fce6a94dda4328a8b608c7ae2f39d1dc688af4), ROM_BIOS(1))
+ ROMX_LOAD("5000019.u29", 0x6000, 0x2000, CRC(80d3cf5d) SHA1(64769b7a8b60ffeefa04e4afbec778069a2840c9), ROM_BIOS(1)) /* ROM Basic 1.1 F6000-F7FFF; IBM P/N: 5000019, FRU: 6359109 */
+ ROMX_LOAD("5000021.u30", 0x8000, 0x2000, CRC(673a4acc) SHA1(082ae803994048e225150f771794ca305f73d731), ROM_BIOS(1)) /* ROM Basic 1.1 F8000-F9FFF; IBM P/N: 5000021, FRU: 6359111 */
+ ROMX_LOAD("5000022.u31", 0xa000, 0x2000, CRC(aac3fc37) SHA1(c9e0529470edf04da093bb8c8ae2536c688c1a74), ROM_BIOS(1)) /* ROM Basic 1.1 FA000-FBFFF; IBM P/N: 5000022, FRU: 6359112 */
+ ROMX_LOAD("5000023.u32", 0xc000, 0x2000, CRC(3062b3fc) SHA1(5134dd64721cbf093d059ee5d3fd09c7f86604c7), ROM_BIOS(1)) /* ROM Basic 1.1 FC000-FDFFF; IBM P/N: 5000023, FRU: 6359113 */
+ ROMX_LOAD("1501476.u33", 0xe000, 0x2000, CRC(e88792b3) SHA1(40fce6a94dda4328a8b608c7ae2f39d1dc688af4), ROM_BIOS(1))
/* IBM PC 5150 (rev 1: 04/24/81) 2-screw case 16-64k MB w/MDA Card, ROM Basic 1.0 */
ROM_SYSTEM_BIOS( 1, "rev1", "IBM PC 5150 5700051 04/24/81" )
- ROMX_LOAD("5700019.u29", 0xf6000, 0x2000, CRC(b59e8f6c) SHA1(7a5db95370194c73b7921f2d69267268c69d2511), ROM_BIOS(2)) /* ROM Basic 1.0 F6000-F7FFF */
- ROMX_LOAD("5700027.u30", 0xf8000, 0x2000, CRC(bfff99b8) SHA1(ca2f126ba69c1613b7b5a4137d8d8cf1db36a8e6), ROM_BIOS(2)) /* ROM Basic 1.0 F8000-F9FFF */
- ROMX_LOAD("5700035.u31", 0xfa000, 0x2000, CRC(9fe4ec11) SHA1(89af8138185938c3da3386f97d3b0549a51de5ef), ROM_BIOS(2)) /* ROM Basic 1.0 FA000-FBFFF */
- ROMX_LOAD("5700043.u32", 0xfc000, 0x2000, CRC(ea2794e6) SHA1(22fe58bc853ffd393d5e2f98defda7456924b04f), ROM_BIOS(2)) /* ROM Basic 1.0 FC000-FDFFF */
- ROMX_LOAD("5700051.u33", 0xfe000, 0x2000, CRC(12d33fb8) SHA1(f046058faa016ad13aed5a082a45b21dea43d346), ROM_BIOS(2))
+ ROMX_LOAD("5700019.u29", 0x6000, 0x2000, CRC(b59e8f6c) SHA1(7a5db95370194c73b7921f2d69267268c69d2511), ROM_BIOS(2)) /* ROM Basic 1.0 F6000-F7FFF */
+ ROMX_LOAD("5700027.u30", 0x8000, 0x2000, CRC(bfff99b8) SHA1(ca2f126ba69c1613b7b5a4137d8d8cf1db36a8e6), ROM_BIOS(2)) /* ROM Basic 1.0 F8000-F9FFF */
+ ROMX_LOAD("5700035.u31", 0xa000, 0x2000, CRC(9fe4ec11) SHA1(89af8138185938c3da3386f97d3b0549a51de5ef), ROM_BIOS(2)) /* ROM Basic 1.0 FA000-FBFFF */
+ ROMX_LOAD("5700043.u32", 0xc000, 0x2000, CRC(ea2794e6) SHA1(22fe58bc853ffd393d5e2f98defda7456924b04f), ROM_BIOS(2)) /* ROM Basic 1.0 FC000-FDFFF */
+ ROMX_LOAD("5700051.u33", 0xe000, 0x2000, CRC(12d33fb8) SHA1(f046058faa016ad13aed5a082a45b21dea43d346), ROM_BIOS(2))
/* IBM PC 5150 (rev 2: 10/19/81) 2-screw case, 16-64k MB w/MDA Card, ROM Basic 1.0 */
ROM_SYSTEM_BIOS( 2, "rev2", "IBM PC 5150 5700671 10/19/81" )
- ROMX_LOAD("5700019.u29", 0xf6000, 0x2000, CRC(b59e8f6c) SHA1(7a5db95370194c73b7921f2d69267268c69d2511), ROM_BIOS(3)) /* ROM Basic 1.0 F6000-F7FFF */
- ROMX_LOAD("5700027.u30", 0xf8000, 0x2000, CRC(bfff99b8) SHA1(ca2f126ba69c1613b7b5a4137d8d8cf1db36a8e6), ROM_BIOS(3)) /* ROM Basic 1.0 F8000-F9FFF */
- ROMX_LOAD("5700035.u31", 0xfa000, 0x2000, CRC(9fe4ec11) SHA1(89af8138185938c3da3386f97d3b0549a51de5ef), ROM_BIOS(3)) /* ROM Basic 1.0 FA000-FBFFF */
- ROMX_LOAD("5700043.u32", 0xfc000, 0x2000, CRC(ea2794e6) SHA1(22fe58bc853ffd393d5e2f98defda7456924b04f), ROM_BIOS(3)) /* ROM Basic 1.0 FC000-FDFFF */
- ROMX_LOAD("5700671.u33", 0xfe000, 0x2000, CRC(b7d4ec46) SHA1(bdb06f846c4768f39eeff7e16b6dbff8cd2117d2), ROM_BIOS(3))
+ ROMX_LOAD("5700019.u29", 0x6000, 0x2000, CRC(b59e8f6c) SHA1(7a5db95370194c73b7921f2d69267268c69d2511), ROM_BIOS(3)) /* ROM Basic 1.0 F6000-F7FFF */
+ ROMX_LOAD("5700027.u30", 0x8000, 0x2000, CRC(bfff99b8) SHA1(ca2f126ba69c1613b7b5a4137d8d8cf1db36a8e6), ROM_BIOS(3)) /* ROM Basic 1.0 F8000-F9FFF */
+ ROMX_LOAD("5700035.u31", 0xa000, 0x2000, CRC(9fe4ec11) SHA1(89af8138185938c3da3386f97d3b0549a51de5ef), ROM_BIOS(3)) /* ROM Basic 1.0 FA000-FBFFF */
+ ROMX_LOAD("5700043.u32", 0xc000, 0x2000, CRC(ea2794e6) SHA1(22fe58bc853ffd393d5e2f98defda7456924b04f), ROM_BIOS(3)) /* ROM Basic 1.0 FC000-FDFFF */
+ ROMX_LOAD("5700671.u33", 0xe000, 0x2000, CRC(b7d4ec46) SHA1(bdb06f846c4768f39eeff7e16b6dbff8cd2117d2), ROM_BIOS(3))
/* Z80 on the Xebec 1210 and 1220 Hard Disk Controllers */
// ROM_REGION(0x10000, "cpu1", 0)
@@ -415,29 +402,29 @@ ROM_START( ibm5150 )
ROM_LOAD("5788005.u33", 0x00000, 0x2000, CRC(0bf56d70) SHA1(c2a8b10808bf51a3c123ba3eb1e9dd608231916f)) /* "AMI 8412PI // 5788005 // (C) IBM CORP. 1981 // KOREA" */
ROM_END
ROM_START( ibm5155 )
- ROM_REGION(0x100000,"maincpu", 0)
- ROM_LOAD("5000027.u19", 0xf0000, 0x8000, CRC(fc982309) SHA1(2aa781a698a21c332398d9bc8503d4f580df0a05))
- ROM_LOAD("1501512.u18", 0xf8000, 0x8000, CRC(79522c3d) SHA1(6bac726d8d033491d52507278aa388ec04cf8b7e))
+ ROM_REGION(0x10000,"bios", 0)
+ ROM_LOAD("5000027.u19", 0x0000, 0x8000, CRC(fc982309) SHA1(2aa781a698a21c332398d9bc8503d4f580df0a05))
+ ROM_LOAD("1501512.u18", 0x8000, 0x8000, CRC(79522c3d) SHA1(6bac726d8d033491d52507278aa388ec04cf8b7e))
/* IBM 1501981(CGA) and 1501985(MDA) Character rom */
ROM_REGION(0x2000,"gfx1", 0)
ROM_LOAD("5788005.u33", 0x00000, 0x2000, CRC(0bf56d70) SHA1(c2a8b10808bf51a3c123ba3eb1e9dd608231916f)) /* "AMI 8412PI // 5788005 // (C) IBM CORP. 1981 // KOREA" */
ROM_END
ROM_START( ibm5140 )
- ROM_REGION(0x100000,"maincpu", 0)
- ROM_LOAD("7396917.bin", 0xf0000, 0x08000, CRC(95c35652) SHA1(2bdac30715dba114fbe0895b8b4723f8dc26a90d))
- ROM_LOAD("7396918.bin", 0xf8000, 0x08000, CRC(1b4202b0) SHA1(4797ff853ba1675860f293b6368832d05e2f3ea9))
+ ROM_REGION(0x10000,"bios", 0)
+ ROM_LOAD("7396917.bin", 0x0000, 0x08000, CRC(95c35652) SHA1(2bdac30715dba114fbe0895b8b4723f8dc26a90d))
+ ROM_LOAD("7396918.bin", 0x8000, 0x08000, CRC(1b4202b0) SHA1(4797ff853ba1675860f293b6368832d05e2f3ea9))
/* IBM 1501981(CGA) and 1501985(MDA) Character rom */
ROM_REGION(0x2000,"gfx1", 0)
ROM_LOAD("5788005.u33", 0x00000, 0x2000, CRC(0bf56d70) SHA1(c2a8b10808bf51a3c123ba3eb1e9dd608231916f)) /* "AMI 8412PI // 5788005 // (C) IBM CORP. 1981 // KOREA" */
ROM_END
#ifdef UNUSED_DEFINITION
ROM_START( ibmpca )
- ROM_REGION(0x100000,"maincpu",0)
- ROM_LOAD("basicc11.f6", 0xf6000, 0x2000, CRC(80d3cf5d) SHA1(64769b7a8b60ffeefa04e4afbec778069a2840c9))
- ROM_LOAD("basicc11.f8", 0xf8000, 0x2000, CRC(673a4acc) SHA1(082ae803994048e225150f771794ca305f73d731))
- ROM_LOAD("basicc11.fa", 0xfa000, 0x2000, CRC(aac3fc37) SHA1(c9e0529470edf04da093bb8c8ae2536c688c1a74))
- ROM_LOAD("basicc11.fc", 0xfc000, 0x2000, CRC(3062b3fc) SHA1(5134dd64721cbf093d059ee5d3fd09c7f86604c7))
- ROM_LOAD("pc081682.bin", 0xfe000, 0x2000, CRC(5c3f0256) SHA1(b42c78abd0a9c630a2f972ad2bae46d83c3a2a09))
+ ROM_REGION(0x10000,"bios",0)
+ ROM_LOAD("basicc11.f6", 0x6000, 0x2000, CRC(80d3cf5d) SHA1(64769b7a8b60ffeefa04e4afbec778069a2840c9))
+ ROM_LOAD("basicc11.f8", 0x8000, 0x2000, CRC(673a4acc) SHA1(082ae803994048e225150f771794ca305f73d731))
+ ROM_LOAD("basicc11.fa", 0xa000, 0x2000, CRC(aac3fc37) SHA1(c9e0529470edf04da093bb8c8ae2536c688c1a74))
+ ROM_LOAD("basicc11.fc", 0xc000, 0x2000, CRC(3062b3fc) SHA1(5134dd64721cbf093d059ee5d3fd09c7f86604c7))
+ ROM_LOAD("pc081682.bin", 0xe000, 0x2000, CRC(5c3f0256) SHA1(b42c78abd0a9c630a2f972ad2bae46d83c3a2a09))
/* IBM 1501981(CGA) and 1501985(MDA) Character rom */
ROM_REGION(0x2000,"gfx1", 0)
@@ -447,7 +434,7 @@ ROM_END
ROM_START( ibm5160 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
+ ROM_REGION16_LE(0x10000,"bios", 0)
// ROM_LOAD("600963.u12", 0xc8000, 0x02000, CRC(f3daf85f) SHA1(3bd29538832d3084cbddeec92593988772755283)) /* Tandon/Western Digital Fixed Disk Adapter 600963-001__TYPE_5.U12.2764.bin */
/* PC/3270 has a 3270 keyboard controller card, plus a rom on that card to tell the pc how to run it.
@@ -476,20 +463,20 @@ ROM_START( ibm5160 )
ROM_DEFAULT_BIOS( "rev4" )
ROM_SYSTEM_BIOS( 0, "rev1", "IBM XT 5160 08/16/82" ) /* ROM at u18 marked as BAD_DUMP for now, as current dump, while likely correct, was regenerated from a number of smaller dumps, and needs a proper redump. */
- ROMX_LOAD("5000027.u19", 0xf0000, 0x8000, CRC(fc982309) SHA1(2aa781a698a21c332398d9bc8503d4f580df0a05), ROM_BIOS(1) )
- ROMX_LOAD("5000026.u18", 0xf8000, 0x8000, BAD_DUMP CRC(3c9b0ac3) SHA1(271c9f4cef5029a1560075550b67c3395db09fef), ROM_BIOS(1) ) /* This is probably a good dump, and works fine, but as it was manually regenerated based on a partial dump, it needs to be reverified. It's a very rare rom revision and may have only appeared on XT prototypes. */
+ ROMX_LOAD("5000027.u19", 0x0000, 0x8000, CRC(fc982309) SHA1(2aa781a698a21c332398d9bc8503d4f580df0a05), ROM_BIOS(1) )
+ ROMX_LOAD("5000026.u18", 0x8000, 0x8000, BAD_DUMP CRC(3c9b0ac3) SHA1(271c9f4cef5029a1560075550b67c3395db09fef), ROM_BIOS(1) ) /* This is probably a good dump, and works fine, but as it was manually regenerated based on a partial dump, it needs to be reverified. It's a very rare rom revision and may have only appeared on XT prototypes. */
ROM_SYSTEM_BIOS( 1, "rev2", "IBM XT 5160 11/08/82" ) /* Same as PC 5155 BIOS and PC/3270 BIOS */
- ROMX_LOAD("5000027.u19", 0xf0000, 0x8000, CRC(fc982309) SHA1(2aa781a698a21c332398d9bc8503d4f580df0a05), ROM_BIOS(2) ) /* silkscreen "MK37050N-4 // 5000027" - FRU: 6359116 - Contents repeat 4 times; Alt Silkscreen (from yesterpc.com): "(M) // 5000027 // (C) 1983 IBM CORP // X E // 8425B NM"*/
- ROMX_LOAD("1501512.u18", 0xf8000, 0x8000, CRC(79522c3d) SHA1(6bac726d8d033491d52507278aa388ec04cf8b7e), ROM_BIOS(2) ) /* silkscreen "MK38036N-25 // 1501512 // ZA // (C)IBM CORP // 1981,1983 // D MALAYSIA // 8438 AP"*/
+ ROMX_LOAD("5000027.u19", 0x0000, 0x8000, CRC(fc982309) SHA1(2aa781a698a21c332398d9bc8503d4f580df0a05), ROM_BIOS(2) ) /* silkscreen "MK37050N-4 // 5000027" - FRU: 6359116 - Contents repeat 4 times; Alt Silkscreen (from yesterpc.com): "(M) // 5000027 // (C) 1983 IBM CORP // X E // 8425B NM"*/
+ ROMX_LOAD("1501512.u18", 0x8000, 0x8000, CRC(79522c3d) SHA1(6bac726d8d033491d52507278aa388ec04cf8b7e), ROM_BIOS(2) ) /* silkscreen "MK38036N-25 // 1501512 // ZA // (C)IBM CORP // 1981,1983 // D MALAYSIA // 8438 AP"*/
ROM_SYSTEM_BIOS( 2, "rev3", "IBM XT 5160 01/10/86" ) /* Has enhanced keyboard support and a 3.5" drive */
- ROMX_LOAD("62x0854.u19", 0xf0000, 0x8000, CRC(b5fb0e83) SHA1(937b43759ffd472da4fb0fe775b3842f5fb4c3b3), ROM_BIOS(3) )
- ROMX_LOAD("62x0851.u18", 0xf8000, 0x8000, CRC(1054f7bd) SHA1(e7d0155813e4c650085144327581f05486ed1484), ROM_BIOS(3) )
+ ROMX_LOAD("62x0854.u19", 0x0000, 0x8000, CRC(b5fb0e83) SHA1(937b43759ffd472da4fb0fe775b3842f5fb4c3b3), ROM_BIOS(3) )
+ ROMX_LOAD("62x0851.u18", 0x8000, 0x8000, CRC(1054f7bd) SHA1(e7d0155813e4c650085144327581f05486ed1484), ROM_BIOS(3) )
ROM_SYSTEM_BIOS( 3, "rev4", "IBM XT 5160 05/09/86" ) /* Minor bugfixes to keyboard code, supposedly */
- ROMX_LOAD("68x4370.u19", 0xf0000, 0x8000, CRC(758ff036) SHA1(045e27a70407d89b7956ecae4d275bd2f6b0f8e2), ROM_BIOS(4))
- ROMX_LOAD("62x0890.u18", 0xf8000, 0x8000, CRC(4f417635) SHA1(daa61762d3afdd7262e34edf1a3d2df9a05bcebb), ROM_BIOS(4))
+ ROMX_LOAD("68x4370.u19", 0x0000, 0x8000, CRC(758ff036) SHA1(045e27a70407d89b7956ecae4d275bd2f6b0f8e2), ROM_BIOS(4))
+ ROMX_LOAD("62x0890.u18", 0x8000, 0x8000, CRC(4f417635) SHA1(daa61762d3afdd7262e34edf1a3d2df9a05bcebb), ROM_BIOS(4))
// ROM_SYSTEM_BIOS( 4, "xtdiag", "IBM XT 5160 w/Supersoft Diagnostics" ) /* ROMs marked as BAD_DUMP for now. We expect the data to be in a different ROM chip layout */
// ROMX_LOAD("basicc11.f6", 0xf6000, 0x2000, BAD_DUMP CRC(80d3cf5d) SHA1(64769b7a8b60ffeefa04e4afbec778069a2840c9), ROM_BIOS(5) )
@@ -570,9 +557,7 @@ ROM_END
***************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
-COMP( 1981, ibm5150, 0, 0, ibm5150, ibm5150, driver_device, 0, "International Business Machines", "IBM PC 5150" , 0)
-COMP( 1982, ibm5155, ibm5150, 0, ibm5150, ibm5150, driver_device, 0, "International Business Machines", "IBM PC 5155" , 0)
-COMP( 1985, ibm5140, ibm5150, 0, ibm5140, ibm5150, driver_device, 0, "International Business Machines", "IBM PC 5140 Convertible" , MACHINE_NOT_WORKING)
-
-// xt class (pc but 8086)
-COMP( 1982, ibm5160, ibm5150, 0, ibm5160, ibm5150, driver_device, 0, "International Business Machines", "IBM XT 5160" , 0)
+COMP( 1981, ibm5150, 0, 0, ibm5150, 0, driver_device, 0, "International Business Machines", "IBM PC 5150" , 0)
+COMP( 1982, ibm5155, ibm5150, 0, ibm5150, 0, driver_device, 0, "International Business Machines", "IBM PC 5155" , 0)
+COMP( 1985, ibm5140, ibm5150, 0, ibm5140, 0, driver_device, 0, "International Business Machines", "IBM PC 5140 Convertible" , MACHINE_NOT_WORKING)
+COMP( 1982, ibm5160, ibm5150, 0, ibm5160, 0, driver_device, 0, "International Business Machines", "IBM XT 5160" , 0)
diff --git a/src/mame/drivers/ibmpcjr.cpp b/src/mame/drivers/ibmpcjr.cpp
index f67bc071494..c06ead888be 100644
--- a/src/mame/drivers/ibmpcjr.cpp
+++ b/src/mame/drivers/ibmpcjr.cpp
@@ -118,7 +118,7 @@ DRIVER_INIT_MEMBER(pcjr_state, pcjr)
m_pc_int_delay_timer = timer_alloc(TIMER_IRQ_DELAY);
m_pcjr_watchdog = timer_alloc(TIMER_WATCHDOG);
m_keyb_signal_timer = timer_alloc(TIMER_KB_SIGNAL);
- membank( "bank10" )->set_base( m_ram->pointer() );
+ m_maincpu->space(AS_PROGRAM).install_ram(0, m_ram->size() - 1, m_ram->pointer());
}
void pcjr_state::machine_reset()
@@ -533,20 +533,16 @@ GFXDECODE_END
static ADDRESS_MAP_START(ibmpcjr_map, AS_PROGRAM, 8, pcjr_state)
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xaffff) AM_RAM
- AM_RANGE(0xb0000, 0xb7fff) AM_NOP
- AM_RANGE(0xb8000, 0xbffff) AM_RAMBANK("bank14")
- AM_RANGE(0xc0000, 0xc7fff) AM_NOP
- AM_RANGE(0xc8000, 0xc9fff) AM_ROM
- AM_RANGE(0xca000, 0xcffff) AM_NOP
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0xb8000, 0xbffff) AM_DEVICE("pcvideo_pcjr:vram", address_map_bank_device, amap8)
AM_RANGE(0xd0000, 0xdffff) AM_DEVREAD("cartslot2", generic_slot_device, read_rom)
AM_RANGE(0xe0000, 0xeffff) AM_DEVREAD("cartslot1", generic_slot_device, read_rom)
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START(ibmpcjr_io, AS_IO, 8, pcjr_state)
+ ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE("pic8259", pic8259_device, read, write)
AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE("pit8253", pit8253_device, read, write)
AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
@@ -561,11 +557,16 @@ static ADDRESS_MAP_START(ibmpcjr_io, AS_IO, 8, pcjr_state)
ADDRESS_MAP_END
static ADDRESS_MAP_START(ibmpcjx_map, AS_PROGRAM, 8, pcjr_state )
+ ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x80000, 0xb7fff) AM_ROM AM_REGION("kanji",0)
- AM_IMPORT_FROM( ibmpcjr_map )
+ AM_RANGE(0x80000, 0x9ffff) AM_RAM AM_SHARE("vram") // TODO: remove this part of vram hack
+ AM_RANGE(0xb8000, 0xbffff) AM_DEVICE("pcvideo_pcjr:vram", address_map_bank_device, amap8)
+ AM_RANGE(0xd0000, 0xdffff) AM_DEVREAD("cartslot1", generic_slot_device, read_rom)
+ AM_RANGE(0xe0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START(ibmpcjx_io, AS_IO, 8, pcjr_state)
+ ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x01ff, 0x01ff) AM_READWRITE(pcjx_port_1ff_r, pcjx_port_1ff_w)
AM_IMPORT_FROM( ibmpcjr_io )
ADDRESS_MAP_END
@@ -650,6 +651,7 @@ static MACHINE_CONFIG_START( ibmpcjr, pcjr_state)
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_EXTRA_OPTIONS("128K, 256K, 512K")
/* Software lists */
MCFG_SOFTWARE_LIST_ADD("cart_list","ibmpcjr_cart")
@@ -673,26 +675,30 @@ static MACHINE_CONFIG_DERIVED( ibmpcjx, ibmpcjr )
MCFG_SLOT_FIXED(true)
MCFG_GFXDECODE_MODIFY("gfxdecode", ibmpcjx)
-MACHINE_CONFIG_END
+ /* internal ram */
+ MCFG_DEVICE_MODIFY(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("512K")
+ MCFG_RAM_EXTRA_OPTIONS("") // only boots with 512k currently
+ MACHINE_CONFIG_END
ROM_START( ibmpcjr )
- ROM_REGION(0x100000,"maincpu", 0)
- ROM_LOAD("bios.rom", 0xf0000, 0x10000,CRC(31e3a7aa) SHA1(1f5f7013f18c08ff50d7942e76c4fbd782412414))
+ ROM_REGION(0x10000,"bios", 0)
+ ROM_LOAD("bios.rom", 0x0000, 0x10000,CRC(31e3a7aa) SHA1(1f5f7013f18c08ff50d7942e76c4fbd782412414))
ROM_REGION(0x08100,"gfx1", 0)
ROM_LOAD("cga.chr", 0x00000, 0x01000, CRC(42009069) SHA1(ed08559ce2d7f97f68b9f540bddad5b6295294dd)) // from an unknown clone cga card
ROM_END
ROM_START( ibmpcjx )
- ROM_REGION(0x100000,"maincpu", ROMREGION_ERASEFF)
+ ROM_REGION(0x20000,"bios", ROMREGION_ERASEFF)
ROM_DEFAULT_BIOS("unk")
ROM_SYSTEM_BIOS( 0, "5601jda", "5601jda" )
- ROMX_LOAD("5601jda.bin", 0xf0000, 0x10000, CRC(b1e12366) SHA1(751feb16b985aa4f1ec1437493ff77e2ebd5e6a6), ROM_BIOS(1))
- ROMX_LOAD("basicjx.rom", 0xe8000, 0x08000, NO_DUMP, ROM_BIOS(1)) // boot fails due of this.
+ ROMX_LOAD("5601jda.bin", 0x10000, 0x10000, CRC(b1e12366) SHA1(751feb16b985aa4f1ec1437493ff77e2ebd5e6a6), ROM_BIOS(1))
+ ROMX_LOAD("basicjx.rom", 0x08000, 0x08000, NO_DUMP, ROM_BIOS(1)) // boot fails due of this.
ROM_SYSTEM_BIOS( 1, "unk", "unk" )
- ROMX_LOAD("ipljx.rom", 0xe0000, 0x20000, CRC(36a7b2de) SHA1(777db50c617725e149bca9b18cf51ce78f6dc548), ROM_BIOS(2))
+ ROMX_LOAD("ipljx.rom", 0x00000, 0x20000, CRC(36a7b2de) SHA1(777db50c617725e149bca9b18cf51ce78f6dc548), ROM_BIOS(2))
ROM_REGION(0x08100,"gfx1", 0) //TODO: needs a different charset
ROM_LOAD("cga.chr", 0x00000, 0x01000, BAD_DUMP CRC(42009069) SHA1(ed08559ce2d7f97f68b9f540bddad5b6295294dd)) // from an unknown clone cga card
diff --git a/src/mame/drivers/ie15.cpp b/src/mame/drivers/ie15.cpp
index 9d2b6b708be..28c0304a1c4 100644
--- a/src/mame/drivers/ie15.cpp
+++ b/src/mame/drivers/ie15.cpp
@@ -615,7 +615,7 @@ static MACHINE_CONFIG_START( ie15, ie15_state )
MCFG_TIMER_START_DELAY(attotime::from_hz(XTAL_30_8MHz/(2*IE15_HORZ_START)))
/* Video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DRIVER(ie15_state, screen_update)
MCFG_SCREEN_RAW_PARAMS(XTAL_30_8MHz/2, IE15_TOTAL_HORZ, IE15_HORZ_START,
IE15_HORZ_START+IE15_DISP_HORZ, IE15_TOTAL_VERT, IE15_VERT_START,
@@ -624,7 +624,7 @@ static MACHINE_CONFIG_START( ie15, ie15_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ie15)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEFAULT_LAYOUT(layout_ie15)
diff --git a/src/mame/drivers/imds2.cpp b/src/mame/drivers/imds2.cpp
index 49667a8ebd6..40dc9bb8818 100644
--- a/src/mame/drivers/imds2.cpp
+++ b/src/mame/drivers/imds2.cpp
@@ -840,7 +840,7 @@ static MACHINE_CONFIG_START(imds2 , imds2_state)
MCFG_SCREEN_UPDATE_DEVICE("ioccrtc" , i8275_device , screen_update)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_GFXDECODE_ADD("gfxdecode" , "palette" , imds2)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("iocbeep" , BEEP , IOC_BEEP_FREQ)
diff --git a/src/mame/drivers/ipds.cpp b/src/mame/drivers/ipds.cpp
index 00df139e72e..7dfb1398b31 100644
--- a/src/mame/drivers/ipds.cpp
+++ b/src/mame/drivers/ipds.cpp
@@ -133,14 +133,14 @@ static MACHINE_CONFIG_START( ipds, ipds_state )
MCFG_CPU_IO_MAP(ipds_io)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275_device, screen_update)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ipds)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD("i8275", I8275, XTAL_19_6608MHz / 4)
MCFG_I8275_CHARACTER_WIDTH(6)
diff --git a/src/mame/drivers/iq151.cpp b/src/mame/drivers/iq151.cpp
index 76986eae7f9..aa305ba859d 100644
--- a/src/mame/drivers/iq151.cpp
+++ b/src/mame/drivers/iq151.cpp
@@ -385,7 +385,7 @@ static MACHINE_CONFIG_START( iq151, iq151_state )
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DRIVER(iq151_state, screen_update)
@@ -393,7 +393,7 @@ static MACHINE_CONFIG_START( iq151, iq151_state )
MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 0, 32*8-1)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/irisha.cpp b/src/mame/drivers/irisha.cpp
index bdb0a39dd36..5361fcb37af 100644
--- a/src/mame/drivers/irisha.cpp
+++ b/src/mame/drivers/irisha.cpp
@@ -400,7 +400,7 @@ static MACHINE_CONFIG_START( irisha, irisha_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", irisha)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/iskr103x.cpp b/src/mame/drivers/iskr103x.cpp
index 945415f676b..75749b27656 100644
--- a/src/mame/drivers/iskr103x.cpp
+++ b/src/mame/drivers/iskr103x.cpp
@@ -16,9 +16,7 @@
#include "emu.h"
-
-#include "includes/genpc.h"
-
+#include "machine/genpc.h"
#include "cpu/i86/i86.h"
#include "cpu/nec/nec.h"
#include "bus/isa/xsu_cards.h"
@@ -41,28 +39,19 @@ public:
static ADDRESS_MAP_START( iskr1031_map, AS_PROGRAM, 16, iskr103x_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x7ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xbffff) AM_NOP
- AM_RANGE(0xc0000, 0xc7fff) AM_ROM
- AM_RANGE(0xc8000, 0xcffff) AM_ROM
- AM_RANGE(0xd0000, 0xeffff) AM_NOP
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START(iskr1031_io, AS_IO, 16, iskr103x_state)
ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE8("mb", ibm5160_mb_device, map, 0xffff)
ADDRESS_MAP_END
-static INPUT_PORTS_START( iskr1030m )
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( iskr1031 )
-INPUT_PORTS_END
-
static DEVICE_INPUT_DEFAULTS_START(iskr1030m)
- DEVICE_INPUT_DEFAULTS("DSW0", 0x31, 0x21)
+ DEVICE_INPUT_DEFAULTS("DSW0", 0x30, 0x20)
+ DEVICE_INPUT_DEFAULTS("DSW0", 0x01, 0x01)
DEVICE_INPUT_DEFAULTS_END
static DEVICE_INPUT_DEFAULTS_START(iskr1031)
@@ -92,48 +81,30 @@ static MACHINE_CONFIG_START( iskr1030m, iskr103x_state )
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_EXTRA_OPTIONS("64K, 128K, 256K, 512K")
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( iskr1031, iskr103x_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", I8086, 4772720)
- MCFG_CPU_PROGRAM_MAP(iskr1031_map)
- MCFG_CPU_IO_MAP(iskr1031_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb)
-
- MCFG_IBM5160_MOTHERBOARD_ADD("mb","maincpu")
+static MACHINE_CONFIG_DERIVED( iskr1031, iskr1030m )
+ MCFG_DEVICE_MODIFY("mb")
MCFG_DEVICE_INPUT_DEFAULTS(iskr1031)
-
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa1", iskr103x_isa8_cards, "cga_iskr1031", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa2", iskr103x_isa8_cards, "fdc_xt", false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa3", iskr103x_isa8_cards, nullptr, false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa4", iskr103x_isa8_cards, nullptr, false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa5", iskr103x_isa8_cards, nullptr, false)
- MCFG_ISA8_SLOT_ADD("mb:isa", "isa6", iskr103x_isa8_cards, nullptr, false)
-
-// MCFG_SOFTWARE_LIST_ADD("flop_list", "iskr1031")
-
- MCFG_PC_KBDC_SLOT_ADD("mb:pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_EC_1841)
-// MCFG_PC_KBDC_SLOT_ADD("mb:pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_ISKR_1030)
-
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_DEVICE_MODIFY("isa1")
+ MCFG_DEVICE_SLOT_INTERFACE(iskr103x_isa8_cards, "cga_iskr1031", false)
MACHINE_CONFIG_END
ROM_START( iskr1030m )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
- ROMX_LOAD( "iskra-1030m_0.rom", 0xfc000, 0x2000, CRC(0d698e19) SHA1(2fe117c9f4f8c4b59085d5a41f919d743c425fdd), ROM_SKIP(1))
- ROMX_LOAD( "iskra-1030m_1.rom", 0xfc001, 0x2000, CRC(fe808337) SHA1(b0b7ebe14324ada8aa9a6926a82b18e80f78a257), ROM_SKIP(1))
+ ROM_REGION16_LE(0x10000,"bios", 0)
+ ROMX_LOAD( "iskra-1030m_0.rom", 0xc000, 0x2000, CRC(0d698e19) SHA1(2fe117c9f4f8c4b59085d5a41f919d743c425fdd), ROM_SKIP(1))
+ ROMX_LOAD( "iskra-1030m_1.rom", 0xc001, 0x2000, CRC(fe808337) SHA1(b0b7ebe14324ada8aa9a6926a82b18e80f78a257), ROM_SKIP(1))
ROM_END
ROM_START( iskr1031 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
+ ROM_REGION16_LE(0x10000,"bios", 0)
ROM_SYSTEM_BIOS(0, "v1", "v1")
- ROMX_LOAD( "150-02.bin", 0xfc000, 0x2000, CRC(e33fb974) SHA1(f5f3ece67c025c0033716ff516e1a34fbeb32749), ROM_SKIP(1) | ROM_BIOS(1))
- ROMX_LOAD( "150-03.bin", 0xfc001, 0x2000, CRC(8c482258) SHA1(90ef48955e0df556dc06a000a797ef42ccf430c5), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "150-02.bin", 0xc000, 0x2000, CRC(e33fb974) SHA1(f5f3ece67c025c0033716ff516e1a34fbeb32749), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "150-03.bin", 0xc001, 0x2000, CRC(8c482258) SHA1(90ef48955e0df556dc06a000a797ef42ccf430c5), ROM_SKIP(1) | ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "v2", "v2")
- ROMX_LOAD( "150-06.bin", 0xfc000, 0x2000, CRC(1adbf969) SHA1(08c0a0fc50a75e6207b1987bae389cca60893eac), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD( "150-07.bin", 0xfc001, 0x2000, CRC(0dc4b65a) SHA1(c96f066251a7343eac8113ea9dcb2cb12d0334d5), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "150-06.bin", 0xc000, 0x2000, CRC(1adbf969) SHA1(08c0a0fc50a75e6207b1987bae389cca60893eac), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "150-07.bin", 0xc001, 0x2000, CRC(0dc4b65a) SHA1(c96f066251a7343eac8113ea9dcb2cb12d0334d5), ROM_SKIP(1) | ROM_BIOS(2))
ROM_END
/***************************************************************************
@@ -143,5 +114,5 @@ ROM_END
***************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
-COMP ( 1989, iskr1030m, ibm5150, 0, iskr1030m, iskr1030m, driver_device, 0, "Schetmash", "Iskra 1030M", MACHINE_NOT_WORKING)
-COMP ( 1989, iskr1031, ibm5150, 0, iskr1031, iskr1031, driver_device, 0, "<unknown>", "Iskra 1031", 0)
+COMP ( 1989, iskr1030m, ibm5150, 0, iskr1030m, 0, driver_device, 0, "Schetmash", "Iskra 1030M", MACHINE_NOT_WORKING)
+COMP ( 1989, iskr1031, ibm5150, 0, iskr1031, 0, driver_device, 0, "<unknown>", "Iskra 1031", 0)
diff --git a/src/mame/drivers/itt3030.cpp b/src/mame/drivers/itt3030.cpp
index 9e2808396ee..1c7ed3aab7b 100644
--- a/src/mame/drivers/itt3030.cpp
+++ b/src/mame/drivers/itt3030.cpp
@@ -787,7 +787,7 @@ static MACHINE_CONFIG_START( itt3030, itt3030_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", itt3030)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* internal ram */
MCFG_RAM_ADD("mainram")
diff --git a/src/mame/drivers/jonos.cpp b/src/mame/drivers/jonos.cpp
index 657d2dca18b..8e9458f6e93 100644
--- a/src/mame/drivers/jonos.cpp
+++ b/src/mame/drivers/jonos.cpp
@@ -133,7 +133,7 @@ static MACHINE_CONFIG_START( jonos, jonos_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", jonos)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
DRIVER_INIT_MEMBER(jonos_state,jonos)
diff --git a/src/mame/drivers/jr100.cpp b/src/mame/drivers/jr100.cpp
index 4cd7cac2c4c..a8934dace89 100644
--- a/src/mame/drivers/jr100.cpp
+++ b/src/mame/drivers/jr100.cpp
@@ -378,7 +378,7 @@ static MACHINE_CONFIG_START( jr100, jr100_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", jr100)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD("via", VIA6522, XTAL_14_31818MHz / 16)
MCFG_VIA6522_READPB_HANDLER(READ8(jr100_state,jr100_via_read_b))
diff --git a/src/mame/drivers/jtc.cpp b/src/mame/drivers/jtc.cpp
index 07114be0ac1..bcfd6864a5b 100644
--- a/src/mame/drivers/jtc.cpp
+++ b/src/mame/drivers/jtc.cpp
@@ -751,7 +751,7 @@ static MACHINE_CONFIG_DERIVED( jtc, basic )
MCFG_SCREEN_VISIBLE_AREA(0, 64-1, 0, 64-1)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
@@ -783,7 +783,7 @@ static MACHINE_CONFIG_DERIVED_CLASS( jtces23, basic, jtces23_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", jtces23)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
diff --git a/src/mame/drivers/jupace.cpp b/src/mame/drivers/jupace.cpp
index 86ba95a41c6..802b0c68530 100644
--- a/src/mame/drivers/jupace.cpp
+++ b/src/mame/drivers/jupace.cpp
@@ -756,7 +756,7 @@ static MACHINE_CONFIG_START( ace, ace_state )
MCFG_TIMER_DRIVER_ADD_SCANLINE("set_irq", ace_state, set_irq, SCREEN_TAG, 31*8, 264)
MCFG_TIMER_DRIVER_ADD_SCANLINE("clear_irq", ace_state, clear_irq, SCREEN_TAG, 32*8, 264)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ace)
diff --git a/src/mame/drivers/jupiter.cpp b/src/mame/drivers/jupiter.cpp
index e7e545ebd74..a9eb865b7d1 100644
--- a/src/mame/drivers/jupiter.cpp
+++ b/src/mame/drivers/jupiter.cpp
@@ -256,7 +256,7 @@ static MACHINE_CONFIG_START( jupiter3, jupiter3_state )
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 320-1)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
// devices
MCFG_DEVICE_ADD(INS1771N1_TAG, FD1771, 1000000)
diff --git a/src/mame/drivers/k8915.cpp b/src/mame/drivers/k8915.cpp
index 568851f15e0..a4d9f0e1dd4 100644
--- a/src/mame/drivers/k8915.cpp
+++ b/src/mame/drivers/k8915.cpp
@@ -156,7 +156,7 @@ static MACHINE_CONFIG_START( k8915, k8915_state )
MCFG_CPU_IO_MAP(k8915_io)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DRIVER(k8915_state, screen_update)
@@ -164,7 +164,7 @@ static MACHINE_CONFIG_START( k8915, k8915_state )
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0)
MCFG_GENERIC_KEYBOARD_CB(WRITE8(k8915_state, kbd_put))
diff --git a/src/mame/drivers/kaypro.cpp b/src/mame/drivers/kaypro.cpp
index 56c99399790..f8d78018e85 100644
--- a/src/mame/drivers/kaypro.cpp
+++ b/src/mame/drivers/kaypro.cpp
@@ -202,7 +202,7 @@ static MACHINE_CONFIG_START( kayproii, kaypro_state )
MCFG_MACHINE_RESET_OVERRIDE(kaypro_state, kaypro )
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(80*7, 24*10)
@@ -212,7 +212,7 @@ static MACHINE_CONFIG_START( kayproii, kaypro_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", kayproii)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/konin.cpp b/src/mame/drivers/konin.cpp
index ac7c8a0d69c..09a732f4269 100644
--- a/src/mame/drivers/konin.cpp
+++ b/src/mame/drivers/konin.cpp
@@ -91,7 +91,7 @@ static MACHINE_CONFIG_START( konin, konin_state )
MCFG_SCREEN_UPDATE_DRIVER(konin_state, screen_update_konin)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/kramermc.cpp b/src/mame/drivers/kramermc.cpp
index db139591a34..b6b43e9f2d3 100644
--- a/src/mame/drivers/kramermc.cpp
+++ b/src/mame/drivers/kramermc.cpp
@@ -128,7 +128,7 @@ static MACHINE_CONFIG_START( kramermc, kramermc_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", kramermc )
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/lg-dvd.cpp b/src/mame/drivers/lg-dvd.cpp
index 0ea3c2ad14a..013d856febb 100644
--- a/src/mame/drivers/lg-dvd.cpp
+++ b/src/mame/drivers/lg-dvd.cpp
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Olivier Galibert
/*
Rather skeleton driver for a LG GP40NW10 usb dvd writer.
diff --git a/src/mame/drivers/lisa.cpp b/src/mame/drivers/lisa.cpp
index e7e06b5cb12..34e9b8bbe1f 100644
--- a/src/mame/drivers/lisa.cpp
+++ b/src/mame/drivers/lisa.cpp
@@ -121,7 +121,7 @@ static MACHINE_CONFIG_START( lisa, lisa_state )
MCFG_SCREEN_UPDATE_DRIVER(lisa_state, screen_update_lisa)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
diff --git a/src/mame/drivers/llc.cpp b/src/mame/drivers/llc.cpp
index 693e21e2478..183496a535c 100644
--- a/src/mame/drivers/llc.cpp
+++ b/src/mame/drivers/llc.cpp
@@ -214,7 +214,7 @@ static MACHINE_CONFIG_START( llc1, llc_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", llc1)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEFAULT_LAYOUT(layout_llc1)
MCFG_DEVICE_ADD("z80pio1", Z80PIO, XTAL_3MHz)
@@ -257,7 +257,7 @@ static MACHINE_CONFIG_START( llc2, llc_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", llc2)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/m20.cpp b/src/mame/drivers/m20.cpp
index 89e792e83ad..f56d4d5004d 100644
--- a/src/mame/drivers/m20.cpp
+++ b/src/mame/drivers/m20.cpp
@@ -792,7 +792,7 @@ static MACHINE_CONFIG_START( m20, m20_state )
MCFG_SCREEN_SIZE(512, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* Devices */
MCFG_FD1797_ADD("fd1797", 1000000)
diff --git a/src/mame/drivers/m24.cpp b/src/mame/drivers/m24.cpp
index a055e1df881..f3fd5372efe 100644
--- a/src/mame/drivers/m24.cpp
+++ b/src/mame/drivers/m24.cpp
@@ -1,15 +1,14 @@
// license:BSD-3-Clause
// copyright-holders:Carl
+
#include "emu.h"
#include "cpu/i86/i86.h"
#include "cpu/tms7000/tms7000.h"
-#include "bus/isa/isa.h"
-#include "bus/isa/isa_cards.h"
#include "machine/m24_kbd.h"
#include "machine/m24_z8000.h"
#include "machine/mm58274c.h"
-#include "includes/genpc.h"
+#include "machine/genpc.h"
#include "formats/pc_dsk.h"
#include "formats/naslite_dsk.h"
#include "formats/m20_dsk.h"
@@ -165,9 +164,7 @@ WRITE_LINE_MEMBER(m24_state::halt_i86_w)
static ADDRESS_MAP_START( m24_map, AS_PROGRAM, 16, m24_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xeffff) AM_NOP
- AM_RANGE(0xf8000, 0xfffff) AM_ROM AM_REGION("maincpu", 0)
+ AM_RANGE(0xf8000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START(m24_io, AS_IO, 16, m24_state )
@@ -175,6 +172,7 @@ static ADDRESS_MAP_START(m24_io, AS_IO, 16, m24_state )
AM_RANGE(0x0060, 0x0065) AM_READWRITE8(keyboard_r, keyboard_w, 0xffff)
AM_RANGE(0x0066, 0x0067) AM_READ_PORT("DSW0")
AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("mm58174an", mm58274c_device, read, write, 0xffff)
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE8("mb", pc_noppi_mb_device, map, 0xffff)
AM_RANGE(0x80c0, 0x80c1) AM_DEVREADWRITE8("z8000_apb", m24_z8000_device, handshake_r, handshake_w, 0xff00)
ADDRESS_MAP_END
@@ -267,6 +265,7 @@ static MACHINE_CONFIG_START( olivetti, m24_state )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_EXTRA_OPTIONS("64K, 128K, 256K, 512K")
MCFG_CPU_ADD("kbc", TMS7000, XTAL_4MHz)
MCFG_CPU_PROGRAM_MAP(kbc_map)
@@ -291,7 +290,7 @@ static MACHINE_CONFIG_START( olivetti, m24_state )
MACHINE_CONFIG_END
ROM_START( m24 )
- ROM_REGION16_LE(0x8000,"maincpu", 0)
+ ROM_REGION16_LE(0x8000,"bios", 0)
ROMX_LOAD("olivetti_m24_version_1.43_high.bin",0x4001, 0x2000, CRC(04e697ba) SHA1(1066dcc849e6289b5ac6372c84a590e456d497a6), ROM_SKIP(1))
ROMX_LOAD("olivetti_m24_version_1.43_low.bin", 0x4000, 0x2000, CRC(ff7e0f10) SHA1(13423011a9bae3f3193e8c199f98a496cab48c0f), ROM_SKIP(1))
@@ -300,7 +299,7 @@ ROM_START( m24 )
ROM_END
ROM_START( m240 )
- ROM_REGION16_LE(0x8000,"maincpu", 0)
+ ROM_REGION16_LE(0x8000,"bios", 0)
ROMX_LOAD("olivetti_m240_pch5_2.04_high.bin", 0x0001, 0x4000, CRC(ceb97b59) SHA1(84fabbeab355e0a4c9445910f2b7d1ec98886642), ROM_SKIP(1))
ROMX_LOAD("olivetti_m240_pch6_2.04_low.bin", 0x0000, 0x4000, CRC(c463aa94) SHA1(a30c763c1ace9f3ff79e7136b252d624108a50ae), ROM_SKIP(1))
diff --git a/src/mame/drivers/m79152pc.cpp b/src/mame/drivers/m79152pc.cpp
index 9cd9cb9acb8..6cc765a5fd0 100644
--- a/src/mame/drivers/m79152pc.cpp
+++ b/src/mame/drivers/m79152pc.cpp
@@ -126,7 +126,7 @@ static MACHINE_CONFIG_START( m79152pc, m79152pc_state )
MCFG_SCREEN_UPDATE_DRIVER(m79152pc_state, screen_update_m79152pc)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", m79152pc)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/macpci.cpp b/src/mame/drivers/macpci.cpp
index 3eea5fd31ad..69b79d6f386 100644
--- a/src/mame/drivers/macpci.cpp
+++ b/src/mame/drivers/macpci.cpp
@@ -101,7 +101,7 @@ static MACHINE_CONFIG_START( pippin, macpci_state )
MCFG_SCREEN_UPDATE_DRIVER(macpci_state, screen_update_pippin)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
diff --git a/src/mame/drivers/marinedt.cpp b/src/mame/drivers/marinedt.cpp
index 0f8e24b6199..73139b4b655 100644
--- a/src/mame/drivers/marinedt.cpp
+++ b/src/mame/drivers/marinedt.cpp
@@ -1,22 +1,9 @@
-// license:???
-// copyright-holders:insideoutboy
-/*
----------------------------
-Marine Date by TAITO (1981)
-MAME driver by insideoutboy
----------------------------
-a static underwater scene with obstacles in it, like seaweed,
-crabs and other stuff. You have a limited number of "strokes"
-per screen as well as a timer to work against. Your goal is
-to *bounce* yourself around the screen using *Strokes* on the
-trackball to try to reach a *female* octopus before you run out
-of strokes or time. You sort of bounce yourself around the screen
-like a billiard ball would bounce, but once in a while bubbles
-and other stuff will come up from underneath you and carry you
-away from where you are trying to get. When you reach your goal
-you get another more difficult screen, etc.
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
--------------------------------------------------------------------------
+// **** SKELETON DRIVER **** original removed due to unresolved licensing.
+
+/*
Marine Date
Taito 1981
@@ -108,657 +95,26 @@ Notes:
Top and Middle PCBs are plugged in with the solder-sides together.
Lower PCB is plugged in with components facing up.
-------------------------------------------------------------------------
-
-todo:
-in cocktail mopde p1 is flipped
-after inking the shark on the far right octi was moved to goal?
-for the colours, goal has to be black otherwise it would register
- as a hit, is goal pen 0 or 6?
-rom writes when finishing a game
- worth looking at before the collision is correct?
-playing dot hit when eaten by a shark?
-dont use any ints, s/b UINT8?
-enemy sprite not disabled at end of game
-tilemap
-palette may only be around 4 colours
- is 14 the palette?
-how do you know if you've got any ink left?
-prom 14 is the top bits? 4 bpp? or so?
-why is level 37 chosen?
-should it be 30fps?
- check other taito games of the time
-look at other taito 1981 games for ideas on the ports
- bking
- jhunt?
-"Marine Deto" or "Marine Date"
- look in the roms for all the text
-simplify gfx decode
-why does the player sprite need 4 colours?
- check if more than 1 are used
-check service test ram wipes for confirmation of ram spots
- anything after trackball test?
-obj1 to obj2 draw order
-2nd trackball
-flip/cocktail issues
-
-done:
-timer?
- you get 200 for each shot, don't think it's actually a timer
-have I been using x/y consistently, i.e. non rotated or rotated origin?
- yes, seems to be best using xy raw (i.e. non-rotated)
-p2 ink doesn't always light up in test mode
- after p1 ink pressed, p2 ink doesn't light up
- this is correct behavior if DSW set as Upright mode
*/
#include "emu.h"
-#include "cpu/z80/z80.h"
class marinedt_state : public driver_device
{
public:
marinedt_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_tx_tileram(*this, "tx_tileram"),
- m_maincpu(*this, "maincpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
-
- /* memory pointers */
- required_shared_ptr<UINT8> m_tx_tileram;
-
- /* video-related */
- std::unique_ptr<bitmap_ind16> m_tile;
- std::unique_ptr<bitmap_ind16> m_obj1;
- std::unique_ptr<bitmap_ind16> m_obj2;
- tilemap_t *m_tx_tilemap;
-
- UINT8 m_obj1_a;
- UINT8 m_obj1_x;
- UINT8 m_obj1_y;
- UINT8 m_obj2_a;
- UINT8 m_obj2_x;
- UINT8 m_obj2_y;
- UINT8 m_pd;
- UINT8 m_pf;
- UINT8 m_music;
- UINT8 m_sound;
- UINT8 m_coll;
- UINT8 m_cx;
- UINT8 m_cyr;
- UINT8 m_cyq;
- UINT8 m_collh;
- UINT8 m_cxh;
- UINT8 m_cyrh;
- UINT8 m_cyqh;
- DECLARE_WRITE8_MEMBER(tx_tileram_w);
- DECLARE_READ8_MEMBER(marinedt_port1_r);
- DECLARE_READ8_MEMBER(marinedt_coll_r);
- DECLARE_READ8_MEMBER(marinedt_obj1_x_r);
- DECLARE_READ8_MEMBER(marinedt_obj1_yr_r);
- DECLARE_READ8_MEMBER(marinedt_obj1_yq_r);
- DECLARE_WRITE8_MEMBER(marinedt_obj1_a_w);
- DECLARE_WRITE8_MEMBER(marinedt_obj1_x_w);
- DECLARE_WRITE8_MEMBER(marinedt_obj1_y_w);
- DECLARE_WRITE8_MEMBER(marinedt_obj2_a_w);
- DECLARE_WRITE8_MEMBER(marinedt_obj2_x_w);
- DECLARE_WRITE8_MEMBER(marinedt_obj2_y_w);
- DECLARE_WRITE8_MEMBER(marinedt_music_w);
- DECLARE_WRITE8_MEMBER(marinedt_sound_w);
- DECLARE_WRITE8_MEMBER(marinedt_pd_w);
- DECLARE_WRITE8_MEMBER(marinedt_pf_w);
- TILE_GET_INFO_MEMBER(get_tile_info);
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void video_start() override;
- DECLARE_PALETTE_INIT(marinedt);
- UINT32 screen_update_marinedt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- required_device<cpu_device> m_maincpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
+ : driver_device(mconfig, type, tag)
+ { }
};
-WRITE8_MEMBER(marinedt_state::tx_tileram_w)
-{
- m_tx_tileram[offset] = data;
- m_tx_tilemap->mark_tile_dirty(offset);
-}
-
-READ8_MEMBER(marinedt_state::marinedt_port1_r)
-{
- //might need to be reversed for cocktail stuff
-
- /* x/y multiplexed */
- return ioport(((m_pf & 0x08) >> 3) ? "TRACKY" : "TRACKX")->read();
-}
-
-READ8_MEMBER(marinedt_state::marinedt_coll_r)
-{
- //76543210
- //x------- obj1 to obj2 collision
- //-xxx---- unused
- //----x--- obj1 to playfield collision
- //-----xxx unused
-
- return m_coll | m_collh;
-}
-
-//are these returning only during a collision?
-//I'd imagine they are returning the pf char where the collision took place?
-//what about where there is lots of collisions?
-//maybe the first on a scanline basis
-READ8_MEMBER(marinedt_state::marinedt_obj1_x_r)
-{
- //76543210
- //xxxx---- unknown
- //----xxxx x pos in tile ram
-
- UINT8 *RAM = memregion("maincpu")->base();
-
- if (RAM[0x430e])
- --m_cx;
- else
- ++m_cx;
-
- //figure out why inc/dec based on 430e?
- return m_cx | (m_cxh << 4);
-}
-
-READ8_MEMBER(marinedt_state::marinedt_obj1_yr_r)
-{
- //76543210
- //xxxx---- unknown
- //----xxxx row in current screen quarter
-
-
- //has to be +1 if cx went over?
- if (m_cx == 0x10)
- m_cyr++;
-
- return m_cyr | (m_cyrh << 4);
-}
-
-READ8_MEMBER(marinedt_state::marinedt_obj1_yq_r)
-{
- //76543210
- //xx------ unknown
- //--xx---- screen quarter when flipped?
- //----xx-- unknown
- //------xx screen quarter
-
- return m_cyq | (m_cyqh << 4);
-}
-
-WRITE8_MEMBER(marinedt_state::marinedt_obj1_a_w){ m_obj1_a = data; }
-WRITE8_MEMBER(marinedt_state::marinedt_obj1_x_w){ m_obj1_x = data; }
-WRITE8_MEMBER(marinedt_state::marinedt_obj1_y_w){ m_obj1_y = data; }
-WRITE8_MEMBER(marinedt_state::marinedt_obj2_a_w){ m_obj2_a = data; }
-WRITE8_MEMBER(marinedt_state::marinedt_obj2_x_w){ m_obj2_x = data; }
-WRITE8_MEMBER(marinedt_state::marinedt_obj2_y_w){ m_obj2_y = data; }
-
-WRITE8_MEMBER(marinedt_state::marinedt_music_w){ m_music = data; }
-
-WRITE8_MEMBER(marinedt_state::marinedt_sound_w)
-{
- //76543210
- //xx------ ??
- //--x----- jet sound
- //---x---- foam
- //----x--- ink
- //-----x-- collision
- //------x- dots hit
- //-------x ??
-
- m_sound = data;
-}
-
-WRITE8_MEMBER(marinedt_state::marinedt_pd_w)
-{
- //76543210
- //xxx----- ?? unused
- //---x---- ?? the rest should be used based on the table
- //----x--- ??
- //-----x-- ??
- //------x- obj2 enable
- //-------x obj1 enable
-
- m_pd = data;
-}
-
-/*
-upright
-marinedt_pf_w: 00 // upright
-marinedt_pf_w: 01 // ??
-
-cocktail
-marinedt_pf_w: 02 // cocktail
-marinedt_pf_w: 03 // ??
-
-marinedt_pf_w: 01 // upright
-marinedt_pf_w: 05 // flip sprite?
-
-marinedt_pf_w: 07 // cocktail
-marinedt_pf_w: 03 // non-flip sprite?
-*/
-WRITE8_MEMBER(marinedt_state::marinedt_pf_w)
-{
- //76543210
- //xxxx---- ?? unused (will need to understand table of written values)
- //----x--- xy trackball select
- //-----x-- ?? flip screen/controls
- //------x- ?? upright/cocktail
- //-------x ?? service mode (coin lockout??)
-
-
- //if ((m_pf & 0x07) != (data & 0x07))
- // osd_printf_debug("marinedt_pf_w: %02x\n", data & 0x07);
-
- if ((m_pf & 0x02) != (data & 0x02))
- {
- if (data & 0x02)
- osd_printf_debug("tile flip\n");
- else
- osd_printf_debug("tile non-flip\n");
-
- if (data & 0x02)
- m_tx_tilemap->set_flip(TILEMAP_FLIPX | TILEMAP_FLIPY);
- else
- m_tx_tilemap->set_flip(0);
- }
-
- m_pf = data;
-
- //if (data & 0xf0)
- // logerror("pf:%02x %d\n", m_pf);
- //logerror("pd:%02x %d\n", m_pd, m_screen->frame_number());
-
-}
-
-static ADDRESS_MAP_START( marinedt_map, AS_PROGRAM, 8, marinedt_state )
- AM_RANGE(0x0000, 0x37ff) AM_ROM
- AM_RANGE(0x4000, 0x43ff) AM_RAM
- AM_RANGE(0x4400, 0x47ff) AM_RAM //unused, vram mirror?
- AM_RANGE(0x4800, 0x4bff) AM_RAM_WRITE(tx_tileram_w) AM_SHARE("tx_tileram")
- AM_RANGE(0x4c00, 0x4c00) AM_WRITENOP //?? maybe off by one error
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( marinedt_io_map, AS_IO, 8, marinedt_state )
- ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READ_PORT("DSW0") //dips coinage
- AM_RANGE(0x01, 0x01) AM_READ(marinedt_port1_r) //trackball xy muxed
- AM_RANGE(0x02, 0x02) AM_READWRITE(marinedt_obj1_x_r, marinedt_obj1_a_w)
- AM_RANGE(0x03, 0x03) AM_READ_PORT("IN0") AM_WRITE(marinedt_obj1_x_w)
- AM_RANGE(0x04, 0x04) AM_READ_PORT("DSW1") AM_WRITE(marinedt_obj1_y_w)
- AM_RANGE(0x05, 0x05) AM_WRITE(marinedt_music_w)
- AM_RANGE(0x06, 0x06) AM_READWRITE(marinedt_obj1_yr_r, marinedt_sound_w)
- AM_RANGE(0x08, 0x08) AM_WRITE(marinedt_obj2_a_w)
- AM_RANGE(0x09, 0x09) AM_WRITE(marinedt_obj2_x_w)
- AM_RANGE(0x0a, 0x0a) AM_READWRITE(marinedt_obj1_yq_r, marinedt_obj2_y_w)
- AM_RANGE(0x0d, 0x0d) AM_WRITE(marinedt_pd_w)
- AM_RANGE(0x0e, 0x0e) AM_READWRITE(marinedt_coll_r, watchdog_reset_w)
- AM_RANGE(0x0f, 0x0f) AM_WRITE(marinedt_pf_w)
-ADDRESS_MAP_END
-
-
static INPUT_PORTS_START( marinedt )
- PORT_START("DSW0")
- PORT_DIPNAME( 0x0f, 0x00, DEF_STR( Coin_A ) )
- PORT_DIPSETTING( 0x0f, DEF_STR( 9C_1C ) )
- PORT_DIPSETTING( 0x0e, DEF_STR( 8C_1C ) )
- PORT_DIPSETTING( 0x0d, DEF_STR( 7C_1C ) )
- PORT_DIPSETTING( 0x0c, DEF_STR( 6C_1C ) )
- PORT_DIPSETTING( 0x0b, DEF_STR( 5C_1C ) )
- PORT_DIPSETTING( 0x0a, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x09, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x05, DEF_STR( 1C_6C ) )
- PORT_DIPSETTING( 0x06, DEF_STR( 1C_7C ) )
- PORT_DIPSETTING( 0x07, DEF_STR( 1C_8C ) )
- PORT_DIPNAME( 0xf0, 0x00, DEF_STR( Coin_B ) )
- PORT_DIPSETTING( 0xf0, DEF_STR( 9C_1C ) )
- PORT_DIPSETTING( 0xe0, DEF_STR( 8C_1C ) )
- PORT_DIPSETTING( 0xd0, DEF_STR( 7C_1C ) )
- PORT_DIPSETTING( 0xc0, DEF_STR( 6C_1C ) )
- PORT_DIPSETTING( 0xb0, DEF_STR( 5C_1C ) )
- PORT_DIPSETTING( 0xa0, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x90, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x20, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x30, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x40, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x50, DEF_STR( 1C_6C ) )
- PORT_DIPSETTING( 0x60, DEF_STR( 1C_7C ) )
- PORT_DIPSETTING( 0x70, DEF_STR( 1C_8C ) )
-
- PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_TILT )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
-
- PORT_START("DSW1")
- PORT_DIPNAME( 0x01, 0x00, DEF_STR( Bonus_Life ) )
- PORT_DIPSETTING( 0x01, "5000" )
- PORT_DIPSETTING( 0x00, "10000" )
-//cheat?
- PORT_DIPNAME( 0x02, 0x00, "ignore internal bounce?" ) //maybe die / bounce off rocks & coral?
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x02, DEF_STR( On ) )
-//freezes the game before the reset
-//doesn't seem to be done as a dip, but what about mixing with dips like this?
- PORT_SERVICE( 0x04, IP_ACTIVE_HIGH )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Cabinet ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x10, 0x00, "Coin Chutes" )
- PORT_DIPSETTING( 0x00, "Common" )
- PORT_DIPSETTING( 0x10, "Individual" )
- PORT_DIPNAME( 0x20, 0x00, "Year Display" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Lives ) )
- PORT_DIPSETTING( 0x00, "3" )
- PORT_DIPSETTING( 0x40, "4" )
- PORT_DIPSETTING( 0x80, "5" )
- PORT_DIPSETTING( 0xc0, "6" )
-
- PORT_START("TRACKX") /* FAKE MUXED */
-//check all bits are used
- PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_REVERSE
-
- PORT_START("TRACKY") /* FAKE MUXED */
- PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10)
INPUT_PORTS_END
-static const gfx_layout marinedt_charlayout =
-{
- 8,8,
- RGN_FRAC(1,3),
- 3,
- { RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) }, //maybe 120
- { STEP8(0,1) },
- { STEP8(0,8) },
- 8*8
-};
-
-static const gfx_layout marinedt_objlayout =
-{
- 32,32,
- RGN_FRAC(1,1),
- 2,
- { 0, 4 },
- { STEP4(32*8*7,1), STEP4(32*8*6,1), STEP4(32*8*5,1), STEP4(32*8*4,1), STEP4(32*8*3,1), STEP4(32*8*2,1), STEP4(32*8*1,1), STEP4(32*8*0,1) },
- { STEP16(0,8), STEP16(16*8,8) },
- 32*32*2
-};
-
-static GFXDECODE_START( marinedt )
- GFXDECODE_ENTRY( "gfx1", 0, marinedt_charlayout, 0, 4 ) //really only 1 colour set?
- GFXDECODE_ENTRY( "gfx2", 0, marinedt_objlayout, 48, 4 )
- GFXDECODE_ENTRY( "gfx3", 0, marinedt_objlayout, 32, 4 )
-GFXDECODE_END
-
-PALETTE_INIT_MEMBER(marinedt_state, marinedt)
-{
- const UINT8 *color_prom = memregion("proms")->base();
- int i,r,b,g;
-
- for (i = 0; i < palette.entries(); i++)
- {
- int bit0, bit1, bit2;
-
- /* red component */
- bit0 = (~color_prom[i] >> 0) & 0x01;
- bit1 = (~color_prom[i] >> 1) & 0x01;
- bit2 = (~color_prom[i] >> 2) & 0x01;
-// *(palette++) = 0x92 * bit0 + 0x46 * bit1 + 0x27 * bit2;
- r = 0x27 * bit0 + 0x46 * bit1 + 0x92 * bit2;
- /* green component */
- bit0 = (~color_prom[i] >> 3) & 0x01;
- bit1 = (~color_prom[i] >> 4) & 0x01;
- bit2 = (~color_prom[i] >> 5) & 0x01;
-// *(palette++) = 0x92 * bit0 + 0x46 * bit1 + 0x27 * bit2;
- g = 0x27 * bit0 + 0x46 * bit1 + 0x92 * bit2;
- /* blue component */
- bit0 = (~color_prom[i] >> 5) & 0x01;
- bit1 = (~color_prom[i] >> 6) & 0x01;
- bit2 = (~color_prom[i] >> 7) & 0x01;
-bit0 = 0;
-// *(palette++) = 0x92 * bit0 + 0x46 * bit1 + 0x27 * bit2;
- b = 0x27 * bit0 + 0x46 * bit1 + 0x92 * bit2;
-
- palette.set_pen_color(i, rgb_t(r, g, b));
- }
-}
-
-
-TILE_GET_INFO_MEMBER(marinedt_state::get_tile_info)
-{
- int code = m_tx_tileram[tile_index];
- int color = 0;
- int flags = TILE_FLIPX;
-
- SET_TILE_INFO_MEMBER(0, code, color, flags);
-}
-
-void marinedt_state::video_start()
-{
- m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(marinedt_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
-
- m_tx_tilemap->set_transparent_pen(0);
- m_tx_tilemap->set_scrolldx(0, 4*8);
- m_tx_tilemap->set_scrolldy(0, -4*8);
-
- m_tile = std::make_unique<bitmap_ind16>(32 * 8, 32 * 8);
- m_obj1 = std::make_unique<bitmap_ind16>(32, 32);
- m_obj2 = std::make_unique<bitmap_ind16>(32, 32);
-}
-
-
-// x------- flipy
-// -x------ unused ??
-// --xxx--- sprite code
-// -----x-- bank
-// ------xx colour
-
-#define OBJ_CODE(a) ((((a) & 0x04) << 1) + (((a) & 0x38) >> 3))
-#define OBJ_COLOR(a) ((a) & 0x03)
-#define OBJ_X(x) (256 - 32 - (x))
-#define OBJ_Y(y) (256 - 1 - (y))
-#define OBJ_FLIPX(a) ((m_pf & 0x02) == 0)
-#define OBJ_FLIPY(a) ((a) & 0x80)
-
-UINT32 marinedt_state::screen_update_marinedt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- int sx, sy;
-
- m_tile->fill(0);
- m_tx_tilemap->draw(screen, *m_tile, cliprect, 0, 0);
-
- m_obj1->fill(0);
- m_gfxdecode->gfx(1)->transpen(*m_obj1,m_obj1->cliprect(),
- OBJ_CODE(m_obj1_a),
- OBJ_COLOR(m_obj1_a),
- OBJ_FLIPX(m_obj1_a), OBJ_FLIPY(m_obj1_a),
- 0, 0, 0);
-
- m_obj2->fill(0);
- m_gfxdecode->gfx(2)->transpen(*m_obj2,m_obj2->cliprect(),
- OBJ_CODE(m_obj2_a),
- OBJ_COLOR(m_obj2_a),
- OBJ_FLIPX(m_obj2_a), OBJ_FLIPY(m_obj2_a),
- 0, 0, 0);
-
- bitmap.fill(0);
-
- if (m_pd & 0x02)
- copybitmap_trans(bitmap, *m_obj2, 0, 0, OBJ_X(m_obj2_x), OBJ_Y(m_obj2_y), cliprect, 0);
-
- if (m_pd & 0x01)
- copybitmap_trans(bitmap, *m_obj1, 0, 0, OBJ_X(m_obj1_x), OBJ_Y(m_obj1_y), cliprect, 0);
-
- copybitmap_trans(bitmap, *m_tile, 0, 0, 0, 0, cliprect, 0);
-
- m_coll = m_cx = m_cyr = m_cyq = 0;
- if (m_pd & 0x01)
- {
- for (sx = 0; sx < 32; sx++)
- for (sy = 0; sy < 32; sy++)
- {
- int x = OBJ_X(m_obj1_x) + sx;
- int y = OBJ_Y(m_obj1_y) + sy;
-
- if (!cliprect.contains(x, y))
- continue;
-
- if (m_obj1->pix16(sy, sx) == 0)
- continue;
-
- if (m_tile->pix16(y, x) != 0)
- {
- m_coll = 0x08;
-
- m_cx = (x % 128) / 8;
- m_cx &= 0x0f;
-
- m_cyr = ((y % 64) / 8) * 2 + (x > 127 ? 1 : 0);
- m_cyr &= 0x0f;
-
- m_cyq = y / 64;
- m_cyq &= 0x0f;
-
- break;
- }
- }
- }
-
- m_collh = m_cxh = m_cyrh = m_cyqh = 0;
- if ((m_pd & 0x03) == 0x03)
- {
- for (sx = 0; sx < 32; sx++)
- for (sy = 0; sy < 32; sy++)
- {
- int x = OBJ_X(m_obj1_x + sx);
- int y = OBJ_Y(m_obj1_y + sy);
-
- int xx = OBJ_X(m_obj2_x) - x;
- int yy = OBJ_Y(m_obj2_y) - y;
-
- if (xx < 0 || xx >= 32 || yy < 0 || yy >= 32)
- continue;
-
- if (m_obj1->pix16(sy, sx) == 0)
- continue;
-
- if (m_obj2->pix16(yy, xx) != 0)
- {
- m_collh = 0x80;
-
- m_cxh = (x % 128) / 8;
- m_cxh &= 0x0f;
-
- m_cyrh = ((y % 64) / 8) * 2 + (x > 127 ? 1 : 0);
- m_cyrh &= 0x0f;
-
- m_cyqh= y / 64;
- m_cyqh &= 0x0f;
-
- break;
- }
- }
- }
- return 0;
-}
-
-void marinedt_state::machine_start()
-{
- save_item(NAME(m_obj1_a));
- save_item(NAME(m_obj1_x));
- save_item(NAME(m_obj1_y));
- save_item(NAME(m_obj2_a));
- save_item(NAME(m_obj2_x));
- save_item(NAME(m_obj2_y));
- save_item(NAME(m_pd));
- save_item(NAME(m_pf));
- save_item(NAME(m_music));
- save_item(NAME(m_sound));
- save_item(NAME(m_coll));
- save_item(NAME(m_cx));
- save_item(NAME(m_cyr));
- save_item(NAME(m_cyq));
- save_item(NAME(m_collh));
- save_item(NAME(m_cxh));
- save_item(NAME(m_cyrh));
- save_item(NAME(m_cyqh));
-}
-
-void marinedt_state::machine_reset()
-{
- m_obj1_a = 0;
- m_obj1_x = 0;
- m_obj1_y = 0;
- m_obj2_a = 0;
- m_obj2_x = 0;
- m_obj2_y = 0;
- m_pd = 0;
- m_pf = 0;
- m_music = 0;
- m_sound = 0;
- m_coll = 0;
- m_cx = 0;
- m_cyr = 0;
- m_cyq = 0;
- m_collh = 0;
- m_cxh = 0;
- m_cyrh = 0;
- m_cyqh = 0;
-}
static MACHINE_CONFIG_START( marinedt, marinedt_state )
-
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", Z80,10000000/4)
- MCFG_CPU_PROGRAM_MAP(marinedt_map)
- MCFG_CPU_IO_MAP(marinedt_io_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", marinedt_state, irq0_line_hold)
-
-
- /* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(4*8+32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 4*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(marinedt_state, screen_update_marinedt)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", marinedt)
- MCFG_PALETTE_ADD("palette", 64)
- MCFG_PALETTE_INIT_OWNER(marinedt_state, marinedt)
-
- /* sound hardware */
- //discrete sound
MACHINE_CONFIG_END
-
-/***************************************************************************
-
- Game driver(s)
-
-***************************************************************************/
-
ROM_START( marinedt )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "mg01.3d", 0x0000, 0x0800, CRC(ad09f04d) SHA1(932fc973b4a2fbbebd7e6437ed30c8444e3d4afb))
@@ -781,10 +137,10 @@ ROM_START( marinedt )
ROM_LOAD( "mg13.6h", 0x0000, 0x1000, CRC(17817044) SHA1(8c9b96620e3c414952e6d85c6e81b0df85c88e7a) )
ROM_REGION( 0x0080, "proms", 0 )
- ROM_LOAD( "mg14.2a", 0x0000, 0x0020, CRC(f75f4e3a) SHA1(36e665987f475c57435fa8c224a2a3ce0c5e672b) ) //char clr
- ROM_LOAD( "mg15.1a", 0x0020, 0x0020, CRC(cd3ab489) SHA1(a77478fb94d0cf8f4317f89cc9579def7c294b4f) ) //obj clr
- ROM_LOAD( "mg16.4e", 0x0040, 0x0020, CRC(92c868bc) SHA1(483ae6f47845ddacb701528e82bd388d7d66a0fb) ) //?? collisions
- ROM_LOAD( "mg17.bpr", 0x0060, 0x0020, CRC(13261a02) SHA1(050edd18e4f79d19d5206f55f329340432fd4099) ) //?? table of increasing values
+ ROM_LOAD( "mg14.2a", 0x0000, 0x0020, CRC(f75f4e3a) SHA1(36e665987f475c57435fa8c224a2a3ce0c5e672b) )
+ ROM_LOAD( "mg15.1a", 0x0020, 0x0020, CRC(cd3ab489) SHA1(a77478fb94d0cf8f4317f89cc9579def7c294b4f) )
+ ROM_LOAD( "mg16.4e", 0x0040, 0x0020, CRC(92c868bc) SHA1(483ae6f47845ddacb701528e82bd388d7d66a0fb) )
+ ROM_LOAD( "mg17.bpr", 0x0060, 0x0020, CRC(13261a02) SHA1(050edd18e4f79d19d5206f55f329340432fd4099) )
ROM_END
-GAME( 1981, marinedt, 0, marinedt, marinedt, driver_device, 0, ROT270, "Taito", "Marine Date", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1981, marinedt, 0, marinedt, marinedt, driver_device, 0, ROT270, "Taito", "Marine Date", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/marywu.cpp b/src/mame/drivers/marywu.cpp
index ce48608de52..288b244e670 100644
--- a/src/mame/drivers/marywu.cpp
+++ b/src/mame/drivers/marywu.cpp
@@ -1,4 +1,4 @@
-// license:GPL2+
+// license:GPL-2.0+
// copyright-holders:Felipe Sanches
/*************************************************************************
diff --git a/src/mame/drivers/mbc200.cpp b/src/mame/drivers/mbc200.cpp
index edd010e9a07..203646963cb 100644
--- a/src/mame/drivers/mbc200.cpp
+++ b/src/mame/drivers/mbc200.cpp
@@ -225,7 +225,7 @@ static MACHINE_CONFIG_START( mbc200, mbc200_state )
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1)
MCFG_SCREEN_UPDATE_DEVICE("crtc", h46505_device, screen_update)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mbc200)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_8MHz / 4) // HD46505SP
MCFG_MC6845_SHOW_BORDER_AREA(false)
diff --git a/src/mame/drivers/mbdtower.cpp b/src/mame/drivers/mbdtower.cpp
index bd2144742d0..7a1b5ec3dee 100644
--- a/src/mame/drivers/mbdtower.cpp
+++ b/src/mame/drivers/mbdtower.cpp
@@ -5,7 +5,7 @@
** subclass of hh_tms1k_state (includes/hh_tms1k.h, drivers/hh_tms1k.cpp) **
Milton Bradley Dark Tower
- * TMS1400NLL MP7332-N1.U1(Rev. B) or MP7332-N2LL(Rev. C), die labeled MP7332
+ * TMS1400NLL MP7332-N1.U1(Rev. B) or MP7332-N2LL(Rev. C), die label MP7332
(assume same ROM contents between revisions)
* SN75494N MOS-to-LED digit driver
* motorized rotating reel + lightsensor, 1bit-sound
diff --git a/src/mame/drivers/mc1502.cpp b/src/mame/drivers/mc1502.cpp
index ade7c5accfc..9e014ebcf04 100644
--- a/src/mame/drivers/mc1502.cpp
+++ b/src/mame/drivers/mc1502.cpp
@@ -182,7 +182,6 @@ DRIVER_INIT_MEMBER( mc1502_state, mc1502 )
DBG_LOG(0,"init",("driver_init()\n"));
- program.unmap_readwrite(0, 0x7ffff);
program.install_readwrite_bank(0, m_ram->size()-1, "bank10");
membank( "bank10" )->set_base( m_ram->pointer() );
}
@@ -220,16 +219,7 @@ MACHINE_RESET_MEMBER( mc1502_state, mc1502 )
static ADDRESS_MAP_START( mc1502_map, AS_PROGRAM, 8, mc1502_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x97fff) AM_RAM /* 96K on mainboard + 512K on extension card */
- AM_RANGE(0xc0000, 0xfbfff) AM_NOP
- AM_RANGE(0xfc000, 0xfffff) AM_ROM
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( pk88_map, AS_PROGRAM, 8, mc1502_state )
- ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x1ffff) AM_RAMBANK("bank10") /* 96K on mainboard */
- AM_RANGE(0xf0000, 0xf7fff) AM_ROM /* BASIC */
- AM_RANGE(0xfc000, 0xfffff) AM_ROM
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START(mc1502_io, AS_IO, 8, mc1502_state )
@@ -328,11 +318,6 @@ static MACHINE_CONFIG_START( mc1502, mc1502_state )
MCFG_RAM_EXTRA_OPTIONS("96K")
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( pk88, mc1502 )
- MCFG_CPU_MODIFY("maincpu")
- MCFG_CPU_PROGRAM_MAP(pk88_map)
-MACHINE_CONFIG_END
-
/*
Apparently there was a hardware revision with built-in floppy
@@ -344,42 +329,42 @@ MACHINE_CONFIG_END
QWERTY).
*/
ROM_START( mc1502 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
+ ROM_REGION16_LE(0x10000,"bios", 0)
ROM_DEFAULT_BIOS("v52")
ROM_SYSTEM_BIOS(0, "v50", "v5.0 10/05/89")
- ROMX_LOAD( "monitor_5_0.rom", 0xfc000, 0x4000, CRC(9e97c6a0) SHA1(16a304e8de69ec4d8b92acda6bf28454c361a24f),ROM_BIOS(1))
+ ROMX_LOAD( "monitor_5_0.rom", 0xc000, 0x4000, CRC(9e97c6a0) SHA1(16a304e8de69ec4d8b92acda6bf28454c361a24f),ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "v52", "v5.2 22/03/91")
- ROMX_LOAD( "monitor_5_2.rom", 0xfc000, 0x4000, CRC(0e65491e) SHA1(8a4d556473b5e0e59b05fab77c79c29f4d562412),ROM_BIOS(2))
+ ROMX_LOAD( "monitor_5_2.rom", 0xc000, 0x4000, CRC(0e65491e) SHA1(8a4d556473b5e0e59b05fab77c79c29f4d562412),ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "v521", "v5.21 12/10/92")
- ROMX_LOAD( "monitor_5_21.rom", 0xfc000, 0x4000, CRC(28c8f653) SHA1(04b0b09e0b86d9648a83352cc1590eb8963833e0),ROM_BIOS(3))
+ ROMX_LOAD( "monitor_5_21.rom", 0xc000, 0x4000, CRC(28c8f653) SHA1(04b0b09e0b86d9648a83352cc1590eb8963833e0),ROM_BIOS(3))
ROM_SYSTEM_BIOS(3, "v531", "v5.31 12/10/92")
- ROMX_LOAD( "monitor_5_31.rom", 0xfc000, 0x4000, CRC(a48295d5) SHA1(6f38977c22f9cc6c2bc6f6e53edc4048ca6b6721),ROM_BIOS(4))
+ ROMX_LOAD( "monitor_5_31.rom", 0xc000, 0x4000, CRC(a48295d5) SHA1(6f38977c22f9cc6c2bc6f6e53edc4048ca6b6721),ROM_BIOS(4))
ROM_SYSTEM_BIOS(4, "v533", "v5.33 01/08/93")
- ROMX_LOAD( "0_(cbc0).bin", 0xfc000, 0x2000, CRC(9a55bc4f) SHA1(81da44eec2e52cf04b1fc7053502270f51270590),ROM_BIOS(5))
- ROMX_LOAD( "1_(dfe2).bin", 0xfe000, 0x2000, CRC(8dec077a) SHA1(d6f6d7cc2183abc77fbd9cd59132de5766f7c458),ROM_BIOS(5))
+ ROMX_LOAD( "0_(cbc0).bin", 0xc000, 0x2000, CRC(9a55bc4f) SHA1(81da44eec2e52cf04b1fc7053502270f51270590),ROM_BIOS(5))
+ ROMX_LOAD( "1_(dfe2).bin", 0xe000, 0x2000, CRC(8dec077a) SHA1(d6f6d7cc2183abc77fbd9cd59132de5766f7c458),ROM_BIOS(5))
// 5.21 + 3rd party HDC support. fails checksum test so marked BAD_DUMP.
ROM_SYSTEM_BIOS(5, "v521h", "v5.21h 22/09/93")
- ROMX_LOAD( "mshbios0.pgm", 0xfc000, 0x2000, BAD_DUMP CRC(be447261) SHA1(b93c597c17dfa4b678f72c20a3f7119b73e6ba1c),ROM_BIOS(6))
- ROMX_LOAD( "mshbios1.pgm", 0xfe000, 0x2000, BAD_DUMP CRC(89e2eaf2) SHA1(37d6b225b5e35574fdac81219589407d925225be),ROM_BIOS(6))
+ ROMX_LOAD( "mshbios0.pgm", 0xc000, 0x2000, BAD_DUMP CRC(be447261) SHA1(b93c597c17dfa4b678f72c20a3f7119b73e6ba1c),ROM_BIOS(6))
+ ROMX_LOAD( "mshbios1.pgm", 0xe000, 0x2000, BAD_DUMP CRC(89e2eaf2) SHA1(37d6b225b5e35574fdac81219589407d925225be),ROM_BIOS(6))
// 5.3
ROM_SYSTEM_BIOS(6, "v53", "v5.3 10/11/91")
- ROMX_LOAD( "1502~3b0.pgm", 0xfc000, 0x2000, CRC(dc148763) SHA1(7a5e66438007b2de328ac680614f9c4ff60f6a75),ROM_BIOS(7))
- ROMX_LOAD( "1502~3b1.pgm", 0xfe000, 0x2000, CRC(17fc2af2) SHA1(a060d7b7302dfa639025f025106b50412cf26953),ROM_BIOS(7))
+ ROMX_LOAD( "1502~3b0.pgm", 0xc000, 0x2000, CRC(dc148763) SHA1(7a5e66438007b2de328ac680614f9c4ff60f6a75),ROM_BIOS(7))
+ ROMX_LOAD( "1502~3b1.pgm", 0xe000, 0x2000, CRC(17fc2af2) SHA1(a060d7b7302dfa639025f025106b50412cf26953),ROM_BIOS(7))
// 5.1 -- JCUKEN keyboard
ROM_SYSTEM_BIOS(7, "v51", "v5.1 10/12/90")
- ROMX_LOAD( "ms1502b0.pgm", 0xfc000, 0x2000, CRC(92fcc29a) SHA1(930a4cffcd6ec6110dd9a18bd389b78f0ccb110a),ROM_BIOS(8))
- ROMX_LOAD( "ms1502b1.pgm", 0xfe000, 0x2000, CRC(fe355a58) SHA1(b4ef7775045c6f2095e2b487fe19824986a4892c),ROM_BIOS(8))
+ ROMX_LOAD( "ms1502b0.pgm", 0xc000, 0x2000, CRC(92fcc29a) SHA1(930a4cffcd6ec6110dd9a18bd389b78f0ccb110a),ROM_BIOS(8))
+ ROMX_LOAD( "ms1502b1.pgm", 0xe000, 0x2000, CRC(fe355a58) SHA1(b4ef7775045c6f2095e2b487fe19824986a4892c),ROM_BIOS(8))
// 5.31
ROM_SYSTEM_BIOS(8, "v531_92", "v5.31 12/10/92")
- ROMX_LOAD( "ms531b0.pgm", 0xfc000, 0x2000, CRC(d97157d1) SHA1(cb1a1e0e2d9a0fcc78f9b09bfb4814d408ee4fae),ROM_BIOS(9))
- ROMX_LOAD( "ms531b1.pgm", 0xfe000, 0x2000, CRC(b1368e1a) SHA1(286496d25dc0ac2d8fe1802caffc6c37b236d105),ROM_BIOS(9))
+ ROMX_LOAD( "ms531b0.pgm", 0xc000, 0x2000, CRC(d97157d1) SHA1(cb1a1e0e2d9a0fcc78f9b09bfb4814d408ee4fae),ROM_BIOS(9))
+ ROMX_LOAD( "ms531b1.pgm", 0xe000, 0x2000, CRC(b1368e1a) SHA1(286496d25dc0ac2d8fe1802caffc6c37b236d105),ROM_BIOS(9))
// 5.2
ROM_SYSTEM_BIOS(9, "v52_91", "v5.2 10/11/91")
- ROMX_LOAD( "msv5~2b0.pgm", 0xfc000, 0x2000, CRC(f7f370e9) SHA1(e069a35005581a02856853b57dd511ab8e10054b),ROM_BIOS(10))
- ROMX_LOAD( "msv5~2b1.pgm", 0xfe000, 0x2000, CRC(d50e1c43) SHA1(22724dec0052ee9e52f44f5914f2f5f3fae14612),ROM_BIOS(10))
+ ROMX_LOAD( "msv5~2b0.pgm", 0xc000, 0x2000, CRC(f7f370e9) SHA1(e069a35005581a02856853b57dd511ab8e10054b),ROM_BIOS(10))
+ ROMX_LOAD( "msv5~2b1.pgm", 0xe000, 0x2000, CRC(d50e1c43) SHA1(22724dec0052ee9e52f44f5914f2f5f3fae14612),ROM_BIOS(10))
ROM_REGION(0x2000,"gfx1", ROMREGION_ERASE00)
ROM_LOAD( "symgen.rom", 0x0000, 0x2000, CRC(b2747a52) SHA1(6766d275467672436e91ac2997ac6b77700eba1e))
@@ -390,14 +375,14 @@ ROM_END
different video subsystem (not emulated).
*/
ROM_START( pk88 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
-
- ROM_LOAD( "b0.064", 0xf0000, 0x2000, CRC(80d3cf5d) SHA1(64769b7a8b60ffeefa04e4afbec778069a2840c9))
- ROM_LOAD( "b1.064", 0xf2000, 0x2000, CRC(673a4acc) SHA1(082ae803994048e225150f771794ca305f73d731))
- ROM_LOAD( "b2.064", 0xf4000, 0x2000, CRC(1ee66152) SHA1(7ed8c4c6c582487e802beabeca5b86702e5083e8))
- ROM_LOAD( "b3.064", 0xf6000, 0x2000, CRC(3062b3fc) SHA1(5134dd64721cbf093d059ee5d3fd09c7f86604c7))
- ROM_LOAD( "pk88-0.064", 0xfc000, 0x2000, CRC(1e4666cf) SHA1(6364c5241f2792909ff318194161eb2c29737546))
- ROM_LOAD( "pk88-1.064", 0xfe000, 0x2000, CRC(6fa7e7ef) SHA1(d68bc273baa46ba733ac6ad4df7569dd70cf60dd))
+ ROM_REGION16_LE(0x10000,"bios", 0)
+
+ ROM_LOAD( "b0.064", 0x0000, 0x2000, CRC(80d3cf5d) SHA1(64769b7a8b60ffeefa04e4afbec778069a2840c9))
+ ROM_LOAD( "b1.064", 0x2000, 0x2000, CRC(673a4acc) SHA1(082ae803994048e225150f771794ca305f73d731))
+ ROM_LOAD( "b2.064", 0x4000, 0x2000, CRC(1ee66152) SHA1(7ed8c4c6c582487e802beabeca5b86702e5083e8))
+ ROM_LOAD( "b3.064", 0x6000, 0x2000, CRC(3062b3fc) SHA1(5134dd64721cbf093d059ee5d3fd09c7f86604c7))
+ ROM_LOAD( "pk88-0.064", 0xc000, 0x2000, CRC(1e4666cf) SHA1(6364c5241f2792909ff318194161eb2c29737546))
+ ROM_LOAD( "pk88-1.064", 0xe000, 0x2000, CRC(6fa7e7ef) SHA1(d68bc273baa46ba733ac6ad4df7569dd70cf60dd))
ROM_END
/***************************************************************************
@@ -408,4 +393,4 @@ ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
COMP ( 1989, mc1502, ibm5150, 0, mc1502, mc1502, mc1502_state, mc1502, "NPO Microprocessor", "Elektronika MC-1502", 0)
-COMP ( 1988, pk88, ibm5150, 0, pk88, mc1502, mc1502_state, mc1502, "NPO Microprocessor", "Elektronika PK-88", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
+COMP ( 1988, pk88, ibm5150, 0, mc1502, mc1502, mc1502_state, mc1502, "NPO Microprocessor", "Elektronika PK-88", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
diff --git a/src/mame/drivers/mc80.cpp b/src/mame/drivers/mc80.cpp
index 5518a87408a..48a237a56b3 100644
--- a/src/mame/drivers/mc80.cpp
+++ b/src/mame/drivers/mc80.cpp
@@ -178,7 +178,7 @@ static MACHINE_CONFIG_START( mc8020, mc80_state )
MCFG_SCREEN_UPDATE_DRIVER(mc80_state, screen_update_mc8020)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* devices */
MCFG_DEVICE_ADD("z80pio", Z80PIO, XTAL_2_4576MHz)
@@ -216,7 +216,7 @@ static MACHINE_CONFIG_START( mc8030, mc80_state )
MCFG_SCREEN_UPDATE_DRIVER(mc80_state, screen_update_mc8030)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* Devices */
MCFG_DEVICE_ADD("zve_pio", Z80PIO, XTAL_2_4576MHz)
diff --git a/src/mame/drivers/meadows.cpp b/src/mame/drivers/meadows.cpp
index 801f779049a..cc808e5324f 100644
--- a/src/mame/drivers/meadows.cpp
+++ b/src/mame/drivers/meadows.cpp
@@ -628,7 +628,7 @@ static MACHINE_CONFIG_START( meadows, meadows_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", meadows)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* audio hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -660,7 +660,7 @@ static MACHINE_CONFIG_START( minferno, meadows_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", minferno)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* audio hardware */
// TODO
@@ -689,7 +689,7 @@ static MACHINE_CONFIG_START( bowl3d, meadows_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", meadows)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* audio hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/mephisto.cpp b/src/mame/drivers/mephisto.cpp
index 822cbc584a3..987e8442a92 100644
--- a/src/mame/drivers/mephisto.cpp
+++ b/src/mame/drivers/mephisto.cpp
@@ -67,14 +67,11 @@ Mephisto 4 Turbo Kit 18mhz - (mm4tk)
#include "sound/beep.h"
//#include "mephisto.lh"
-#include "includes/mboard.h"
-
-
-class mephisto_state : public mboard_state
+class mephisto_state : public driver_device
{
public:
mephisto_state(const machine_config &mconfig, device_type type, const char *tag)
- : mboard_state(mconfig, type, tag)
+ : driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_beep(*this, "beeper")
, m_key1_0(*this, "KEY1_0")
@@ -218,10 +215,10 @@ static ADDRESS_MAP_START( rebel5_mem, AS_PROGRAM, 8, mephisto_state )
AM_RANGE( 0x0000, 0x1fff) AM_RAM // AM_BASE(m_p_ram)
AM_RANGE( 0x2000, 0x2007) AM_WRITE(write_led) // Status LEDs+ buzzer
AM_RANGE( 0x3000, 0x3007) AM_READ(read_keys) // Rebel 5.0
- AM_RANGE( 0x3000, 0x4000) AM_READ(mboard_read_board_8) // Chessboard
+ //AM_RANGE( 0x3000, 0x4000) AM_READ(mboard_read_board_8) // Chessboard
AM_RANGE( 0x5000, 0x5000) AM_WRITE(write_lcd)
- AM_RANGE( 0x6000, 0x6000) AM_WRITE(mboard_write_LED_8) // Chessboard
- AM_RANGE( 0x7000, 0x7000) AM_WRITE(mboard_write_board_8) // Chessboard
+ //AM_RANGE( 0x6000, 0x6000) AM_WRITE(mboard_write_LED_8) // Chessboard
+ //AM_RANGE( 0x7000, 0x7000) AM_WRITE(mboard_write_board_8) // Chessboard
AM_RANGE( 0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -229,10 +226,10 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( mephisto_mem, AS_PROGRAM, 8, mephisto_state )
AM_RANGE( 0x0000, 0x1fff) AM_RAM //AM_BASE(m_p_ram)
AM_RANGE( 0x2000, 0x2000) AM_WRITE(write_lcd)
- AM_RANGE( 0x2400, 0x2407) AM_WRITE(mboard_write_LED_8) // Chessboard
- AM_RANGE( 0x2800, 0x2800) AM_WRITE(mboard_write_board_8) // Chessboard
+ //AM_RANGE( 0x2400, 0x2407) AM_WRITE(mboard_write_LED_8) // Chessboard
+ //AM_RANGE( 0x2800, 0x2800) AM_WRITE(mboard_write_board_8) // Chessboard
AM_RANGE( 0x2c00, 0x2c07) AM_READ(read_keys)
- AM_RANGE( 0x3000, 0x3000) AM_READ(mboard_read_board_8) // Chessboard
+ //AM_RANGE( 0x3000, 0x3000) AM_READ(mboard_read_board_8) // Chessboard
AM_RANGE( 0x3400, 0x3407) AM_WRITE(write_led) // Status LEDs+ buzzer
AM_RANGE( 0x3800, 0x3800) AM_WRITE(mephisto_NMI) // NMI enable
AM_RANGE( 0x4000, 0x7fff) AM_ROM // Opening Library
@@ -243,10 +240,10 @@ static ADDRESS_MAP_START( mm2_mem, AS_PROGRAM, 8, mephisto_state )
AM_RANGE( 0x0000, 0x0fff) AM_RAM //AM_BASE(m_p_ram)
AM_RANGE( 0x1000, 0x1007) AM_WRITE(write_led_mm2) //Status LEDs
AM_RANGE( 0x1800, 0x1807) AM_READ(read_keys)
- AM_RANGE( 0x2000, 0x2000) AM_READ(mboard_read_board_8) //Chessboard
+ //AM_RANGE( 0x2000, 0x2000) AM_READ(mboard_read_board_8) //Chessboard
AM_RANGE( 0x2800, 0x2800) AM_WRITE(write_lcd)
- AM_RANGE( 0x3000, 0x3000) AM_WRITE(mboard_write_LED_8) //Chessboard
- AM_RANGE( 0x3800, 0x3800) AM_WRITE(mboard_write_board_8) //Chessboard
+ //AM_RANGE( 0x3000, 0x3000) AM_WRITE(mboard_write_LED_8) //Chessboard
+ //AM_RANGE( 0x3800, 0x3800) AM_WRITE(mboard_write_board_8) //Chessboard
AM_RANGE( 0x4000, 0x7fff) AM_ROM // Opening Library ?
AM_RANGE( 0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -288,7 +285,6 @@ static INPUT_PORTS_START( mephisto )
PORT_START("KEY2_7") //Port $2c0f
PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D 4") PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4)
- PORT_INCLUDE( chessboard )
INPUT_PORTS_END
@@ -319,7 +315,7 @@ void mephisto_state::machine_start()
{
m_lcd_shift_counter = 3;
m_allowNMI = 1;
- mboard_savestate_register();
+ //mboard_savestate_register();
}
MACHINE_START_MEMBER(mephisto_state,mm2)
@@ -327,7 +323,7 @@ MACHINE_START_MEMBER(mephisto_state,mm2)
m_lcd_shift_counter = 3;
m_led7=0xff;
- mboard_savestate_register();
+ //mboard_savestate_register();
}
@@ -335,8 +331,8 @@ void mephisto_state::machine_reset()
{
m_lcd_shift_counter = 3;
m_allowNMI = 1;
- mboard_set_border_pieces();
- mboard_set_board();
+ //mboard_set_border_pieces();
+ //mboard_set_board();
/* adjust artwork depending on current emulation*/
@@ -369,7 +365,7 @@ static MACHINE_CONFIG_START( mephisto, mephisto_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_TIMER_DRIVER_ADD_PERIODIC("nmi_timer", mephisto_state, update_nmi, attotime::from_hz(600))
- MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", mephisto_state, mboard_update_artwork, attotime::from_hz(100))
+ //MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", mephisto_state, mboard_update_artwork, attotime::from_hz(100))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( rebel5, mephisto )
@@ -461,10 +457,10 @@ DRIVER_INIT_MEMBER(mephisto_state,mephisto)
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
-CONS( 1984, mm2, mm4, 0, mm2, mephisto, mephisto_state, mephisto, "Hegener & Glaser", "Mephisto MM2 Schachcomputer", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1986, rebel5, mm4, 0, rebel5, mephisto, mephisto_state, mephisto, "Hegener & Glaser", "Mephisto Rebell 5,0 Schachcomputer", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1987, mm4, 0, 0, mephisto, mephisto, mephisto_state, mephisto, "Hegener & Glaser", "Mephisto 4 Schachcomputer", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1987, mm4tk, mm4, 0, mm4tk, mephisto, mephisto_state, mephisto, "Hegener & Glaser", "Mephisto 4 Schachcomputer Turbo Kit + HG440", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1990, mm5, mm4, 0, mephisto, mephisto, mephisto_state, mephisto, "Hegener & Glaser", "Mephisto 5.1 Schachcomputer", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1990, mm50, mm4, 0, mephisto, mephisto, mephisto_state, mephisto, "Hegener & Glaser", "Mephisto 5.0 Schachcomputer", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1990, mm5tk, mm4, 0, mm4tk, mephisto, mephisto_state, mephisto, "Hegener & Glaser", "Mephisto 5.1 Schachcomputer Turbo Kit + HG550", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1984, mm2, mm4, 0, mm2, mephisto, mephisto_state, mephisto, "Hegener & Glaser", "Mephisto MM2 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1986, rebel5, mm4, 0, rebel5, mephisto, mephisto_state, mephisto, "Hegener & Glaser", "Mephisto Rebell 5,0 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1987, mm4, 0, 0, mephisto, mephisto, mephisto_state, mephisto, "Hegener & Glaser", "Mephisto 4 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1987, mm4tk, mm4, 0, mm4tk, mephisto, mephisto_state, mephisto, "Hegener & Glaser", "Mephisto 4 Schachcomputer Turbo Kit + HG440", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1990, mm5, mm4, 0, mephisto, mephisto, mephisto_state, mephisto, "Hegener & Glaser", "Mephisto 5.1 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1990, mm50, mm4, 0, mephisto, mephisto, mephisto_state, mephisto, "Hegener & Glaser", "Mephisto 5.0 Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1990, mm5tk, mm4, 0, mm4tk, mephisto, mephisto_state, mephisto, "Hegener & Glaser", "Mephisto 5.1 Schachcomputer Turbo Kit + HG550", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/mes.cpp b/src/mame/drivers/mes.cpp
index 00091ddf3a4..7fba4e556b0 100644
--- a/src/mame/drivers/mes.cpp
+++ b/src/mame/drivers/mes.cpp
@@ -118,7 +118,7 @@ static MACHINE_CONFIG_START( mes, mes_state )
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/metro.cpp b/src/mame/drivers/metro.cpp
index c00f2dd51ee..ef372c617ee 100644
--- a/src/mame/drivers/metro.cpp
+++ b/src/mame/drivers/metro.cpp
@@ -96,7 +96,7 @@ Notes:
- vmetal: has Sega and Taito logos in the roms ?!
-driver modified by Eisuke Watanabe
+driver modified by Hau
***************************************************************************/
#include "emu.h"
diff --git a/src/mame/drivers/micral.cpp b/src/mame/drivers/micral.cpp
index 743ee915080..3aca6e673ee 100644
--- a/src/mame/drivers/micral.cpp
+++ b/src/mame/drivers/micral.cpp
@@ -257,13 +257,13 @@ static MACHINE_CONFIG_START( micral, micral_state )
MCFG_MACHINE_RESET_OVERRIDE(micral_state, micral)
// video hardware
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(250))
MCFG_SCREEN_UPDATE_DRIVER(micral_state, screen_update)
MCFG_SCREEN_SIZE(64*6, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0, 64*6-1, 0, 32*8-1)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
//MCFG_GFXDECODE_ADD("gfxdecode", "palette", micral)
MCFG_DEVICE_ADD("crtc", CRT5037, XTAL_17_9712MHz/2) // xtal freq unknown
diff --git a/src/mame/drivers/microtan.cpp b/src/mame/drivers/microtan.cpp
index 5503e3285e8..fcf0676cb15 100644
--- a/src/mame/drivers/microtan.cpp
+++ b/src/mame/drivers/microtan.cpp
@@ -225,7 +225,7 @@ static MACHINE_CONFIG_START( microtan, microtan_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", microtan)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/mikro80.cpp b/src/mame/drivers/mikro80.cpp
index 5fda3bf1ee6..ae543027dfc 100644
--- a/src/mame/drivers/mikro80.cpp
+++ b/src/mame/drivers/mikro80.cpp
@@ -179,7 +179,7 @@ static MACHINE_CONFIG_START( mikro80, mikro80_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mikro80)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
diff --git a/src/mame/drivers/mk85.cpp b/src/mame/drivers/mk85.cpp
index 5ab8197a55a..2ac48fe1071 100644
--- a/src/mame/drivers/mk85.cpp
+++ b/src/mame/drivers/mk85.cpp
@@ -77,7 +77,7 @@ static MACHINE_CONFIG_START( mk85, mk85_state )
MCFG_SCREEN_UPDATE_DRIVER(mk85_state, screen_update_mk85)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/mk90.cpp b/src/mame/drivers/mk90.cpp
index ce3ffa2abd2..68134c41490 100644
--- a/src/mame/drivers/mk90.cpp
+++ b/src/mame/drivers/mk90.cpp
@@ -82,7 +82,7 @@ static MACHINE_CONFIG_START( mk90, mk90_state )
MCFG_SCREEN_UPDATE_DRIVER(mk90_state, screen_update_mk90)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/mmodular.cpp b/src/mame/drivers/mmodular.cpp
index 09e83e6dcf6..70040314b91 100644
--- a/src/mame/drivers/mmodular.cpp
+++ b/src/mame/drivers/mmodular.cpp
@@ -3,8 +3,6 @@
/******************************************************************************
Mephisto Chess Computers using plugin modules
- Vancouver Chess Computer 68000 (driver recalled) by R. Schaefer (2010)
-
(most of the magnetic sensor versions with 680x0 family modules)
Almeria 68000 12Mhz
@@ -57,12 +55,6 @@
holding CLEAR clears Battery Backed RAM on the Berlin (Pro) 68020
******************************************************************************/
-/******************************************************************************
- Mephisto Polgar & Milano
- 2010 Dirk V., Ralf Schafer, Cowering
-
-******************************************************************************/
-
/*
CPU 65C02 P4 4.9152 MHz
@@ -96,7 +88,6 @@ Bit 5+6 LED 1-8 enable
#include "rendlay.h"
-#include "includes/mboard.h"
#include "machine/nvram.h"
//static UINT16 unknown2_data = 0;
@@ -125,15 +116,17 @@ INPUT_PORTS_EXTERN( chessboard );
UINT8 lcd32_char;
-class polgar_state : public mboard_state
+class polgar_state : public driver_device
{
public:
polgar_state(const machine_config &mconfig, device_type type, const char *tag)
- : mboard_state(mconfig, type, tag),
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
m_lcdc(*this, "hd44780"),
m_beeper(*this, "beeper")
{ }
+ required_device<cpu_device> m_maincpu;
optional_device<hd44780_device> m_lcdc;
optional_device<beep_device> m_beeper;
@@ -637,9 +630,9 @@ WRITE8_MEMBER(polgar_state::monteciv_3006)
WRITE8_MEMBER(polgar_state::academy_write_board)
{
- latch_data = data;
+ //latch_data = data;
// logerror("acad_write_latch %02x\n",data);
- if (data != 0xff) mboard_write_board_8(space,0, data);
+ //if (data != 0xff) mboard_write_board_8(space,0, data);
}
WRITE8_MEMBER(polgar_state::milano_write_board)
@@ -658,7 +651,7 @@ READ8_MEMBER(polgar_state::milano_read_board)
if (latch_data)
{
- line = get_first_cleared_bit(latch_data);
+ line = 0;//get_first_cleared_bit(latch_data);
tmp = ioport(board_lines[line])->read();
if (tmp != 0xff)
@@ -712,7 +705,7 @@ READ32_MEMBER(polgar_state::read_keys_BPL32)
} else {
if (BPL32latch_data & 0x7f) {
logerror("ReadingBoard %02x\n",BPL32latch_data);
- line = get_first_cleared_bit(BPL32latch_data);
+ line = 0;//get_first_cleared_bit(BPL32latch_data);
tmp = ioport(board_lines[line])->read();
if (tmp != 0xff)
@@ -751,7 +744,7 @@ READ8_MEMBER(polgar_state::read_keys_board_monteciv)
UINT8 data = 0;
if (monteciv_select[0] == 0xff && monteciv_select[1] == 0xff) {
- data = mboard_read_board_8(space,0);
+ //data = mboard_read_board_8(space,0);
} else {
if (monteciv_select[0] == 0x0) {
data = ioport("BUTTONS_MONTE2")->read();
@@ -789,7 +782,7 @@ READ8_MEMBER(polgar_state::read_keys_board_academy)
data = ioport("BUTTONS_ACAD")->read();
} else {
// if (latch_data & 0x7f) {
- data = mboard_read_board_8(space,0);
+ //data = mboard_read_board_8(space,0);
// data = milano_read_board(space,0);
// logerror("ReadingBoard %02x\n",latch_data);
@@ -1014,20 +1007,16 @@ MACHINE_START_MEMBER(polgar_state,risc)
void polgar_state::common_chess_start()
{
- mboard_set_border_pieces();
- mboard_set_board();
}
MACHINE_START_MEMBER(polgar_state,polgar)
{
common_chess_start();
- mboard_savestate_register();
}
MACHINE_START_MEMBER(polgar_state,sfortea)
{
common_chess_start();
- mboard_savestate_register();
}
MACHINE_START_MEMBER(polgar_state,diablo68)
@@ -1037,7 +1026,6 @@ MACHINE_START_MEMBER(polgar_state,diablo68)
MACHINE_START_MEMBER(polgar_state,van16)
{
- mboard_savestate_register();
}
MACHINE_RESET_MEMBER(polgar_state,van16)
@@ -1096,9 +1084,9 @@ GFXDECODE_END
static ADDRESS_MAP_START(polgar_mem , AS_PROGRAM, 8, polgar_state )
AM_RANGE( 0x0000, 0x1fff ) AM_RAM
- AM_RANGE( 0x2400, 0x2400 ) AM_WRITE(mboard_write_LED_8 ) // Chessboard
- AM_RANGE( 0x2800, 0x2800 ) AM_WRITE(mboard_write_board_8) // Chessboard
- AM_RANGE( 0x3000, 0x3000 ) AM_READ(mboard_read_board_8 ) // Chessboard
+ //AM_RANGE( 0x2400, 0x2400 ) AM_WRITE(mboard_write_LED_8 ) // Chessboard
+// AM_RANGE( 0x2800, 0x2800 ) AM_WRITE(mboard_write_board_8) // Chessboard
+// AM_RANGE( 0x3000, 0x3000 ) AM_READ(mboard_read_board_8 ) // Chessboard
AM_RANGE( 0x3400, 0x3405 ) AM_WRITE(polgar_write_LED) // Function LEDs
AM_RANGE( 0x2c00, 0x2c07 ) AM_READ(read_keys)
AM_RANGE( 0x2004, 0x2004 ) AM_WRITE(write_polgar_IO ) // LCD Instr. Reg + Beeper
@@ -1121,11 +1109,11 @@ static ADDRESS_MAP_START(gen32_mem, AS_PROGRAM, 32, polgar_state )
AM_RANGE( 0x00000000, 0x0003ffff ) AM_ROM
- AM_RANGE( 0xc0000000 , 0xc0000003 ) AM_READ(mboard_read_board_32 )
- AM_RANGE( 0xc8000000 , 0xc8000003 ) AM_WRITE(mboard_write_board_32 )
- AM_RANGE( 0xc8000004 , 0xc8000007 ) AM_WRITE(mboard_write_board_32 )
- AM_RANGE( 0xd0000000 , 0xd0000003 ) AM_WRITE(mboard_write_LED_32 )
- AM_RANGE( 0xd0000004 , 0xd0000007 ) AM_WRITE(mboard_write_LED_32 )
+ //AM_RANGE( 0xc0000000 , 0xc0000003 ) AM_READ(mboard_read_board_32 )
+ //AM_RANGE( 0xc8000000 , 0xc8000003 ) AM_WRITE(mboard_write_board_32 )
+ //AM_RANGE( 0xc8000004 , 0xc8000007 ) AM_WRITE(mboard_write_board_32 )
+ //AM_RANGE( 0xd0000000 , 0xd0000003 ) AM_WRITE(mboard_write_LED_32 )
+ //AM_RANGE( 0xd0000004 , 0xd0000007 ) AM_WRITE(mboard_write_LED_32 )
AM_RANGE( 0xf0000004 , 0xf0000013 ) AM_READ(read_buttons_gen32 )
AM_RANGE( 0xe0000000 , 0xe0000003 ) AM_WRITE(write_LCD_data_32 )
AM_RANGE( 0xe0000010 , 0xe0000013 ) AM_WRITE(write_IOenables_32 )
@@ -1142,7 +1130,7 @@ static ADDRESS_MAP_START(gen32_mem, AS_PROGRAM, 32, polgar_state )
static ADDRESS_MAP_START(bpl32_mem, AS_PROGRAM, 32, polgar_state )
AM_RANGE( 0x000000, 0x03ffff ) AM_ROM
- AM_RANGE( 0x800000 , 0x800003 ) AM_READ(read_keys_BPL32 )
+// AM_RANGE( 0x800000 , 0x800003 ) AM_READ(read_keys_BPL32 )
AM_RANGE( 0x900000 , 0x900003 ) AM_WRITE(write_board_BPL32 )
AM_RANGE( 0xa00000 , 0xa00003 ) AM_WRITE(write_LED_BPL32 )
AM_RANGE( 0xc00000 , 0xc00003 ) AM_WRITE(write_LCD_data_32 )
@@ -1156,9 +1144,9 @@ static ADDRESS_MAP_START(van32_mem, AS_PROGRAM, 32, polgar_state )
AM_RANGE( 0x00000000, 0x0003ffff ) AM_ROM
- AM_RANGE( 0x800000fc , 0x800000ff ) AM_READ(mboard_read_board_32 )
- AM_RANGE( 0x88000000 , 0x88000007 ) AM_WRITE(mboard_write_board_32 )
- AM_RANGE( 0x90000000 , 0x90000007 ) AM_WRITE(mboard_write_LED_32 )
+ //AM_RANGE( 0x800000fc , 0x800000ff ) AM_READ(mboard_read_board_32 )
+// AM_RANGE( 0x88000000 , 0x88000007 ) AM_WRITE(mboard_write_board_32 )
+// AM_RANGE( 0x90000000 , 0x90000007 ) AM_WRITE(mboard_write_LED_32 )
AM_RANGE( 0x800000ec , 0x800000ff ) AM_READ(read_buttons_van32 )
AM_RANGE( 0xa0000000 , 0xa0000003 ) AM_WRITE(write_LCD_data_32 )
AM_RANGE( 0xa0000010 , 0xa0000013 ) AM_WRITE(write_IOenables_32 )
@@ -1176,9 +1164,9 @@ static ADDRESS_MAP_START(alm32_mem, AS_PROGRAM, 32, polgar_state )
AM_RANGE( 0x00000000, 0x0001ffff ) AM_ROM
- AM_RANGE( 0x800000fc , 0x800000ff ) AM_READ(mboard_read_board_32 )
- AM_RANGE( 0x88000000 , 0x88000007 ) AM_WRITE(mboard_write_board_32 )
- AM_RANGE( 0x90000000 , 0x90000007 ) AM_WRITE(mboard_write_LED_32 )
+ //AM_RANGE( 0x800000fc , 0x800000ff ) AM_READ(mboard_read_board_32 )
+ //AM_RANGE( 0x88000000 , 0x88000007 ) AM_WRITE(mboard_write_board_32 )
+ //AM_RANGE( 0x90000000 , 0x90000007 ) AM_WRITE(mboard_write_LED_32 )
AM_RANGE( 0x800000ec , 0x800000ff ) AM_READ(read_buttons_van32 )
AM_RANGE( 0xa0000000 , 0xa0000003 ) AM_WRITE(write_LCD_data_32 )
AM_RANGE( 0xa0000010 , 0xa0000013 ) AM_WRITE(write_IOenables_32 )
@@ -1204,9 +1192,9 @@ static ADDRESS_MAP_START(van16_mem, AS_PROGRAM, 16, polgar_state )
AM_RANGE( 0x000000, 0x03ffff ) AM_ROM
- AM_RANGE( 0xc00000 , 0xc00001 ) AM_READ(mboard_read_board_16 )
- AM_RANGE( 0xc80000 , 0xc80001 ) AM_WRITE(mboard_write_board_16 )
- AM_RANGE( 0xd00000 , 0xd00001 ) AM_WRITE(mboard_write_LED_16 )
+ //AM_RANGE( 0xc00000 , 0xc00001 ) AM_READ(mboard_read_board_16 )
+ //AM_RANGE( 0xc80000 , 0xc80001 ) AM_WRITE(mboard_write_board_16 )
+ //AM_RANGE( 0xd00000 , 0xd00001 ) AM_WRITE(mboard_write_LED_16 )
AM_RANGE( 0xf00000 , 0xf00009 ) AM_READ(read_buttons_van16 )
AM_RANGE( 0xd80000 , 0xd80001 ) AM_WRITE(write_LCD_data )
AM_RANGE( 0xd80008 , 0xd80009 ) AM_WRITE(write_IOenables )
@@ -1223,9 +1211,9 @@ static ADDRESS_MAP_START(alm16_mem, AS_PROGRAM, 16, polgar_state )
AM_RANGE( 0x000000, 0x01ffff ) AM_ROM
- AM_RANGE( 0xc00000 , 0xc00001 ) AM_READ(mboard_read_board_16 )
- AM_RANGE( 0xc80000 , 0xc80001 ) AM_WRITE(mboard_write_board_16 )
- AM_RANGE( 0xd00000 , 0xd00001 ) AM_WRITE(mboard_write_LED_16 )
+ //AM_RANGE( 0xc00000 , 0xc00001 ) AM_READ(mboard_read_board_16 )
+ //AM_RANGE( 0xc80000 , 0xc80001 ) AM_WRITE(mboard_write_board_16 )
+ //AM_RANGE( 0xd00000 , 0xd00001 ) AM_WRITE(mboard_write_LED_16 )
AM_RANGE( 0xf00000 , 0xf00009 ) AM_READ(read_buttons_van16 )
AM_RANGE( 0xd80000 , 0xd80001 ) AM_WRITE(write_LCD_data )
AM_RANGE( 0xd80008 , 0xd80009 ) AM_WRITE(write_IOenables )
@@ -1242,7 +1230,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START(milano_mem , AS_PROGRAM, 8, polgar_state )
AM_RANGE( 0x0000, 0x1f9f ) AM_RAM
AM_RANGE( 0x1fd0, 0x1fd0 ) AM_WRITE(milano_write_board ) // Chessboard
- AM_RANGE( 0x1fe0, 0x1fe0 ) AM_READ(milano_read_board ) // Chessboard
+// AM_RANGE( 0x1fe0, 0x1fe0 ) AM_READ(milano_read_board ) // Chessboard
AM_RANGE( 0x1fe8, 0x1fed ) AM_WRITE(milano_write_LED ) // Function LEDs
AM_RANGE( 0x1fd8, 0x1fdf ) AM_READ(read_keys)
AM_RANGE( 0x1ff0, 0x1ff0 ) AM_WRITE(write_polgar_IO) // IO control
@@ -1255,7 +1243,7 @@ static ADDRESS_MAP_START(academy_mem , AS_PROGRAM, 8, polgar_state )
AM_RANGE( 0x0000, 0x1fff ) AM_RAM
AM_RANGE( 0x2400, 0x2400 ) AM_READ(read_keys_board_academy )
AM_RANGE( 0x2800, 0x2800 ) AM_WRITE(academy_write_board ) // Chessboard
- AM_RANGE( 0x2c00, 0x2c00 ) AM_WRITE(mboard_write_LED_8 ) // Chessboard
+ //AM_RANGE( 0x2c00, 0x2c00 ) AM_WRITE(mboard_write_LED_8 ) // Chessboard
AM_RANGE( 0x3002, 0x3002 ) AM_WRITE(beep_academy )
AM_RANGE( 0x3001, 0x3001 ) AM_WRITE(academy_inhibitNMI )
AM_RANGE( 0x3400, 0x3400 ) AM_WRITE(academy_write_LED )
@@ -1267,7 +1255,7 @@ static ADDRESS_MAP_START(monteciv_mem , AS_PROGRAM, 8, polgar_state )
AM_RANGE( 0x0000, 0x1fff ) AM_RAM
AM_RANGE( 0x2400, 0x2400 ) AM_READ(read_keys_board_monteciv )
AM_RANGE( 0x2800, 0x2800 ) AM_WRITE(academy_write_board ) // Chessboard
- AM_RANGE( 0x2c00, 0x2c00 ) AM_WRITE(mboard_write_LED_8 ) // Chessboard
+ //AM_RANGE( 0x2c00, 0x2c00 ) AM_WRITE(mboard_write_LED_8 ) // Chessboard
AM_RANGE( 0x3400, 0x3400 ) AM_WRITE(academy_write_LED ) // Status LEDs
AM_RANGE( 0x3000, 0x3001 ) AM_WRITE(monteciv_select_line ) // Select Keyline
AM_RANGE( 0x3002, 0x3002 ) AM_WRITE(beep_academy )
@@ -1334,8 +1322,6 @@ static INPUT_PORTS_START( polgar )
// PORT_START("KEY1_8")
// PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(" A") PORT_CODE(KEYCODE_1)
- PORT_INCLUDE( chessboard )
-
INPUT_PORTS_END
static INPUT_PORTS_START( sfortea )
@@ -1369,8 +1355,6 @@ static INPUT_PORTS_START( sfortea )
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RST1") PORT_CODE(KEYCODE_7)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RST2") PORT_CODE(KEYCODE_8)
*/
-
- PORT_INCLUDE( chessboard )
INPUT_PORTS_END
static INPUT_PORTS_START( academy )
@@ -1384,7 +1368,6 @@ static INPUT_PORTS_START( academy )
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(" ENT") PORT_CODE(KEYCODE_F7)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(" CL") PORT_CODE(KEYCODE_F8)
- PORT_INCLUDE( chessboard )
INPUT_PORTS_END
static INPUT_PORTS_START( megaiv )
@@ -1408,7 +1391,6 @@ static INPUT_PORTS_START( megaiv )
// PORT_START("KEY1_8")
// PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(" A") PORT_CODE(KEYCODE_1)
- PORT_INCLUDE( chessboard )
INPUT_PORTS_END
@@ -1435,7 +1417,6 @@ static INPUT_PORTS_START( monteciv )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_8)
- PORT_INCLUDE( chessboard )
INPUT_PORTS_END
@@ -1453,7 +1434,6 @@ static INPUT_PORTS_START( gen32 )
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT)
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSLASH)
- PORT_INCLUDE( chessboard )
INPUT_PORTS_END
@@ -1468,7 +1448,6 @@ static INPUT_PORTS_START( bpl32 )
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSLASH)
- PORT_INCLUDE( chessboard )
INPUT_PORTS_END
@@ -1487,9 +1466,8 @@ static INPUT_PORTS_START( van32 )
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSLASH)
- PORT_INCLUDE( chessboard )
- INPUT_PORTS_END
+INPUT_PORTS_END
static INPUT_PORTS_START( van16 )
@@ -1505,7 +1483,6 @@ static INPUT_PORTS_START( van16 )
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("DOWN") PORT_CODE(KEYCODE_DOWN)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSLASH)
- PORT_INCLUDE( chessboard )
INPUT_PORTS_END
@@ -1546,7 +1523,7 @@ static MACHINE_CONFIG_START( polgar, polgar_state )
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_timer", polgar_state, cause_nmi, attotime::from_hz(600))
MCFG_TIMER_START_DELAY(attotime::from_hz(60))
- MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(100))
+ //MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(100))
MACHINE_CONFIG_END
@@ -1563,7 +1540,7 @@ static MACHINE_CONFIG_START( sfortea, polgar_state )
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_timer", polgar_state, cause_M6502_irq, attotime::from_hz(600))
MCFG_TIMER_START_DELAY(attotime::from_hz(60))
- MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(100))
+ //MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(100))
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( alm32, polgar_state )
@@ -1572,7 +1549,7 @@ static MACHINE_CONFIG_START( alm32, polgar_state )
MCFG_MACHINE_START_OVERRIDE(polgar_state,van32)
MCFG_MACHINE_RESET_OVERRIDE(polgar_state,van16)
MCFG_TIMER_DRIVER_ADD_PERIODIC("int_timer", polgar_state, timer_update_irq6, attotime::from_hz(750))
- MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(120))
+ //MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(120))
MCFG_FRAGMENT_ADD( chess_common )
MCFG_NVRAM_ADD_0FILL("nvram")
@@ -1605,7 +1582,7 @@ static MACHINE_CONFIG_START( monteciv, polgar_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_timer", polgar_state, cause_nmi, attotime::from_hz(600))
- MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(100))
+ //MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(100))
MACHINE_CONFIG_END
@@ -1626,7 +1603,7 @@ static MACHINE_CONFIG_START( diablo68, polgar_state )
MCFG_TIMER_DRIVER_ADD_PERIODIC("int_timer", polgar_state, timer_update_irq2, attotime::from_hz(60))
MCFG_TIMER_START_DELAY(attotime::from_hz(30))
- MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(120))
+ //MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(120))
MACHINE_CONFIG_END
@@ -1638,7 +1615,7 @@ static MACHINE_CONFIG_START( van16, polgar_state )
MCFG_MACHINE_RESET_OVERRIDE(polgar_state,van16)
MCFG_TIMER_DRIVER_ADD_PERIODIC("int_timer", polgar_state, timer_update_irq6, attotime::from_hz(600))
//MCFG_TIMER_DRIVER_ADD_PERIODIC("int_timer", polgar_state, timer_update_irq6, attotime::from_hz(587))
- MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(120))
+ //MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(120))
MCFG_FRAGMENT_ADD( chess_common )
MCFG_NVRAM_ADD_0FILL("nvram")
@@ -1655,7 +1632,7 @@ static MACHINE_CONFIG_START( van32, polgar_state )
MCFG_MACHINE_START_OVERRIDE(polgar_state,van32)
MCFG_MACHINE_RESET_OVERRIDE(polgar_state,van16)
MCFG_TIMER_DRIVER_ADD_PERIODIC("int_timer", polgar_state, timer_update_irq6, attotime::from_hz(750))
- MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(120))
+ //MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(120))
MCFG_FRAGMENT_ADD( chess_common )
MCFG_NVRAM_ADD_0FILL("nvram")
@@ -1667,7 +1644,7 @@ static MACHINE_CONFIG_START( risc, polgar_state )
MCFG_CPU_PROGRAM_MAP(risc_mem)
MCFG_MACHINE_START_OVERRIDE(polgar_state,risc)
MCFG_MACHINE_RESET_OVERRIDE(polgar_state,van16)
- MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(120))
+ //MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(120))
MCFG_FRAGMENT_ADD( chess_common )
// MCFG_NVRAM_ADD_0FILL("nvram")
@@ -1681,7 +1658,7 @@ static MACHINE_CONFIG_START( gen32, polgar_state )
MCFG_MACHINE_RESET_OVERRIDE(polgar_state,van16)
MCFG_TIMER_DRIVER_ADD_PERIODIC("int_timer", polgar_state, timer_update_irq6, attotime::from_hz(375))
//MCFG_TIMER_DRIVER_ADD_PERIODIC("int_timer", polgar_state, timer_update_irq6, attotime::from_hz(368.64))
- MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(120))
+ //MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(120))
MCFG_FRAGMENT_ADD( chess_common )
MCFG_NVRAM_ADD_0FILL("nvram")
@@ -1695,7 +1672,7 @@ static MACHINE_CONFIG_START( bpl32, polgar_state )
MCFG_MACHINE_START_OVERRIDE(polgar_state,van32)
MCFG_MACHINE_RESET_OVERRIDE(polgar_state,van16)
MCFG_TIMER_DRIVER_ADD_PERIODIC("int_timer", polgar_state, timer_update_irq6, attotime::from_hz(750))
- MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(100))
+ //MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(100))
MCFG_FRAGMENT_ADD( chess_common )
MCFG_NVRAM_ADD_0FILL("nvram")
@@ -1863,29 +1840,29 @@ DRIVER_INIT_MEMBER(polgar_state,polgar)
}
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
- CONS( 1986, polgar, 0, 0, polgar, polgar, polgar_state, polgar, "Hegener & Glaser", "Mephisto Polgar Schachcomputer", MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK)
- CONS( 1987, sfortea, 0, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Forte Chess Computer (version A)", MACHINE_NO_SOUND|MACHINE_SUPPORTS_SAVE|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1988, alm16, van16, 0, alm16, van16, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Almeria 68000", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1988, alm32, van16, 0, alm32, van32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Alimera 68020", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1988, sforteb, sfortea, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Forte Chess Computer (version B)", MACHINE_NO_SOUND|MACHINE_SUPPORTS_SAVE|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1988, sforteba, sfortea, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Forte Chess Computer (version B, alt)", MACHINE_NO_SOUND|MACHINE_SUPPORTS_SAVE|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1988, sexpertb, sfortea, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Expert B Chess Computer", MACHINE_NO_SOUND|MACHINE_SUPPORTS_SAVE|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1986, polgar, 0, 0, polgar, polgar, polgar_state, polgar, "Hegener & Glaser", "Mephisto Polgar Schachcomputer", MACHINE_NOT_WORKING | MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK)
+ CONS( 1987, sfortea, 0, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Forte Chess Computer (version A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1988, alm16, van16, 0, alm16, van16, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Almeria 68000", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1988, alm32, van16, 0, alm32, van32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Alimera 68020", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1988, sforteb, sfortea, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Forte Chess Computer (version B)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1988, sforteba, sfortea, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Forte Chess Computer (version B, alt)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1988, sexpertb, sfortea, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Expert B Chess Computer", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
CONS( 1989, academy, 0, 0, academy, academy, driver_device, 0, "Hegener & Glaser", "Mephisto Academy Schachcomputer", MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1989, megaiv, 0, 0, megaiv, megaiv, driver_device, 0, "Hegener & Glaser", "Mephisto Mega IV Schachcomputer", MACHINE_SUPPORTS_SAVE|MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1989, megaiv, 0, 0, megaiv, megaiv, driver_device, 0, "Hegener & Glaser", "Mephisto Mega IV Schachcomputer", MACHINE_NOT_WORKING|MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
CONS( 1989, milano, polgar, 0, milano, polgar, polgar_state, polgar, "Hegener & Glaser", "Mephisto Milano Schachcomputer", MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
-//CONS( 1989, montec4, 0, 0, monteciv, monteciv, driver_device, 0, "Hegener & Glaser", "Mephisto Monte Carlo IV", MACHINE_SUPPORTS_SAVE|MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1989, sfortec, sfortea, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Forte Chess Computer (version C)", MACHINE_NO_SOUND|MACHINE_SUPPORTS_SAVE|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1989, sexpertc, sfortea, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Expert C Chess Computer", MACHINE_NO_SOUND|MACHINE_SUPPORTS_SAVE|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1990, lyon16, van16, 0, alm16, van16, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Lyon 68000", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1990, lyon32, van16, 0, alm32, van32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Lyon 68020", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1990, monteciv, 0, 0, monteciv, monteciv, driver_device, 0, "Hegener & Glaser", "Mephisto Monte Carlo IV LE Schachcomputer", MACHINE_SUPPORTS_SAVE|MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1991, diablo68, 0, 0, diablo68, sfortea, driver_device, 0, "Novag", "Novag Diablo 68000 Chess Computer", MACHINE_NO_SOUND|MACHINE_SUPPORTS_SAVE|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1991, van16, 0, 0, van16, van16, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Vancouver 68000", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1991, van32, van16, 0, van32, van32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Vancouver 68020", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1992, risc, 0, 0, risc, van16, driver_device, 0, "Saitek", "RISC2500", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1993, gen32, van16, 0, gen32, gen32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Genius030 V4.00", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1993, gen32_41, van16, 0, gen32, gen32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Genius030 V4.01", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1994, berlinp, van16, 0, bpl32, bpl32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Berlin Pro 68020", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1996, bpl32, van16, 0, bpl32, bpl32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Berlin Pro London Upgrade V5.00", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1996, lond020, van16, 0, van32, van32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto London 68020 32 Bit", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
- CONS( 1996, lond030, van16, 0, gen32, gen32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Genius030 London Upgrade V5.00", MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+//CONS( 1989, montec4, 0, 0, monteciv, monteciv, driver_device, 0, "Hegener & Glaser", "Mephisto Monte Carlo IV", MACHINE_NOT_WORKING|MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1989, sfortec, sfortea, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Forte Chess Computer (version C)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1989, sexpertc, sfortea, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Expert C Chess Computer", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1990, lyon16, van16, 0, alm16, van16, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Lyon 68000", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1990, lyon32, van16, 0, alm32, van32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Lyon 68020", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1990, monteciv, 0, 0, monteciv, monteciv, driver_device, 0, "Hegener & Glaser", "Mephisto Monte Carlo IV LE Schachcomputer", MACHINE_NOT_WORKING|MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1991, diablo68, 0, 0, diablo68, sfortea, driver_device, 0, "Novag", "Novag Diablo 68000 Chess Computer", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1991, van16, 0, 0, van16, van16, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Vancouver 68000", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1991, van32, van16, 0, van32, van32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Vancouver 68020", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1992, risc, 0, 0, risc, van16, driver_device, 0, "Saitek", "RISC2500", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1993, gen32, van16, 0, gen32, gen32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Genius030 V4.00", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1993, gen32_41, van16, 0, gen32, gen32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Genius030 V4.01", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1994, berlinp, van16, 0, bpl32, bpl32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Berlin Pro 68020", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1996, bpl32, van16, 0, bpl32, bpl32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Berlin Pro London Upgrade V5.00", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1996, lond020, van16, 0, van32, van32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto London 68020 32 Bit", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
+ CONS( 1996, lond030, van16, 0, gen32, gen32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Genius030 London Upgrade V5.00", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp
index 6f5f5ca2c56..c2ba16a164b 100644
--- a/src/mame/drivers/model2.cpp
+++ b/src/mame/drivers/model2.cpp
@@ -5188,7 +5188,7 @@ ROM_START( vstrikero ) /* Virtua Striker, Model 2B */
ROM_LOAD("mpr-18065.34", 0x400000, 0x200000, CRC(046b55fe) SHA1(2db7eabf4318881a67b10dba24f6f0cd68940ace) )
ROM_END
-ROM_START( dynabb ) /* Dynamite Baseball, Model 2B */
+ROM_START( dynabb ) /* Dynamite Baseball, Model 2B. Sega game ID# 833-12803 DYNAMITE BASEBALL */
ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program
ROM_LOAD32_WORD("epr-19170.15", 0x000000, 0x080000, CRC(e00eb49e) SHA1(20975d892cf1c9f50605238d6ab41d79ece39f69) )
ROM_LOAD32_WORD("epr-19171.16", 0x000002, 0x080000, CRC(9878d67d) SHA1(d3350546b7e0e6fe8bb2f9d1a91475655f931b8b) )
@@ -5224,7 +5224,7 @@ ROM_START( dynabb ) /* Dynamite Baseball, Model 2B */
ROM_LOAD("mpr-19187.34", 0x400000, 0x200000, CRC(20918769) SHA1(90951bd61654d39537c54325b6e157a019edcda8) )
ROM_END
-ROM_START( dynabb97 ) /* Dynamite Baseball 97 Revision A, Model 2B. Sega game ID# 833-12803 */
+ROM_START( dynabb97 ) /* Dynamite Baseball 97 Revision A, Model 2B */
ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program
ROM_LOAD32_WORD("epr-19833a.15", 0x000000, 0x080000, CRC(d99ed1b2) SHA1(b04613d564c04c35feafccad56ed85810d894185) )
ROM_LOAD32_WORD("epr-19834a.16", 0x000002, 0x080000, CRC(24192bb1) SHA1(c535ab4b38ffd42f03eed6a5a1706e867eaccd67) )
diff --git a/src/mame/drivers/modellot.cpp b/src/mame/drivers/modellot.cpp
index 23eabd69770..0743a324e06 100644
--- a/src/mame/drivers/modellot.cpp
+++ b/src/mame/drivers/modellot.cpp
@@ -155,7 +155,7 @@ static MACHINE_CONFIG_START( modellot, modellot_state )
MCFG_CPU_IO_MAP(modellot_io)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(64*8, 16*16)
@@ -164,7 +164,7 @@ static MACHINE_CONFIG_START( modellot, modellot_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", modellot )
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* Devices */
MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0)
diff --git a/src/mame/drivers/mt735.cpp b/src/mame/drivers/mt735.cpp
index 4e642a4fa31..b6bbfffa5e6 100644
--- a/src/mame/drivers/mt735.cpp
+++ b/src/mame/drivers/mt735.cpp
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Cowering, Olivier Galibert
/*
Brother MT735 thermal printer
*/
diff --git a/src/mame/drivers/mx2178.cpp b/src/mame/drivers/mx2178.cpp
index add947cbcdd..c0e09f69578 100644
--- a/src/mame/drivers/mx2178.cpp
+++ b/src/mame/drivers/mx2178.cpp
@@ -162,14 +162,14 @@ static MACHINE_CONFIG_START( mx2178, mx2178_state )
MCFG_CPU_IO_MAP(mx2178_io)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not correct
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mx2178)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* Devices */
MCFG_MC6845_ADD("crtc", MC6845, "screen", 18869600 / 8) // clk unknown
diff --git a/src/mame/drivers/myb3k.cpp b/src/mame/drivers/myb3k.cpp
index 2eb5cba1dc7..283cb63d531 100644
--- a/src/mame/drivers/myb3k.cpp
+++ b/src/mame/drivers/myb3k.cpp
@@ -262,7 +262,7 @@ static MACHINE_CONFIG_START( myb3k, myb3k_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", myb3k)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* devices */
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_3_579545MHz/4) /* unknown clock, hand tuned to get ~60 fps */
diff --git a/src/mame/drivers/mycom.cpp b/src/mame/drivers/mycom.cpp
index efea8bc5bed..32df87b41f2 100644
--- a/src/mame/drivers/mycom.cpp
+++ b/src/mame/drivers/mycom.cpp
@@ -529,7 +529,7 @@ static MACHINE_CONFIG_START( mycom, mycom_state )
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 192-1)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mycom)
/* Manual states clock is 1.008mhz for 40 cols, and 2.016 mhz for 80 cols.
diff --git a/src/mame/drivers/mz80.cpp b/src/mame/drivers/mz80.cpp
index dddf128c958..6546e3b3325 100644
--- a/src/mame/drivers/mz80.cpp
+++ b/src/mame/drivers/mz80.cpp
@@ -287,7 +287,7 @@ static MACHINE_CONFIG_START( mz80k, mz80_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mz80k)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* Audio */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/nanos.cpp b/src/mame/drivers/nanos.cpp
index a40db7653a9..e83f3074979 100644
--- a/src/mame/drivers/nanos.cpp
+++ b/src/mame/drivers/nanos.cpp
@@ -485,7 +485,7 @@ static MACHINE_CONFIG_START( nanos, nanos_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", nanos)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* devices */
MCFG_DEVICE_ADD("z80ctc_0", Z80CTC, XTAL_4MHz)
diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp
index f7554e290b2..5d42e940ed3 100644
--- a/src/mame/drivers/naomi.cpp
+++ b/src/mame/drivers/naomi.cpp
@@ -1894,7 +1894,7 @@ WRITE64_MEMBER(naomi_state::aw_modem_w )
cc/dd - set type of Maple devices at ports 2/3 (EX. IO board)
0 - regular Atomiswave controller
1 - DC lightgun
- 2 - DC mouse/trackball
+ 2,3 - DC mouse/trackball
TODO: hook this then MAME have such devices emulated
0x00600288 rw 0000dcba
@@ -1906,7 +1906,7 @@ WRITE64_MEMBER(naomi_state::aw_modem_w )
0x0060028C rw POUT CN304 (EX. IO board)
*/
- osd_printf_verbose("MODEM: [%08x=%x] write %" I64FMT "x to %x, mask %" I64FMT "x\n", 0x600000+reg*4, dat, data, offset, mem_mask);
+ osd_printf_verbose("%s",string_format("MODEM: [%08x=%x] write %I64x to %x, mask %I64x\n", 0x600000+reg*4, dat, data, offset, mem_mask).c_str());
}
static ADDRESS_MAP_START( aw_map, AS_PROGRAM, 64, naomi_state )
@@ -8844,6 +8844,10 @@ ROM_END
*
*********************************************/
+// note: games with AW-NET features, i.e. NGBC or KOF NW, have "CUSTOMER ID" data (shown in NETWORK SETTINGS) in ROM @ 7FE000 (not encrypted, 8 bytes of data followed by 2 bytes of bytesumm)
+// EN cartridges have this area empty (FF-filled), i.e. AW-NET features not used.
+// JP cartridges have it filled with unique ID, which also means dumps of several JP cartridges will differ by this few bytes.
+
DRIVER_INIT_MEMBER(naomi_state,atomiswave)
{
UINT64 *ROM = (UINT64 *)memregion("awflash")->base();
@@ -9069,7 +9073,7 @@ ROM_START( ngbc )
ROM_LOAD( "ax3301f01.bin", 0, 4, CRC(9afe949b) SHA1(4f7b039f3287da61a53a2d012993bfb57e1459bd) )
ROM_END
-// JP cartridge have only few bytes difference - "CUSTOMER ID" field filled, probably used in online features for machine identification.
+// same as above EN-dump, but CustomerID not FF-filled
// Build:Jun 25 2005 17:00:38
ROM_START( ngbcj )
AW_BIOS
diff --git a/src/mame/drivers/nascom1.cpp b/src/mame/drivers/nascom1.cpp
index fc3497f3e70..ffe9b3b55e6 100644
--- a/src/mame/drivers/nascom1.cpp
+++ b/src/mame/drivers/nascom1.cpp
@@ -655,7 +655,7 @@ static MACHINE_CONFIG_START( nascom1, nascom1_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", nascom1)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
// uart
MCFG_DEVICE_ADD( "hd6402", AY31015, 0 )
diff --git a/src/mame/drivers/neogeo_noslot.cpp b/src/mame/drivers/neogeo_noslot.cpp
index d6e7eccd327..f3f79953c03 100644
--- a/src/mame/drivers/neogeo_noslot.cpp
+++ b/src/mame/drivers/neogeo_noslot.cpp
@@ -1310,6 +1310,35 @@ ROM_START( lresort )
ROM_LOAD16_BYTE( "024-c4.c4", 0x200001, 0x080000, CRC(7382fefb) SHA1(e916dec5bb5462eb9ae9711f08c7388937abb980) ) /* Plane 2,3 */ /* TC534200 */
ROM_END
+ROM_START( lresortp ) /* prototype - all roms were hand labeled with CRCs */
+ ROM_REGION( 0x100000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "024_p1_5937.bin", 0x000001, 0x080000, CRC(8e6008ee) SHA1(6779663118782207156dc9fa9e24e81e30c6391c) )
+ ROM_LOAD16_BYTE( "024_p2_8d37.bin", 0x000000, 0x080000, CRC(6d9ee90f) SHA1(ecd42182988092417bc96db8301ea408e47735f2) )
+
+ NEO_SFIX_128K( "024_s1_22fe.bin", CRC(5cef5cc6) SHA1(9ec305007bdb356e9f8f279beae5e2bcb3f2cf7b) )
+
+ NEO_BIOS_AUDIO_128K( "024_m1_fc7a.bin", CRC(22122875) SHA1(540c21559163381467679f836cb068adaf526659) )
+
+ ROM_REGION( 0x200000, "ymsnd", 0 )
+ ROM_LOAD( "024_v11_b085.bin", 0x000000, 0x080000, CRC(0722da38) SHA1(66a9b463d5277908b3a01c03de82b3de9118f2cb) ) // 024_v11_b085.bin 024-v1.v1 [1/2] IDENTICAL
+ ROM_LOAD( "024_v12_d3b7.bin", 0x080000, 0x080000, CRC(670ce3ec) SHA1(9004aa85d4a9b0ecf9cf9357b073ed55a98fdb02) ) // 024_v12_d3b7.bin 024-v1.v1 [2/2] IDENTICAL
+ ROM_LOAD( "024_v13_a31e.bin", 0x100000, 0x080000, CRC(2e39462b) SHA1(b0a9b1a3377bf0369f3020192505c46ca52927d6) ) // 024_v13_a31e.bin 024-v2.v2 [1/2] IDENTICAL
+ ROM_LOAD( "024_v24_2f0f.bin", 0x180000, 0x080000, CRC(7944754f) SHA1(d42a46c5127c6c62041ebffb0007af8a24abd360) ) // 024_v24_2f0f.bin 024-v2.v2 [2/2] IDENTICAL
+
+ NO_DELTAT_REGION
+
+ ROM_REGION( 0x400000, "sprites", 0 ) // note, ROM_LOAD32_BYTE
+ ROM_LOAD32_BYTE( "024_c1_b764.bin", 0x000000, 0x80000, CRC(677749ec) SHA1(6f94675e037956a380652ab1056e6f1dec605bec) ) /* Plane 0 */
+ ROM_LOAD32_BYTE( "024_c2_1951.bin", 0x000002, 0x80000, CRC(104d7b59) SHA1(404e8776ee8df4ca282eb7b747759af8628ddca1) ) /* Plane 2 */
+ ROM_LOAD32_BYTE( "024_c3_0f63.bin", 0x000001, 0x80000, CRC(b0965a74) SHA1(e8026dd4f722ccab9c913261d09ab8843ef56a0e) ) /* Plane 1 */
+ ROM_LOAD32_BYTE( "024_c4_c5b5.bin", 0x000003, 0x80000, CRC(dcfc3860) SHA1(8443b455ae8de656adab57f3b7e68919f22d3b9d) ) /* Plane 3 */
+ ROM_LOAD32_BYTE( "024_c5_dd03.bin", 0x200000, 0x80000, CRC(50322397) SHA1(3308fbe48ad165b9894a52fc3a8d9898bbbc0c0e) ) /* Plane 0 */
+ ROM_LOAD32_BYTE( "024_c6_c81a.bin", 0x200002, 0x80000, CRC(c3c93894) SHA1(f23b9d7e2b54d44c96370dde282bdf45cebd9cba) ) /* Plane 2 */
+ ROM_LOAD32_BYTE( "024_c7_5edc.bin", 0x200001, 0x80000, CRC(21faf72b) SHA1(00bf257b06180ae6ede57744cea6257b3488d9f0) ) /* Plane 1 */
+ ROM_LOAD32_BYTE( "024_c8_0850.bin", 0x200003, 0x80000, CRC(fb57217b) SHA1(607a98da754e8b1dd94a6432b21a36cc38e06a0f) ) /* Plane 3 */
+ROM_END
+
+
/****************************************
ID-0025
. NGM-025
@@ -9638,6 +9667,7 @@ GAME( 1990, joyjoy, neogeo, neogeo_noslot, neogeo, neogeo_state, neoge
GAME( 1991, quizdais, neogeo, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "SNK", "Quiz Daisousa Sen - The Last Count Down (NGM-023)(NGH-023)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, quizdaisk, quizdais, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "SNK", "Quiz Daisousa Sen - The Last Count Down (Korean release)", MACHINE_SUPPORTS_SAVE )
GAME( 1992, lresort, neogeo, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "SNK", "Last Resort", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, lresortp, lresort, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "SNK", "Last Resort (prototype)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, eightman, neogeo, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "SNK / Pallas", "Eight Man (NGM-025)(NGH-025)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, legendos, neogeo, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "SNK", "Legend of Success Joe / Ashita no Joe Densetsu", MACHINE_SUPPORTS_SAVE )
GAME( 1991, 2020bb, neogeo, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "SNK / Pallas", "2020 Super Baseball (set 1)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/nitedrvr.cpp b/src/mame/drivers/nitedrvr.cpp
index a36b46ad204..34409ac6c1b 100644
--- a/src/mame/drivers/nitedrvr.cpp
+++ b/src/mame/drivers/nitedrvr.cpp
@@ -156,7 +156,7 @@ static MACHINE_CONFIG_START( nitedrvr, nitedrvr_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", nitedrvr)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/nokia_3310.cpp b/src/mame/drivers/nokia_3310.cpp
index 81f15a75ce7..a07d0579f9f 100644
--- a/src/mame/drivers/nokia_3310.cpp
+++ b/src/mame/drivers/nokia_3310.cpp
@@ -692,7 +692,7 @@ static MACHINE_CONFIG_START( noki3310, noki3310_state )
MCFG_CPU_PROGRAM_MAP(noki3310_map)
/* video hardware */
- MCFG_SCREEN_ADD("screen", LCD)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", LCD, rgb_t::white)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(84, 48)
@@ -700,7 +700,7 @@ static MACHINE_CONFIG_START( noki3310, noki3310_state )
MCFG_SCREEN_UPDATE_DEVICE("pcd8544", pcd8544_device, screen_update)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_WHITE_AND_BLACK("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_PCD8544_ADD("pcd8544")
MCFG_PCD8544_SCREEN_UPDATE_CALLBACK(noki3310_state, pcd8544_screen_update)
diff --git a/src/mame/drivers/notetaker.cpp b/src/mame/drivers/notetaker.cpp
index 7fd3f9128bd..c5e12655e80 100644
--- a/src/mame/drivers/notetaker.cpp
+++ b/src/mame/drivers/notetaker.cpp
@@ -47,43 +47,59 @@
* [5] http://bitsavers.trailing-edge.com/pdf/xerox/notetaker/memos/19790118_NoteTaker_System_Manual.pdf
TODO: everything below.
-* figure out the correct memory maps for the 256kB of shared ram, and what part of ram constitutes the framebuffer
-* figure out how the emulation-cpu boots and where its 4k of local ram maps to
* Get smalltalk-78 loaded as a rom and forced into ram on startup, since no boot disks have survived (or if any survived, they are not dumped)
* Harris 6402 keyboard UART (within keyboard, next to MCU)
-* The harris 6402 UART is pin compatible with WD TR1865 and TR1602 UARTs, as well as the AY-3-1015A/D
+* The harris 6402 UART is pin compatible with WD TR1865 UART, as well as the AY-3-1015A/D
+ (These are 5v-only versions of the older WD TR1602 and AY-5-1013 parts which used 5v and 12v)
* HLE for the missing i8748[5] MCU in the keyboard which reads the mouse quadratures and buttons and talks serially to the Keyboard UART
-* floppy controller wd1791
+* floppy controller wd1791 and its interrupt
According to [3] and [5] the format is double density/MFM, 128 bytes per sector, 16 sectors per track, 1 or 2 sided, for 170K or 340K per disk. Drive spins at 300RPM.
* According to the schematics, we're missing an 82s147 DISKSEP.PROM used as a data separator
WIP:
* crt5027 video controller - the iocpu side is hooked up, but crashes due to a bug in the crt5027/tms9927 code. the actual drawing to screen part is not connected anywhere yet.
-* pic8259 interrupt controller - this is attached as a device, but the interrupts are not hooked to it yet.
-* Harris 6402 serial/EIA UART - connected to iocpu, other end isn't connected anywhere
-* Harris 6402 keyboard UART (within notetaker) - connected to iocpu, other end isn't connected anywhere
+* pic8259 interrupt controller - this is attached as a device, but only the vblank interrupt is hooked to it yet.
+* Harris 6402 serial/EIA UART - connected to iocpu, other end isn't connected anywhere, interrupt is not connected
+* Harris 6402 keyboard UART (within notetaker) - connected to iocpu, other end isn't connected anywhere, interrupt is not connected
* we're missing a dump of the 82s126 SETMEMRQ PROM used to handle memory arbitration between the crtc and the rest of the system, but the equations are on the schematic and I'm planning to regenerate the prom contents from that, see ROM_LOAD section
+* The DAC, its FIFO and its timer are hooked up and the v2.0 bios beeps, but the stereo latches are not hooked up at all, DAC is treated as mono for now
DONE:
* i/o cpu i/o area needs the memory map worked out per the schematics - done
+* figure out the correct memory maps for the 256kB of shared ram, and what part of ram constitutes the framebuffer - done
+ - 256k of shared ram maps at 00000-3ffff for both cpus with special mem regs at fffec,fffee. the ram mirrors 4 times on the emulatorcpu only, iocpu the 40000-fffff area is open bus.
+ - framebuffer, at least for bios 1.5, lives from 0x4000-0xd5ff, exactly 640x480 pixels 1bpp, interlaced (even? plane is at 4000-8aff, odd? plane is at 8b00-d5ff); however the starting address of the framebuffer is configurable to any address within the 0x0000-0x1ffff range? (this exact range is unclear)
+* figure out how the emulation-cpu boots and where its 8k of local ram maps to - done
+ - both cpus boot, reset and system int controls are accessed at fffea from either cpu; emulatorcpu's 8k of ram lives at the beginning of its address space, but can be disabled in favor of mainram at the same addressses
*/
#include "cpu/i86/i86.h"
#include "machine/pic8259.h"
#include "machine/ay31015.h"
#include "video/tms9927.h"
+#include "sound/dac.h"
+#include "machine/wd_fdc.h"
class notetaker_state : public driver_device
{
public:
+ enum
+ {
+ TIMER_FIFOCLK,
+ };
+
notetaker_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag) ,
m_iocpu(*this, "iocpu"),
m_iopic(*this, "iopic8259"),
m_kbduart(*this, "kbduart"),
m_eiauart(*this, "eiauart"),
- m_crtc(*this, "crt5027")
+ m_crtc(*this, "crt5027"),
+ m_dac(*this, "dac"),
+ m_fdc(*this, "wd1791"),
+ m_floppy0(*this, "wd1791:0"),
+ m_floppy(NULL)
{
}
// devices
@@ -92,12 +108,19 @@ public:
required_device<ay31015_device> m_kbduart;
required_device<ay31015_device> m_eiauart;
required_device<crt5027_device> m_crtc;
+ required_device<dac_device> m_dac;
+ required_device<fd1791_t> m_fdc;
+ required_device<floppy_connector> m_floppy0;
+ floppy_image_device *m_floppy;
//declarations
// screen
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
// basic io
DECLARE_WRITE16_MEMBER(IPConReg_w);
+ DECLARE_WRITE16_MEMBER(FIFOReg_w);
+ DECLARE_WRITE16_MEMBER(FIFOBus_w);
+ DECLARE_WRITE16_MEMBER(LoadDispAddr_w);
// uarts
DECLARE_READ16_MEMBER(ReadKeyData_r);
@@ -116,30 +139,121 @@ public:
DECLARE_READ16_MEMBER(iocpu_r);
DECLARE_WRITE16_MEMBER(iocpu_w);
DECLARE_DRIVER_INIT(notetakr);
-//variables
+ //variables
+ // IPConReg
UINT8 m_BootSeqDone;
+ UINT8 m_ProcLock;
+ UINT8 m_CharCtr;
UINT8 m_DisableROM;
+ UINT8 m_CorrOn_q;
+ UINT8 m_LedInd6;
+ UINT8 m_LedInd7;
+ UINT8 m_LedInd8;
+ // FIFOReg
+ UINT8 m_TabletYOn;
+ UINT8 m_TabletXOn;
+ UINT8 m_FrSel2;
+ UINT8 m_FrSel1;
+ UINT8 m_FrSel0;
+ UINT8 m_SHConB;
+ UINT8 m_SHConA;
+ UINT8 m_SetSH;
+ // output fifo, for DAC
+ UINT16 m_outfifo[16]; // technically three 74LS225 5bit*16stage FIFO chips, arranged as a 16 stage, 12-bit wide fifo (one bit unused per chip)
+ UINT8 m_outfifo_count;
+ UINT8 m_outfifo_tail_ptr;
+ UINT8 m_outfifo_head_ptr;
+ // fifo timer
+ emu_timer *m_FIFO_timer;
+ TIMER_CALLBACK_MEMBER(timer_fifoclk);
+ // framebuffer display starting address
+ UINT16 m_DispAddr;
+
+// separate cpu resets
+ void ip_reset();
+ void ep_reset();
// overrides
+ virtual void machine_start() override;
virtual void machine_reset() override;
+
+protected:
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
};
+void notetaker_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ switch (id)
+ {
+ case TIMER_FIFOCLK:
+ timer_fifoclk(ptr, param);
+ break;
+ default:
+ assert_always(FALSE, "Unknown id in notetaker_state::device_timer");
+ }
+}
+
+TIMER_CALLBACK_MEMBER(notetaker_state::timer_fifoclk)
+{
+ UINT16 data;
+ //pop a value off the fifo and send it to the dac.
+#ifdef FIFO_VERBOSE
+ if (m_outfifo_count == 0) logerror("output fifo is EMPTY! repeating previous sample!\n");
+#endif
+ data = m_outfifo[m_outfifo_tail_ptr];
+ // if fifo is empty (tail ptr == head ptr), do not increment the tail ptr, otherwise do.
+ if (m_outfifo_count > 0)
+ {
+ m_outfifo_tail_ptr++;
+ m_outfifo_count--;
+ }
+ m_outfifo_tail_ptr&=0xF;
+ m_dac->write_unsigned16(data);
+ m_FIFO_timer->adjust(attotime::from_hz(((XTAL_960kHz/10)/4)/((m_FrSel0<<3)+(m_FrSel1<<2)+(m_FrSel2<<1)+1))); // FIFO timer is clocked by 960khz divided by 10 (74ls162 decade counter), divided by 4 (mc14568B with divider 1 pins set to 4), divided by 1,3,5,7,9,11,13,15 (or 0,2,4,6,8,10,12,14?)
+}
+
UINT32 notetaker_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
// have to figure out what resolution we're drawing to here and draw appropriately to screen
+ // code borrowed/stolen from video/mac.cpp
+ UINT32 video_base;
+ UINT16 word;
+ UINT16 *line;
+ int y, x, b;
+
+ video_base = (m_DispAddr << 3)&0x1FFFF;
+#ifdef DEBUG_VIDEO
+ logerror("Video Base = 0x%05x\n", video_base);
+#endif
+ const UINT16 *video_ram_field1 = (UINT16 *)(memregion("mainram")->base()+video_base);
+ const UINT16 *video_ram_field2 = (UINT16 *)(memregion("mainram")->base()+video_base+0x4B00);
+
+ for (y = 0; y < 480; y++)
+ {
+ line = &bitmap.pix16(y);
+
+ for (x = 0; x < 640; x += 16)
+ {
+ if ((y&1)==0) word = *(video_ram_field1++); else word = *(video_ram_field2++);
+ for (b = 0; b < 16; b++)
+ {
+ line[x + b] = (word >> (15 - b)) & 0x0001;
+ }
+ }
+ }
return 0;
}
WRITE16_MEMBER(notetaker_state::IPConReg_w)
{
m_BootSeqDone = (data&0x80)?1:0;
- //m_ProcLock = (data&0x40)?1:0; // bus lock for this processor (hold other processor in wait state)
- //m_CharCtr = (data&0x20)?1:0; // battery charge control
+ m_ProcLock = (data&0x40)?1:0; // bus lock for this processor (hold other processor in wait state)
+ m_CharCtr = (data&0x20)?1:0; // battery charge control
m_DisableROM = (data&0x10)?1:0; // disable rom at 0000-0fff
- //m_CorrOn = (data&0x08)?1:0; // corron (?) also LedInd5
- //m_LedInd6 = (data&0x04)?1:0;
- //m_LedInd7 = (data&0x02)?1:0;
- //m_LedInd8 = (data&0x01)?1:0;
+ m_CorrOn_q = (data&0x08)?1:0; // CorrectionOn (ECC correction enabled); also LedInd5
+ m_LedInd6 = (data&0x04)?1:0;
+ m_LedInd7 = (data&0x02)?1:0;
+ m_LedInd8 = (data&0x01)?1:0;
popmessage("LEDS: CR1: %d, CR2: %d, CR3: %d, CR4: %d", (data&0x04)>>2, (data&0x08)>>3, (data&0x02)>>1, (data&0x01)); // cr1 and 2 are in the reverse order as expected, according to the schematic
}
@@ -150,18 +264,17 @@ READ16_MEMBER( notetaker_state::ReadKeyData_r )
return 0xFF00||m_kbduart->get_received_data();
}
-READ16_MEMBER( notetaker_state::ReadOPStatus_r )
+READ16_MEMBER( notetaker_state::ReadOPStatus_r ) // 74ls368 hex inverter at #l7 provides 4 bits, inverted
{
UINT16 data = 0xFFF0;
- // TODO: FIX HACK: set FIFOInRDY and FIFOOutRdy both to 1
- data |= 0x0C;
- /*
- data |= (m_FIFOOutRdy) ? 0x08 : 0;
- data |= (m_FIFOInRdy) ? 0x04 : 0;
- */
+ data |= (m_outfifo_count >= 1) ? 0 : 0x08; // m_FIFOOutRdy is true if the fifo has at least 1 word in it, false otherwise
+ data |= (m_outfifo_count < 16) ? 0 : 0x04; // m_FIFOInRdy is true if the fifo has less than 16 words in it, false otherwise
// note /SWE is permanently enabled, so we don't enable it here for HD6402 reading
- data |= m_kbduart->get_output_pin(AY31015_DAV ) ? 0x02 : 0; // DR - pin 19
- data |= m_kbduart->get_output_pin(AY31015_TBMT) ? 0x01 : 0; // TBRE - pin 22
+ data |= m_kbduart->get_output_pin(AY31015_DAV ) ? 0 : 0x02; // DR - pin 19
+ data |= m_kbduart->get_output_pin(AY31015_TBMT) ? 0 : 0x01; // TBRE - pin 22
+#ifdef DEBUG_READOPSTATUS
+ logerror("ReadOPStatus read, returning %04x\n", data);
+#endif
return data;
}
@@ -193,18 +306,54 @@ WRITE16_MEMBER( notetaker_state::KeyChipReset_w )
m_kbduart->set_input_pin(AY31015_XR, 1); // ''
}
+/* FIFO (DAC) Stuff and ADC stuff */
+WRITE16_MEMBER(notetaker_state::FIFOReg_w)
+{
+ m_SetSH = (data&0x8000)?1:0;
+ m_SHConA = (data&0x4000)?1:0;
+ m_SHConB = (data&0x2000)?1:0;
+ m_FrSel0 = (data&0x1000)?1:0;
+ m_FrSel1 = (data&0x0800)?1:0;
+ m_FrSel2 = (data&0x0400)?1:0;
+ m_TabletXOn = (data&0x0200)?1:0;
+ m_TabletYOn = (data&0x0100)?1:0;
+ m_FIFO_timer->adjust(attotime::from_hz(((XTAL_960kHz/10)/4)/((m_FrSel0<<3)+(m_FrSel1<<2)+(m_FrSel2<<1)+1))); // FIFO timer is clocked by 960khz divided by 10 (74ls162 decade counter), divided by 4 (mc14568B with divider 1 pins set to 4), divided by 1,3,5,7,9,11,13,15 (or off,2,4,6,8,10,12,14?)
+ logerror("Write to 0x60 FIFOReg_w of %04x; fifo timer set to %d hz\n", data, (((XTAL_960kHz/10)/4)/((m_FrSel0<<3)+(m_FrSel1<<2)+(m_FrSel2<<1)+1)));
+}
+
+WRITE16_MEMBER(notetaker_state::FIFOBus_w)
+{
+ if (m_outfifo_count == 16)
+ {
+#ifdef SPC_LOG_DSP
+ logerror("outfifo was full, write ignored!\n");
+#endif
+ return;
+ }
+ m_outfifo[m_outfifo_head_ptr] = data;
+ m_outfifo_head_ptr++;
+ m_outfifo_count++;
+ m_outfifo_head_ptr&=0xF;
+}
+
+WRITE16_MEMBER( notetaker_state::LoadDispAddr_w )
+{
+ m_DispAddr = data;
+ // for future low level emulation: clear the current counter position here as well, as well as empty/reset the display fifo, and the setmemrq state.
+}
+
/* EIA hd6402 */
READ16_MEMBER( notetaker_state::ReadEIAData_r )
{
return 0xFF00||m_eiauart->get_received_data();
}
-READ16_MEMBER( notetaker_state::ReadEIAStatus_r )
+READ16_MEMBER( notetaker_state::ReadEIAStatus_r ) // 74ls368 hex inverter at #f1 provides 2 bits, inverted
{
UINT16 data = 0xFFFC;
// note /SWE is permanently enabled, so we don't enable it here for HD6402 reading
- data |= m_eiauart->get_output_pin(AY31015_DAV ) ? 0x02 : 0; // DR - pin 19
- data |= m_eiauart->get_output_pin(AY31015_TBMT) ? 0x01 : 0; // TBRE - pin 22
+ data |= m_eiauart->get_output_pin(AY31015_DAV ) ? 0 : 0x02; // DR - pin 19
+ data |= m_eiauart->get_output_pin(AY31015_TBMT) ? 0 : 0x01; // TBRE - pin 22
return data;
}
@@ -250,21 +399,25 @@ READ16_MEMBER(notetaker_state::iocpu_r)
}
else
{
- ram += (offset);
+ // are we in the FFFE8-FFFEF area where the parity/int/reset/etc stuff lives?
+ if (offset >= 0x7fff4) { logerror("attempt to read processor control regs at %d\n", offset<<1); return 0xFFFF; }
+ ram += offset;
return *ram;
}
}
WRITE16_MEMBER(notetaker_state::iocpu_w)
{
+ //UINT16 tempword;
UINT16 *ram = (UINT16 *)(memregion("mainram")->base());
if ( (m_BootSeqDone == 0) || ((m_DisableROM == 0) && ((offset&0x7F800) == 0)) )
{
- logerror("attempt to write %04X to ROM-mapped area at %06X ignored\n", data, offset);
+ logerror("attempt to write %04X to ROM-mapped area at %06X ignored\n", data, offset<<1);
return;
}
- ram += offset;
- *ram = data;
+ // are we in the FFFE8-FFFEF area where the parity/int/reset/etc stuff lives?
+ if (offset >= 0x7fff4) { logerror("attempt to write processor control regs at %d with %02X ignored\n", offset<<1, data); }
+ COMBINE_DATA(&ram[offset]);
}
/* Address map comes from http://bitsavers.informatik.uni-stuttgart.de/pdf/xerox/notetaker/schematics/19790423_Notetaker_IO_Processor.pdf
@@ -277,21 +430,44 @@ mode 1: (during most of boot)
0 0 0 0 0 0 1 * * * * * * * * * * * * * 1 0 RW RAM
<anything not all zeroes>x x x x x x x x x x x x x x 1 0 . Open Bus
mode 2: (during load of the emulatorcpu's firmware to the first 4k of shared ram which is on the emulatorcpu board)
-0 0 0 0 0 0 * * * * * * * * * * * * * * 1 1 RW RAM
+0 0 * * * * * * * * * * * * * * * * * * 1 1 RW RAM
<anything not all zeroes>x x x x x x x x x x x x x x 1 1 . Open Bus
+ EXCEPT for the following, decoded by the memory address logic board:
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 x 1 x . Open Bus
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 x 1 x W FFFEA (Multiprocessor Control (reset/int/boot for each proc; data bits 3,2,1,0 = 0010 means IP, bits 3210 = 0111 means EP; all others ignored.))
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 x 1 x R FFFEC (Syndrome bits (gnd bit 15, parity bit 14, exp (ECC) bits 13-8, bits 7-0 are 'other' (?maybe highest address bits?)
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 x 1 x R FFFEE (Parity Error Address: row bits 15-8, column bits 7-0; reading this acknowledges a parity interrupt)
More or less:
BootSeqDone is 0, DisableROM is ignored, mem map is 0x00000-0xfffff reading is the 0x1000-long ROM, repeated every 0x1000 bytes. writing goes nowhere.
BootSeqDone is 1, DisableROM is 0, mem map is 0x00000-0x00fff reading is the 0x1000-long ROM, remainder of memory map goes to RAM or open bus. writing the ROM area goes nowhere, writing RAM goes to RAM.
BootSeqDone is 1, DisableROM is 1, mem map is entirely RAM or open bus for both reading and writing.
+
+
+Emulator cpu mem map:
+a19 a18 a17 a16 a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0 4KPage0'
+x x 0 0 0 0 0 0 * * * * * * * * * * * * 0 RW Local (fast) RAM
+x x 0 0 0 0 0 0 * * * * * * * * * * * * 1 RW System/Shared RAM
+x x * * * * * * * * * * * * * * * * * * x RW System/Shared RAM
+ EXCEPT for the following, decoded by the EP board and superseding above:
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 x x x x x x RW FFFC0-FFFDF (trigger ILLINST interrupt on EP, data ignored?)
+ And the following, decoded by the memory address logic board:
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 x x . Open Bus
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 x x W FFFEA (Multiprocessor Control (reset(bit 6)/int(bit 5)/boot(bit 4) for each processor; data bits 3,2,1,0 are 'processor address'; 0010 means IP, 0111 means EP; all others ignored.))
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 x x R FFFEC (Syndrome bits (gnd bit 15, parity bit 14, exp(syndrome) bits 13-8, bits 7-0 are the highest address bits)
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 x x R FFFEE (Parity Error Address: row bits 15-8, column bits 7-0; reading this also acknowledges a parity interrupt)
*/
+
static ADDRESS_MAP_START(notetaker_iocpu_mem, AS_PROGRAM, 16, notetaker_state)
/*
- AM_RANGE(0x00000, 0x00fff) AM_ROM AM_REGION("iocpu", 0xFF000) // rom is here if either BootSeqDone OR DisableROM are zero. the 1.5 source code implies writes here are ignored
- AM_RANGE(0x01000, 0x01fff) AM_RAM // 4k of ram, local to the io processor
- AM_RANGE(0x02000, 0x3ffff) AM_RAM AM_BASE("mainram") // 256k of ram (less 8k), shared between both processors
- // note 4000-8fff? is the framebuffer for the screen?
- AM_RANGE(0xff000, 0xfffff) AM_ROM // rom is only banked in here if bootseqdone is 0, so the reset vector is in the proper place
+ AM_RANGE(0x00000, 0x00fff) AM_ROM AM_REGION("iocpu", 0xff000) // rom is here if either BootSeqDone OR DisableROM are zero. the 1.5 source code and the schematics implies writes here are ignored while rom is enabled; if disablerom is 1 this goes to mainram
+ AM_RANGE(0x01000, 0x3ffff) AM_RAM AM_REGION("mainram", 0) // 256k of ram (less 4k), shared between both processors. rom goes here if bootseqdone is 0
+ // note 4000-d5ff is the framebuffer for the screen, in two sets of fields for odd/even interlace?
+ AM_RANGE(0xff000, 0xfffe7) AM_ROM AM_REGION("iocpu", 0xff000) // rom is only banked in here if bootseqdone is 0, so the reset vector is in the proper place. otherwise the memory control regs live at fffe8-fffef
+ //AM_RANGE(0xfffea, 0xfffeb) AM_WRITE(cpuCtl_w);
+ //AM_RANGE(0xfffec, 0xfffed) AM_READ(parityErrHi_r);
+ //AM_RANGE(0xfffee, 0xfffef) AM_READ(parityErrLo_r);
+ AM_RANGE(0xffff0, 0xfffff) AM_ROM AM_REGION("iocpu", 0xffff0)
*/
AM_RANGE(0x00000, 0xfffff) AM_READWRITE(iocpu_r, iocpu_w) // bypass MAME's memory map system as we need finer grained control
ADDRESS_MAP_END
@@ -340,13 +516,13 @@ static ADDRESS_MAP_START(notetaker_iocpu_io, AS_IO, 16, notetaker_state)
AM_RANGE(0x4a, 0x4b) AM_MIRROR(0x7E10) AM_WRITE(LoadKeyData_w) // kbd uart data register
AM_RANGE(0x4c, 0x4d) AM_MIRROR(0x7E10) AM_WRITE(KeyDataReset_w) // kbd uart ddr switch (data reset)
AM_RANGE(0x4e, 0x4f) AM_MIRROR(0x7E10) AM_WRITE(KeyChipReset_w) // kbd uart reset
- //AM_RANGE(0x60, 0x61) AM_MIRROR(0x7E1E) AM_WRITE(FIFOReg_w) // DAC sample and hold and frequency setup
+ AM_RANGE(0x60, 0x61) AM_MIRROR(0x7E1E) AM_WRITE(FIFOReg_w) // DAC sample and hold and frequency setup
//AM_RANGE(0xa0, 0xa1) AM_MIRROR(0x7E18) AM_DEVREADWRITE("debug8255", 8255_device, read, write) // debugger board 8255
- //AM_RANGE(0xc0, 0xc1) AM_MIRROR(0x7E1E) AM_WRITE(FIFOBus_w) // DAC data write to FIFO
- //AM_RANGE(0x100, 0x101) AM_MIRROR(0x7E1E) AM_WRITE(SelDiskReg_w) I/O register (adc speed, crtc pixel clock enable, +5 and +12v relays for floppy, etc)
- //AM_RANGE(0x120, 0x121) AM_MIRROR(0x7E18) AM_DEVREADWRITE("wd1791", fd1971_device) // floppy controller
+ AM_RANGE(0xc0, 0xc1) AM_MIRROR(0x7E1E) AM_WRITE(FIFOBus_w) // DAC data write to FIFO
+ //AM_RANGE(0x100, 0x101) AM_MIRROR(0x7E1E) AM_WRITE(DiskReg_w) I/O register (adc speed, crtc pixel clock enable, +5 and +12v relays for floppy, etc)
+ AM_RANGE(0x120, 0x127) AM_MIRROR(0x7E18) AM_DEVREADWRITE8("wd1791", fd1791_t, read, write, 0x00FF) // floppy controller
AM_RANGE(0x140, 0x15f) AM_MIRROR(0x7E00) AM_DEVREADWRITE8("crt5027", crt5027_device, read, write, 0x00FF) // crt controller
- //AM_RANGE(0x160, 0x161) AM_MIRROR(0x7E1E) AM_WRITE(LoadDispAddr_w) // loads the start address for the display framebuffer
+ AM_RANGE(0x160, 0x161) AM_MIRROR(0x7E1E) AM_WRITE(LoadDispAddr_w) // loads the start address for the display framebuffer
AM_RANGE(0x1a0, 0x1a1) AM_MIRROR(0x7E10) AM_READ(ReadEIAStatus_r) // read keyboard fifo state
AM_RANGE(0x1a2, 0x1a3) AM_MIRROR(0x7E10) AM_READ(ReadEIAData_r) // read keyboard data
AM_RANGE(0x1a8, 0x1a9) AM_MIRROR(0x7E10) AM_WRITE(LoadEIACtlReg_w) // kbd uart control register
@@ -373,10 +549,10 @@ irq7 VSync (interrupt from the VSYN VSync pin from the crt5027)
0x02 to port 0x100 (IOR write: enable 5v only relay control)
0x03 to port 0x100 (IOR write: in addition to above, enable 12v relay control)
<dram memory 0x00000-0x3ffff is zeroed here>
-0x13 to port 0x000 PIC (?????)
-0x08 to port 0x002 PIC (UART int enabled)
-0x0D to port 0x002 PIC (UART, wd1791, and parity error int enabled)
-0xff to port 0x002 PIC (all ints enabled)
+0x13 to port 0x000 PIC (ICW1, 8085 vector 0b000[ignored], edge trigger mode, interval of 8, single mode (no cascade/ICW3), ICW4 needed )
+0x08 to port 0x002 PIC (ICW2, T7-T3 = 0b00001)
+0x0D to port 0x002 PIC (ICW4, SFNM OFF, Buffered Mode MASTER, Normal EOI, 8086 mode)
+0xff to port 0x002 PIC (OCW1, All Ints Masked (disabled/suppressed))
0x0000 to port 0x04e (reset keyboard fifo/controller)
0x0000 to port 0x1ae (reset UART)
0x0016 to port 0x048 (kbd control reg write)
@@ -392,18 +568,101 @@ irq7 VSync (interrupt from the VSYN VSync pin from the crt5027)
0x0a03 to port 0x100 (IOR write: set bit clock to 12Mhz)
0x2a03 to port 0x100 (IOR write: enable crtc clock chain)
0x00 to port 0x15c (fire off crtc timing chain)
-read from 0x0002 (byte wide) (check interrupts) <looking for vblank int or odd/even frame int here, most likely>
-0xaf to port 0x002 PIC (mask out kb int and 30hz display int)
+read from 0x0002 (byte wide) (IMR, read interrupt mask, will be 0xFF from above)
+0xaf to port 0x002 PIC (mask out with 0xEF and 0xBF to unnmask interrupts IR4(OddInt) and IR6(KbdInt), and write back to IMR)
0x0400 to 0x060 (select DAC fifo frequency 2)
read from 0x44 (byte wide) in a loop forever (read keyboard fifo status)
*/
-/* Machine Reset */
+/* Emulator CPU */
+/*
+static ADDRESS_MAP_START(notetaker_emulatorcpu_mem, AS_PROGRAM, 16, notetaker_state)
+ AM_RANGE(0x00000, 0x01fff) AM_MIRROR(0xC0000) AM_RAM // actually a banked block of ram, 8k (4k words)
+ AM_RANGE(0x02000, 0x3ffff) AM_MIRROR(0xC0000) AM_RAM AM_BASE("mainram") // 256k of ram (less 8k), shared between both processors, mirrored 4 times
+ AM_RANGE(0xFFFC0, 0xFFFDF) AM_READWRITE(proc_illinst_r, proc_illinst_w)
+ AM_RANGE(0xFFFE0, 0xFFFEF) AM_READWRITE(proc_control_r, proc_control_w)
+ADDRESS_MAP_END
+
+// note everything in the emulatorcpu's io range is incompletely decoded; so if 0x1800 is accessed it will write to both the debug 8255 AND the pic8259! I'm not sure the code abuses this or not, but it might do so to both write registers and clear parity at once, or something similar.
+static ADDRESS_MAP_START(notetaker_emulatorcpu_io, AS_IO, 16, notetaker_state)
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x800, 0x803) AM_MIRROR(0x07FC) AM_DEVREADWRITE8("emupic8259", pic8259_device, read, write, 0x00ff)
+ AM_RANGE(0x1000, 0x1001) AM_MIRROR(0x07FE) AM_DEVREADWRITE("debug8255", 8255_device, read, write) // debugger board 8255, is this the same one as the iocpu accesses? or are these two 8255s on separate cards?
+ AM_RANGE(0x2000, 0x2001) AM_MIRROR(0x07FE) AM_WRITE(EPConReg_w) // emu processor control reg & leds
+ AM_RANGE(0x4000, 0x4001) AM_MIRROR(0x07FE) AM_WRITE(EmuClearParity_w) // writes here clear the local 8k-ram parity error register
+ADDRESS_MAP_END
+*/
+
+/* Input ports */
+
+/* Floppy Image Interface */
+static SLOT_INTERFACE_START( notetaker_floppies )
+ SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
+SLOT_INTERFACE_END
+
+/* Machine Start; allocate timers and savestate stuff */
+void notetaker_state::machine_start()
+{
+ // allocate the DAC timer, and set it to fire NEVER. We'll set it up properly in IPReset.
+ m_FIFO_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(notetaker_state::timer_fifoclk),this));
+ m_FIFO_timer->adjust(attotime::never);
+ // floppy stuff
+ m_floppy = NULL;
+ // savestate stuff
+ // TODO: add me!
+}
+
+/* Machine Reset; this emulates the full system reset, triggered by ExtReset' (cardcage pin <50>) or the PowerOnReset' circuit */
void notetaker_state::machine_reset()
{
+ ip_reset();
+ ep_reset();
+}
+
+/* IP Reset; this emulates the IPReset' signal */
+void notetaker_state::ip_reset()
+{
+ // not-really-reset related, set line on Keybaord UART
+ m_kbduart->set_input_pin(AY31015_SWE, 0); // status word outputs are permanently enabled (pin 16 SFD(SWE) tied low, active)
+ // reset the Keyboard UART
+ m_kbduart->set_input_pin(AY31015_XR, 0); // MR - pin 21
+ m_kbduart->set_input_pin(AY31015_XR, 1); // ''
+ // reset the IPConReg latch at #f1
m_BootSeqDone = 0;
+ m_ProcLock = 0;
+ m_CharCtr = 0;
m_DisableROM = 0;
- m_kbduart->set_input_pin(AY31015_SWE, 0); // status word outputs are permanently enabled (pin 16 SFD(SWE) tied low, active)
+ m_CorrOn_q = 0;
+ m_LedInd6 = 0;
+ m_LedInd7 = 0;
+ m_LedInd8 = 0;
+ // reset the FIFOReg latch at #h9
+ m_TabletYOn = 0;
+ m_TabletXOn = 0;
+ m_FrSel2 = 0;
+ m_FrSel1 = 0;
+ m_FrSel0 = 0;
+ m_SHConB = 0;
+ m_SHConA = 0;
+ m_SetSH = 0;
+ // Clear the DAC FIFO
+ for (int i=0; i<16; i++) m_outfifo[i] = 0;
+ m_outfifo_count = m_outfifo_tail_ptr = m_outfifo_head_ptr = 0;
+ // Reset the DAC Timer
+ m_FIFO_timer->adjust(attotime::from_hz(((XTAL_960kHz/10)/4)/((m_FrSel0<<3)+(m_FrSel1<<2)+(m_FrSel2<<1)+1))); // FIFO timer is clocked by 960khz divided by 10 (74ls162 decade counter), divided by 4 (mc14568B with divider 1 pins set to 4), divided by 1,3,5,7,9,11,13,15 (or 0,2,4,6,8,10,12,14?)
+ // stuff on display/eia board also reset by IPReset:
+ // reset the Framebuffer Display Address:
+ m_DispAddr = 0;
+ // reset the EIA UART
+ m_eiauart->set_input_pin(AY31015_XR, 0); // MR - pin 21
+ m_eiauart->set_input_pin(AY31015_XR, 1); // ''
+ // reset the DiskReg latches at #c4 and #b4 on the disk/display/eia board
+ // write me!
+}
+
+/* EP Reset; this emulates the EPReset' signal */
+void notetaker_state::ep_reset()
+{
}
/* Input ports */
@@ -432,27 +691,37 @@ static MACHINE_CONFIG_START( notetakr, notetaker_state )
MCFG_SCREEN_REFRESH_RATE(60.975)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(250))
MCFG_SCREEN_UPDATE_DRIVER(notetaker_state, screen_update)
- MCFG_SCREEN_SIZE(64*6, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 64*6-1, 0, 32*8-1)
+ MCFG_SCREEN_SIZE(640, 480)
+ MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
- MCFG_DEVICE_ADD( "crt5027", CRT5027, (XTAL_36MHz/4)/8) // the clock for the crt5027 is configurable rate; 36MHz xtal divided by 1*,2,4,6,8,10,12, or 14 (* because this is a 74s163 this setting probably means divide by 1) and secondarily divided by 8 (again by two to load the 16 bit output shifters after this)
- // on reset, bitclk is 000 so divider is (36mhz/14)/8; during boot it is written with 101, changing the divider to (36mhz/4)/8
- // for now, we just hack it to the latter setting from start
- // TODO: actually do this correctly.
+ /* Devices */
+ MCFG_DEVICE_ADD( "crt5027", CRT5027, (XTAL_36MHz/4)/8) // the clock for the crt5027 is configurable rate; 36MHz xtal divided by 1*, 2, 3, 4, 5, 6, 7, or 8 (* because this is a 74s163 this setting probably means divide by 1; documentation at http://bitsavers.trailing-edge.com/pdf/xerox/notetaker/memos/19790605_Definition_of_8086_Ports.pdf claims it is 1.5, which makes no sense) and secondarily divided by 8 (again by two to load the 16 bit output shifters after this)
+ // on reset, bitclk is 000 so divider is (36mhz/8)/8; during boot it is written with 101, changing the divider to (36mhz/4)/8
+ // TODO: for now, we just hack it to the latter setting from start; this should be handled correctly in ip_reset();
MCFG_TMS9927_CHAR_WIDTH(8) //(8 pixels per column/halfword, 16 pixels per fullword)
+ // TODO: below is HACKED to trigger the odd/even int ir4 instead of vblank int ir7 since ir4 is required for anything to be drawn to screen! hence with the hack this interrupt triggers twice as often as it should
+ MCFG_TMS9927_VSYN_CALLBACK(DEVWRITELINE("iopic8259", pic8259_device, ir4_w)) // note this triggers interrupts on both the iocpu (ir7) and emulatorcpu (ir4)
MCFG_VIDEO_SET_SCREEN("screen")
- MCFG_DEVICE_ADD( "kbduart", AY31015, 0 )
+ MCFG_DEVICE_ADD( "kbduart", AY31015, 0 ) // HD6402, == AY-3-1015D
MCFG_AY31015_RX_CLOCK(XTAL_960kHz) // hard-wired to 960KHz xtal #f11 (60000 baud, 16 clocks per baud)
MCFG_AY31015_TX_CLOCK(XTAL_960kHz) // hard-wired to 960KHz xtal #f11 (60000 baud, 16 clocks per baud)
- MCFG_DEVICE_ADD( "eiauart", AY31015, 0 )
- MCFG_AY31015_RX_CLOCK((96000/4)/5) // hard-wired through an mc14568b divider set to divide by 4, the result set to divide by 5; this resulting 4800hz signal being 300 baud (16 clocks per baud)
- MCFG_AY31015_TX_CLOCK((96000/4)/5) // hard-wired through an mc14568b divider set to divide by 4, the result set to divide by 5; this resulting 4800hz signal being 300 baud (16 clocks per baud)
- /* Devices */
+ MCFG_DEVICE_ADD( "eiauart", AY31015, 0 ) // HD6402, == AY-3-1015D
+ MCFG_AY31015_RX_CLOCK(((XTAL_960kHz/10)/4)/5) // hard-wired through an mc14568b divider set to divide by 4, the result set to divide by 5; this resulting 4800hz signal being 300 baud (16 clocks per baud)
+ MCFG_AY31015_TX_CLOCK(((XTAL_960kHz/10)/4)/5) // hard-wired through an mc14568b divider set to divide by 4, the result set to divide by 5; this resulting 4800hz signal being 300 baud (16 clocks per baud)
+
+ /* Floppy */
+ MCFG_FD1791_ADD("wd1791", (((XTAL_24MHz/3)/2)/2)) // 2mhz, from 24mhz ip clock divided by 6 via 8284, an additional 2 by LS161 at #e1 on display/floppy board
+ MCFG_FLOPPY_DRIVE_ADD("wd1791:0", notetaker_floppies, "525dd", floppy_image_device::default_floppy_formats)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono") // TODO: should be stereo
+ MCFG_SOUND_ADD("dac", DAC, 0) /* DAC1200, set up with two sample and hold HA2425 chips outside it to do stereo */
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@@ -486,13 +755,13 @@ ROM_START( notetakr )
ROMX_LOAD( "biop__2.00_hi.b2716.h1", 0x0000, 0x0800, CRC(1119691d) SHA1(4c20b595b554e6f5489ab2c3fb364b4a052f05e3), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD( "biop__2.00_lo.b2716.g1", 0x0001, 0x0800, CRC(b72aa4c7) SHA1(85dab2399f906c7695dc92e7c18f32e2303c5892), ROM_SKIP(1) | ROM_BIOS(1))
ROM_SYSTEM_BIOS( 1, "v1.50", "IO Monitor v1.50" ) // typed from the source listing at http://bitsavers.trailing-edge.com/pdf/xerox/notetaker/memos/19790620_Z-IOP_1.5_ls.pdf and scrambled
- ROMX_LOAD( "z-iop_1.50_hi.h1", 0x0000, 0x0800, CRC(2994656e) SHA1(ca2bb38eb9075c5c2f3cc5439b209e7e216084da), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "z-iop_1.50_hi.h1", 0x0000, 0x0800, CRC(122ffb5b) SHA1(b957fe24620e1aa98b3158dbcf459937dbd54bac), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD( "z-iop_1.50_lo.g1", 0x0001, 0x0800, CRC(2cb79a67) SHA1(692aafd2aeea27533f6288dbb1cb8678ea08fade), ROM_SKIP(1) | ROM_BIOS(2))
ROM_REGION( 0x100000, "iocpu", ROMREGION_ERASEFF ) // area for descrambled roms
ROM_REGION( 0x100000, "mainram", ROMREGION_ERASEFF ) // main ram, on 2 cards with parity/ecc/syndrome/timing/bus arbitration on another 2 cards
ROM_REGION( 0x1000, "proms", ROMREGION_ERASEFF )
ROM_LOAD( "disksep.prom.82s147.a4", 0x000, 0x200, NO_DUMP ) // disk data separator prom from the disk/display module board
- ROM_LOAD( "memcasraswrite.prom.82s147.b1", 0x200, 0x200, NO_DUMP ) // memory cas/ras/write prom from the memory address logic board
+ ROM_LOAD( "memcasraswrite.prom.82s147.b1", 0x200, 0x200, NO_DUMP ) // memory cas/ras/write state machine prom from the memory address logic board; the equations for this are listed in one of the documents on bitsavers
ROM_LOAD( "setmemrq.prom.82s126.d9", 0x400, 0x100, NO_DUMP ) // SETMEMRQ memory timing prom from the disk/display module board; The equations for this one are actually listed on the schematic and the prom dump can be generated from these:
/*
SetMemRq:
@@ -525,5 +794,5 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS */
-COMP( 1978, notetakr, 0, 0, notetakr, notetakr, notetaker_state, notetakr, "Xerox", "Notetaker", MACHINE_IS_SKELETON)
-//COMP( 1978, notetakr, 0, 0, notetakr, notetakr, driver_device, notetakr, "Xerox", "Notetaker", MACHINE_IS_SKELETON) \ No newline at end of file
+COMP( 1978, notetakr, 0, 0, notetakr, notetakr, notetaker_state, notetakr, "Xerox", "NoteTaker", MACHINE_IS_SKELETON)
+//COMP( 1978, notetakr, 0, 0, notetakr, notetakr, driver_device, notetakr, "Xerox", "NoteTaker", MACHINE_IS_SKELETON) \ No newline at end of file
diff --git a/src/mame/drivers/novag6502.cpp b/src/mame/drivers/novag6502.cpp
new file mode 100644
index 00000000000..9593976acff
--- /dev/null
+++ b/src/mame/drivers/novag6502.cpp
@@ -0,0 +1,437 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+/******************************************************************************
+
+ Novag generic 6502 based chess computer driver
+
+ TODO:
+ - move other Novag sets here when applicable
+
+-------------------------------------------------------------------------------
+
+Super Constellation Chess Computer (model 844):
+- UMC UM6502C @ 4 MHz (8MHz XTAL), 600Hz IRQ(source unknown?)
+- 2*2KB RAM TC5516APL-2 battery-backed, 2*32KB ROM custom label
+- TTL, buzzer, 24 LEDs, 8*8 chessboard buttons
+- external ports for clock and printer, not emulated here
+
+******************************************************************************/
+
+#include "emu.h"
+#include "cpu/m6502/m6502.h"
+#include "machine/nvram.h"
+#include "sound/beep.h"
+
+// internal artwork
+#include "supercon.lh" // clickable
+
+
+class novag6502_state : public driver_device
+{
+public:
+ novag6502_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_beeper(*this, "beeper"),
+ m_inp_matrix(*this, "IN"),
+ m_display_wait(33),
+ m_display_maxy(1),
+ m_display_maxx(0)
+ { }
+
+ // devices/pointers
+ required_device<cpu_device> m_maincpu;
+ optional_device<beep_device> m_beeper;
+ optional_ioport_array<8> m_inp_matrix;
+
+ DECLARE_WRITE8_MEMBER(supercon_1e_w);
+ DECLARE_WRITE8_MEMBER(supercon_1f_w);
+ DECLARE_READ8_MEMBER(supercon_1e_r);
+ DECLARE_READ8_MEMBER(supercon_1f_r);
+
+ // misc common
+ UINT16 m_inp_mux; // multiplexed keypad mask
+ UINT16 m_led_select;
+ UINT16 m_led_data;
+
+ UINT16 read_inputs(int columns);
+
+ // display common
+ int m_display_wait; // led/lamp off-delay in microseconds (default 33ms)
+ int m_display_maxy; // display matrix number of rows
+ int m_display_maxx; // display matrix number of columns (max 31 for now)
+
+ UINT32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on)
+ UINT16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments
+ UINT32 m_display_cache[0x20]; // (internal use)
+ UINT8 m_display_decay[0x20][0x20]; // (internal use)
+
+ TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
+ void display_update();
+ void set_display_size(int maxx, int maxy);
+ void set_display_segmask(UINT32 digits, UINT32 mask);
+ void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update = true);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+};
+
+
+// machine start/reset
+
+void novag6502_state::machine_start()
+{
+ // zerofill
+ memset(m_display_state, 0, sizeof(m_display_state));
+ memset(m_display_cache, ~0, sizeof(m_display_cache));
+ memset(m_display_decay, 0, sizeof(m_display_decay));
+ memset(m_display_segmask, 0, sizeof(m_display_segmask));
+
+ m_inp_mux = 0;
+ m_led_select = 0;
+ m_led_data = 0;
+
+ // register for savestates
+ save_item(NAME(m_display_maxy));
+ save_item(NAME(m_display_maxx));
+ save_item(NAME(m_display_wait));
+
+ save_item(NAME(m_display_state));
+ /* save_item(NAME(m_display_cache)); */ // don't save!
+ save_item(NAME(m_display_decay));
+ save_item(NAME(m_display_segmask));
+
+ save_item(NAME(m_inp_mux));
+ save_item(NAME(m_led_select));
+ save_item(NAME(m_led_data));
+}
+
+void novag6502_state::machine_reset()
+{
+}
+
+
+
+/***************************************************************************
+
+ Helper Functions
+
+***************************************************************************/
+
+// The device may strobe the outputs very fast, it is unnoticeable to the user.
+// To prevent flickering here, we need to simulate a decay.
+
+void novag6502_state::display_update()
+{
+ UINT32 active_state[0x20];
+
+ for (int y = 0; y < m_display_maxy; y++)
+ {
+ active_state[y] = 0;
+
+ for (int x = 0; x <= m_display_maxx; x++)
+ {
+ // turn on powered segments
+ if (m_display_state[y] >> x & 1)
+ m_display_decay[y][x] = m_display_wait;
+
+ // determine active state
+ UINT32 ds = (m_display_decay[y][x] != 0) ? 1 : 0;
+ active_state[y] |= (ds << x);
+ }
+ }
+
+ // on difference, send to output
+ for (int y = 0; y < m_display_maxy; y++)
+ if (m_display_cache[y] != active_state[y])
+ {
+ if (m_display_segmask[y] != 0)
+ output().set_digit_value(y, active_state[y] & m_display_segmask[y]);
+
+ const int mul = (m_display_maxx <= 10) ? 10 : 100;
+ for (int x = 0; x <= m_display_maxx; x++)
+ {
+ int state = active_state[y] >> x & 1;
+ char buf1[0x10]; // lampyx
+ char buf2[0x10]; // y.x
+
+ if (x == m_display_maxx)
+ {
+ // always-on if selected
+ sprintf(buf1, "lamp%da", y);
+ sprintf(buf2, "%d.a", y);
+ }
+ else
+ {
+ sprintf(buf1, "lamp%d", y * mul + x);
+ sprintf(buf2, "%d.%d", y, x);
+ }
+ output().set_value(buf1, state);
+ output().set_value(buf2, state);
+ }
+ }
+
+ memcpy(m_display_cache, active_state, sizeof(m_display_cache));
+}
+
+TIMER_DEVICE_CALLBACK_MEMBER(novag6502_state::display_decay_tick)
+{
+ // slowly turn off unpowered segments
+ for (int y = 0; y < m_display_maxy; y++)
+ for (int x = 0; x <= m_display_maxx; x++)
+ if (m_display_decay[y][x] != 0)
+ m_display_decay[y][x]--;
+
+ display_update();
+}
+
+void novag6502_state::set_display_size(int maxx, int maxy)
+{
+ m_display_maxx = maxx;
+ m_display_maxy = maxy;
+}
+
+void novag6502_state::set_display_segmask(UINT32 digits, UINT32 mask)
+{
+ // set a segment mask per selected digit, but leave unselected ones alone
+ for (int i = 0; i < 0x20; i++)
+ {
+ if (digits & 1)
+ m_display_segmask[i] = mask;
+ digits >>= 1;
+ }
+}
+
+void novag6502_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update)
+{
+ set_display_size(maxx, maxy);
+
+ // update current state
+ UINT32 mask = (1 << maxx) - 1;
+ for (int y = 0; y < maxy; y++)
+ m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
+
+ if (update)
+ display_update();
+}
+
+
+// generic input handlers
+
+UINT16 novag6502_state::read_inputs(int columns)
+{
+ UINT16 ret = 0;
+
+ // read selected input rows
+ for (int i = 0; i < columns; i++)
+ if (m_inp_mux >> i & 1)
+ ret |= m_inp_matrix[i]->read();
+
+ return ret;
+}
+
+
+
+// Devices, I/O
+
+/******************************************************************************
+ Super Constellation
+******************************************************************************/
+
+// TTL
+
+WRITE8_MEMBER(novag6502_state::supercon_1e_w)
+{
+ // d0-d7: input mux, led data
+ m_inp_mux = m_led_data = data;
+ display_matrix(8, 3, m_led_data, m_led_select);
+}
+
+WRITE8_MEMBER(novag6502_state::supercon_1f_w)
+{
+ // d0-d3: ?
+ // d4-d6: select led row
+ m_led_select = data >> 4 & 7;
+ display_matrix(8, 3, m_led_data, m_led_select);
+
+ // d7: enable beeper
+ m_beeper->set_state(data >> 7 & 1);
+}
+
+READ8_MEMBER(novag6502_state::supercon_1e_r)
+{
+ // d0-d5: ?
+ // d6,d7: multiplexed inputs (side panel)
+ return (read_inputs(8) >> 2 & 0xc0) ^ 0xff;
+}
+
+READ8_MEMBER(novag6502_state::supercon_1f_r)
+{
+ // d0-d7: multiplexed inputs (chessboard squares)
+ return ~read_inputs(8) & 0xff;
+}
+
+
+
+/******************************************************************************
+ Address Maps
+******************************************************************************/
+
+static ADDRESS_MAP_START( supercon_mem, AS_PROGRAM, 8, novag6502_state )
+ AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("nvram")
+ AM_RANGE(0x1c00, 0x1c00) AM_WRITENOP // printer/clock?
+ AM_RANGE(0x1d00, 0x1d00) AM_WRITENOP // printer/clock?
+ AM_RANGE(0x1e00, 0x1e00) AM_READWRITE(supercon_1e_r, supercon_1e_w)
+ AM_RANGE(0x1f00, 0x1f00) AM_READWRITE(supercon_1f_r, supercon_1f_w)
+ AM_RANGE(0x2000, 0xffff) AM_ROM
+ADDRESS_MAP_END
+
+
+
+/******************************************************************************
+ Input Ports
+******************************************************************************/
+
+static INPUT_PORTS_START( supercon )
+ PORT_START("IN.0")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h8")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g8")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f8")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e8")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d8")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c8")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b8")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a8")
+ PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("New Game")
+ PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("King / Multi Move / Player/Player")
+
+ PORT_START("IN.1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h7")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g7")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f7")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e7")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d7")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c7")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b7")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a7")
+ PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Verify / Set Up")
+ PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Queen / Best Move/Random / Training Level")
+
+ PORT_START("IN.2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h6")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g6")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f6")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e6")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d6")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c6")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b6")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a6")
+ PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Change Color")
+ PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Bishop / Sound / Depth Search")
+
+ PORT_START("IN.3")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h5")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g5")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f5")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e5")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d5")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c5")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b5")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a5")
+ PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Clear Board")
+ PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("Knight / Solve Mate")
+
+ PORT_START("IN.4")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h4")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g4")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f4")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e4")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d4")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c4")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b4")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a4")
+ PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Print Moves")
+ PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Rook / Print Board")
+
+ PORT_START("IN.5")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h3")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g3")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f3")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e3")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d3")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c3")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b3")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a3")
+ PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Form Size")
+ PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Pion / Print List / Acc. Time")
+
+ PORT_START("IN.6")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h2")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g2")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f2")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e2")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d2")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c2")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b2")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a2")
+ PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Hint")
+ PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Set Level")
+
+ PORT_START("IN.7")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h1")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g1")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f1")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e1")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d1")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c1")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b1")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a1")
+ PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Go")
+ PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Take Back")
+INPUT_PORTS_END
+
+
+
+/******************************************************************************
+ Machine Drivers
+******************************************************************************/
+
+static MACHINE_CONFIG_START( supercon, novag6502_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M6502, XTAL_8MHz/2)
+ MCFG_CPU_PERIODIC_INT_DRIVER(novag6502_state, irq0_line_hold, 600) // guessed
+ MCFG_CPU_PROGRAM_MAP(supercon_mem)
+
+ MCFG_NVRAM_ADD_1FILL("nvram")
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", novag6502_state, display_decay_tick, attotime::from_msec(1))
+ MCFG_DEFAULT_LAYOUT(layout_supercon)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("beeper", BEEP, 1200) // guessed
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+MACHINE_CONFIG_END
+
+
+
+/******************************************************************************
+ ROM Definitions
+******************************************************************************/
+
+ROM_START( supercon )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("novag_8441", 0x0000, 0x8000, CRC(b853cf6e) SHA1(1a759072a5023b92c07f1fac01b7a21f7b5b45d0) ) // label obscured by Q.C. sticker
+ ROM_LOAD("novag_8442", 0x8000, 0x8000, CRC(c8f82331) SHA1(f7fd039f9a3344db9749931490ded9e9e309cfbe) )
+ROM_END
+
+
+
+/******************************************************************************
+ Drivers
+******************************************************************************/
+
+/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
+CONS( 1984, supercon, 0, 0, supercon, supercon, driver_device, 0, "Novag", "Super Constellation", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/octopus.cpp b/src/mame/drivers/octopus.cpp
index b219aa52261..7567722bfdd 100644
--- a/src/mame/drivers/octopus.cpp
+++ b/src/mame/drivers/octopus.cpp
@@ -179,7 +179,7 @@ static MACHINE_CONFIG_START( octopus, octopus_state )
MCFG_SCREEN_UPDATE_DRIVER(octopus_state, screen_update_octopus)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/offtwall.cpp b/src/mame/drivers/offtwall.cpp
index 0e6446d7d1f..bc5d0c0b015 100644
--- a/src/mame/drivers/offtwall.cpp
+++ b/src/mame/drivers/offtwall.cpp
@@ -408,9 +408,8 @@ ROM_START( offtwall )
ROM_LOAD16_BYTE( "136090-2012.17e", 0x00000, 0x20000, CRC(d08d81eb) SHA1(5a72aa2e4fc6455b94aa59a7719d0ddc8bcc80f2) )
ROM_LOAD16_BYTE( "136090-2013.17j", 0x00001, 0x20000, CRC(61c2553d) SHA1(343d39f9b75fd236e9769ec21ab65310f85e31ca) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136090-1020.12c", 0x10000, 0x4000, CRC(488112a5) SHA1(55e84855daacfa303d1031de8c9adb992a846e21) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136090-1020.12c", 0x00000, 0x10000, CRC(488112a5) SHA1(55e84855daacfa303d1031de8c9adb992a846e21) )
ROM_REGION( 0xc0000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "136090-1014.14s", 0x000000, 0x20000, CRC(4d64507e) SHA1(cb2ac41aecd2702cd57c746a6f5986cd753bc29e) )
@@ -442,9 +441,8 @@ ROM_START( offtwallc )
ROM_LOAD16_BYTE( "090-2612.rom", 0x00000, 0x20000, CRC(fc891a3f) SHA1(027815a20fbc6c0c9242768581b97362b39941c2) )
ROM_LOAD16_BYTE( "090-2613.rom", 0x00001, 0x20000, CRC(805d79d4) SHA1(943ec9f408ba875bdf1794ce7d24803043480401) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136090-1020.12c", 0x10000, 0x4000, CRC(488112a5) SHA1(55e84855daacfa303d1031de8c9adb992a846e21) )
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136090-1020.12c", 0x00000, 0x10000, CRC(488112a5) SHA1(55e84855daacfa303d1031de8c9adb992a846e21) )
ROM_REGION( 0xc0000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "090-1614.rom", 0x000000, 0x20000, CRC(307ed447) SHA1(acee15e58cd8def8e52a7586aa14240e1f8be319) )
diff --git a/src/mame/drivers/okean240.cpp b/src/mame/drivers/okean240.cpp
index 8ad181fe10e..8c66709e4d4 100644
--- a/src/mame/drivers/okean240.cpp
+++ b/src/mame/drivers/okean240.cpp
@@ -488,7 +488,7 @@ static MACHINE_CONFIG_START( okean240t, okean240_state )
MCFG_SCREEN_UPDATE_DRIVER(okean240_state, screen_update_okean240)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0)
MCFG_GENERIC_TERMINAL_KEYBOARD_CB(WRITE8(okean240_state, kbd_put))
diff --git a/src/mame/drivers/ondra.cpp b/src/mame/drivers/ondra.cpp
index 33c713902d1..b8c0402709b 100644
--- a/src/mame/drivers/ondra.cpp
+++ b/src/mame/drivers/ondra.cpp
@@ -131,7 +131,7 @@ static MACHINE_CONFIG_START( ondra, ondra_state )
MCFG_SCREEN_UPDATE_DRIVER(ondra_state, screen_update_ondra)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
// sound hardware
diff --git a/src/mame/drivers/orao.cpp b/src/mame/drivers/orao.cpp
index 4695e0855ff..46632ff1a2b 100644
--- a/src/mame/drivers/orao.cpp
+++ b/src/mame/drivers/orao.cpp
@@ -179,7 +179,7 @@ static MACHINE_CONFIG_START( orao, orao_state )
MCFG_SCREEN_UPDATE_DRIVER(orao_state, screen_update_orao)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* audio hardware */
diff --git a/src/mame/drivers/orbit.cpp b/src/mame/drivers/orbit.cpp
index 248d818c497..94796573917 100644
--- a/src/mame/drivers/orbit.cpp
+++ b/src/mame/drivers/orbit.cpp
@@ -306,7 +306,7 @@ static MACHINE_CONFIG_START( orbit, orbit_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", orbit)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
diff --git a/src/mame/drivers/osbexec.cpp b/src/mame/drivers/osbexec.cpp
index c21143bc676..226b4519128 100644
--- a/src/mame/drivers/osbexec.cpp
+++ b/src/mame/drivers/osbexec.cpp
@@ -530,11 +530,11 @@ static MACHINE_CONFIG_START( osbexec, osbexec_state )
MCFG_CPU_IO_MAP( osbexec_io)
MCFG_CPU_CONFIG( osbexec_daisy_config )
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DRIVER(osbexec_state, screen_update)
MCFG_SCREEN_RAW_PARAMS( MAIN_CLOCK/2, 768, 0, 640, 260, 0, 240 ) /* May not be correct */
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette")
+ MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
MCFG_SPEAKER_STANDARD_MONO( "mono" )
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
diff --git a/src/mame/drivers/osborne1.cpp b/src/mame/drivers/osborne1.cpp
index 43bdd2417d3..2581c42b0a4 100644
--- a/src/mame/drivers/osborne1.cpp
+++ b/src/mame/drivers/osborne1.cpp
@@ -244,12 +244,12 @@ static MACHINE_CONFIG_START( osborne1, osborne1_state )
MCFG_CPU_IO_MAP(osborne1_io)
MCFG_Z80_SET_IRQACK_CALLBACK(WRITELINE(osborne1_state, irqack_w))
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DRIVER(osborne1_state, screen_update)
MCFG_SCREEN_RAW_PARAMS( MAIN_CLOCK, 1024, 0, 104*8, 260, 0, 24*10 )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", osborne1)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette")
+ MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
diff --git a/src/mame/drivers/p112.cpp b/src/mame/drivers/p112.cpp
index f67599bcdf7..cfd312e85ec 100644
--- a/src/mame/drivers/p112.cpp
+++ b/src/mame/drivers/p112.cpp
@@ -96,7 +96,7 @@ static MACHINE_CONFIG_START( p112, p112_state )
MCFG_SCREEN_UPDATE_DRIVER(p112_state, screen_update_p112)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/pasogo.cpp b/src/mame/drivers/pasogo.cpp
index d88f121264e..dad0174a079 100644
--- a/src/mame/drivers/pasogo.cpp
+++ b/src/mame/drivers/pasogo.cpp
@@ -101,12 +101,13 @@ TODO:
******************************************************************************/
+
#include "emu.h"
#include "cpu/nec/nec.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
#include "machine/bankdev.h"
-#include "includes/genpc.h"
+#include "machine/genpc.h"
#include "softlist.h"
/*
@@ -442,7 +443,6 @@ static ADDRESS_MAP_START(emsbank_map, AS_PROGRAM, 16, pasogo_state)
ADDRESS_MAP_END
static ADDRESS_MAP_START(pasogo_mem, AS_PROGRAM, 16, pasogo_state)
- AM_RANGE(0x00000, 0x7ffff) AM_RAMBANK("bank10")
AM_RANGE(0xb8000, 0xbffff) AM_RAM AM_SHARE("vram")
AM_RANGE(0x80000, 0xeffff) AM_READWRITE(emsram_r, emsram_w)
AM_RANGE(0xf0000, 0xfffff) AM_ROMBANK("bank27")
@@ -452,6 +452,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START(pasogo_io, AS_IO, 16, pasogo_state)
AM_RANGE(0x0026, 0x0027) AM_READWRITE8(vg230_io_r, vg230_io_w, 0xffff)
AM_RANGE(0x006c, 0x006f) AM_READWRITE(ems_r, ems_w)
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE8("mb", ibm5160_mb_device, map, 0xffff)
ADDRESS_MAP_END
@@ -521,8 +522,8 @@ void pasogo_state::machine_reset()
std::string region_tag;
ioport_port *color = ioport("COLOR");
m_cart_rom = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
- if (!m_cart_rom) // this should never happen, since we make carts mandatory!
- m_cart_rom = memregion("maincpu");
+ if (!m_cart_rom) // even with mandatory carts, debug will crash without anything at the boot vector
+ m_cart_rom = memregion("empty");
membank("bank27")->set_base(m_cart_rom->base());
m_ems_index = 0;
@@ -569,7 +570,7 @@ static MACHINE_CONFIG_START( pasogo, pasogo_state )
MACHINE_CONFIG_END
ROM_START( pasogo )
- ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x10000, "empty", ROMREGION_ERASEFF )
ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS
diff --git a/src/mame/drivers/pc.cpp b/src/mame/drivers/pc.cpp
index b6836ab5f3a..0ab59558865 100644
--- a/src/mame/drivers/pc.cpp
+++ b/src/mame/drivers/pc.cpp
@@ -27,13 +27,13 @@ video HW too.
***************************************************************************/
-#include "emu.h"
+#include "emu.h"
+#include "machine/genpc.h"
#include "cpu/i86/i86.h"
#include "bus/isa/isa.h"
#include "bus/isa/isa_cards.h"
#include "bus/pc_kbd/keyboards.h"
-#include "includes/genpc.h"
#include "softlist.h"
class pc_state : public driver_device
@@ -57,50 +57,29 @@ public:
static ADDRESS_MAP_START( pc8_map, AS_PROGRAM, 8, pc_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xbffff) AM_NOP
- AM_RANGE(0xc0000, 0xc7fff) AM_ROM
- AM_RANGE(0xc8000, 0xcffff) AM_ROM
- AM_RANGE(0xd0000, 0xeffff) AM_NOP
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( zenith_map, AS_PROGRAM, 8, pc_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xbffff) AM_NOP
- AM_RANGE(0xc0000, 0xc7fff) AM_ROM
- AM_RANGE(0xc8000, 0xcffff) AM_ROM
- AM_RANGE(0xd0000, 0xeffff) AM_NOP
AM_RANGE(0xf0000, 0xf7fff) AM_RAM
- AM_RANGE(0xf8000, 0xfffff) AM_ROM
+ AM_RANGE(0xf8000, 0xfffff) AM_ROM AM_REGION("bios", 0x8000)
ADDRESS_MAP_END
-
static ADDRESS_MAP_START( pc16_map, AS_PROGRAM, 16, pc_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xbffff) AM_NOP
- AM_RANGE(0xc0000, 0xc7fff) AM_ROM
- AM_RANGE(0xc8000, 0xcffff) AM_ROM
- AM_RANGE(0xd0000, 0xeffff) AM_NOP
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( ibm5550_map, AS_PROGRAM, 16, pc_state )
- ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xeffff) AM_RAM
- AM_RANGE(0xfc000, 0xfffff) AM_ROM
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START(pc8_io, AS_IO, 8, pc_state )
ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", ibm5160_mb_device, map)
ADDRESS_MAP_END
static ADDRESS_MAP_START(pc16_io, AS_IO, 16, pc_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0070, 0x007f) AM_RAM // needed for Poisk-2
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE8("mb", ibm5160_mb_device, map, 0xffff)
ADDRESS_MAP_END
READ8_MEMBER(pc_state::unk_r)
@@ -111,6 +90,7 @@ READ8_MEMBER(pc_state::unk_r)
static ADDRESS_MAP_START(ibm5550_io, AS_IO, 16, pc_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00a0, 0x00a1) AM_READ8(unk_r, 0x00ff )
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE8("mb", ibm5160_mb_device, map, 0xffff)
ADDRESS_MAP_END
INPUT_CHANGED_MEMBER(pc_state::pc_turbo_callback)
@@ -201,6 +181,7 @@ static MACHINE_CONFIG_START( pccga, pc_state )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_EXTRA_OPTIONS("64K, 128K, 256K, 512K")
/* software lists */
MCFG_SOFTWARE_LIST_ADD("disk_list","ibm5150")
@@ -229,6 +210,7 @@ static MACHINE_CONFIG_START( iskr3104, pc_state )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_EXTRA_OPTIONS("64K, 128K, 256K, 512K")
MACHINE_CONFIG_END
@@ -249,6 +231,7 @@ static MACHINE_CONFIG_START( poisk2, pc_state )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_EXTRA_OPTIONS("64K, 128K, 256K, 512K")
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( zenith, pc_state )
@@ -268,6 +251,7 @@ static MACHINE_CONFIG_START( zenith, pc_state )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_EXTRA_OPTIONS("128K, 256K, 512K")
/* software lists */
MCFG_SOFTWARE_LIST_ADD("disk_list","ibm5150")
@@ -294,12 +278,13 @@ static MACHINE_CONFIG_START( siemens, pc_state )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_EXTRA_OPTIONS("64K, 128K, 256K, 512K")
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( ibm5550, pc_state )
/* basic machine hardware */
- MCFG_CPU_PC(ibm5550, ibm5550, I8086, 8000000)
+ MCFG_CPU_PC(pc16, ibm5550, I8086, 8000000)
MCFG_IBM5160_MOTHERBOARD_ADD("mb", "maincpu")
MCFG_DEVICE_INPUT_DEFAULTS(pccga)
@@ -314,6 +299,7 @@ static MACHINE_CONFIG_START( ibm5550, pc_state )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("640K")
+ MCFG_RAM_EXTRA_OPTIONS("64K, 128K, 256K, 512K")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED(bondwell, pccga)
@@ -331,149 +317,162 @@ static MACHINE_CONFIG_DERIVED(eagle1600, pccga)
MCFG_CPU_PC(pc16, pc16, I8086, 8000000)
MACHINE_CONFIG_END
+static DEVICE_INPUT_DEFAULTS_START( m15 )
+ DEVICE_INPUT_DEFAULTS("DSW0", 0x30, 0x20) // TODO: document correct dip settings
+ DEVICE_INPUT_DEFAULTS("DSW0", 0x01, 0x00)
+DEVICE_INPUT_DEFAULTS_END
+
+static MACHINE_CONFIG_DERIVED(m15, pccga)
+ MCFG_DEVICE_MODIFY("mb")
+ MCFG_DEVICE_INPUT_DEFAULTS(m15)
+ MCFG_DEVICE_MODIFY(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("448K")
+ MCFG_RAM_EXTRA_OPTIONS("16K, 160K, 304K")
+MACHINE_CONFIG_END
+
ROM_START( bw230 )
- ROM_REGION(0x100000,"maincpu", 0)
- ROM_LOAD("bondwell.bin", 0xfe000, 0x2000, CRC(d435a405) SHA1(a57c705d1144c7b61940b6f5c05d785c272fc9bb))
+ ROM_REGION(0x10000,"bios", 0)
+ ROM_LOAD("bondwell.bin", 0xe000, 0x2000, CRC(d435a405) SHA1(a57c705d1144c7b61940b6f5c05d785c272fc9bb))
ROM_END
ROM_START( sicpc1605 )
- ROM_REGION(0x100000,"maincpu", 0)
- ROM_LOAD("multitech pc-700 3.1.bin", 0xfe000, 0x2000, CRC(0ac7a2e1) SHA1(b9c8504e21213d81a068dde9f51f9c973d726e7b))
+ ROM_REGION(0x10000,"bios", 0)
+ ROM_LOAD("multitech pc-700 3.1.bin", 0xe000, 0x2000, CRC(0ac7a2e1) SHA1(b9c8504e21213d81a068dde9f51f9c973d726e7b))
ROM_END
ROM_START( zdsupers )
- ROM_REGION(0x100000,"maincpu", 0)
+ ROM_REGION(0x10000,"bios", 0)
ROM_SYSTEM_BIOS( 0, "v31d", "v3.1d" )
- ROMX_LOAD( "z184m v3.1d.10d", 0xf8000, 0x8000, CRC(44012c3b) SHA1(f2f28979798874386ca8ba3dd3ead24ae7c2aeb4), ROM_BIOS(1))
+ ROMX_LOAD( "z184m v3.1d.10d", 0x8000, 0x8000, CRC(44012c3b) SHA1(f2f28979798874386ca8ba3dd3ead24ae7c2aeb4), ROM_BIOS(1))
ROM_SYSTEM_BIOS( 1, "v29e", "v2.9e" )
- ROMX_LOAD( "z184m v2.9e.10d", 0xf8000, 0x8000, CRC(de2f200b) SHA1(ad5ce601669a82351e412fc6c1c70c47779a1e55), ROM_BIOS(2))
+ ROMX_LOAD( "z184m v2.9e.10d", 0x8000, 0x8000, CRC(de2f200b) SHA1(ad5ce601669a82351e412fc6c1c70c47779a1e55), ROM_BIOS(2))
ROM_END
ROM_START( dgone )
- ROM_REGION(0x100000,"maincpu", 0)
- ROM_LOAD( "dgone.bin", 0xf8000, 0x08000, CRC(2c38c86e) SHA1(c0f85a000d1d13cd354965689e925d677822549e))
+ ROM_REGION(0x10000,"bios", 0)
+ ROM_LOAD( "dgone.bin", 0x8000, 0x08000, CRC(2c38c86e) SHA1(c0f85a000d1d13cd354965689e925d677822549e))
ROM_END
ROM_START( ssam88s )
- ROM_REGION(0x100000,"maincpu", 0)
- ROM_LOAD( "samsung_samtron_88s_vers_2.0a.bin", 0xf8000, 0x08000, CRC(d1252a91) SHA1(469d15b6ecd7b70234975dc12c6bda4212a66652))
+ ROM_REGION(0x10000,"bios", 0)
+ ROM_LOAD( "samsung_samtron_88s_vers_2.0a.bin", 0x8000, 0x08000, CRC(d1252a91) SHA1(469d15b6ecd7b70234975dc12c6bda4212a66652))
ROM_END
ROM_START( mk88 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
+ ROM_REGION16_LE(0x10000,"bios", 0)
ROM_DEFAULT_BIOS("v392")
ROM_SYSTEM_BIOS(0, "v290", "v2.90")
- ROMX_LOAD( "mk88m.bin", 0xfc000, 0x2000, CRC(09c9da3b) SHA1(d1e7ad23b5f5b3576ad128c1198294129754f39f), ROM_BIOS(1))
- ROMX_LOAD( "mk88b.bin", 0xfe000, 0x2000, CRC(8a922476) SHA1(c19c3644ab92fd12e13f32b410cd26e3c844a03b), ROM_BIOS(1))
+ ROMX_LOAD( "mk88m.bin", 0xc000, 0x2000, CRC(09c9da3b) SHA1(d1e7ad23b5f5b3576ad128c1198294129754f39f), ROM_BIOS(1))
+ ROMX_LOAD( "mk88b.bin", 0xe000, 0x2000, CRC(8a922476) SHA1(c19c3644ab92fd12e13f32b410cd26e3c844a03b), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "v391", "v3.91")
- ROMX_LOAD( "mkm.bin", 0xfc000, 0x2000, CRC(65f979e8) SHA1(13e85be9bc8ceb5ab9e559e7d0089e26fbbb84fc), ROM_BIOS(2))
- ROMX_LOAD( "mkb.bin", 0xfe000, 0x2000, CRC(830a0447) SHA1(11bc200fdbcfbbe335f4c282020750c0b5ca4167), ROM_BIOS(2))
+ ROMX_LOAD( "mkm.bin", 0xc000, 0x2000, CRC(65f979e8) SHA1(13e85be9bc8ceb5ab9e559e7d0089e26fbbb84fc), ROM_BIOS(2))
+ ROMX_LOAD( "mkb.bin", 0xe000, 0x2000, CRC(830a0447) SHA1(11bc200fdbcfbbe335f4c282020750c0b5ca4167), ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "v392", "v3.92")
- ROMX_LOAD( "m88.bin", 0xfc000, 0x2000, CRC(fe1b4e36) SHA1(fcb420af0ff09a7d43fcb9b7d0b0233a2071c159), ROM_BIOS(3))
- ROMX_LOAD( "b88.bin", 0xfe000, 0x2000, CRC(58a418df) SHA1(216398d4e4302ee7efcc2c8f9ff9d8a1161229ea), ROM_BIOS(3))
+ ROMX_LOAD( "m88.bin", 0xc000, 0x2000, CRC(fe1b4e36) SHA1(fcb420af0ff09a7d43fcb9b7d0b0233a2071c159), ROM_BIOS(3))
+ ROMX_LOAD( "b88.bin", 0xe000, 0x2000, CRC(58a418df) SHA1(216398d4e4302ee7efcc2c8f9ff9d8a1161229ea), ROM_BIOS(3))
ROM_END
ROM_START( iskr3104 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
- ROMX_LOAD( "198.bin", 0xfc000, 0x2000, CRC(bcfd8e41) SHA1(e21ddf78839aa51fa5feb23f511ff5e2da31b433),ROM_SKIP(1))
- ROMX_LOAD( "199.bin", 0xfc001, 0x2000, CRC(2da5fe79) SHA1(14d5dccc141a0b3367f7f8a7188306fdf03c2b6c),ROM_SKIP(1))
+ ROM_REGION16_LE(0x10000,"bios", 0)
+ ROMX_LOAD( "198.bin", 0xc000, 0x2000, CRC(bcfd8e41) SHA1(e21ddf78839aa51fa5feb23f511ff5e2da31b433),ROM_SKIP(1))
+ ROMX_LOAD( "199.bin", 0xc001, 0x2000, CRC(2da5fe79) SHA1(14d5dccc141a0b3367f7f8a7188306fdf03c2b6c),ROM_SKIP(1))
// EGA card from Iskra-3104
//ROMX_LOAD( "143-03.bin", 0xc0001, 0x2000, CRC(d0706345) SHA1(e04bb40d944426a4ae2e3a614d3f4953d7132ede),ROM_SKIP(1))
//ROMX_LOAD( "143-02.bin", 0xc0000, 0x2000, CRC(c8c18ebb) SHA1(fd6dac76d43ab8b582e70f1d5cc931d679036fb9),ROM_SKIP(1))
ROM_END
ROM_START( poisk2 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
+ ROM_REGION16_LE(0x10000,"bios", 0)
ROM_SYSTEM_BIOS(0, "v20", "v2.0")
- ROMX_LOAD( "b_p2_20h.rf4", 0xfc001, 0x2000, CRC(d53189b7) SHA1(ace40f1a40642b51fe5d2874acef81e48768b23b), ROM_SKIP(1) | ROM_BIOS(1))
- ROMX_LOAD( "b_p2_20l.rf4", 0xfc000, 0x2000, CRC(2d61fcc9) SHA1(11873c8741ba37d6c2fe1f482296aece514b7618), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "b_p2_20h.rf4", 0xc001, 0x2000, CRC(d53189b7) SHA1(ace40f1a40642b51fe5d2874acef81e48768b23b), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD( "b_p2_20l.rf4", 0xc000, 0x2000, CRC(2d61fcc9) SHA1(11873c8741ba37d6c2fe1f482296aece514b7618), ROM_SKIP(1) | ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "v21", "v2.1")
- ROMX_LOAD( "b_p2_21h.rf4", 0xfc001, 0x2000, CRC(22197297) SHA1(506c7e63027f734d62ef537f484024548546011f), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD( "b_p2_21l.rf4", 0xfc000, 0x2000, CRC(0eb2ea7f) SHA1(67bb5fec53ebfa2a5cad2a3d3d595678d6023024), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "b_p2_21h.rf4", 0xc001, 0x2000, CRC(22197297) SHA1(506c7e63027f734d62ef537f484024548546011f), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD( "b_p2_21l.rf4", 0xc000, 0x2000, CRC(0eb2ea7f) SHA1(67bb5fec53ebfa2a5cad2a3d3d595678d6023024), ROM_SKIP(1) | ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "v24", "v2.4")
- ROMX_LOAD( "b_p2_24h.rf4", 0xfc001, 0x2000, CRC(ea842c9e) SHA1(dcdbf27374149dae0ef76d410cc6c615d9b99372), ROM_SKIP(1) | ROM_BIOS(3))
- ROMX_LOAD( "b_p2_24l.rf4", 0xfc000, 0x2000, CRC(02f21250) SHA1(f0b133fb4470bddf2f7bf59688cf68198ed8ce55), ROM_SKIP(1) | ROM_BIOS(3))
+ ROMX_LOAD( "b_p2_24h.rf4", 0xc001, 0x2000, CRC(ea842c9e) SHA1(dcdbf27374149dae0ef76d410cc6c615d9b99372), ROM_SKIP(1) | ROM_BIOS(3))
+ ROMX_LOAD( "b_p2_24l.rf4", 0xc000, 0x2000, CRC(02f21250) SHA1(f0b133fb4470bddf2f7bf59688cf68198ed8ce55), ROM_SKIP(1) | ROM_BIOS(3))
ROM_SYSTEM_BIOS(3, "v21d", "v2.1d")
- ROMX_LOAD( "opp2_1h.rf4", 0xfc001, 0x2000, CRC(b7cd7f4f) SHA1(ac473822fb44d7b898d628732cf0a27fcb4d26d6), ROM_SKIP(1) | ROM_BIOS(4))
- ROMX_LOAD( "opp2_1l.rf4", 0xfc000, 0x2000, CRC(1971dca3) SHA1(ecd61cc7952af834d8abc11db372c3e70775489d), ROM_SKIP(1) | ROM_BIOS(4))
+ ROMX_LOAD( "opp2_1h.rf4", 0xc001, 0x2000, CRC(b7cd7f4f) SHA1(ac473822fb44d7b898d628732cf0a27fcb4d26d6), ROM_SKIP(1) | ROM_BIOS(4))
+ ROMX_LOAD( "opp2_1l.rf4", 0xc000, 0x2000, CRC(1971dca3) SHA1(ecd61cc7952af834d8abc11db372c3e70775489d), ROM_SKIP(1) | ROM_BIOS(4))
ROM_SYSTEM_BIOS(4, "v22d", "v2.2d")
- ROMX_LOAD( "opp2_2h.rf4", 0xfc001, 0x2000, CRC(b9e3a5cc) SHA1(0a28afbff612471ee81d69a98789e75253c57a30), ROM_SKIP(1) | ROM_BIOS(5))
- ROMX_LOAD( "opp2_2l.rf4", 0xfc000, 0x2000, CRC(6877aad6) SHA1(1d0031d044beb4f9f321e3c8fdedf57467958900), ROM_SKIP(1) | ROM_BIOS(5))
+ ROMX_LOAD( "opp2_2h.rf4", 0xc001, 0x2000, CRC(b9e3a5cc) SHA1(0a28afbff612471ee81d69a98789e75253c57a30), ROM_SKIP(1) | ROM_BIOS(5))
+ ROMX_LOAD( "opp2_2l.rf4", 0xc000, 0x2000, CRC(6877aad6) SHA1(1d0031d044beb4f9f321e3c8fdedf57467958900), ROM_SKIP(1) | ROM_BIOS(5))
ROM_SYSTEM_BIOS(5, "v23d", "v2.3d")
- ROMX_LOAD( "opp2_3h.rf4", 0xfc001, 0x2000, CRC(ac7d4f06) SHA1(858d6e084a38814280b3e29fb54971f4f532e484), ROM_SKIP(1) | ROM_BIOS(6))
- ROMX_LOAD( "opp2_3l.rf4", 0xfc000, 0x2000, CRC(3c877ea1) SHA1(0753168659653538311c0ad1df851cbbdba426f4), ROM_SKIP(1) | ROM_BIOS(6))
+ ROMX_LOAD( "opp2_3h.rf4", 0xc001, 0x2000, CRC(ac7d4f06) SHA1(858d6e084a38814280b3e29fb54971f4f532e484), ROM_SKIP(1) | ROM_BIOS(6))
+ ROMX_LOAD( "opp2_3l.rf4", 0xc000, 0x2000, CRC(3c877ea1) SHA1(0753168659653538311c0ad1df851cbbdba426f4), ROM_SKIP(1) | ROM_BIOS(6))
ROM_END
ROM_START( mc1702 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
- ROM_LOAD16_BYTE( "2764_2_(573rf4).rom", 0xfc000, 0x2000, CRC(34a0c8fb) SHA1(88dc247f2e417c2848a2fd3e9b52258ad22a2c07))
- ROM_LOAD16_BYTE( "2764_3_(573rf4).rom", 0xfc001, 0x2000, CRC(68ab212b) SHA1(f3313f77392877d28ce290ffa3432f0a32fc4619))
+ ROM_REGION16_LE(0x10000,"bios", 0)
+ ROM_LOAD16_BYTE( "2764_2_(573rf4).rom", 0xc000, 0x2000, CRC(34a0c8fb) SHA1(88dc247f2e417c2848a2fd3e9b52258ad22a2c07))
+ ROM_LOAD16_BYTE( "2764_3_(573rf4).rom", 0xc001, 0x2000, CRC(68ab212b) SHA1(f3313f77392877d28ce290ffa3432f0a32fc4619))
ROM_LOAD( "ba1m_(573rf5).rom", 0x0000, 0x0800, CRC(08d938e8) SHA1(957b6c691dbef75c1c735e8e4e81669d056971e4))
ROM_END
ROM_START( ibm5550 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
- ROM_LOAD( "ipl5550.rom", 0xfc000, 0x4000, CRC(40cf34c9) SHA1(d41f77fdfa787b0e97ed311e1c084b8699a5b197))
+ ROM_REGION16_LE(0x10000,"bios", 0)
+ ROM_LOAD( "ipl5550.rom", 0xc000, 0x4000, CRC(40cf34c9) SHA1(d41f77fdfa787b0e97ed311e1c084b8699a5b197))
ROM_END
ROM_START( pc7000 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
- ROMX_LOAD( "mitsubishi-m5l27128k-1.bin", 0xf8000, 0x4000, CRC(9683957f) SHA1(4569eab6d88eb1bba0d553d1358e593c326978aa), ROM_SKIP(1))
- ROMX_LOAD( "mitsubishi-m5l27128k-2.bin", 0xf8001, 0x4000, CRC(99b229a4) SHA1(5800c8bafed26873d8cfcc79a05f93a780a31c91), ROM_SKIP(1))
+ ROM_REGION16_LE(0x10000,"bios", 0)
+ ROMX_LOAD( "mitsubishi-m5l27128k-1.bin", 0x8000, 0x4000, CRC(9683957f) SHA1(4569eab6d88eb1bba0d553d1358e593c326978aa), ROM_SKIP(1))
+ ROMX_LOAD( "mitsubishi-m5l27128k-2.bin", 0x8001, 0x4000, CRC(99b229a4) SHA1(5800c8bafed26873d8cfcc79a05f93a780a31c91), ROM_SKIP(1))
ROM_END
ROM_START( olivm15 )
- ROM_REGION(0x100000,"maincpu", 0)
- ROM_LOAD( "oliv_m15.bin",0xfc000, 0x04000, CRC(bf2ef795) SHA1(02d497131f5ca2c78f2accd38ab0eab6813e3ebf))
+ ROM_REGION(0x10000,"bios", 0)
+ ROM_LOAD( "oliv_m15.bin",0xc000, 0x04000, CRC(bf2ef795) SHA1(02d497131f5ca2c78f2accd38ab0eab6813e3ebf))
ROM_END
ROM_START( sx16 )
- ROM_REGION(0x100000,"maincpu", 0)
- ROM_LOAD( "tmm27128ad.bin",0xfc000, 0x4000, CRC(f8543362) SHA1(fef625e260ca89ba02174584bdc12db609f0780e))
+ ROM_REGION(0x10000,"bios", 0)
+ ROM_LOAD( "tmm27128ad.bin",0xc000, 0x4000, CRC(f8543362) SHA1(fef625e260ca89ba02174584bdc12db609f0780e))
ROM_END
ROM_START( compc1 )
- ROM_REGION(0x100000, "maincpu", 0)
- ROM_LOAD("380270-01.bin", 0xfc000, 0x4000, BAD_DUMP CRC(75135d37) SHA1(177283642240fee191ba2d87e1d0c2a377c78ccb))
+ ROM_REGION(0x10000, "bios", 0)
+ ROM_LOAD("380270-01.bin", 0xc000, 0x4000, BAD_DUMP CRC(75135d37) SHA1(177283642240fee191ba2d87e1d0c2a377c78ccb))
ROM_REGION(0x8000, "gfx1", 0)
ROM_LOAD("pc1_char.bin", 0x0000, 0x8000, CRC(4773a945) SHA1(bcc38abecc75d3f641d42987cb0d2ed71d71bc4c))
ROM_END
// Note: Commodore PC20-III, PC10-III and COLT share the same BIOS
ROM_START( pc10iii )
- ROM_REGION(0x100000, "maincpu", 0)
+ ROM_REGION(0x10000, "bios", 0)
ROM_DEFAULT_BIOS("v441")
ROM_SYSTEM_BIOS(0, "v435", "v4.35")
- ROMX_LOAD("318085-01.u201", 0xf8000, 0x8000, NO_DUMP, ROM_BIOS(1))
+ ROMX_LOAD("318085-01.u201", 0x8000, 0x8000, NO_DUMP, ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "v436", "v4.36")
- ROMX_LOAD("318085-02.u201", 0xf8000, 0x8000, NO_DUMP, ROM_BIOS(2))
+ ROMX_LOAD("318085-02.u201", 0x8000, 0x8000, NO_DUMP, ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "v436c", "v4.36c")
- ROMX_LOAD("318085-04.u201", 0xf8000, 0x8000, NO_DUMP, ROM_BIOS(3))
+ ROMX_LOAD("318085-04.u201", 0x8000, 0x8000, NO_DUMP, ROM_BIOS(3))
ROM_SYSTEM_BIOS(3, "v438", "v4.38")
- ROMX_LOAD("318085-05.u201", 0xf8000, 0x8000, CRC(ae9e6a31) SHA1(853ee251cf230818c407a8d13ef060a21c90a8c1), ROM_BIOS(4))
+ ROMX_LOAD("318085-05.u201", 0x8000, 0x8000, CRC(ae9e6a31) SHA1(853ee251cf230818c407a8d13ef060a21c90a8c1), ROM_BIOS(4))
ROM_SYSTEM_BIOS(4, "v439", "v4.39")
- ROMX_LOAD("318085-06.u201", 0xf8000, 0x8000, NO_DUMP, ROM_BIOS(5))
+ ROMX_LOAD("318085-06.u201", 0x8000, 0x8000, NO_DUMP, ROM_BIOS(5))
ROM_SYSTEM_BIOS(5, "v440", "v4.40")
- ROMX_LOAD("318085-07.u201", 0xf8000, 0x8000, NO_DUMP, ROM_BIOS(6))
+ ROMX_LOAD("318085-07.u201", 0x8000, 0x8000, NO_DUMP, ROM_BIOS(6))
ROM_SYSTEM_BIOS(6, "v441", "v4.41")
- ROMX_LOAD("318085-08.u201", 0xf8000, 0x8000, CRC(7e228dc8) SHA1(958dfdd637bd31c01b949fac729d6973a7e630bc), ROM_BIOS(7))
+ ROMX_LOAD("318085-08.u201", 0x8000, 0x8000, CRC(7e228dc8) SHA1(958dfdd637bd31c01b949fac729d6973a7e630bc), ROM_BIOS(7))
ROM_REGION(0x8000, "gfx1", 0)
ROM_LOAD("318086-02.u607", 0x0000, 0x8000, CRC(b406651c) SHA1(856f58353391a74a06ebb8ec9f8333d7d69e5fd6))
//ROM_LOAD("5788005.u33", 0x00000, 0x2000, BAD_DUMP CRC(0bf56d70) SHA1(c2a8b10808bf51a3c123ba3eb1e9dd608231916f)) /* temp so you can read the text */
ROM_END
ROM_START( mbc16 )
- ROM_REGION(0x100000,"maincpu", 0)
- ROM_LOAD( "mbc16.bin", 0xfc000, 0x4000, CRC(f3e0934a) SHA1(e4b91c3d395be0414e20f23ad4919b8ac52639b2))
+ ROM_REGION(0x10000,"bios", 0)
+ ROM_LOAD( "mbc16.bin", 0xc000, 0x4000, CRC(f3e0934a) SHA1(e4b91c3d395be0414e20f23ad4919b8ac52639b2))
ROM_REGION(0x2000,"gfx1", 0)
//ATI Graphics Solution SR (graphics card, need to make it ISA card)
ROM_LOAD( "atigssr.bin", 0x0000, 0x2000, CRC(aca81498) SHA1(0d84c89487ee7a6ac4c9e73fdb30c5fd8aa595f8))
ROM_END
ROM_START( ataripc3 )
- ROM_REGION(0x100000,"maincpu", 0)
- ROM_LOAD( "c101701-004 308.u61",0xf8000, 0x8000, CRC(929a2443) SHA1(8e98f3c9180c55b1f5521727779c016083d27960))
+ ROM_REGION(0x10000,"bios", 0)
+ ROM_LOAD( "c101701-004 308.u61",0x8000, 0x8000, CRC(929a2443) SHA1(8e98f3c9180c55b1f5521727779c016083d27960))
ROM_REGION(0x8000,"gfx1", 0)
ROM_LOAD("5788005.u33", 0x00000, 0x2000, BAD_DUMP CRC(0bf56d70) SHA1(c2a8b10808bf51a3c123ba3eb1e9dd608231916f)) // not the real character ROM
@@ -483,9 +482,9 @@ ROM_START( ataripc3 )
ROM_END
ROM_START( eagle1600 )
- ROM_REGION(0x100000,"maincpu", 0)
- ROMX_LOAD( "eagle 1600 62-2732-001 rev e u403.bin",0xfe000, 0x1000, CRC(3da1e96a) SHA1(77861ba5ebd056da1daf048f5abd459e0528666d), ROM_SKIP(1))
- ROMX_LOAD( "eagle 1600 62-2732-002 rev e u404.bin",0xfe001, 0x1000, CRC(be6492d4) SHA1(ef25faf33e8336121d030e38e177be39be8afb7a), ROM_SKIP(1))
+ ROM_REGION(0x10000,"bios", 0)
+ ROMX_LOAD( "eagle 1600 62-2732-001 rev e u403.bin",0xe000, 0x1000, CRC(3da1e96a) SHA1(77861ba5ebd056da1daf048f5abd459e0528666d), ROM_SKIP(1))
+ ROMX_LOAD( "eagle 1600 62-2732-002 rev e u404.bin",0xe001, 0x1000, CRC(be6492d4) SHA1(ef25faf33e8336121d030e38e177be39be8afb7a), ROM_SKIP(1))
ROM_REGION(0x8000,"gfx1", 0)
ROM_LOAD("eagle 1600 video char gen u301.bin", 0x00000, 0x1000, CRC(1a7e552f) SHA1(749058783eec9d96a70dc5fdbfccb56196f889dc))
@@ -512,7 +511,7 @@ COMP( 1990, mc1702, ibm5150, 0, pccga, pccga, driver_device
COMP( 1987, zdsupers, ibm5150, 0, zenith, pccga, driver_device, 0, "Zenith Data Systems", "SuperSport", 0)
COMP( 1985, sicpc1605, ibm5150, 0, siemens, pccga, driver_device, 0, "Siemens", "Sicomp PC16-05", 0)
-COMP( 198?, olivm15, ibm5150, 0, pccga, pccga, driver_device, 0, "Olivetti", "M15", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // is this a pc clone or not?
+COMP( 198?, olivm15, ibm5150, 0, m15, pccga, driver_device, 0, "Olivetti", "M15", 0)
COMP( 1983, ibm5550, ibm5150, 0, ibm5550, pccga, driver_device, 0, "International Business Machines", "IBM 5550", MACHINE_NOT_WORKING)
@@ -521,6 +520,6 @@ COMP( 1985, pc7000, ibm5150, 0, pccga, pccga, driver_device
COMP( 1988, sx16, ibm5150, 0, pccga, pccga, driver_device, 0, "Sanyo", "SX-16", MACHINE_NOT_WORKING)
COMP( 198?, mbc16, ibm5150, 0, pccga, pccga, driver_device, 0, "Sanyo", "MBC-16" , MACHINE_NOT_WORKING)
-COMP( 198?, ataripc3, ibm5150, 0, pccga, pccga, driver_device, 0, "Atari", "PC-3" , MACHINE_NOT_WORKING)
+COMP( 198?, ataripc3, ibm5150, 0, pccga, pccga, driver_device, 0, "Atari", "PC-3" , 0)
COMP( 1989, ssam88s, ibm5150, 0, pccga, pccga, driver_device, 0, "Samsung", "Samtron 88S" , MACHINE_NOT_WORKING)
COMP( 1983, eagle1600, ibm5150, 0, eagle1600, pccga, driver_device, 0, "Eagle", "1600" , MACHINE_NOT_WORKING)
diff --git a/src/mame/drivers/pcat_dyn.cpp b/src/mame/drivers/pcat_dyn.cpp
index 25fdff8943e..00b1a7df54d 100644
--- a/src/mame/drivers/pcat_dyn.cpp
+++ b/src/mame/drivers/pcat_dyn.cpp
@@ -4,28 +4,19 @@
Tournament Solitaire (c) 1995 Dynamo
-Unmodified 486 PC-AT HW. Input uses a trackball device that isn't PC standard afaik.
+Unmodified 486 PC-AT HW.
Jet Way Information Co. OP495SLC motherboard
- AMD Am486-DX40 CPU
- Trident TVGA9000i video card
+ - Breve Technologies audio adapter
+ - CH Products RollerMouse serial trackball
preliminary driver by Angelo Salese
-TODO:
-- Returns CMOS checksum error, can't enter into BIOS setup screens to set that up ... it's certainly a MESS-to-MAME
- conversion bug or a keyboard device issue, since it works fine in MESS. (Update: it's the keyboard device)
-
-keyboard trick;
-- Set 0x41c to zero then set the scancode accordingly:
-- bp f1699 ah = 0x3b
-- bp f53b9 al = scancode
-- bp f08d9 ah = scancode
-
-0x48 is up 0x4d is down 0x50 is right 0x4b is left
-0x3c/0x3d is pageup/pagedown
-0x01 is esc
-0x0d is enter
+Notes:
+Data from the 99378275.SN file on the rom filesystem is scrambled and written to DF80:0000-0100 then read back.
+If the output isn't satisfactory, it prints "I/O BOARD FAILURE".
********************************************************************************************************************/
@@ -33,33 +24,47 @@ keyboard trick;
#include "cpu/i386/i386.h"
#include "machine/pcshare.h"
#include "video/pc_vga.h"
-
+#include "machine/bankdev.h"
+#include "machine/ds128x.h"
+#include "machine/ins8250.h"
+#include "bus/rs232/rs232.h"
+#include "bus/rs232/ser_mouse.h"
class pcat_dyn_state : public pcat_base_state
{
public:
pcat_dyn_state(const machine_config &mconfig, device_type type, const char *tag)
- : pcat_base_state(mconfig, type, tag) { }
-
- DECLARE_DRIVER_INIT(pcat_dyn);
- virtual void machine_start() override;
+ : pcat_base_state(mconfig, type, tag)
+ , m_bank1(*this, "bank1")
+ , m_bank2(*this, "bank2"){ }
+
+ required_device<address_map_bank_device> m_bank1;
+ required_device<address_map_bank_device> m_bank2;
+ DECLARE_WRITE8_MEMBER(bank1_w);
+ DECLARE_WRITE8_MEMBER(bank2_w);
};
+WRITE8_MEMBER(pcat_dyn_state::bank1_w)
+{
+ m_bank1->set_bank(data);
+}
+
+WRITE8_MEMBER(pcat_dyn_state::bank2_w)
+{
+ m_bank2->set_bank(data);
+}
-//ce9b8
-/* TODO: understand the proper ROM loading.*/
static ADDRESS_MAP_START( pcat_map, AS_PROGRAM, 32, pcat_dyn_state )
AM_RANGE(0x00000000, 0x0009ffff) AM_RAM
AM_RANGE(0x000a0000, 0x000bffff) AM_DEVREADWRITE8("vga", vga_device, mem_r, mem_w, 0xffffffff)
AM_RANGE(0x000c0000, 0x000c7fff) AM_ROM AM_REGION("video_bios", 0)
- AM_RANGE(0x000c8000, 0x000cffff) AM_RAM
-// AM_RANGE(0x000d0000, 0x000d7fff) AM_RAM AM_REGION("disk_bios", 0)
-// AM_RANGE(0x000d8000, 0x000dffff) AM_RAM AM_REGION("disk_bios", 0)
-// AM_RANGE(0x000e0000, 0x000effff) AM_ROM AM_REGION("game_prg", 0)
+ AM_RANGE(0x000d0000, 0x000d0fff) AM_ROM AM_REGION("game_prg", 0x0000) AM_WRITE8(bank1_w, 0xffffffff)
+ AM_RANGE(0x000d1000, 0x000d1fff) AM_ROM AM_REGION("game_prg", 0x1000) AM_WRITE8(bank2_w, 0xffffffff)
+ AM_RANGE(0x000d2000, 0x000d3fff) AM_DEVICE("bank1", address_map_bank_device, amap32)
+ AM_RANGE(0x000d3000, 0x000d4fff) AM_DEVICE("bank2", address_map_bank_device, amap32)
+ AM_RANGE(0x000df400, 0x000df8ff) AM_RAM //I/O board?
AM_RANGE(0x000f0000, 0x000fffff) AM_ROM AM_REGION("bios", 0 )
- AM_RANGE(0x00100000, 0x001fffff) AM_RAM //AM_REGION("game_prg", 0)
-// AM_RANGE(0x00200000, 0x00ffffff) AM_RAM
- //AM_RANGE(0x01000000, 0x01ffffff) AM_RAM
+ AM_RANGE(0x00100000, 0x001fffff) AM_RAM
AM_RANGE(0xffff0000, 0xffffffff) AM_ROM AM_REGION("bios", 0 )
ADDRESS_MAP_END
@@ -68,6 +73,11 @@ static ADDRESS_MAP_START( pcat_io, AS_IO, 32, pcat_dyn_state )
AM_RANGE(0x03b0, 0x03bf) AM_DEVREADWRITE8("vga", vga_device, port_03b0_r, port_03b0_w, 0xffffffff)
AM_RANGE(0x03c0, 0x03cf) AM_DEVREADWRITE8("vga", vga_device, port_03c0_r, port_03c0_w, 0xffffffff)
AM_RANGE(0x03d0, 0x03df) AM_DEVREADWRITE8("vga", vga_device, port_03d0_r, port_03d0_w, 0xffffffff)
+ AM_RANGE(0x03f8, 0x03ff) AM_DEVREADWRITE8("ns16550", ns16550_device, ins8250_r, ins8250_w, 0xffffffff)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( bank_map, AS_0, 32, pcat_dyn_state )
+ AM_RANGE(0x00000, 0xfffff) AM_ROM AM_REGION("game_prg", 0)
ADDRESS_MAP_END
#define AT_KEYB_HELPER(bit, text, key1) \
@@ -104,9 +114,9 @@ static INPUT_PORTS_START( pcat_dyn )
PORT_START("pc_keyboard_7")
INPUT_PORTS_END
-void pcat_dyn_state::machine_start()
-{
-}
+static SLOT_INTERFACE_START(pcat_dyn_com)
+ SLOT_INTERFACE("msmouse", MSFT_SERIAL_MOUSE)
+SLOT_INTERFACE_END
static MACHINE_CONFIG_START( pcat_dyn, pcat_dyn_state )
/* basic machine hardware */
@@ -119,9 +129,39 @@ static MACHINE_CONFIG_START( pcat_dyn, pcat_dyn_state )
MCFG_FRAGMENT_ADD( pcvideo_vga )
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_FRAGMENT_ADD( pcat_common )
+
+ MCFG_DEVICE_REMOVE("rtc")
+ MCFG_DS12885_ADD("rtc")
+ MCFG_MC146818_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir0_w))
+ MCFG_MC146818_CENTURY_INDEX(0x32)
+
+ MCFG_DEVICE_ADD("bank1", ADDRESS_MAP_BANK, 0)
+ MCFG_DEVICE_PROGRAM_MAP(bank_map)
+ MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
+ MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(32)
+ MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(20)
+ MCFG_ADDRESS_MAP_BANK_STRIDE(0x1000)
+ MCFG_DEVICE_ADD("bank2", ADDRESS_MAP_BANK, 0)
+ MCFG_DEVICE_PROGRAM_MAP(bank_map)
+ MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
+ MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(32)
+ MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(20)
+ MCFG_ADDRESS_MAP_BANK_STRIDE(0x1000)
+
+ MCFG_DEVICE_ADD( "ns16550", NS16550, XTAL_1_8432MHz )
+ MCFG_INS8250_OUT_TX_CB(DEVWRITELINE("serport", rs232_port_device, write_txd))
+ MCFG_INS8250_OUT_DTR_CB(DEVWRITELINE("serport", rs232_port_device, write_dtr))
+ MCFG_INS8250_OUT_RTS_CB(DEVWRITELINE("serport", rs232_port_device, write_rts))
+ MCFG_INS8250_OUT_INT_CB(DEVWRITELINE("pic8259_1", pic8259_device, ir4_w))
+ MCFG_RS232_PORT_ADD( "serport", pcat_dyn_com, "msmouse" )
+ MCFG_SLOT_FIXED(true)
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, rx_w))
+ MCFG_RS232_DCD_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, dcd_w))
+ MCFG_RS232_DSR_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, dsr_w))
+ MCFG_RS232_RI_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, ri_w))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, cts_w))
MACHINE_CONFIG_END
/***************************************
@@ -144,6 +184,10 @@ ROM_START(toursol)
ROM_LOAD("sol.u23", 0x80000, 0x40000, CRC(d1e39bd4) SHA1(39c7ee43cddb53fba0f7c0572ddc40289c4edd07))
ROM_LOAD("sol.u24", 0xa0000, 0x40000, CRC(555341e0) SHA1(81fee576728855e234ff7aae06f54ae9705c3ab5))
ROM_LOAD("sol.u28", 0xe0000, 0x02000, CRC(c9374d50) SHA1(49173bc69f70bb2a7e8af9d03e2538b34aa881d8))
+ ROM_FILL(0x2a3e6, 1, 0xeb) // skip prot(?) check
+
+ ROM_REGION(128, "rtc", 0)
+ ROM_LOAD("rtc", 0, 128, BAD_DUMP CRC(732f64c8) SHA1(5386eac3afef9b16af8dd7766e577f7ac700d9cc))
ROM_END
@@ -161,11 +205,11 @@ ROM_START(toursol1)
ROM_LOAD("prom.2", 0x80000, 0x40000, CRC(8b0ac5cf) SHA1(1c2b6a53c9ff4d18a5227d899facbbc719f40205))
ROM_LOAD("prom.3", 0xa0000, 0x40000, CRC(9352e965) SHA1(2bfb647ec27c60a8c821fdf7483199e1a444cea8))
ROM_LOAD("prom.7", 0xe0000, 0x02000, CRC(154c8092) SHA1(4439ee82f36d5d5c334494ba7bb4848e839213a7))
+
+ ROM_REGION(128, "rtc", 0)
+ ROM_LOAD("rtc", 0, 128, BAD_DUMP CRC(732f64c8) SHA1(5386eac3afef9b16af8dd7766e577f7ac700d9cc))
ROM_END
-DRIVER_INIT_MEMBER(pcat_dyn_state,pcat_dyn)
-{
-}
-GAME( 1995, toursol, 0, pcat_dyn, pcat_dyn, pcat_dyn_state, pcat_dyn, ROT0, "Dynamo", "Tournament Solitaire (V1.06, 08/03/95)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND )
-GAME( 1995, toursol1, toursol, pcat_dyn, pcat_dyn, pcat_dyn_state, pcat_dyn, ROT0, "Dynamo", "Tournament Solitaire (V1.04, 06/22/95)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND )
+GAME( 1995, toursol, 0, pcat_dyn, pcat_dyn, driver_device, 0, ROT0, "Dynamo", "Tournament Solitaire (V1.06, 08/03/95)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND )
+GAME( 1995, toursol1, toursol, pcat_dyn, pcat_dyn, driver_device, 0, ROT0, "Dynamo", "Tournament Solitaire (V1.04, 06/22/95)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND )
diff --git a/src/mame/drivers/pcm.cpp b/src/mame/drivers/pcm.cpp
index 912256491f9..e11ff7b8da4 100644
--- a/src/mame/drivers/pcm.cpp
+++ b/src/mame/drivers/pcm.cpp
@@ -267,7 +267,7 @@ static MACHINE_CONFIG_START( pcm, pcm_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", pcm)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* Sound */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/pcxt.cpp b/src/mame/drivers/pcxt.cpp
index e99040f1991..00c618c2f17 100644
--- a/src/mame/drivers/pcxt.cpp
+++ b/src/mame/drivers/pcxt.cpp
@@ -58,43 +58,24 @@ the main program is 9th October 1990.
#include "emu.h"
#include "cpu/i86/i86.h"
-#include "machine/pit8253.h"
-#include "machine/i8255.h"
-#include "machine/am9517a.h"
-#include "machine/pic8259.h"
#include "sound/hc55516.h"
-#include "sound/speaker.h"
-#include "bus/isa/isa.h"
-#include "bus/isa/cga.h"
-
+#include "machine/bankdev.h"
+#include "machine/genpc.h"
class pcxt_state : public driver_device
{
public:
pcxt_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_pit8253(*this, "pit8253"),
- m_pic8259_1(*this, "pic8259_1"),
- m_dma8237_1(*this, "dma8237_1") ,
m_maincpu(*this, "maincpu"),
- m_speaker(*this, "speaker") { }
+ m_mb(*this, "mb"),
+ m_bank(*this, "bank"){ }
- int m_bank;
int m_lastvalue;
UINT8 m_disk_data[2];
UINT8 m_port_b_data;
- UINT8 m_wss1_data;
- UINT8 m_wss2_data;
UINT8 m_status;
UINT8 m_clr_status;
- int m_dma_channel;
- UINT8 m_dma_offset[2][4];
- UINT8 m_at_pages[0x10];
- UINT8 m_pc_spkrdata, m_pit_out2;
-
- required_device<pit8253_device> m_pit8253;
- required_device<pic8259_device> m_pic8259_1;
- required_device<am9517a_device> m_dma8237_1;
DECLARE_READ8_MEMBER(disk_iobank_r);
DECLARE_WRITE8_MEMBER(disk_iobank_w);
@@ -102,30 +83,15 @@ public:
DECLARE_READ8_MEMBER(fdc765_data_r);
DECLARE_WRITE8_MEMBER(fdc765_data_w);
DECLARE_WRITE8_MEMBER(fdc_dor_w);
- DECLARE_READ8_MEMBER(pc_dma_read_byte);
- DECLARE_WRITE8_MEMBER(pc_dma_write_byte);
- DECLARE_READ8_MEMBER(dma_page_select_r);
- DECLARE_WRITE8_MEMBER(dma_page_select_w);
- DECLARE_WRITE_LINE_MEMBER(ibm5150_pit8253_out2_changed);
DECLARE_READ8_MEMBER(port_a_r);
DECLARE_READ8_MEMBER(port_b_r);
DECLARE_READ8_MEMBER(port_c_r);
DECLARE_WRITE8_MEMBER(port_b_w);
- DECLARE_WRITE8_MEMBER(wss_1_w);
- DECLARE_WRITE8_MEMBER(wss_2_w);
- DECLARE_WRITE8_MEMBER(sys_reset_w);
- DECLARE_WRITE_LINE_MEMBER(pc_dma_hrq_changed);
- DECLARE_WRITE_LINE_MEMBER(pc_dack0_w);
- DECLARE_WRITE_LINE_MEMBER(pc_dack1_w);
- DECLARE_WRITE_LINE_MEMBER(pc_dack2_w);
- DECLARE_WRITE_LINE_MEMBER(pc_dack3_w);
- DECLARE_DRIVER_INIT(tetriskr);
- DECLARE_DRIVER_INIT(filetto);
+
virtual void machine_reset() override;
- UINT8 pcxt_speaker_get_spk();
- void pcxt_speaker_set_spkrdata(UINT8 data);
required_device<cpu_device> m_maincpu;
- required_device<speaker_sound_device> m_speaker;
+ required_device<pc_noppi_mb_device> m_mb;
+ optional_device<address_map_bank_device> m_bank;
};
@@ -246,7 +212,6 @@ UINT32 isa8_cga_tetriskr_device::screen_update(screen_device &screen, bitmap_rgb
return 0;
}
-
ROM_START( tetriskr_cga )
ROM_REGION( 0x2000, "gfx1",ROMREGION_ERASE00 ) /* gfx - 1bpp font*/
ROM_LOAD( "b-3.u36", 0x1800, 0x0800, CRC(1a636f9a) SHA1(a356cc57914d0c9b9127670b55d1f340e64b1ac9) )
@@ -299,83 +264,36 @@ WRITE8_MEMBER(pcxt_state::disk_iobank_w)
sets the selected rom that appears in $C0000-$CFFFF
*/
- int newbank = 0;
+ int bank = 0;
// printf("bank %d set to %02X\n", offset,data);
if (data == 0xF0)
{
- newbank = 0;
+ bank = 0;
}
else
{
if((m_lastvalue == 0xF0) && (data == 0xF2))
- newbank = 0;
+ bank = 0;
else if ((m_lastvalue == 0xF1) && (data == 0xF2))
- newbank = 1;
+ bank = 1;
else if ((m_lastvalue == 0xF0) && (data == 0xF3))
- newbank = 2;
+ bank = 2;
else if ((m_lastvalue == 0xF1) && (data == 0xF3))
- newbank = 3;
+ bank = 3;
}
-// printf("newbank = %d\n", newbank);
-
- if (newbank != m_bank)
- {
- m_bank = newbank;
- membank("bank1")->set_base(memregion("game_prg")->base() + 0x10000 * m_bank );
- }
+ m_bank->set_bank(bank);
m_lastvalue = data;
m_disk_data[offset] = data;
}
-/*********************************
-Pit8253
-*********************************/
-
-// pc_speaker_get_spk, pc_speaker_set_spkrdata, and pc_speaker_set_input already exists in MESS, can the implementations be merged?
-UINT8 pcxt_state::pcxt_speaker_get_spk()
-{
- return m_pc_spkrdata & m_pit_out2;
-}
-
-void pcxt_state::pcxt_speaker_set_spkrdata(UINT8 data)
-{
- m_pc_spkrdata = data ? 1 : 0;
- m_speaker->level_w(pcxt_speaker_get_spk());
-}
-
-
-WRITE_LINE_MEMBER(pcxt_state::ibm5150_pit8253_out2_changed)
-{
- m_pit_out2 = state ? 1 : 0;
- m_speaker->level_w(pcxt_speaker_get_spk());
-}
-
-
READ8_MEMBER(pcxt_state::port_a_r)
{
- if(!(m_port_b_data & 0x80))//???
- {
- /*
- x--- ---- Undefined (Always 0)
- -x-- ---- B: Floppy disk drive installed.
- --xx ---- Default Display Mode
- ---- xx-- Undefined (Always 1)
- ---- --x- 8087 NDP installed
- ---- ---x Undefined (Always 1)
- */
- return m_wss1_data;
- }
- else//keyboard emulation
- {
- //m_maincpu->set_input_line(1, PULSE_LINE);
- return 0x00;//Keyboard is disconnected
- //return 0xaa;//Keyboard code
- }
+ return 0xaa;//harmless keyboard error occurs without this
}
READ8_MEMBER(pcxt_state::port_b_r)
@@ -385,13 +303,7 @@ READ8_MEMBER(pcxt_state::port_b_r)
READ8_MEMBER(pcxt_state::port_c_r)
{
- if ( m_port_b_data & 0x01 )
- {
- m_wss2_data = ( m_wss2_data & ~0x10 ) | ( m_pit_out2 ? 0x10 : 0x00 );
- }
- m_wss2_data = ( m_wss2_data & ~0x20 ) | ( m_pit_out2 ? 0x20 : 0x00 );
-
- return m_wss2_data;//TODO
+ return 0x00;// DIPS?
}
/*'buzzer' sound routes here*/
@@ -399,35 +311,13 @@ READ8_MEMBER(pcxt_state::port_c_r)
/* The Korean Tetris uses it as a regular buzzer,probably the sound is all in there...*/
WRITE8_MEMBER(pcxt_state::port_b_w)
{
- /* PPI controller port B*/
- m_pit8253->write_gate2(BIT(data, 0));
- pcxt_speaker_set_spkrdata( data & 0x02 );
+ m_mb->m_pit8253->write_gate2(BIT(data, 0));
+ m_mb->pc_speaker_set_spkrdata(BIT(data, 1));
m_port_b_data = data;
-// device_t *beep = machine().device<beep_device>("beep");
// device_t *cvsd = machine().device("cvsd");
// hc55516_digit_w(cvsd, data);
-// popmessage("%02x\n",data);
-// beep->beep_set_state(0);
-// beep->beep_set_state(1);
-// beep->beep_set_clock(m_port_b_data);
-}
-
-WRITE8_MEMBER(pcxt_state::wss_1_w)
-{
- m_wss1_data = data;
-}
-
-WRITE8_MEMBER(pcxt_state::wss_2_w)
-{
- m_wss2_data = data;
-}
-
-WRITE8_MEMBER(pcxt_state::sys_reset_w)
-{
- m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
}
-
/*Floppy Disk Controller 765 device*/
/*Currently we only emulate it at a point that the BIOS will pass the checks*/
@@ -438,7 +328,6 @@ WRITE8_MEMBER(pcxt_state::sys_reset_w)
READ8_MEMBER(pcxt_state::fdc765_status_r)
{
UINT8 tmp;
-// popmessage("Read FDC status @ PC=%05x",space.device().safe_pc());
tmp = m_status | 0x80;
m_clr_status++;
if(m_clr_status == 0x10)
@@ -452,7 +341,7 @@ READ8_MEMBER(pcxt_state::fdc765_status_r)
READ8_MEMBER(pcxt_state::fdc765_data_r)
{
m_status = (FDC_READ);
- m_pic8259_1->ir6_w(0);
+ m_mb->m_pic8259->ir6_w(0);
return 0xc0;
}
@@ -464,142 +353,44 @@ WRITE8_MEMBER(pcxt_state::fdc765_data_w)
WRITE8_MEMBER(pcxt_state::fdc_dor_w)
{
- /* TODO: properly hook-up upd765 FDC there */
- m_pic8259_1->ir6_w(1);
-}
-
-/******************
-DMA8237 Controller
-******************/
-
-
-WRITE_LINE_MEMBER(pcxt_state::pc_dma_hrq_changed)
-{
- m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE);
-
- /* Assert HLDA */
- m_dma8237_1->hack_w( state );
-}
-
-
-READ8_MEMBER(pcxt_state::pc_dma_read_byte)
-{
- offs_t page_offset = (((offs_t) m_dma_offset[0][m_dma_channel]) << 16)
- & 0xFF0000;
-
- return space.read_byte(page_offset + offset);
-}
-
-
-WRITE8_MEMBER(pcxt_state::pc_dma_write_byte)
-{
- offs_t page_offset = (((offs_t) m_dma_offset[0][m_dma_channel]) << 16)
- & 0xFF0000;
-
- space.write_byte(page_offset + offset, data);
+ m_mb->m_pic8259->ir6_w(1);
}
-READ8_MEMBER(pcxt_state::dma_page_select_r)
-{
- UINT8 data = m_at_pages[offset % 0x10];
-
- switch(offset % 8) {
- case 1:
- data = m_dma_offset[(offset / 8) & 1][2];
- break;
- case 2:
- data = m_dma_offset[(offset / 8) & 1][3];
- break;
- case 3:
- data = m_dma_offset[(offset / 8) & 1][1];
- break;
- case 7:
- data = m_dma_offset[(offset / 8) & 1][0];
- break;
- }
- return data;
-}
-
-
-WRITE8_MEMBER(pcxt_state::dma_page_select_w)
-{
- m_at_pages[offset % 0x10] = data;
-
- switch(offset % 8) {
- case 1:
- m_dma_offset[(offset / 8) & 1][2] = data;
- break;
- case 2:
- m_dma_offset[(offset / 8) & 1][3] = data;
- break;
- case 3:
- m_dma_offset[(offset / 8) & 1][1] = data;
- break;
- case 7:
- m_dma_offset[(offset / 8) & 1][0] = data;
- break;
- }
-}
-
-static void set_dma_channel(device_t *device, int channel, int state)
-{
- pcxt_state *drvstate = device->machine().driver_data<pcxt_state>();
- if (!state) drvstate->m_dma_channel = channel;
-}
-
-WRITE_LINE_MEMBER(pcxt_state::pc_dack0_w){ set_dma_channel(m_dma8237_1, 0, state); }
-WRITE_LINE_MEMBER(pcxt_state::pc_dack1_w){ set_dma_channel(m_dma8237_1, 1, state); }
-WRITE_LINE_MEMBER(pcxt_state::pc_dack2_w){ set_dma_channel(m_dma8237_1, 2, state); }
-WRITE_LINE_MEMBER(pcxt_state::pc_dack3_w){ set_dma_channel(m_dma8237_1, 3, state); }
-
-/******************
-8259 IRQ controller
-******************/
-
static ADDRESS_MAP_START( filetto_map, AS_PROGRAM, 8, pcxt_state )
- AM_RANGE(0x00000, 0x9ffff) AM_RAM //work RAM 640KB
- AM_RANGE(0xa0000, 0xbffff) AM_RAM //CGA VRAM
- AM_RANGE(0xc0000, 0xcffff) AM_ROMBANK("bank1")
- AM_RANGE(0xd0000, 0xeffff) AM_NOP
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ AM_RANGE(0xc0000, 0xcffff) AM_DEVICE("bank", address_map_bank_device, amap8)
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( pcxt_io_common, AS_IO, 8, pcxt_state )
+static ADDRESS_MAP_START( filetto_io, AS_IO, 8, pcxt_state )
ADDRESS_MAP_GLOBAL_MASK(0x3ff)
- AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE("dma8237_1", am9517a_device, read, write ) //8237 DMA Controller
- AM_RANGE(0x0020, 0x002f) AM_DEVREADWRITE("pic8259_1", pic8259_device, read, write ) //8259 Interrupt control
- AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE("pit8253", pit8253_device, read, write) //8253 PIT
- AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write) //PPI 8255
- AM_RANGE(0x0064, 0x0066) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) //PPI 8255
- AM_RANGE(0x0080, 0x0087) AM_READWRITE(dma_page_select_r,dma_page_select_w)
- AM_RANGE(0x0278, 0x027f) AM_RAM //printer (parallel) port latch
- AM_RANGE(0x02f8, 0x02ff) AM_RAM //Modem port
- AM_RANGE(0x0378, 0x037f) AM_RAM //printer (parallel) port
- AM_RANGE(0x03bc, 0x03bf) AM_RAM //printer port
+ AM_RANGE(0x0060, 0x0060) AM_READ(port_a_r) //not a real 8255
+ AM_RANGE(0x0061, 0x0061) AM_READWRITE(port_b_r, port_b_w)
+ AM_RANGE(0x0062, 0x0062) AM_READ(port_c_r)
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", pc_noppi_mb_device, map)
+ AM_RANGE(0x0201, 0x0201) AM_READ_PORT("COIN") //game port
+ AM_RANGE(0x0310, 0x0311) AM_READWRITE(disk_iobank_r,disk_iobank_w) //Prototyping card
+ AM_RANGE(0x0312, 0x0312) AM_READ_PORT("IN0") //Prototyping card,read only
AM_RANGE(0x03f2, 0x03f2) AM_WRITE(fdc_dor_w)
AM_RANGE(0x03f4, 0x03f4) AM_READ(fdc765_status_r) //765 Floppy Disk Controller (FDC) Status
AM_RANGE(0x03f5, 0x03f5) AM_READWRITE(fdc765_data_r,fdc765_data_w)//FDC Data
- AM_RANGE(0x03f8, 0x03ff) AM_RAM //rs232c (serial) port
ADDRESS_MAP_END
-static ADDRESS_MAP_START( filetto_io, AS_IO, 8, pcxt_state )
- ADDRESS_MAP_GLOBAL_MASK(0x3ff)
- AM_IMPORT_FROM( pcxt_io_common )
-// AM_RANGE(0x0200, 0x020f) AM_RAM //game port
- AM_RANGE(0x0201, 0x0201) AM_READ_PORT("COIN") //game port
- AM_RANGE(0x0310, 0x0311) AM_READWRITE(disk_iobank_r,disk_iobank_w) //Prototyping card
- AM_RANGE(0x0312, 0x0312) AM_READ_PORT("IN0") //Prototyping card,read only
+static ADDRESS_MAP_START( tetriskr_map, AS_PROGRAM, 8, pcxt_state )
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( tetriskr_io, AS_IO, 8, pcxt_state )
ADDRESS_MAP_GLOBAL_MASK(0x3ff)
- AM_IMPORT_FROM( pcxt_io_common )
- AM_RANGE(0x0200, 0x020f) AM_RAM //game port
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", pc_noppi_mb_device, map)
AM_RANGE(0x03c8, 0x03c8) AM_READ_PORT("IN0")
AM_RANGE(0x03c9, 0x03c9) AM_READ_PORT("IN1")
// AM_RANGE(0x03ce, 0x03ce) AM_READ_PORT("IN1") //read then discarded?
ADDRESS_MAP_END
+static ADDRESS_MAP_START( bank_map, AS_0, 8, pcxt_state )
+ AM_RANGE(0x00000, 0x3ffff) AM_ROM AM_REGION("game_prg", 0)
+ADDRESS_MAP_END
+
static INPUT_PORTS_START( filetto )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1)
@@ -679,105 +470,58 @@ INPUT_PORTS_END
void pcxt_state::machine_reset()
{
- m_bank = -1;
m_lastvalue = -1;
-
- m_pc_spkrdata = 0;
- m_pit_out2 = 1;
- m_wss2_data = 0;
- m_speaker->level_w(0);
}
-SLOT_INTERFACE_START( filetto_isa8_cards )
+static SLOT_INTERFACE_START( filetto_isa8_cards )
SLOT_INTERFACE_INTERNAL("filetto", ISA8_CGA_FILETTO)
SLOT_INTERFACE_INTERNAL("tetriskr", ISA8_CGA_TETRISKR)
SLOT_INTERFACE_END
-static MACHINE_CONFIG_FRAGMENT(pcxt)
+static MACHINE_CONFIG_START( filetto, pcxt_state )
MCFG_CPU_ADD("maincpu", I8088, XTAL_14_31818MHz/3)
MCFG_CPU_PROGRAM_MAP(filetto_map)
MCFG_CPU_IO_MAP(filetto_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_1", pic8259_device, inta_cb)
-
- MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
- MCFG_PIT8253_CLK0(XTAL_14_31818MHz/12) /* heartbeat IRQ */
- MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259_1", pic8259_device, ir0_w))
- MCFG_PIT8253_CLK1(XTAL_14_31818MHz/12) /* dram refresh */
- MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */
- MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pcxt_state, ibm5150_pit8253_out2_changed))
-
- MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0)
- MCFG_I8255_IN_PORTA_CB(READ8(pcxt_state, port_a_r))
- MCFG_I8255_IN_PORTB_CB(READ8(pcxt_state, port_b_r))
- MCFG_I8255_OUT_PORTB_CB(WRITE8(pcxt_state, port_b_w))
- MCFG_I8255_IN_PORTC_CB(READ8(pcxt_state, port_c_r))
-
- MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
- MCFG_I8255_OUT_PORTA_CB(WRITE8(pcxt_state, wss_1_w))
- MCFG_I8255_OUT_PORTA_CB(WRITE8(pcxt_state, wss_2_w))
- MCFG_I8255_OUT_PORTA_CB(WRITE8(pcxt_state, sys_reset_w))
-
- MCFG_DEVICE_ADD("dma8237_1", AM9517A, XTAL_14_31818MHz/3)
- MCFG_I8237_OUT_HREQ_CB(WRITELINE(pcxt_state, pc_dma_hrq_changed))
- MCFG_I8237_IN_MEMR_CB(READ8(pcxt_state, pc_dma_read_byte))
- MCFG_I8237_OUT_MEMW_CB(WRITE8(pcxt_state, pc_dma_write_byte))
- MCFG_I8237_OUT_DACK_0_CB(WRITELINE(pcxt_state, pc_dack0_w))
- MCFG_I8237_OUT_DACK_1_CB(WRITELINE(pcxt_state, pc_dack1_w))
- MCFG_I8237_OUT_DACK_2_CB(WRITELINE(pcxt_state, pc_dack2_w))
- MCFG_I8237_OUT_DACK_3_CB(WRITELINE(pcxt_state, pc_dack3_w))
-
- MCFG_PIC8259_ADD( "pic8259_1", INPUTLINE("maincpu", 0), VCC, NULL )
-
- MCFG_DEVICE_ADD("isa", ISA8, 0)
- MCFG_ISA8_CPU(":maincpu")
- MCFG_ISA_OUT_IRQ2_CB(DEVWRITELINE("pic8259_1", pic8259_device, ir2_w))
- MCFG_ISA_OUT_IRQ3_CB(DEVWRITELINE("pic8259_1", pic8259_device, ir3_w))
- MCFG_ISA_OUT_IRQ4_CB(DEVWRITELINE("pic8259_1", pic8259_device, ir4_w))
- MCFG_ISA_OUT_IRQ5_CB(DEVWRITELINE("pic8259_1", pic8259_device, ir5_w))
- MCFG_ISA_OUT_IRQ6_CB(DEVWRITELINE("pic8259_1", pic8259_device, ir6_w))
- MCFG_ISA_OUT_IRQ7_CB(DEVWRITELINE("pic8259_1", pic8259_device, ir7_w))
- MCFG_ISA_OUT_DRQ1_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq1_w))
- MCFG_ISA_OUT_DRQ2_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq2_w))
- MCFG_ISA_OUT_DRQ3_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq3_w))
-
- /*Sound Hardware*/
- MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb)
+ MCFG_PCNOPPI_MOTHERBOARD_ADD("mb","maincpu")
+ MCFG_ISA8_SLOT_ADD("mb:isa", "isa1", filetto_isa8_cards, "filetto", true)
MCFG_SOUND_ADD("voice", HC55516, 8000000/4)//8923S-UM5100 is a HC55536 with ROM hook-up
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
-
-// PC "buzzer" sound
- MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
-MACHINE_CONFIG_END
-
-static MACHINE_CONFIG_START( filetto, pcxt_state )
- MCFG_FRAGMENT_ADD( pcxt )
- MCFG_ISA8_SLOT_ADD("isa", "isa1", filetto_isa8_cards, "filetto", true)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mb:mono", 0.60)
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("640K")
+
+ MCFG_DEVICE_ADD("bank", ADDRESS_MAP_BANK, 0)
+ MCFG_DEVICE_PROGRAM_MAP(bank_map)
+ MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
+ MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
+ MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(18)
+ MCFG_ADDRESS_MAP_BANK_STRIDE(0x10000)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( tetriskr, pcxt_state )
- MCFG_FRAGMENT_ADD( pcxt )
-
- MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_ADD("maincpu", I8088, XTAL_14_31818MHz/3)
+ MCFG_CPU_PROGRAM_MAP(tetriskr_map)
MCFG_CPU_IO_MAP(tetriskr_io)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb)
+ MCFG_PCNOPPI_MOTHERBOARD_ADD("mb","maincpu")
- MCFG_ISA8_SLOT_ADD("isa", "isa1", filetto_isa8_cards, "tetriskr", true)
-
- MCFG_DEVICE_REMOVE("voice")
+ MCFG_ISA8_SLOT_ADD("mb:isa", "isa1", filetto_isa8_cards, "tetriskr", true)
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("640K")
MACHINE_CONFIG_END
ROM_START( filetto )
- ROM_REGION( 0x100000, "maincpu", 0 )
- ROM_LOAD("u49.bin", 0xfc000, 0x2000, CRC(1be6948a) SHA1(9c433f63d347c211ee4663f133e8417221bc4bf0))
- ROM_RELOAD( 0xf8000, 0x2000 )
- ROM_RELOAD( 0xf4000, 0x2000 )
- ROM_RELOAD( 0xf0000, 0x2000 )
- ROM_LOAD("u55.bin", 0xfe000, 0x2000, CRC(1e455ed7) SHA1(786d18ce0ab1af45fc538a2300853e497488f0d4) )
- ROM_RELOAD( 0xfa000, 0x2000 )
- ROM_RELOAD( 0xf6000, 0x2000 )
- ROM_RELOAD( 0xf2000, 0x2000 )
+ ROM_REGION( 0x10000, "bios", 0 )
+ ROM_LOAD("u49.bin", 0xc000, 0x2000, CRC(1be6948a) SHA1(9c433f63d347c211ee4663f133e8417221bc4bf0))
+ ROM_RELOAD( 0x8000, 0x2000 )
+ ROM_RELOAD( 0x4000, 0x2000 )
+ ROM_RELOAD( 0x0000, 0x2000 )
+ ROM_LOAD("u55.bin", 0xe000, 0x2000, CRC(1e455ed7) SHA1(786d18ce0ab1af45fc538a2300853e497488f0d4) )
+ ROM_RELOAD( 0xa000, 0x2000 )
+ ROM_RELOAD( 0x6000, 0x2000 )
+ ROM_RELOAD( 0x2000, 0x2000 )
ROM_REGION( 0x40000, "game_prg", 0 ) // program data
ROM_LOAD( "m0.u1", 0x00000, 0x10000, CRC(2408289d) SHA1(eafc144a557a79b58bcb48545cb9c9778e61fcd3) )
@@ -791,19 +535,9 @@ ROM_START( filetto )
ROM_END
ROM_START( tetriskr )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* code */
- ROM_LOAD( "b-10.u10", 0xf0000, 0x10000, CRC(efc2a0f6) SHA1(5f0f1e90237bee9b78184035a32055b059a91eb3) )
+ ROM_REGION( 0x10000, "bios", 0 ) /* code */
+ ROM_LOAD( "b-10.u10", 0x0000, 0x10000, CRC(efc2a0f6) SHA1(5f0f1e90237bee9b78184035a32055b059a91eb3) )
ROM_END
-DRIVER_INIT_MEMBER(pcxt_state,filetto)
-{
- //...
-}
-
-DRIVER_INIT_MEMBER(pcxt_state,tetriskr)
-{
- //...
-}
-
-GAME( 1990, filetto, 0, filetto, filetto, pcxt_state, filetto, ROT0, "Novarmatic", "Filetto (v1.05 901009)",MACHINE_IMPERFECT_SOUND )
-GAME( 1988?,tetriskr, 0, tetriskr, tetriskr, pcxt_state, tetriskr, ROT0, "bootleg", "Tetris (bootleg of Mirrorsoft PC-XT Tetris version)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
+GAME( 1990, filetto, 0, filetto, filetto, driver_device, 0, ROT0, "Novarmatic", "Filetto (v1.05 901009)",MACHINE_IMPERFECT_SOUND )
+GAME( 1988?,tetriskr, 0, tetriskr, tetriskr, driver_device, 0, ROT0, "bootleg", "Tetris (bootleg of Mirrorsoft PC-XT Tetris version)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/pda600.cpp b/src/mame/drivers/pda600.cpp
index c4dd15ab4cd..5fe546c4e7b 100644
--- a/src/mame/drivers/pda600.cpp
+++ b/src/mame/drivers/pda600.cpp
@@ -212,7 +212,7 @@ static MACHINE_CONFIG_START( pda600, pda600_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", pda600)
MCFG_DEFAULT_LAYOUT(layout_lcd)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
// NVRAM needs to be filled with random data to fail the checksum and be initialized correctly
MCFG_NVRAM_ADD_RANDOM_FILL("nvram")
diff --git a/src/mame/drivers/pegasus.cpp b/src/mame/drivers/pegasus.cpp
index bb7d157b3b7..39e921783a7 100644
--- a/src/mame/drivers/pegasus.cpp
+++ b/src/mame/drivers/pegasus.cpp
@@ -496,7 +496,7 @@ static MACHINE_CONFIG_START( pegasus, pegasus_state )
MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 0, 16*16-1)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", pegasus)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/peoplepc.cpp b/src/mame/drivers/peoplepc.cpp
index 12149daa4fb..894017bd029 100644
--- a/src/mame/drivers/peoplepc.cpp
+++ b/src/mame/drivers/peoplepc.cpp
@@ -252,12 +252,12 @@ static MACHINE_CONFIG_START( olypeopl, peoplepc_state)
MCFG_DEVICE_ADD("ppi8255", I8255, 0)
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_RAW_PARAMS(XTAL_22MHz,640,0,640,475,0,475)
MCFG_SCREEN_UPDATE_DEVICE( "h46505", mc6845_device, screen_update )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", empty)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_MC6845_ADD("h46505", H46505, "screen", XTAL_22MHz/8)
MCFG_MC6845_SHOW_BORDER_AREA(false)
diff --git a/src/mame/drivers/peplus.cpp b/src/mame/drivers/peplus.cpp
index fa19b702e7b..08ee154c2c4 100644
--- a/src/mame/drivers/peplus.cpp
+++ b/src/mame/drivers/peplus.cpp
@@ -6945,9 +6945,8 @@ Currently stalls with "PRINTER ERROR"
ROM_LOAD( "mxo-cg1209.u75", 0x18000, 0x8000, CRC(da344256) SHA1(1320c4a8b48a9e61a4607e0a9d08083fde2bd334) )
ROM_REGION( 0x100, "proms", 0 )
- ROM_LOAD( "cap1144.u50", 0x0000, 0x0100, NO_DUMP )
- ROM_LOAD( "cap1426.u50", 0x0000, 0x0100, CRC(6c7c3462) SHA1(b5481b548f4db460d27a4bfebb08188f36ca0c11) )
-
+ ROM_LOAD( "cap1144.u50", 0x0000, 0x0100, CRC(c80e88ef) SHA1(51c62a07f660a2f3be46a8fbb5af01cff2660e8d) )
+
ROM_REGION( 0x1000, "printer", 0 ) /* ROM from the printer driver PCB */
ROM_LOAD( "lp_86.u9", 0x0000, 0x1000, CRC(cdd93c06) SHA1(96f0a6e231f355a0b82bb0e1e698edbd66ff3020) ) /* 2732 EPROM */
ROM_END
diff --git a/src/mame/drivers/pet.cpp b/src/mame/drivers/pet.cpp
index 3a25ac12358..4dd733c274b 100644
--- a/src/mame/drivers/pet.cpp
+++ b/src/mame/drivers/pet.cpp
@@ -1481,7 +1481,7 @@ static MACHINE_CONFIG_START( pet, pet_state )
MCFG_M6502_DISABLE_DIRECT() // address decoding is 100% dynamic, no RAM/ROM banks
// video hardware
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
MCFG_SCREEN_SIZE(320, 200)
@@ -1489,7 +1489,7 @@ static MACHINE_CONFIG_START( pet, pet_state )
MCFG_SCREEN_UPDATE_DRIVER(pet_state, screen_update)
MCFG_TIMER_DRIVER_ADD_PERIODIC("sync_timer", pet_state, sync_tick, attotime::from_hz(120))
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
// devices
MCFG_DEVICE_ADD(M6522_TAG, VIA6522, XTAL_8MHz/8)
@@ -1905,7 +1905,7 @@ static MACHINE_CONFIG_START( pet80, pet80_state )
MCFG_M6502_DISABLE_DIRECT() // address decoding is 100% dynamic, no RAM/ROM banks
// video hardware
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
MCFG_SCREEN_SIZE(640, 250)
@@ -1919,7 +1919,7 @@ static MACHINE_CONFIG_START( pet80, pet80_state )
MCFG_MC6845_UPDATE_ROW_CB(pet80_state, pet80_update_row)
MCFG_MC6845_OUT_VSYNC_CB(DEVWRITELINE(M6520_1_TAG, pia6821_device, cb1_w))
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
// sound hardware
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/plan80.cpp b/src/mame/drivers/plan80.cpp
index f621c73d92b..8ab84821f91 100644
--- a/src/mame/drivers/plan80.cpp
+++ b/src/mame/drivers/plan80.cpp
@@ -235,7 +235,7 @@ static MACHINE_CONFIG_START( plan80, plan80_state )
MCFG_CPU_IO_MAP(plan80_io)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DRIVER(plan80_state, screen_update)
@@ -244,7 +244,7 @@ static MACHINE_CONFIG_START( plan80, plan80_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", plan80)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/pmd85.cpp b/src/mame/drivers/pmd85.cpp
index 04ba8217f70..5e5b091cb9f 100644
--- a/src/mame/drivers/pmd85.cpp
+++ b/src/mame/drivers/pmd85.cpp
@@ -600,7 +600,7 @@ static MACHINE_CONFIG_START( pmd85, pmd85_state )
MCFG_PIT8253_CLK2(1)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(0)
MCFG_SCREEN_SIZE(288, 256)
@@ -608,7 +608,7 @@ static MACHINE_CONFIG_START( pmd85, pmd85_state )
MCFG_SCREEN_UPDATE_DRIVER(pmd85_state, screen_update_pmd85)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette")
+ MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/pockstat.cpp b/src/mame/drivers/pockstat.cpp
index 0662ab59f5b..5c90dcc56d0 100644
--- a/src/mame/drivers/pockstat.cpp
+++ b/src/mame/drivers/pockstat.cpp
@@ -991,7 +991,7 @@ static MACHINE_CONFIG_START( pockstat, pockstat_state )
MCFG_SCREEN_VISIBLE_AREA(0, 32-1, 0, 32-1)
MCFG_SCREEN_UPDATE_DRIVER(pockstat_state, screen_update_pockstat)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("dac", DAC, 0)
diff --git a/src/mame/drivers/poisk1.cpp b/src/mame/drivers/poisk1.cpp
index 0ac808a8553..96381face12 100644
--- a/src/mame/drivers/poisk1.cpp
+++ b/src/mame/drivers/poisk1.cpp
@@ -10,14 +10,24 @@
#include "emu.h"
-#include "includes/poisk1.h"
#include "machine/kb_poisk1.h"
+#include "video/cgapal.h"
+#include "imagedev/cassette.h"
+#include "machine/i8255.h"
+#include "bus/isa/isa.h"
+#include "machine/pic8259.h"
+#include "machine/pit8253.h"
+#include "machine/ram.h"
+#include "bus/isa/xsu_cards.h"
+#include "sound/speaker.h"
#include "cpu/i86/i86.h"
#define CGA_PALETTE_SETS 83
/* one for colour, one for mono, 81 for colour composite */
+#define BG_COLOR(x) (((x) & 7)|(((x) & 0x10) >> 1))
+
#define VERBOSE_DBG 0
#define DBG_LOG(N,M,A) \
@@ -30,10 +40,380 @@
} \
} while (0)
+#define POISK1_UPDATE_ROW(name) \
+ void name(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT8 *videoram, UINT16 ma, UINT8 ra, UINT8 stride)
+
+class p1_state : public driver_device
+{
+public:
+ p1_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_pic8259(*this, "pic8259"),
+ m_pit8253(*this, "pit8253"),
+ m_ppi8255n1(*this, "ppi8255n1"),
+ m_ppi8255n2(*this, "ppi8255n2"),
+ m_isabus(*this, "isa"),
+ m_speaker(*this, "speaker"),
+ m_cassette(*this, "cassette"),
+ m_ram(*this, RAM_TAG),
+ m_palette(*this, "palette") { }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<pic8259_device> m_pic8259;
+ required_device<pit8253_device> m_pit8253;
+ required_device<i8255_device> m_ppi8255n1;
+ required_device<i8255_device> m_ppi8255n2;
+ required_device<isa8_device> m_isabus;
+ required_device<speaker_sound_device> m_speaker;
+ required_device<cassette_image_device> m_cassette;
+ required_device<ram_device> m_ram;
+ required_device<palette_device> m_palette;
+
+ DECLARE_DRIVER_INIT(poisk1);
+ DECLARE_MACHINE_START(poisk1);
+ DECLARE_MACHINE_RESET(poisk1);
+
+ DECLARE_PALETTE_INIT(p1);
+ virtual void video_start() override;
+ UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void set_palette_luts();
+ POISK1_UPDATE_ROW(cga_gfx_2bpp_update_row);
+ POISK1_UPDATE_ROW(cga_gfx_1bpp_update_row);
+ POISK1_UPDATE_ROW(poisk1_gfx_1bpp_update_row);
+
+ DECLARE_WRITE_LINE_MEMBER(p1_pit8253_out2_changed);
+ DECLARE_WRITE_LINE_MEMBER(p1_speaker_set_spkrdata);
+ UINT8 m_p1_spkrdata;
+ UINT8 m_p1_input;
+
+ UINT8 m_kbpoll_mask;
+
+ struct
+ {
+ UINT8 trap[4];
+ std::unique_ptr<UINT8[]> videoram_base;
+ UINT8 *videoram;
+ UINT8 mode_control_6a;
+ UINT8 color_select_68;
+ UINT8 palette_lut_2bpp[4];
+ int stride;
+ void *update_row(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT8 *videoram, UINT16 ma, UINT8 ra, UINT8 stride);
+ } m_video;
+
+ DECLARE_READ8_MEMBER(p1_trap_r);
+ DECLARE_WRITE8_MEMBER(p1_trap_w);
+ DECLARE_READ8_MEMBER(p1_cga_r);
+ DECLARE_WRITE8_MEMBER(p1_cga_w);
+ DECLARE_WRITE8_MEMBER(p1_vram_w);
+
+ DECLARE_READ8_MEMBER(p1_ppi_r);
+ DECLARE_WRITE8_MEMBER(p1_ppi_w);
+ DECLARE_WRITE8_MEMBER(p1_ppi_porta_w);
+ DECLARE_READ8_MEMBER(p1_ppi_porta_r);
+ DECLARE_READ8_MEMBER(p1_ppi_portb_r);
+ DECLARE_READ8_MEMBER(p1_ppi_portc_r);
+ DECLARE_WRITE8_MEMBER(p1_ppi_portc_w);
+ DECLARE_WRITE8_MEMBER(p1_ppi2_porta_w);
+ DECLARE_WRITE8_MEMBER(p1_ppi2_portb_w);
+ DECLARE_READ8_MEMBER(p1_ppi2_portc_r);
+ const char *m_cputag;
+};
+
/*
* onboard devices:
*/
+/*
+ * Poisk-1 doesn't have a mc6845 and always runs in graphics mode. Text mode is emulated by BIOS;
+ * NMI is triggered on access to video memory and to mc6845 ports. Address and data are latched into:
+ *
+ * Port 28H (offset 0) -- lower 8 bits of address
+ * Port 29H (offset 1) -- high -//- and mode bits
+ * Port 2AH (offset 2) -- data
+ */
+
+READ8_MEMBER(p1_state::p1_trap_r)
+{
+ UINT8 data = m_video.trap[offset];
+ DBG_LOG(1,"trap",("R %.2x $%02x\n", 0x28+offset, data));
+ if (offset == 0)
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+ return data;
+}
+
+WRITE8_MEMBER(p1_state::p1_trap_w)
+{
+ DBG_LOG(1,"trap",("W %.2x $%02x\n", 0x28+offset, data));
+}
+
+READ8_MEMBER(p1_state::p1_cga_r)
+{
+ m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
+ return 0;
+}
+
+WRITE8_MEMBER(p1_state::p1_cga_w)
+{
+ UINT16 port = offset + 0x3d0;
+
+ DBG_LOG(1,"cga",("W %.4x $%02x\n", port, data));
+ m_video.trap[2] = data;
+ m_video.trap[1] = 0xC0 | ((port >> 8) & 0x3f);
+ m_video.trap[0] = port & 255;
+ m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
+}
+
+WRITE8_MEMBER(p1_state::p1_vram_w)
+{
+ DBG_LOG(1,"vram",("W %.4x $%02x\n", offset, data));
+ if (m_video.videoram_base)
+ m_video.videoram_base[offset] = data;
+ m_video.trap[2] = data;
+ m_video.trap[1] = 0x80 | ((offset >> 8) & 0x3f);
+ m_video.trap[0] = offset & 255;
+ m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
+}
+
+// CGA emulator
+/*
+068h D42 0..2 R, G, B XXX Foreground/Background color
+ 3 NMI DISABLE NMI trap 1: Disabled 0: Enabled
+ 4 PALETTE XXX Colour palette 0: XXX 1: XXX
+ 5 I (INTENS) XXX Foreground/Background color intensity
+ 6 DISPLAY BANK XXX Video RAM page
+ 7 HIRES 1: 640x200 0: 320x200
+*/
+
+WRITE8_MEMBER(p1_state::p1_ppi2_porta_w)
+{
+ address_space &space_prg = m_maincpu->space(AS_PROGRAM);
+
+ DBG_LOG(1,"color_select_68",("W $%02x\n", data));
+
+ // NMI DISABLE
+ if (BIT(data, 3) != BIT(m_video.color_select_68, 3)) {
+ if (BIT(data, 3)) {
+ space_prg.install_readwrite_bank( 0xb8000, 0xbbfff, "bank11" );
+ } else {
+ space_prg.install_read_bank( 0xb8000, 0xbbfff, "bank11" );
+ space_prg.install_write_handler( 0xb8000, 0xbbfff, WRITE8_DELEGATE(p1_state, p1_vram_w) );
+ }
+ }
+ // DISPLAY BANK
+ if (BIT(data, 6) != BIT(m_video.color_select_68, 6)) {
+ if (BIT(data, 6))
+ m_video.videoram = m_video.videoram_base.get() + 0x4000;
+ else
+ m_video.videoram = m_video.videoram_base.get();
+ }
+ // HIRES -- XXX
+ if (BIT(data, 7) != BIT(m_video.color_select_68, 7)) {
+ if (BIT(data, 7))
+ machine().first_screen()->set_visible_area(0, 640-1, 0, 200-1);
+ else
+ machine().first_screen()->set_visible_area(0, 320-1, 0, 200-1);
+ }
+ m_video.color_select_68 = data;
+ set_palette_luts();
+}
+
+/*
+06Ah Dxx 6 Enable/Disable color burst (?)
+ 7 Enable/Disable D7H/D7L
+*/
+
+WRITE8_MEMBER(p1_state::p1_ppi_portc_w)
+{
+ DBG_LOG(1,"mode_control_6a",("W $%02x\n", data));
+
+ m_video.mode_control_6a = data;
+ set_palette_luts();
+}
+
+void p1_state::set_palette_luts(void)
+{
+ /* Setup 2bpp palette lookup table */
+ // HIRES
+ if ( m_video.color_select_68 & 0x80 )
+ {
+ m_video.palette_lut_2bpp[0] = 0;
+ }
+ else
+ {
+ m_video.palette_lut_2bpp[0] = BG_COLOR(m_video.color_select_68);
+ }
+ // B&W -- XXX
+/*
+ if ( m_video.mode_control_6a & 0x40 )
+ {
+ m_video.palette_lut_2bpp[1] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 3;
+ m_video.palette_lut_2bpp[2] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 4;
+ m_video.palette_lut_2bpp[3] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 7;
+ }
+ else
+*/
+ {
+ // PALETTE
+ if ( m_video.color_select_68 & 0x20 )
+ {
+ m_video.palette_lut_2bpp[1] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 3;
+ m_video.palette_lut_2bpp[2] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 5;
+ m_video.palette_lut_2bpp[3] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 7;
+ }
+ else
+ {
+ m_video.palette_lut_2bpp[1] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 2;
+ m_video.palette_lut_2bpp[2] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 4;
+ m_video.palette_lut_2bpp[3] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 6;
+ }
+ }
+}
+
+/***************************************************************************
+ Draw graphics mode with 320x200 pixels (default) with 2 bits/pixel.
+ Even scanlines are from CGA_base + 0x0000, odd from CGA_base + 0x2000
+ cga fetches 2 byte per mc6845 access.
+***************************************************************************/
+
+POISK1_UPDATE_ROW( p1_state::cga_gfx_2bpp_update_row )
+{
+ const rgb_t *palette = m_palette->palette()->entry_list_raw();
+ UINT32 *p = &bitmap.pix32(ra);
+ UINT16 odd, offset;
+ int i;
+
+ if ( ra == 0 ) DBG_LOG(1,"cga_gfx_2bpp_update_row",("\n"));
+ odd = ( ra & 1 ) << 13;
+ offset = ( ma & 0x1fff ) | odd;
+ for ( i = 0; i < stride; i++ )
+ {
+ UINT8 data = videoram[ offset++ ];
+
+ *p = palette[m_video.palette_lut_2bpp[ ( data >> 6 ) & 0x03 ]]; p++;
+ *p = palette[m_video.palette_lut_2bpp[ ( data >> 4 ) & 0x03 ]]; p++;
+ *p = palette[m_video.palette_lut_2bpp[ ( data >> 2 ) & 0x03 ]]; p++;
+ *p = palette[m_video.palette_lut_2bpp[ data & 0x03 ]]; p++;
+ }
+}
+
+/***************************************************************************
+ Draw graphics mode with 640x200 pixels (default).
+ The cell size is 1x1 (1 scanline is the real default)
+ Even scanlines are from CGA_base + 0x0000, odd from CGA_base + 0x2000
+***************************************************************************/
+
+POISK1_UPDATE_ROW( p1_state::cga_gfx_1bpp_update_row )
+{
+ const rgb_t *palette = m_palette->palette()->entry_list_raw();
+ UINT32 *p = &bitmap.pix32(ra);
+ UINT8 fg = 15, bg = BG_COLOR(m_video.color_select_68);
+ UINT16 odd, offset;
+ int i;
+
+ if ( ra == 0 ) DBG_LOG(1,"cga_gfx_1bpp_update_row",("bg %d\n", bg));
+ odd = ( ra & 1 ) << 13;
+ offset = ( ma & 0x1fff ) | odd;
+ for ( i = 0; i < stride; i++ )
+ {
+ UINT8 data = videoram[ offset++ ];
+
+ *p = palette[( data & 0x80 ) ? fg : bg ]; p++;
+ *p = palette[( data & 0x40 ) ? fg : bg ]; p++;
+ *p = palette[( data & 0x20 ) ? fg : bg ]; p++;
+ *p = palette[( data & 0x10 ) ? fg : bg ]; p++;
+ *p = palette[( data & 0x08 ) ? fg : bg ]; p++;
+ *p = palette[( data & 0x04 ) ? fg : bg ]; p++;
+ *p = palette[( data & 0x02 ) ? fg : bg ]; p++;
+ *p = palette[( data & 0x01 ) ? fg : bg ]; p++;
+ }
+}
+
+/***************************************************************************
+ Draw graphics mode with 640x200 pixels + extra highlight color for text
+ mode emulation
+ Even scanlines are from CGA_base + 0x0000, odd from CGA_base + 0x2000
+***************************************************************************/
+
+POISK1_UPDATE_ROW( p1_state::poisk1_gfx_1bpp_update_row )
+{
+ const rgb_t *palette = m_palette->palette()->entry_list_raw();
+ UINT32 *p = &bitmap.pix32(ra);
+ UINT8 fg, bg = BG_COLOR(m_video.color_select_68);
+ UINT16 odd, offset;
+ int i;
+
+ if ( ra == 0 ) DBG_LOG(1,"poisk1_gfx_1bpp_update_row",("bg %d\n", bg));
+ odd = ( ra & 1 ) << 13;
+ offset = ( ma & 0x1fff ) | odd;
+ for ( i = 0; i < stride; i++ )
+ {
+ UINT8 data = videoram[ offset++ ];
+
+ fg = (data & 0x80) ? ( (m_video.color_select_68 & 0x20) ? 10 : 11 ) : 15; // XXX
+ *p = palette[bg]; p++;
+ *p = palette[( data & 0x40 ) ? fg : bg ]; p++;
+ *p = palette[( data & 0x20 ) ? fg : bg ]; p++;
+ *p = palette[( data & 0x10 ) ? fg : bg ]; p++;
+ *p = palette[( data & 0x08 ) ? fg : bg ]; p++;
+ *p = palette[( data & 0x04 ) ? fg : bg ]; p++;
+ *p = palette[( data & 0x02 ) ? fg : bg ]; p++;
+ *p = palette[( data & 0x01 ) ? fg : bg ]; p++;
+ }
+}
+
+/* Initialise the cga palette */
+PALETTE_INIT_MEMBER(p1_state, p1)
+{
+ int i;
+
+ DBG_LOG(0,"init",("palette_init()\n"));
+
+ for ( i = 0; i < CGA_PALETTE_SETS * 16; i++ )
+ {
+ palette.set_pen_color(i, cga_palette[i][0], cga_palette[i][1], cga_palette[i][2] );
+ }
+}
+
+void p1_state::video_start()
+{
+ address_space &space = m_maincpu->space( AS_PROGRAM );
+
+ DBG_LOG(0,"init",("video_start()\n"));
+
+ memset(&m_video, 0, sizeof(m_video));
+ m_video.videoram_base = std::make_unique<UINT8[]>(0x8000);
+ m_video.videoram = m_video.videoram_base.get();
+ m_video.stride = 80;
+
+ space.install_readwrite_bank(0xb8000, 0xbffff, "bank11" );
+ machine().root_device().membank("bank11")->set_base(m_video.videoram);
+}
+
+UINT32 p1_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ UINT16 ra, ma = 0;
+
+ if (!m_video.stride || !m_video.videoram) return 0;
+
+ // bit 6 of 6Ah disables color burst -- not implemented
+ for (ra = cliprect.min_y; ra <= cliprect.max_y; ra++)
+ {
+ if (BIT(m_video.color_select_68, 7)) {
+ if (BIT(m_video.mode_control_6a, 7)) {
+ cga_gfx_1bpp_update_row(bitmap, cliprect, m_video.videoram, ma, ra, m_video.stride);
+ } else {
+ poisk1_gfx_1bpp_update_row(bitmap, cliprect, m_video.videoram, ma, ra, m_video.stride);
+ }
+ } else {
+ cga_gfx_2bpp_update_row(bitmap, cliprect, m_video.videoram, ma, ra, m_video.stride);
+ }
+ if (ra & 1) ma += m_video.stride;
+ }
+
+ return 0;
+}
+
// Timer. Poisk-1 uses single XTAL for everything? -- check
WRITE_LINE_MEMBER( p1_state::p1_speaker_set_spkrdata )
@@ -177,7 +557,6 @@ DRIVER_INIT_MEMBER( p1_state, poisk1 )
DBG_LOG(0,"init",("driver_init()\n"));
- program.unmap_readwrite(0, 0x7ffff);
program.install_readwrite_bank(0, m_ram->size()-1, "bank10");
membank( "bank10" )->set_base( m_ram->pointer() );
}
@@ -200,10 +579,7 @@ MACHINE_RESET_MEMBER( p1_state, poisk1 )
static ADDRESS_MAP_START( poisk1_map, AS_PROGRAM, 8, p1_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x7ffff) AM_RAM
- AM_RANGE(0xc0000, 0xc1fff) AM_ROM
- AM_RANGE(0xc0000, 0xfbfff) AM_NOP
- AM_RANGE(0xfc000, 0xfffff) AM_ROM
+ AM_RANGE(0xfc000, 0xfffff) AM_ROM AM_REGION("bios", 0xc000)
ADDRESS_MAP_END
static ADDRESS_MAP_START( poisk1_io, AS_IO, 8, p1_state )
@@ -238,7 +614,7 @@ static MACHINE_CONFIG_START( poisk1, p1_state )
MCFG_PIT8253_CLK2(XTAL_15MHz/12) /* pio port c pin 4, and speaker polling enough */
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(p1_state, p1_pit8253_out2_changed))
- MCFG_PIC8259_ADD( "pic8259", INPUTLINE(":maincpu", 0), VCC, NULL )
+ MCFG_PIC8259_ADD( "pic8259", INPUTLINE("maincpu", 0), VCC, NULL )
MCFG_DEVICE_ADD("ppi8255n1", I8255A, 0)
MCFG_I8255_IN_PORTA_CB(READ8(p1_state, p1_ppi_porta_r)) /*60H*/
@@ -285,15 +661,15 @@ static MACHINE_CONFIG_START( poisk1, p1_state )
MACHINE_CONFIG_END
ROM_START( poisk1 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
+ ROM_REGION16_LE(0x10000,"bios", 0)
ROM_DEFAULT_BIOS("v91")
ROM_SYSTEM_BIOS(0, "v89", "1989")
- ROMX_LOAD( "biosp1s.rf4", 0xfe000, 0x2000, CRC(1a85f671) SHA1(f0e59b2c4d92164abca55a96a58071ce869ff988), ROM_BIOS(1))
+ ROMX_LOAD( "biosp1s.rf4", 0xe000, 0x2000, CRC(1a85f671) SHA1(f0e59b2c4d92164abca55a96a58071ce869ff988), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "v91", "1991")
- ROMX_LOAD( "poisk_1991.bin", 0xfe000, 0x2000, CRC(d61c56fd) SHA1(de202e1f7422d585a1385a002a4fcf9d756236e5), ROM_BIOS(2))
+ ROMX_LOAD( "poisk_1991.bin", 0xe000, 0x2000, CRC(d61c56fd) SHA1(de202e1f7422d585a1385a002a4fcf9d756236e5), ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "v91r2", "1991r2")
- ROMX_LOAD( "p_bios_nm.bin", 0xfe000, 0x2000, CRC(84430b4f) SHA1(3e477962be3cea09662cb2e3ad9966ad01c7455d), ROM_BIOS(3))
+ ROMX_LOAD( "p_bios_nm.bin", 0xe000, 0x2000, CRC(84430b4f) SHA1(3e477962be3cea09662cb2e3ad9966ad01c7455d), ROM_BIOS(3))
// 0xc0000, sets 80x25 text and loops asking for 'Boot from hard disk (Y or N)?'
ROM_LOAD( "boot_net.rf4", 0x00000, 0x2000, CRC(316c2030) SHA1(d043325596455772252e465b85321f1b5c529d0b)) // NET BIOS
diff --git a/src/mame/drivers/poly88.cpp b/src/mame/drivers/poly88.cpp
index 79905bc2eea..1d3232bb06b 100644
--- a/src/mame/drivers/poly88.cpp
+++ b/src/mame/drivers/poly88.cpp
@@ -175,7 +175,7 @@ static MACHINE_CONFIG_START( poly88, poly88_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", poly88)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* audio hardware */
diff --git a/src/mame/drivers/popper.cpp b/src/mame/drivers/popper.cpp
index 42a79abdfe9..d0fa2557645 100644
--- a/src/mame/drivers/popper.cpp
+++ b/src/mame/drivers/popper.cpp
@@ -1,5 +1,8 @@
-// license:???
-// copyright-holders:David Haywood,insideoutboy, Pierpaolo Prazzoli
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+// **** SKELETON DRIVER **** original removed due to unresolved licensing.
+
/***************************************************************************
Popper
@@ -24,358 +27,26 @@
8910 SW2 SW1 p.m4 p.m3
-Notes:
-
-- a lower interleave causes some sounds to miss, different interleave values
- change random elements eg position of falling logs, it may be enough to
- synchronise the cpus on read/writes to the 0xdd00/0f range
-
-- it's possible that the two score rows shouldn't be overlaid or shouldn't be
- drawn at all times, the only time there is anything underneath is the colour
- bars on the startup screen
-
-- on odd/bonus levels the chars are not aligned with the sprites when the pylons
- are initially drawn (too low) resulting in the top 3 pylons being black, as
- the pylons move up the screen the chars go out of alignment again (this time
- too high) for a single frame to show another glitch
-
-- front to back ordering of object/enemy sprites appears wrong
-
-- on even levels the front most balloon carrying new enemies swaps between the
- left and middle one, clipping to 16 pixel strips solves this but causes other
- obvious sprite drawing errors
-
-- balloon sprites not displayed on high score entry due to the way videoram is
- being drawn, possibly trying to create a stencil effect
-
-- bursting a balloon on bonus levels just before dying from a log causes a
- sprite glitch for a few frames and then a 9999 point bonus
-
-- reads from 0xffff appear to be a harmless bug in the code that initialises
- memory blocks for enemies on odd levels, it goes on to read from 0x001f,
- 0x003f, 0x005f, 0x007f in the rom before giving up
-
-- a reset while a game is in progress or with credits inserted shows a
- "sorry!! over run" message instead of the test screen during startup,
- looks like the game assumes the reset was caused by the watchdog after a
- hang/crash and is apologising to the player for the loss of their game
-
-- title screen sprite colour glitch in lower right corner of the large pylon
- when an even level was shown before, caused by the game trying to colour
- the top of the pylon in the same way as for odd levels
-
-- enemies stop moving on even levels on rare occasions
-
-- enemy sprites entering from the bridges on odd levels are clipped by a
- few pixels at the top, this would happen even without the overlay as the
- first few rows of videoram are high priority solid chars most of the time
-
-- unknown 0xe002 writes, on for title and level 2 off for all else, looks
- to be graphic related
-
-- bottom of screen is scrappy on odd levels, amongst other things the sprites
- leave early, screen size could be clipped tighter or there could be some
- special handling needed, possibly tied to the 0xe002 writes
-
-- the game freezes in much the same way as the stop dip switch when the coin
- inputs are high (a short PORT_IMPULSE duration will still cause a hitch),
- so potentially there's a coin lockout mechanism
-
***************************************************************************/
#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "sound/ay8910.h"
-#include "includes/popper.h"
-
-
-/*************************************
- *
- * Memory handlers
- *
- *************************************/
-//e000 e001 e002 e003
-//76543210 76543210 76543210 76543210
-//x------- unused x------- unused x------- unused x------- unused
-//-x------ dsw1:1 -x------ dsw1:2 -x------ dsw1:3 -x------ dsw1:4
-//--x----- unused --x----- unused --x----- unused --x----- unused
-//---x---- dsw2:1 ---x---- dsw2:2 ---x---- dsw2:3 ---x---- dsw2:4
-//----x--- service ----xxxx p1 udlr ----x--- unused ----xxxx p2 udlr
-//-----x-- coin a -----x-- coin b
-//------x- start 1 ------x- start 2
-//-------x p1 b1 -------x p2 b1
-//
-//e004 e005 e006 e007
-//x------- dsw1:5 x------- dsw1:6 x------- dsw1:7 x------- dsw1:8
-//-x------ unused -x------ unused -x------ unused -x------ unused
-//--x----- dsw2:5 --x----- dsw2:6 --x----- dsw2:7 --x----- dsw2:8
-//---xxxxx unused ---xxxxx unused ---xxxxx unused ---xxxxx unused
-//
-//dsw1 dsw2
-//87654321 87654321
-//xx------ extra x------- stop
-//--xx---- poppers -x------ clear (current level)
-//----xx-- coin b --x----- upright (cabinet)
-//------xx coin a ---x---- crt dir. (flip screen)
-// ----x--- pass (unlimited lives)
-// -----x-- free play
-// ------x- continue
-// -------x sound
-READ8_MEMBER(popper_state::popper_input_ports_r)
-{
- UINT8 data = 0;
- switch (offset)
- {
- // player inputs dsw1 dsw2
- case 0: data = ioport("IN0")->read() | ((ioport("DSW1")->read() & 0x02) << 5) | ((ioport("DSW2")->read() & 0x01) << 4); break;
- case 1: data = ioport("IN1")->read() | ((ioport("DSW1")->read() & 0x01) << 6) | ((ioport("DSW2")->read() & 0x02) << 3); break;
- case 2: data = ioport("IN2")->read() | ((ioport("DSW1")->read() & 0x08) << 3) | ((ioport("DSW2")->read() & 0x04) << 2); break;
- case 3: data = ioport("IN3")->read() | ((ioport("DSW1")->read() & 0x04) << 4) | ((ioport("DSW2")->read() & 0x08) << 1); break;
- case 4: data = ((ioport("DSW1")->read() & 0x20) << 2) | ((ioport("DSW2")->read() & 0x10) << 1); break;
- case 5: data = ((ioport("DSW1")->read() & 0x10) << 3) | ((ioport("DSW2")->read() & 0x20) << 0); break;
- case 6: data = ((ioport("DSW1")->read() & 0x80) << 0) | ((ioport("DSW2")->read() & 0x40) >> 1); break;
- case 7: data = ((ioport("DSW1")->read() & 0x40) << 1) | ((ioport("DSW2")->read() & 0x80) >> 2); break;
- }
- return data;
-}
-
-READ8_MEMBER(popper_state::popper_soundcpu_nmi_r)
-{
- m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
- return 0;
-}
-WRITE8_MEMBER(popper_state::nmi_mask_w)
+class popper_state : public driver_device
{
- m_nmi_mask = data & 1;
-}
-
-
-/*************************************
- *
- * Memory maps
- *
- *************************************/
-
-static ADDRESS_MAP_START( popper_map, AS_PROGRAM, 8, popper_state )
- AM_RANGE(0x0000, 0x5fff) AM_ROM
- AM_RANGE(0xc000, 0xc1bf) AM_RAM
- AM_RANGE(0xc1c0, 0xc1ff) AM_RAM_WRITE(popper_ol_videoram_w) AM_SHARE("ol_videoram")
- AM_RANGE(0xc200, 0xc61f) AM_RAM_WRITE(popper_videoram_w) AM_SHARE("videoram")
- AM_RANGE(0xc620, 0xc9bf) AM_RAM
- AM_RANGE(0xc9c0, 0xc9ff) AM_RAM_WRITE(popper_ol_attribram_w) AM_SHARE("ol_attribram")
- AM_RANGE(0xca00, 0xce1f) AM_RAM_WRITE(popper_attribram_w) AM_SHARE("attribram")
- AM_RANGE(0xce20, 0xcfff) AM_RAM
- AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE("share1")
- AM_RANGE(0xe000, 0xe007) AM_READ(popper_input_ports_r)
- AM_RANGE(0xe000, 0xe000) AM_WRITE(nmi_mask_w)
- AM_RANGE(0xe001, 0xe001) AM_WRITE(popper_flipscreen_w)
- AM_RANGE(0xe002, 0xe002) AM_WRITE(popper_e002_w) //?? seems to be graphic related
- AM_RANGE(0xe003, 0xe003) AM_WRITE(popper_gfx_bank_w)
- AM_RANGE(0xe004, 0xe007) AM_WRITENOP //?? range cleared once when the SP is set
- AM_RANGE(0xe400, 0xe400) AM_READ(popper_soundcpu_nmi_r)
- AM_RANGE(0xf800, 0xf800) AM_READNOP //?? read once at startup
- AM_RANGE(0xfc00, 0xfc00) AM_READNOP //?? possibly watchdog
- AM_RANGE(0xffff, 0xffff) AM_READNOP
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( popper_sound_map, AS_PROGRAM, 8, popper_state )
- AM_RANGE(0x0000, 0x0fff) AM_ROM
- AM_RANGE(0x8000, 0x8001) AM_DEVWRITE("ay1", ay8910_device, address_data_w)
- AM_RANGE(0x8002, 0x8002) AM_READNOP //?? all read once at startup and the
- AM_RANGE(0x8002, 0x8002) AM_WRITENOP //?? same writes as 0x8000 (mostly)
- AM_RANGE(0x8003, 0x8003) AM_READNOP //?? result ignored, looks like part
- AM_RANGE(0xa000, 0xa001) AM_DEVWRITE("ay2", ay8910_device, address_data_w)
- AM_RANGE(0xa002, 0xa002) AM_READNOP //?? of AY8910 initialisation
- AM_RANGE(0xa002, 0xa002) AM_WRITENOP //?? same writes as 0xa000
- AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE("share1")
-ADDRESS_MAP_END
+public:
+ popper_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ { }
+};
-/*************************************
- *
- * Input ports
- *
- *************************************/
static INPUT_PORTS_START( popper )
- PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 ) //ignored if held for 12 or more frames
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE1 )
-
- PORT_START("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
-
- PORT_START("IN2")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 ) //ignored if held for 12 or more frames
-
- PORT_START("IN3")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
-
- PORT_START("DSW1") /* FAKE DSW1 */
- PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) //SW1:1-2
- PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) )
- PORT_DIPNAME( 0x0c, 0x08, DEF_STR( Coin_B ) ) //SW1:3-4
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x0c, DEF_STR( 1C_6C ) )
- PORT_DIPNAME( 0x30, 0x10, DEF_STR( Lives ) ) //SW1:5-6
- PORT_DIPSETTING( 0x00, "2" )
- PORT_DIPSETTING( 0x10, "3" )
- PORT_DIPSETTING( 0x20, "4" )
- PORT_DIPSETTING( 0x30, "5" )
- PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Bonus_Life ) ) //SW1:7-8
- PORT_DIPSETTING( 0x00, "20k, then every 70k" )
- PORT_DIPSETTING( 0x40, "30k, then every 70k" )
- PORT_DIPSETTING( 0x80, "40k, then every 70k" )
- PORT_DIPSETTING( 0xc0, "50k, then every 70k" )
-
- PORT_START("DSW2") /* FAKE DSW2 */
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Demo_Sounds ) ) //SW2:1
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x01, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, DEF_STR( Allow_Continue ) ) //SW2:2 (stored in 0xd987, never read)
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x02, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Free_Play ) ) //SW2:3
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x04, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, "Pass (Unlimited Lives) (Cheat)") //SW2:4
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x08, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x00, DEF_STR( Flip_Screen ) ) //SW2:5
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x10, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) ) //SW2:6
- PORT_DIPSETTING( 0x20, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x40, 0x00, "Clear (Current Level) (Cheat)") //SW2:7
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, "Stop" ) //SW2:8
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
INPUT_PORTS_END
-/*************************************
- *
- * Graphics definitions
- *
- *************************************/
-
-static const gfx_layout popper_charlayout =
-{
- 8,8,
- RGN_FRAC(2,2),
- 2,
- { 0, 4 },
- { STEP4(8,1), STEP4(0,1) },
- { STEP8(0,16) },
- 16*8
-};
-
-static const gfx_layout popper_spritelayout =
-{
- 16,16,
- RGN_FRAC(1,2),
- 2,
- { 0, RGN_FRAC(1,2) },
- { STEP8(8,1), STEP8(0,1) },
- { STEP16(0, 16) },
- 16*2*8
-};
-
-static GFXDECODE_START( popper )
- GFXDECODE_ENTRY( "gfx1", 0, popper_charlayout, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0, popper_spritelayout, 0, 16 )
-GFXDECODE_END
-
-/*************************************
- *
- * Machine driver
- *
- *************************************/
-
-void popper_state::machine_start()
-{
- save_item(NAME(m_flipscreen));
- save_item(NAME(m_e002));
- save_item(NAME(m_gfx_bank));
-}
-
-void popper_state::machine_reset()
-{
- m_flipscreen = 0;
- m_e002 = 0;
- m_gfx_bank = 0;
-}
-
-INTERRUPT_GEN_MEMBER(popper_state::vblank_irq)
-{
- if(m_nmi_mask)
- device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
-}
-
-
static MACHINE_CONFIG_START( popper, popper_state )
-
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", Z80,18432000/6)
- MCFG_CPU_PROGRAM_MAP(popper_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", popper_state, vblank_irq)
-
- MCFG_CPU_ADD("audiocpu", Z80,18432000/12)
- MCFG_CPU_PROGRAM_MAP(popper_sound_map)
- MCFG_CPU_PERIODIC_INT_DRIVER(popper_state, irq0_line_hold, 4*60) //NMIs caused by the main CPU
-
- MCFG_QUANTUM_TIME(attotime::from_hz(1800))
-
-
- /* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(33*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 33*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(popper_state, screen_update_popper)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", popper)
- MCFG_PALETTE_ADD("palette", 64)
- MCFG_PALETTE_INIT_OWNER(popper_state, popper)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_MONO("mono")
-
- MCFG_SOUND_ADD("ay1", AY8910, 18432000/12)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
-
- MCFG_SOUND_ADD("ay2", AY8910, 18432000/12)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
-
-/*************************************
- *
- * ROM definition
- *
- *************************************/
-
ROM_START( popper )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "p1", 0x0000, 0x2000, CRC(56881b70) SHA1(d3ade7a54a6cb8a0babf0d667a6b27f492a739dc) )
@@ -397,11 +68,4 @@ ROM_START( popper )
ROM_LOAD( "p.m4", 0x0020, 0x0020, CRC(384de5c1) SHA1(892c89a01c11671c5708113b4e4c27b84be37ea6) )
ROM_END
-
-/*************************************
- *
- * Game driver
- *
- *************************************/
-
-GAME( 1983, popper, 0, popper, popper, driver_device, 0, ROT90, "Omori Electric Co., Ltd.", "Popper", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
+GAME( 1983, popper, 0, popper, popper, driver_device, 0, ROT90, "Omori Electric Co., Ltd.", "Popper", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/primo.cpp b/src/mame/drivers/primo.cpp
index 7ad1739139c..021591cde2d 100644
--- a/src/mame/drivers/primo.cpp
+++ b/src/mame/drivers/primo.cpp
@@ -255,7 +255,7 @@ static MACHINE_CONFIG_START( primoa32, primo_state )
MCFG_SCREEN_UPDATE_DRIVER(primo_state, screen_update_primo)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/proteus3.cpp b/src/mame/drivers/proteus3.cpp
index 573b8772d52..760d0d10c4d 100644
--- a/src/mame/drivers/proteus3.cpp
+++ b/src/mame/drivers/proteus3.cpp
@@ -326,7 +326,7 @@ static MACHINE_CONFIG_START( proteus3, proteus3_state )
MCFG_SCREEN_UPDATE_DRIVER(proteus3_state, screen_update_proteus3)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", proteus3)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* Devices */
MCFG_DEVICE_ADD("pia", PIA6821, 0)
diff --git a/src/mame/drivers/ptcsol.cpp b/src/mame/drivers/ptcsol.cpp
index 72384632812..d444a07fb45 100644
--- a/src/mame/drivers/ptcsol.cpp
+++ b/src/mame/drivers/ptcsol.cpp
@@ -737,7 +737,7 @@ static MACHINE_CONFIG_START( sol20, sol20_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", sol20)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/pv9234.cpp b/src/mame/drivers/pv9234.cpp
index 101dd0151cc..026ac632927 100644
--- a/src/mame/drivers/pv9234.cpp
+++ b/src/mame/drivers/pv9234.cpp
@@ -151,7 +151,7 @@ static MACHINE_CONFIG_START( pv9234, pv9234_state )
MCFG_SCREEN_UPDATE_DRIVER(pv9234_state, screen_update_pv9234)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/pyl601.cpp b/src/mame/drivers/pyl601.cpp
index 8da7b17d6ed..806c131c624 100644
--- a/src/mame/drivers/pyl601.cpp
+++ b/src/mame/drivers/pyl601.cpp
@@ -530,14 +530,14 @@ static MACHINE_CONFIG_START( pyl601, pyl601_state )
MCFG_CPU_VBLANK_INT_DRIVER("screen", pyl601_state, pyl601_interrupt)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(640, 200)
MCFG_SCREEN_VISIBLE_AREA(0, 640 - 1, 0, 200 - 1)
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", pyl601)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/qdrmfgp.cpp b/src/mame/drivers/qdrmfgp.cpp
index cfc4084b392..6e8a59867eb 100644
--- a/src/mame/drivers/qdrmfgp.cpp
+++ b/src/mame/drivers/qdrmfgp.cpp
@@ -1,5 +1,5 @@
-// license:???
-// copyright-holders:Eisuke Watanabe
+// license:BSD-3-Clause
+// copyright-holders:Hau
/***************************************************************************
Quiz Do Re Mi Fa Grand Prix (Japan) (GQ460) (c)1994 Konami
@@ -16,7 +16,7 @@ TODO:
command
--
-driver by Eisuke Watanabe
+driver by Hau
Note:
GP1 HDD data contents:
diff --git a/src/mame/drivers/rd100.cpp b/src/mame/drivers/rd100.cpp
index 46c20ff62ce..c89951d57db 100644
--- a/src/mame/drivers/rd100.cpp
+++ b/src/mame/drivers/rd100.cpp
@@ -94,13 +94,13 @@ static MACHINE_CONFIG_START( rd100, rd100_state )
MCFG_MACHINE_RESET_OVERRIDE(rd100_state, rd100)
// video hardware
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(250))
MCFG_SCREEN_UPDATE_DRIVER(rd100_state, screen_update)
MCFG_SCREEN_SIZE(64*6, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0, 64*6-1, 0, 32*8-1)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
//MCFG_GFXDECODE_ADD("gfxdecode", "palette", rd100)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/rm380z.cpp b/src/mame/drivers/rm380z.cpp
index 659ec0dbe31..cb08fd5017a 100644
--- a/src/mame/drivers/rm380z.cpp
+++ b/src/mame/drivers/rm380z.cpp
@@ -144,7 +144,7 @@ static MACHINE_CONFIG_START( rm380z, rm380z_state )
MCFG_SCREEN_UPDATE_DRIVER(rm380z_state, screen_update_rm380z)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* RAM configurations */
MCFG_RAM_ADD(RAM_TAG)
diff --git a/src/mame/drivers/sansa_fuze.cpp b/src/mame/drivers/sansa_fuze.cpp
index 2ee426af50c..ab8e8e22c07 100644
--- a/src/mame/drivers/sansa_fuze.cpp
+++ b/src/mame/drivers/sansa_fuze.cpp
@@ -1,3 +1,6 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
/* Sansa Fuze */
// info can be found at
diff --git a/src/mame/drivers/sapi1.cpp b/src/mame/drivers/sapi1.cpp
index 732baca6c3e..a389456c315 100644
--- a/src/mame/drivers/sapi1.cpp
+++ b/src/mame/drivers/sapi1.cpp
@@ -549,7 +549,7 @@ static MACHINE_CONFIG_START( sapi1, sapi1_state )
MCFG_SCREEN_UPDATE_DRIVER(sapi1_state, screen_update_sapi1)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
diff --git a/src/mame/drivers/sbrain.cpp b/src/mame/drivers/sbrain.cpp
index 2994f754518..9bc9709113c 100644
--- a/src/mame/drivers/sbrain.cpp
+++ b/src/mame/drivers/sbrain.cpp
@@ -324,7 +324,7 @@ static MACHINE_CONFIG_START( sbrain, sbrain_state )
MCFG_CPU_IO_MAP(sbrain_subio)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::amber)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DRIVER(sbrain_state, screen_update)
@@ -332,7 +332,7 @@ static MACHINE_CONFIG_START( sbrain, sbrain_state )
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 239)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_MONOCHROME_AMBER("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/sbrkout.cpp b/src/mame/drivers/sbrkout.cpp
index 54bbf6c4e6e..69dd21dcbea 100644
--- a/src/mame/drivers/sbrkout.cpp
+++ b/src/mame/drivers/sbrkout.cpp
@@ -594,7 +594,7 @@ static MACHINE_CONFIG_START( sbrkout, sbrkout_state )
MCFG_SCREEN_UPDATE_DRIVER(sbrkout_state, screen_update_sbrkout)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/sdk80.cpp b/src/mame/drivers/sdk80.cpp
index 954bf30afeb..5418220ad83 100644
--- a/src/mame/drivers/sdk80.cpp
+++ b/src/mame/drivers/sdk80.cpp
@@ -178,7 +178,7 @@ static MACHINE_CONFIG_START( sdk80, sdk80_state )
// MCFG_GFXDECODE_ADD("gfxdecode", "palette", sdk80)
-// MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+// MCFG_PALETTE_ADD_MONOCHROME("palette")
// Video board UART
// MCFG_DEVICE_ADD( "hd6402", AY31015, 0 )
diff --git a/src/mame/drivers/segapm.cpp b/src/mame/drivers/segapm.cpp
index 9ebc711ca4e..a35fe359acc 100644
--- a/src/mame/drivers/segapm.cpp
+++ b/src/mame/drivers/segapm.cpp
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
/* Sega Picture Magic (codename JANUS) */
// http://segaretro.org/Sega_Picture_Magic
diff --git a/src/mame/drivers/skullxbo.cpp b/src/mame/drivers/skullxbo.cpp
index 348c6306723..faef66d7ab4 100644
--- a/src/mame/drivers/skullxbo.cpp
+++ b/src/mame/drivers/skullxbo.cpp
@@ -280,9 +280,8 @@ ROM_START( skullxbo )
ROM_LOAD16_BYTE( "136072-1156.185a", 0x070000, 0x008000, CRC(cde16b55) SHA1(bf5059f0f73a8819551fb3ded3cb6a3123841481) )
ROM_LOAD16_BYTE( "136072-1157.185c", 0x070001, 0x008000, CRC(31c77376) SHA1(19eb54d73edb25fda6803df896e182d05c5bad7e) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136072-1149.1b", 0x010000, 0x004000, CRC(8d730e7a) SHA1(b89fb9cadcf813ea5cba55f1efcdcdd2517944c7) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136072-1149.1b", 0x00000, 0x10000, CRC(8d730e7a) SHA1(b89fb9cadcf813ea5cba55f1efcdcdd2517944c7) )
ROM_REGION( 0x190000, "gfx1", 0 )
ROM_LOAD( "136072-1102.13r", 0x000000, 0x010000, CRC(90becdfa) SHA1(aa5aaeda70e137518a9e58906daed66fa563b27e) )
@@ -344,9 +343,8 @@ ROM_START( skullxbo4 )
ROM_LOAD16_BYTE( "136072-1156.185a", 0x070000, 0x008000, CRC(cde16b55) SHA1(bf5059f0f73a8819551fb3ded3cb6a3123841481) )
ROM_LOAD16_BYTE( "136072-1157.185c", 0x070001, 0x008000, CRC(31c77376) SHA1(19eb54d73edb25fda6803df896e182d05c5bad7e) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136072-1149.1b", 0x010000, 0x004000, CRC(8d730e7a) SHA1(b89fb9cadcf813ea5cba55f1efcdcdd2517944c7) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136072-1149.1b", 0x00000, 0x10000, CRC(8d730e7a) SHA1(b89fb9cadcf813ea5cba55f1efcdcdd2517944c7) )
ROM_REGION( 0x190000, "gfx1", 0 )
ROM_LOAD( "136072-1102.13r", 0x000000, 0x010000, CRC(90becdfa) SHA1(aa5aaeda70e137518a9e58906daed66fa563b27e) )
@@ -408,9 +406,8 @@ ROM_START( skullxbo3 )
ROM_LOAD16_BYTE( "136072-1156.185a", 0x070000, 0x008000, CRC(cde16b55) SHA1(bf5059f0f73a8819551fb3ded3cb6a3123841481) )
ROM_LOAD16_BYTE( "136072-1157.185c", 0x070001, 0x008000, CRC(31c77376) SHA1(19eb54d73edb25fda6803df896e182d05c5bad7e) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136072-1149.1b", 0x010000, 0x004000, CRC(8d730e7a) SHA1(b89fb9cadcf813ea5cba55f1efcdcdd2517944c7) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136072-1149.1b", 0x00000, 0x10000, CRC(8d730e7a) SHA1(b89fb9cadcf813ea5cba55f1efcdcdd2517944c7) )
ROM_REGION( 0x190000, "gfx1", 0 )
ROM_LOAD( "136072-1102.13r", 0x000000, 0x010000, CRC(90becdfa) SHA1(aa5aaeda70e137518a9e58906daed66fa563b27e) )
@@ -472,9 +469,8 @@ ROM_START( skullxbo2 )
ROM_LOAD16_BYTE( "136072-1156.185a", 0x070000, 0x008000, CRC(cde16b55) SHA1(bf5059f0f73a8819551fb3ded3cb6a3123841481) )
ROM_LOAD16_BYTE( "136072-1157.185c", 0x070001, 0x008000, CRC(31c77376) SHA1(19eb54d73edb25fda6803df896e182d05c5bad7e) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136072-1149.1b", 0x010000, 0x004000, CRC(8d730e7a) SHA1(b89fb9cadcf813ea5cba55f1efcdcdd2517944c7) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136072-1149.1b", 0x00000, 0x10000, CRC(8d730e7a) SHA1(b89fb9cadcf813ea5cba55f1efcdcdd2517944c7) )
ROM_REGION( 0x190000, "gfx1", 0 )
ROM_LOAD( "136072-1102.13r", 0x000000, 0x010000, CRC(90becdfa) SHA1(aa5aaeda70e137518a9e58906daed66fa563b27e) )
@@ -536,9 +532,8 @@ ROM_START( skullxbo1 )
ROM_LOAD16_BYTE( "136072-1156.185a", 0x070000, 0x008000, CRC(cde16b55) SHA1(bf5059f0f73a8819551fb3ded3cb6a3123841481) )
ROM_LOAD16_BYTE( "136072-1157.185c", 0x070001, 0x008000, CRC(31c77376) SHA1(19eb54d73edb25fda6803df896e182d05c5bad7e) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136072-1149.1b", 0x010000, 0x004000, CRC(8d730e7a) SHA1(b89fb9cadcf813ea5cba55f1efcdcdd2517944c7) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136072-1149.1b", 0x00000, 0x10000, CRC(8d730e7a) SHA1(b89fb9cadcf813ea5cba55f1efcdcdd2517944c7) )
ROM_REGION( 0x190000, "gfx1", 0 )
ROM_LOAD( "136072-1102.13r", 0x000000, 0x010000, CRC(90becdfa) SHA1(aa5aaeda70e137518a9e58906daed66fa563b27e) )
diff --git a/src/mame/drivers/skylncr.cpp b/src/mame/drivers/skylncr.cpp
index 514df8d8100..cfaba6c0a36 100644
--- a/src/mame/drivers/skylncr.cpp
+++ b/src/mame/drivers/skylncr.cpp
@@ -543,6 +543,22 @@ static const gfx_layout layout8x8x8_alt = /* for sstar97 */
8*8*4
};
+static const gfx_layout layout8x8x8_bdream97 = /* for bdream97 */
+{
+ 8,8,
+ RGN_FRAC(1,2),
+ 8,
+ { STEP8(0,1) },
+ {
+ 8*0,RGN_FRAC(1,2)+8*0,
+ RGN_FRAC(1,2)+8*1,8*1,
+ 8*2,RGN_FRAC(1,2)+8*2,
+ RGN_FRAC(1,2)+8*3,8*3
+ },
+ { STEP8(0,8*4) },
+ 8*8*4
+};
+
static const gfx_layout layout8x32x8 =
{
8,32,
@@ -621,6 +637,25 @@ static const gfx_layout layout8x32x8_alt2 = /* for neraidov */
8*32*8/2
};
+static const gfx_layout layout8x32x8_bdream97 = /* for bdream97 */
+{
+ 8,32,
+ RGN_FRAC(1,2),
+ 8,
+ { STEP8(0,1) },
+ {
+ 8*1, RGN_FRAC(1,2)+8*1,
+ 8*0, RGN_FRAC(1,2)+8*0,
+ 8*3, RGN_FRAC(1,2)+8*3,
+ 8*2, RGN_FRAC(1,2)+8*2
+ },
+ {
+ STEP16(0,8*4),
+ STEP16(16*8*4,8*4)
+ },
+ 8*32*8/2
+};
+
/**************************************
* Graphics Decode *
@@ -644,6 +679,12 @@ static GFXDECODE_START( sstar97 )
GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_alt, 0x100, 1 )
GFXDECODE_END
+static GFXDECODE_START( bdream97 )
+ GFXDECODE_ENTRY( "gfx1", 0, layout8x8x8_bdream97, 0, 2 )
+ GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_bdream97, 0, 2 )
+ GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_bdream97, 0x100, 1 )
+GFXDECODE_END
+
/***********************************
* Input Ports *
@@ -1431,6 +1472,14 @@ static MACHINE_CONFIG_DERIVED( sstar97, skylncr )
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( bdream97, skylncr )
+
+ /* basic machine hardware */
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_GFXDECODE_MODIFY("gfxdecode", bdream97)
+MACHINE_CONFIG_END
+
+
/**********************************
* ROM Load *
**********************************/
@@ -1650,6 +1699,26 @@ ROM_START( sstar97 )
ROM_LOAD16_BYTE( "bor_dun_5.u22", 0x40001, 0x20000, CRC(ca17a632) SHA1(d491310ccdbe9b59a1e607f9254646f20700d79d) )
ROM_END
+/* Butterfly Dream 97 / Hudie Meng 97
+ Game is encrypted and needs better decoded graphics.
+*/
+ROM_START( bdream97 )
+ ROM_REGION( 0x80000, "maincpu", 0 )
+ ROM_LOAD( "27c512_subboard.bin", 0x0000, 0x10000, CRC(b0056324) SHA1(8299198d5e7ed50967f380ba0fddff5a39eee857) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 ) // All ROMs are 27010.
+ ROM_LOAD16_BYTE( "27c010.u20", 0x00000, 0x20000, CRC(df1fd438) SHA1(8da4d116e768a3c269a2031db6bf38a5b7707029) )
+ ROM_LOAD16_BYTE( "27c010.u22", 0x00001, 0x20000, CRC(e66910eb) SHA1(454dc47caf4ae9408c3d0b759f4a32d346f86ffe) )
+ ROM_LOAD16_BYTE( "27c010.u21", 0x40000, 0x20000, CRC(b984f5bd) SHA1(9a21b46d6d497271cd589e01af3f3143946980b1) )
+ ROM_LOAD16_BYTE( "27c010.u23", 0x40001, 0x20000, CRC(2b6e6fd7) SHA1(cf0c66c90c6ab3ebc69ebe1e4f29b69b72edfdc2) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 ) // All ROMs are 27010.
+ ROM_LOAD16_BYTE( "27c010.u24", 0x00000, 0x20000, CRC(b77f3fc5) SHA1(63f7b46ed19f256a6d84624e191dc1719a57cbed) )
+ ROM_LOAD16_BYTE( "27c010.u26", 0x00001, 0x20000, CRC(27cd64ef) SHA1(6b39b2919aca967f72fa16cd61b1641d0fb98d88) )
+ ROM_LOAD16_BYTE( "27c010.u25", 0x40000, 0x20000, CRC(bdebdf35) SHA1(245247b23ddeded32519608f4696205bb5541ccc) )
+ ROM_LOAD16_BYTE( "27c010.u27", 0x40001, 0x20000, CRC(0a266de4) SHA1(0ff9ad793e77d5419bd446cb73d4968e42305353) )
+ROM_END
+
/**********************************
* Driver Init *
@@ -1675,3 +1744,4 @@ GAME( 1995, leader, 0, skylncr, leader, skylncr_state, skylncr, ROT0
GAME( 199?, gallag50, 0, skylncr, gallag50, skylncr_state, skylncr, ROT0, "bootleg", "Gallag Video Game / Petalouda (Butterfly, x50)", 0 )
GAME( 199?, neraidou, 0, neraidou, neraidou, skylncr_state, skylncr, ROT0, "bootleg", "Neraidoula (Fairy Butterfly)", 0 )
GAME( 199?, sstar97, 0, sstar97, sstar97, skylncr_state, skylncr, ROT0, "Bordun International", "Super Star 97 / Ming Xing 97 (version V153B)", 0 )
+GAME( 199?, bdream97, 0, bdream97, skylncr, skylncr_state, skylncr, ROT0, "bootleg", "Butterfly Dream 97 / Hudie Meng 97", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/sorcerer.cpp b/src/mame/drivers/sorcerer.cpp
index 741a784045b..e4491eebc7f 100644
--- a/src/mame/drivers/sorcerer.cpp
+++ b/src/mame/drivers/sorcerer.cpp
@@ -413,7 +413,7 @@ static MACHINE_CONFIG_START( sorcerer, sorcerer_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", sorcerer)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/spoker.cpp b/src/mame/drivers/spoker.cpp
index 1c652c9717e..f51457d4572 100644
--- a/src/mame/drivers/spoker.cpp
+++ b/src/mame/drivers/spoker.cpp
@@ -1,29 +1,41 @@
// license:BSD-3-Clause
-// copyright-holders:Mirko Buffoni
+// copyright-holders:Mirko Buffoni, Roberto Fresca
/***************************************************************************
-Super Poker (IGS)
-Driver by Mirko Buffoni
-
-TODO:
-- Understand how to reset NVRAM
-- Map DSW (Operator mode doesn't help)
-- Map Leds and Coin counters
-- 3super8 randomly crashes
-- 3super8 doesn't have the 8x32 tilemap, change the video emulation accordingly
+
+ Super Poker (IGS)
+ Driver by Mirko Buffoni
+ Additional work by Roberto Fresca.
+
+****************************************************************************
+
+ NOTES:
+
+ - Very similar to IGS009 driver, but without the reels stuff.
+ Maybe both drivers can be merged at some point.
+
+ - The Super Poker US/UA sets look like they lack of PPI 8255 devices...
+
+****************************************************************************
+
+ TODO:
+
+ - Understand how to reset NVRAM
+ - Map DSW (Operator mode doesn't help)
+ - Map Leds and Coin counters
+ - 3super8 randomly crashes
+ - 3super8 doesn't have the 8x32 tilemap, change the video emulation accordingly
+
***************************************************************************/
#include "emu.h"
#include "cpu/z180/z180.h"
#include "cpu/z80/z80.h"
+#include "machine/i8255.h"
#include "sound/2413intf.h"
#include "sound/okim6295.h"
#include "machine/nvram.h"
-/***************************************************************************
- Video Hardware
-***************************************************************************/
-
class spoker_state : public driver_device
{
public:
@@ -72,6 +84,7 @@ public:
DECLARE_CUSTOM_INPUT_MEMBER(hopper_r);
+ DECLARE_DRIVER_INIT(spkleftover);
DECLARE_DRIVER_INIT(spk116it);
DECLARE_DRIVER_INIT(3super8);
virtual void machine_start() override;
@@ -84,6 +97,11 @@ public:
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
};
+
+/***************************************************************************
+ Video Hardware
+***************************************************************************/
+
WRITE8_MEMBER(spoker_state::bg_tile_w)
{
m_bg_tile_ram[offset] = data;
@@ -129,8 +147,9 @@ UINT32 spoker_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
return 0;
}
+
/***************************************************************************
- Memory Maps
+ Misc Handlers
***************************************************************************/
CUSTOM_INPUT_MEMBER(spoker_state::hopper_r)
@@ -154,12 +173,12 @@ WRITE8_MEMBER(spoker_state::nmi_and_coins_w)
// popmessage("%02x",data);
}
- machine().bookkeeping().coin_counter_w(0, data & 0x01); // coin_a
- machine().bookkeeping().coin_counter_w(1, data & 0x04); // coin_c
- machine().bookkeeping().coin_counter_w(2, data & 0x08); // key in
- machine().bookkeeping().coin_counter_w(3, data & 0x10); // coin out mech
+ machine().bookkeeping().coin_counter_w(0, data & 0x01); // coin_a
+ machine().bookkeeping().coin_counter_w(1, data & 0x04); // coin_c
+ machine().bookkeeping().coin_counter_w(2, data & 0x08); // key in
+ machine().bookkeeping().coin_counter_w(3, data & 0x10); // coin out mech
- output().set_led_value(6, data & 0x40); // led for coin out / hopper active
+ output().set_led_value(6, data & 0x40); // led for coin out / hopper active
if(((m_nmi_ack & 0x80) == 0) && data & 0x80)
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
@@ -172,11 +191,11 @@ WRITE8_MEMBER(spoker_state::nmi_and_coins_w)
WRITE8_MEMBER(spoker_state::video_and_leds_w)
{
- output().set_led_value(4, data & 0x01); // start?
- output().set_led_value(5, data & 0x04); // l_bet?
+ output().set_led_value(4, data & 0x01); // start?
+ output().set_led_value(5, data & 0x04); // l_bet?
- m_video_enable = data & 0x40;
- m_hopper = (~data)& 0x80;
+ m_video_enable = data & 0x40;
+ m_hopper = (~data)& 0x80;
m_out[1] = data;
show_out(machine(), m_out);
@@ -233,72 +252,55 @@ READ8_MEMBER(spoker_state::magic_r)
}
-
+/***************************************************************************
+ Memory Maps
+***************************************************************************/
static ADDRESS_MAP_START( spoker_map, AS_PROGRAM, 8, spoker_state )
- AM_RANGE( 0x00000, 0x0f3ff ) AM_ROM
- AM_RANGE( 0x0f400, 0x0ffff ) AM_RAM AM_SHARE("nvram")
+ AM_RANGE(0x00000, 0x0f3ff) AM_ROM
+ AM_RANGE(0x0f400, 0x0ffff) AM_RAM AM_SHARE("nvram")
ADDRESS_MAP_END
static ADDRESS_MAP_START( spoker_portmap, AS_IO, 8, spoker_state )
- AM_RANGE( 0x0000, 0x003f ) AM_RAM // Z180 internal regs
-
- AM_RANGE( 0x2000, 0x23ff ) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
- AM_RANGE( 0x2400, 0x27ff ) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
-
- AM_RANGE( 0x3000, 0x33ff ) AM_RAM_WRITE(bg_tile_w ) AM_SHARE("bg_tile_ram")
-
- AM_RANGE( 0x5000, 0x5fff ) AM_RAM_WRITE(fg_tile_w ) AM_SHARE("fg_tile_ram")
-
- /* TODO: ppi #1 */
- AM_RANGE( 0x6480, 0x6480 ) AM_WRITE(nmi_and_coins_w )
- AM_RANGE( 0x6481, 0x6481 ) AM_READ_PORT( "SERVICE" )
- AM_RANGE( 0x6482, 0x6482 ) AM_READ_PORT( "COINS" )
-
- /* TODO: ppi #2 */
- AM_RANGE( 0x6490, 0x6490 ) AM_READ_PORT( "BUTTONS1" )
- AM_RANGE( 0x6491, 0x6491 ) AM_WRITE(video_and_leds_w )
- AM_RANGE( 0x6492, 0x6492 ) AM_WRITE(leds_w )
-
- AM_RANGE( 0x64a0, 0x64a0 ) AM_READ_PORT( "BUTTONS2" )
-
- AM_RANGE( 0x64b0, 0x64b1 ) AM_DEVWRITE("ymsnd", ym2413_device, write)
-
- AM_RANGE( 0x64c0, 0x64c0 ) AM_DEVREADWRITE("oki", okim6295_device, read, write)
-
- AM_RANGE( 0x64d0, 0x64d1 ) AM_READWRITE(magic_r, magic_w ) // DSW1-5
-
- AM_RANGE( 0x7000, 0x7fff ) AM_RAM_WRITE(fg_color_w ) AM_SHARE("fg_color_ram")
+ AM_RANGE(0x0000, 0x003f) AM_RAM // Z180 internal regs
+ AM_RANGE(0x2000, 0x23ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
+ AM_RANGE(0x2400, 0x27ff) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
+ AM_RANGE(0x3000, 0x33ff) AM_RAM_WRITE(bg_tile_w ) AM_SHARE("bg_tile_ram")
+ AM_RANGE(0x5000, 0x5fff) AM_RAM_WRITE(fg_tile_w ) AM_SHARE("fg_tile_ram")
+ AM_RANGE(0x6480, 0x6483) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write) /* NMI and coins (w), service (r), coins (r) */
+ AM_RANGE(0x6490, 0x6493) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) /* buttons 1 (r), video and leds (w), leds (w) */
+ AM_RANGE(0x64a0, 0x64a0) AM_READ_PORT( "BUTTONS2" )
+ AM_RANGE(0x64b0, 0x64b1) AM_DEVWRITE("ymsnd", ym2413_device, write)
+ AM_RANGE(0x64c0, 0x64c0) AM_DEVREADWRITE("oki", okim6295_device, read, write)
+ AM_RANGE(0x64d0, 0x64d1) AM_READWRITE(magic_r, magic_w ) // DSW1-5
+ AM_RANGE(0x7000, 0x7fff) AM_RAM_WRITE(fg_color_w ) AM_SHARE("fg_color_ram")
ADDRESS_MAP_END
static ADDRESS_MAP_START( 3super8_portmap, AS_IO, 8, spoker_state )
-// AM_RANGE( 0x1000, 0x1fff ) AM_WRITENOP
-
- AM_RANGE( 0x2000, 0x27ff ) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
- AM_RANGE( 0x2800, 0x2fff ) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
-
- AM_RANGE( 0x3000, 0x33ff ) AM_RAM_WRITE(bg_tile_w ) AM_SHARE("bg_tile_ram")
-
- AM_RANGE( 0x4000, 0x4000 ) AM_READ_PORT( "DSW1" )
- AM_RANGE( 0x4001, 0x4001 ) AM_READ_PORT( "DSW2" )
- AM_RANGE( 0x4002, 0x4002 ) AM_READ_PORT( "DSW3" )
- AM_RANGE( 0x4003, 0x4003 ) AM_READ_PORT( "DSW4" )
- AM_RANGE( 0x4004, 0x4004 ) AM_READ_PORT( "DSW5" )
-
-// AM_RANGE( 0x4000, 0x40ff ) AM_WRITENOP
-
- AM_RANGE( 0x5000, 0x5fff ) AM_RAM_WRITE(fg_tile_w ) AM_SHARE("fg_tile_ram")
-
- AM_RANGE( 0x6480, 0x6480 ) AM_READ_PORT( "IN0" )
- AM_RANGE( 0x6490, 0x6490 ) AM_READ_PORT( "IN1" )
- AM_RANGE( 0x6491, 0x6491 ) AM_DEVREADWRITE("oki", okim6295_device, read, write)
- AM_RANGE( 0x64a0, 0x64a0 ) AM_READ_PORT( "IN2" )
- AM_RANGE( 0x64b0, 0x64b0 ) AM_WRITE(leds_w )
- AM_RANGE( 0x64c0, 0x64c0 ) AM_READNOP //irq ack?
-
- AM_RANGE( 0x64f0, 0x64f0 ) AM_WRITE(nmi_and_coins_w )
-
- AM_RANGE( 0x7000, 0x7fff ) AM_RAM_WRITE(fg_color_w ) AM_SHARE("fg_color_ram")
+// AM_RANGE(0x1000, 0x1fff) AM_WRITENOP
+ AM_RANGE(0x2000, 0x27ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
+ AM_RANGE(0x2800, 0x2fff) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
+ AM_RANGE(0x3000, 0x33ff) AM_RAM_WRITE(bg_tile_w ) AM_SHARE("bg_tile_ram")
+ AM_RANGE(0x4000, 0x4000) AM_READ_PORT( "DSW1" )
+ AM_RANGE(0x4001, 0x4001) AM_READ_PORT( "DSW2" )
+ AM_RANGE(0x4002, 0x4002) AM_READ_PORT( "DSW3" )
+ AM_RANGE(0x4003, 0x4003) AM_READ_PORT( "DSW4" )
+ AM_RANGE(0x4004, 0x4004) AM_READ_PORT( "DSW5" )
+// AM_RANGE(0x4000, 0x40ff) AM_WRITENOP
+ AM_RANGE(0x5000, 0x5fff) AM_RAM_WRITE(fg_tile_w ) AM_SHARE("fg_tile_ram")
+
+// The following one (0x6480) should be output. At begining of code, there is a PPI initialization
+// setting O-I-I for ports ABC. Except these routines are just a leftover from the original game,
+// and now the I/O is handled by a CPLD or FPGA (as seen in goldstar and gp98).
+ AM_RANGE(0x6480, 0x6480) AM_READ_PORT( "IN0" )
+ AM_RANGE(0x6490, 0x6490) AM_READ_PORT( "IN1" )
+
+ AM_RANGE(0x6491, 0x6491) AM_DEVREADWRITE("oki", okim6295_device, read, write)
+ AM_RANGE(0x64a0, 0x64a0) AM_READ_PORT( "IN2" )
+ AM_RANGE(0x64b0, 0x64b0) AM_WRITE(leds_w )
+ AM_RANGE(0x64c0, 0x64c0) AM_READNOP //irq ack?
+ AM_RANGE(0x64f0, 0x64f0) AM_WRITE(nmi_and_coins_w )
+ AM_RANGE(0x7000, 0x7fff) AM_RAM_WRITE(fg_color_w ) AM_SHARE("fg_color_ram")
ADDRESS_MAP_END
@@ -462,8 +464,9 @@ static INPUT_PORTS_START( 3super8 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
+
/***************************************************************************
- Graphics Layout
+ Graphics Layout & Graphics Decode
***************************************************************************/
static const gfx_layout layout_8x8x6 =
@@ -471,9 +474,9 @@ static const gfx_layout layout_8x8x6 =
8, 8,
RGN_FRAC(1, 3),
6,
- { RGN_FRAC(0,3)+8,RGN_FRAC(0,3)+0,
- RGN_FRAC(1,3)+8,RGN_FRAC(1,3)+0,
- RGN_FRAC(2,3)+8,RGN_FRAC(2,3)+0 },
+ { RGN_FRAC(0,3)+8, RGN_FRAC(0,3)+0,
+ RGN_FRAC(1,3)+8, RGN_FRAC(1,3)+0,
+ RGN_FRAC(2,3)+8, RGN_FRAC(2,3)+0 },
{ STEP8(0,1) },
{ STEP8(0,2*8) },
8*8*2
@@ -484,9 +487,9 @@ static const gfx_layout layout_8x32x6 =
8, 32,
RGN_FRAC(1, 3),
6,
- { RGN_FRAC(0,3)+8,RGN_FRAC(0,3)+0,
- RGN_FRAC(1,3)+8,RGN_FRAC(1,3)+0,
- RGN_FRAC(2,3)+8,RGN_FRAC(2,3)+0 },
+ { RGN_FRAC(0,3)+8, RGN_FRAC(0,3)+0,
+ RGN_FRAC(1,3)+8, RGN_FRAC(1,3)+0,
+ RGN_FRAC(2,3)+8, RGN_FRAC(2,3)+0 },
{ STEP8(0,1) },
{ STEP32(0,2*8) },
8*32*2
@@ -498,30 +501,30 @@ static const gfx_layout layout3s8_8x8x6 =
RGN_FRAC(1,3),
6,
{ RGN_FRAC(0,3)+2*8, RGN_FRAC(0,3)+0, RGN_FRAC(1,3)+2*8, RGN_FRAC(1,3)+0,RGN_FRAC(2,3)+2*8, RGN_FRAC(2,3)+0 },
- { 0, 1,2,3,4,5,6,7 },
- { 0*8, 1*8, 4*8, 5*8, 8*8, 9*8, 12*8, 13*8 },
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 0*8, 1*8, 4*8, 5*8, 8*8, 9*8, 12*8, 13*8 },
16*8
};
static GFXDECODE_START( spoker )
- GFXDECODE_ENTRY( "gfx1", 0x00000, layout_8x8x6, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0x04000, layout_8x32x6, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0x08000, layout_8x32x6, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0x0c000, layout_8x32x6, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0x00000, layout_8x32x6, 0, 16 )
+ GFXDECODE_ENTRY( "gfx1", 0x00000, layout_8x8x6, 0, 16 )
+ GFXDECODE_ENTRY( "gfx2", 0x04000, layout_8x32x6, 0, 16 )
+ GFXDECODE_ENTRY( "gfx2", 0x08000, layout_8x32x6, 0, 16 )
+ GFXDECODE_ENTRY( "gfx2", 0x0c000, layout_8x32x6, 0, 16 )
+ GFXDECODE_ENTRY( "gfx2", 0x00000, layout_8x32x6, 0, 16 )
GFXDECODE_END
static GFXDECODE_START( 3super8 )
- GFXDECODE_ENTRY( "gfx1", 0x00000, layout3s8_8x8x6, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0x04000, layout_8x32x6, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0x08000, layout_8x32x6, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0x0c000, layout_8x32x6, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0x00000, layout_8x32x6, 0, 16 )
+ GFXDECODE_ENTRY( "gfx1", 0x00000, layout3s8_8x8x6, 0, 16 )
+ GFXDECODE_ENTRY( "gfx2", 0x04000, layout_8x32x6, 0, 16 )
+ GFXDECODE_ENTRY( "gfx2", 0x08000, layout_8x32x6, 0, 16 )
+ GFXDECODE_ENTRY( "gfx2", 0x0c000, layout_8x32x6, 0, 16 )
+ GFXDECODE_ENTRY( "gfx2", 0x00000, layout_8x32x6, 0, 16 )
GFXDECODE_END
/***************************************************************************
- Machine Drivers
+ Machine Start & Reset
***************************************************************************/
void spoker_state::machine_start()
@@ -535,11 +538,16 @@ void spoker_state::machine_start()
void spoker_state::machine_reset()
{
- m_nmi_ack = 0;
- m_hopper = 0;
- m_video_enable = 1;
+ m_nmi_ack = 0;
+ m_hopper = 0;
+ m_video_enable = 1;
}
+
+/***************************************************************************
+ Machine Drivers
+***************************************************************************/
+
static MACHINE_CONFIG_START( spoker, spoker_state )
/* basic machine hardware */
@@ -548,9 +556,18 @@ static MACHINE_CONFIG_START( spoker, spoker_state )
MCFG_CPU_IO_MAP(spoker_portmap)
MCFG_CPU_VBLANK_INT_DRIVER("screen", spoker_state, nmi_line_assert)
-
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0) // Control 0x8b --> A:out; B:input; C:input.
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(spoker_state, nmi_and_coins_w))
+ MCFG_I8255_IN_PORTB_CB(IOPORT("SERVICE"))
+ MCFG_I8255_IN_PORTC_CB(IOPORT("COINS"))
+
+ MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0) // Control 0x90 --> A:input; B:out; C:out.
+ MCFG_I8255_IN_PORTA_CB(IOPORT("BUTTONS1"))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(spoker_state, video_and_leds_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(spoker_state, leds_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -567,12 +584,13 @@ static MACHINE_CONFIG_START( spoker, spoker_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.4)
MCFG_OKIM6295_ADD("oki", XTAL_12MHz / 12, OKIM6295_PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( 3super8, spoker )
MCFG_CPU_REPLACE("maincpu", Z80, XTAL_24MHz / 4) /* z840006, 24/4 MHz? */
@@ -582,63 +600,192 @@ static MACHINE_CONFIG_DERIVED( 3super8, spoker )
MCFG_CPU_VBLANK_INT_DRIVER("screen", spoker_state, nmi_line_assert)
MCFG_CPU_PERIODIC_INT_DRIVER(spoker_state, irq0_line_hold, 120) // this signal comes from the PIC
+ MCFG_DEVICE_REMOVE("ppi8255_0")
+ MCFG_DEVICE_REMOVE("ppi8255_1")
+
MCFG_GFXDECODE_MODIFY("gfxdecode", 3super8)
MCFG_DEVICE_REMOVE("ymsnd")
MACHINE_CONFIG_END
-DRIVER_INIT_MEMBER(spoker_state,spk116it)
-{
- int A;
- UINT8 *rom = memregion("maincpu")->base();
+/***************************************************************************
+ ROMs load
+***************************************************************************/
- for (A = 0;A < 0x10000;A++)
- {
- rom[A] ^= 0x02;
- if ((A & 0x0208) == 0x0208) rom[A] ^= 0x20;
- if ((A & 0x0228) == 0x0008) rom[A] ^= 0x20;
- if ((A & 0x04A0) == 0x04A0) rom[A] ^= 0x02;
- if ((A & 0x1208) == 0x1208) rom[A] ^= 0x01;
- }
-}
+/* Super Poker (IGS)
+ US & UA versions.
+
+ Original IGS boards
+ IGS PCB-0308-01
+
+ HD64180RP8 (u25)
+ IGS026a (u10)
+ IGS001a (u30)
+ IGS002 (u20)
+ U3567 (u42)
+
+ 1x 12.288 MHz Xtal. (next to HD64180RP8)
+
+ Programs are encrypted.
+ See the last 0x1000 of each one
+ to see the patterns...
+*/
+ROM_START( spk306us )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "27c512_v306_us.u27", 0x0000, 0x10000, CRC(a6c6359e) SHA1(768c53e6c9a4d453e5342a169932fcc30b10fd04) )
+ ROM_REGION( 0xc0000, "gfx1", 0 )
+ ROM_LOAD( "1_mx28f2000p_v306_us.u33", 0x80000, 0x40000, BAD_DUMP CRC(7ae9b639) SHA1(eb29acf94e96b5a8446dab1e46675766da0538f9) )
+ ROM_LOAD( "2_mx28f2000p_v306_us.u32", 0x40000, 0x40000, BAD_DUMP CRC(3a9fc765) SHA1(10ccacf4da189f41b1c0fdc8d943b24ac3464e17) )
+ ROM_LOAD( "3_mx28f2000p_v306_us.u31", 0x00000, 0x40000, BAD_DUMP CRC(71f6ea7a) SHA1(f91735d79af153cbbbe82312ba2af789b89c43dd) )
+
+ ROM_REGION( 0x30000, "gfx2", 0 )
+ ROM_FILL( 0x0000, 0x30000, 0xff ) /* filling the whole bank */
+
+ ROM_REGION( 0x40000, "oki", 0 ) /* 4-bit adpcm samples */
+ ROM_LOAD( "mx28f2000p_v306_ussp.u34", 0x0000, 0x40000, BAD_DUMP CRC(33e6089d) SHA1(cd1ad01e92c18bbeab3fe3ea9152f8b0a3eb1b29) )
+ROM_END
+
+ROM_START( spk205us )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "27c512_v205_us.u27", 0x0000, 0x10000, CRC(4b743c73) SHA1(bd05db13e27dc441e0483b883b770365b2702254) )
+
+ ROM_REGION( 0xc0000, "gfx1", 0 )
+ ROM_LOAD( "1_mx28f2000p_v205_us.u33", 0x80000, 0x40000, CRC(7ae9b639) SHA1(eb29acf94e96b5a8446dab1e46675766da0538f9) )
+ ROM_LOAD( "2_mx28f2000p_v205_us.u32", 0x40000, 0x40000, CRC(3a9fc765) SHA1(10ccacf4da189f41b1c0fdc8d943b24ac3464e17) )
+ ROM_LOAD( "3_mx28f2000p_v205_us.u31", 0x00000, 0x40000, CRC(71f6ea7a) SHA1(f91735d79af153cbbbe82312ba2af789b89c43dd) )
+
+ ROM_REGION( 0x30000, "gfx2", 0 )
+ ROM_FILL( 0x0000, 0x30000, 0xff ) /* filling the whole bank */
+
+ ROM_REGION( 0x40000, "oki", 0 ) /* 4-bit adpcm samples */
+ ROM_LOAD( "mx28f2000p_v205_ussp.u34", 0x0000, 0x40000, CRC(33e6089d) SHA1(cd1ad01e92c18bbeab3fe3ea9152f8b0a3eb1b29) )
+ROM_END
+
+ROM_START( spk203us )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "27c512_v203_us.u27", 0x0000, 0x10000, CRC(41328b3d) SHA1(2a4cf0cfdb09e72dabbaf09901cff222847c195a) )
+
+ ROM_REGION( 0xc0000, "gfx1", 0 )
+ ROM_LOAD( "1_mx28f2000p_v203_us.u33", 0x80000, 0x40000, CRC(b309e9cf) SHA1(2e3f81c9c654c859c0fd4c0953302c9283e7a4d8) )
+ ROM_LOAD( "2_mx28f2000p_v203_us.u32", 0x40000, 0x40000, CRC(05048307) SHA1(38d5ba5522a60ae4f34731ea7bd3e2c16683125d) )
+ ROM_LOAD( "3_mx28f2000p_v203_us.u31", 0x00000, 0x40000, CRC(beae217b) SHA1(9bfa69954c42ada88bedb7cedaceff841cb88a58) )
+
+ ROM_REGION( 0x30000, "gfx2", 0 )
+ ROM_FILL( 0x0000, 0x30000, 0xff ) /* filling the whole bank */
+
+ ROM_REGION( 0x40000, "oki", 0 ) /* 4-bit adpcm samples */
+ ROM_LOAD( "mx28f2000p_v203_ussp.u34", 0x0000, 0x40000, CRC(33e6089d) SHA1(cd1ad01e92c18bbeab3fe3ea9152f8b0a3eb1b29) )
+ROM_END
+
+ROM_START( spk200ua )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "27c512_v200_ua.u27", 0x0000, 0x10000, CRC(f4572b88) SHA1(b1f845b5340639eee1464acb8a40241868a21070) )
+
+ ROM_REGION( 0xc0000, "gfx1", 0 )
+ ROM_LOAD( "1_mx28f2000p_v200_ua.u33", 0x80000, 0x40000, CRC(b309e9cf) SHA1(2e3f81c9c654c859c0fd4c0953302c9283e7a4d8) )
+ ROM_LOAD( "2_mx28f2000p_v200_ua.u32", 0x40000, 0x40000, CRC(05048307) SHA1(38d5ba5522a60ae4f34731ea7bd3e2c16683125d) )
+ ROM_LOAD( "3_mx28f2000p_v200_ua.u31", 0x00000, 0x40000, CRC(beae217b) SHA1(9bfa69954c42ada88bedb7cedaceff841cb88a58) )
+
+ ROM_REGION( 0x30000, "gfx2", 0 )
+ ROM_FILL( 0x0000, 0x30000, 0xff ) /* filling the whole bank */
+
+ ROM_REGION( 0x40000, "oki", 0 ) /* 4-bit adpcm samples */
+ ROM_LOAD( "mx28f2000p_v200_uasp.u34", 0x0000, 0x40000, CRC(33e6089d) SHA1(cd1ad01e92c18bbeab3fe3ea9152f8b0a3eb1b29) )
+ROM_END
+
+ROM_START( spk102ua )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "27c512_v102_ua.u27", 0x0000, 0x10000, CRC(ec5e9f6d) SHA1(5d7a86f8faef7a4b7a9dde040b00b987ffb09479) )
+
+ ROM_REGION( 0xc0000, "gfx1", 0 )
+ ROM_LOAD( "1_mx28f2000p_v102_ua.u33", 0x80000, 0x40000, CRC(b309e9cf) SHA1(2e3f81c9c654c859c0fd4c0953302c9283e7a4d8) )
+ ROM_LOAD( "2_mx28f2000p_v102_ua.u32", 0x40000, 0x40000, CRC(05048307) SHA1(38d5ba5522a60ae4f34731ea7bd3e2c16683125d) )
+ ROM_LOAD( "3_mx28f2000p_v102_ua.u31", 0x00000, 0x40000, CRC(beae217b) SHA1(9bfa69954c42ada88bedb7cedaceff841cb88a58) )
+
+ ROM_REGION( 0x30000, "gfx2", 0 )
+ ROM_FILL( 0x0000, 0x30000, 0xff ) /* filling the whole bank */
+
+ ROM_REGION( 0x40000, "oki", 0 ) /* 4-bit adpcm samples */
+ ROM_LOAD( "mx28f2000p_v102_uasp.u34", 0x0000, 0x40000, CRC(33e6089d) SHA1(cd1ad01e92c18bbeab3fe3ea9152f8b0a3eb1b29) )
+ROM_END
+
+/*
+ Super Poker
+ Italian sets...
+*/
ROM_START( spk116it )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "v.bin", 0x0000, 0x10000, CRC(e44e943a) SHA1(78e32d07e2be9a452be10735641cbcf269068c55) )
ROM_REGION( 0xc0000, "gfx1", 0 )
- ROM_LOAD( "6.bin", 0x80000, 0x40000, CRC(55b54b11) SHA1(decf27d40ec842374af02c93d761375690be83a3) )
- ROM_LOAD( "5.bin", 0x40000, 0x40000, CRC(163f5b64) SHA1(5d3a5c2a64691ee9e2bb3a7c283aa9efa53fb35e) )
- ROM_LOAD( "4.bin", 0x00000, 0x40000, CRC(ec2c6ac3) SHA1(e0a38da26202d2b9a481060fe5b88a38e284201e) )
+ ROM_LOAD( "6_v116it.bin", 0x80000, 0x40000, CRC(55b54b11) SHA1(decf27d40ec842374af02c93d761375690be83a3) )
+ ROM_LOAD( "5_v116it.bin", 0x40000, 0x40000, CRC(163f5b64) SHA1(5d3a5c2a64691ee9e2bb3a7c283aa9efa53fb35e) )
+ ROM_LOAD( "4_v116it.bin", 0x00000, 0x40000, CRC(ec2c6ac3) SHA1(e0a38da26202d2b9a481060fe5b88a38e284201e) )
+
+ ROM_REGION( 0x30000, "gfx2", 0 )
+ ROM_LOAD( "3_v116it.bin", 0x20000, 0x10000, CRC(5f18b012) SHA1(c9a96237eaf3138f136bbaffb29dde0ef568ce73) )
+ ROM_LOAD( "2_v116it.bin", 0x10000, 0x10000, CRC(50fc3505) SHA1(ca1e4ee7e0bb59c3bd67727f65054a48000ae7fe) )
+ ROM_LOAD( "1_v116it.bin", 0x00000, 0x10000, CRC(28ce630a) SHA1(9b597073d33841e7db2c68bbe9f30b734d7f7b41) )
+
+ ROM_REGION( 0x40000, "oki", 0 ) /* expansion rom - contains backgrounds and pictures charmaps */
+ ROM_LOAD( "7_v116it.bin", 0x0000, 0x40000, CRC(67789f1c) SHA1(1bef621b4d6399f76020c6310e2e1c2f861679de) )
+ROM_END
+
+ROM_START( spk116itmx )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "v_v116it_mx.bin", 0x0000, 0x10000, CRC(f84eefe3) SHA1(9b3acde4f8f5f635155ed132c10d11bf609da2dd) )
+
+ ROM_REGION( 0xc0000, "gfx1", 0 )
+ ROM_LOAD( "6_v116itmx.bin", 0x80000, 0x40000, CRC(55b54b11) SHA1(decf27d40ec842374af02c93d761375690be83a3) )
+ ROM_LOAD( "5_v116itmx.bin", 0x40000, 0x40000, CRC(163f5b64) SHA1(5d3a5c2a64691ee9e2bb3a7c283aa9efa53fb35e) )
+ ROM_LOAD( "4_v116itmx.bin", 0x00000, 0x40000, CRC(ec2c6ac3) SHA1(e0a38da26202d2b9a481060fe5b88a38e284201e) )
ROM_REGION( 0x30000, "gfx2", 0 )
- ROM_LOAD( "3.bin", 0x20000, 0x10000, CRC(5f18b012) SHA1(c9a96237eaf3138f136bbaffb29dde0ef568ce73) )
- ROM_LOAD( "2.bin", 0x10000, 0x10000, CRC(50fc3505) SHA1(ca1e4ee7e0bb59c3bd67727f65054a48000ae7fe) )
- ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(28ce630a) SHA1(9b597073d33841e7db2c68bbe9f30b734d7f7b41) )
+ ROM_LOAD( "3_v116itmx.bin", 0x20000, 0x10000, CRC(5f18b012) SHA1(c9a96237eaf3138f136bbaffb29dde0ef568ce73) )
+ ROM_LOAD( "2_v116itmx.bin", 0x10000, 0x10000, CRC(50fc3505) SHA1(ca1e4ee7e0bb59c3bd67727f65054a48000ae7fe) )
+ ROM_LOAD( "1_v116itmx.bin", 0x00000, 0x10000, CRC(28ce630a) SHA1(9b597073d33841e7db2c68bbe9f30b734d7f7b41) )
ROM_REGION( 0x40000, "oki", 0 ) /* expansion rom - contains backgrounds and pictures charmaps */
- ROM_LOAD( "7.bin", 0x0000, 0x40000, CRC(67789f1c) SHA1(1bef621b4d6399f76020c6310e2e1c2f861679de) )
+ ROM_LOAD( "7_v116itmx.bin", 0x0000, 0x40000, CRC(67789f1c) SHA1(1bef621b4d6399f76020c6310e2e1c2f861679de) )
ROM_END
ROM_START( spk115it )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "v.bin", 0x0000, 0x10000, CRC(df52997b) SHA1(72a76e84aeedfdebd4c6cb47809117a28b5d3892) ) // sldh
+ ROM_LOAD( "v_v115it.bin", 0x0000, 0x10000, CRC(df52997b) SHA1(72a76e84aeedfdebd4c6cb47809117a28b5d3892) ) // sldh
ROM_REGION( 0xc0000, "gfx1", 0 )
- ROM_LOAD( "6.bin", 0x80000, 0x40000, CRC(f9b027f8) SHA1(c4686a4024062482f9864e0445087e32899fc775) ) // sldh
- ROM_LOAD( "5.bin", 0x40000, 0x40000, CRC(baca51b6) SHA1(c97322c814729332378b6304a79062fea385ca97) ) // sldh
- ROM_LOAD( "4.bin", 0x00000, 0x40000, CRC(1172c790) SHA1(43f1d019ecae5c605722e3fe77ae2f022b01260b) ) // sldh
+ ROM_LOAD( "6_v115it.bin", 0x80000, 0x40000, CRC(f9b027f8) SHA1(c4686a4024062482f9864e0445087e32899fc775) ) // sldh
+ ROM_LOAD( "5_v115it.bin", 0x40000, 0x40000, CRC(baca51b6) SHA1(c97322c814729332378b6304a79062fea385ca97) ) // sldh
+ ROM_LOAD( "4_v115it.bin", 0x00000, 0x40000, CRC(1172c790) SHA1(43f1d019ecae5c605722e3fe77ae2f022b01260b) ) // sldh
ROM_REGION( 0x30000, "gfx2", 0 )
- ROM_LOAD( "3.bin", 0x20000, 0x10000, CRC(5f18b012) SHA1(c9a96237eaf3138f136bbaffb29dde0ef568ce73) )
- ROM_LOAD( "2.bin", 0x10000, 0x10000, CRC(50fc3505) SHA1(ca1e4ee7e0bb59c3bd67727f65054a48000ae7fe) )
- ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(28ce630a) SHA1(9b597073d33841e7db2c68bbe9f30b734d7f7b41) )
+ ROM_LOAD( "3_v115it.bin", 0x20000, 0x10000, CRC(5f18b012) SHA1(c9a96237eaf3138f136bbaffb29dde0ef568ce73) )
+ ROM_LOAD( "2_v115it.bin", 0x10000, 0x10000, CRC(50fc3505) SHA1(ca1e4ee7e0bb59c3bd67727f65054a48000ae7fe) )
+ ROM_LOAD( "1_v115it.bin", 0x00000, 0x10000, CRC(28ce630a) SHA1(9b597073d33841e7db2c68bbe9f30b734d7f7b41) )
ROM_REGION( 0x40000, "oki", 0 ) /* expansion rom - contains backgrounds and pictures charmaps */
- ROM_LOAD( "7.bin", 0x0000, 0x40000, CRC(67789f1c) SHA1(1bef621b4d6399f76020c6310e2e1c2f861679de) )
+ ROM_LOAD( "7_v115it.bin", 0x0000, 0x40000, CRC(67789f1c) SHA1(1bef621b4d6399f76020c6310e2e1c2f861679de) )
+ROM_END
+
+ROM_START( spk114it )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "v_v114it.bin", 0x0000, 0x10000, CRC(471f5d97) SHA1(94781fb7bd8e9633fafca72de41113c3f21fbf4e) )
+
+ ROM_REGION( 0xc0000, "gfx1", 0 )
+ ROM_LOAD( "6_v114it.bin", 0x80000, 0x40000, CRC(466cec74) SHA1(6e4fe56a55f1e230eb01266c67cc82a87f6aaec6) )
+ ROM_LOAD( "5_v114it.bin", 0x40000, 0x40000, CRC(ae32a620) SHA1(d5238628269050e21da31d628b1d80b0f9b2d251) )
+ ROM_LOAD( "4_v114it.bin", 0x00000, 0x40000, CRC(c2105b1c) SHA1(cd2a930e9c15d1fdcc02ce87c109b5b4107430fa) )
+
+ ROM_REGION( 0x30000, "gfx2", 0 )
+ ROM_FILL( 0x0000, 0x30000, 0xff ) /* filling the whole bank */
+
+ ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */
+ ROM_LOAD( "7_v114it.bin", 0x0000, 0x40000, CRC(67789f1c) SHA1(1bef621b4d6399f76020c6310e2e1c2f861679de) )
ROM_END
+
/*
Produttore ?Italy?
@@ -668,7 +815,6 @@ Note
//3.bin 1ST AND 2ND HALF IDENTICAL
//sound.bin 1ST AND 2ND HALF IDENTICAL
-
ROM_START( 3super8 )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "prgrom.bin", 0x00000, 0x20000, CRC(37c85dfe) SHA1(56bd2fb859b17dda1e675a385b6bcd6867ecceb0) )
@@ -695,7 +841,42 @@ ROM_START( 3super8 )
ROM_LOAD( "sound.bin", 0x00000, 0x40000, BAD_DUMP CRC(230b31c3) SHA1(38c107325d3a4e9781912078b1317dc9ba3e1ced) )
ROM_END
-DRIVER_INIT_MEMBER(spoker_state,3super8)
+
+/***************************************************************************
+ Driver Init
+***************************************************************************/
+
+DRIVER_INIT_MEMBER(spoker_state, spkleftover)
+{
+/* The last 4K have the scheme/table for the whole encryption.
+ Maybe a leftover...
+*/
+ int A, B;
+ UINT8 *rom = memregion("maincpu")->base();
+
+ for (A = 0; A < 0x10000; A++)
+ {
+ B = ((A & 0x0fff) | 0xf000);
+ rom[A] = rom[A] ^ rom[B];
+ }
+}
+
+DRIVER_INIT_MEMBER(spoker_state, spk116it)
+{
+ int A;
+ UINT8 *rom = memregion("maincpu")->base();
+
+ for (A = 0; A < 0x10000; A++)
+ {
+ rom[A] ^= 0x02;
+ if ((A & 0x0208) == 0x0208) rom[A] ^= 0x20;
+ if ((A & 0x0228) == 0x0008) rom[A] ^= 0x20;
+ if ((A & 0x04A0) == 0x04A0) rom[A] ^= 0x02;
+ if ((A & 0x1208) == 0x1208) rom[A] ^= 0x01;
+ }
+}
+
+DRIVER_INIT_MEMBER(spoker_state, 3super8)
{
UINT8 *ROM = memregion("maincpu")->base();
int i;
@@ -732,6 +913,19 @@ DRIVER_INIT_MEMBER(spoker_state,3super8)
}
}
-GAME( 1993?, spk116it, 0, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v116IT)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993?, spk115it, spk116it, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v115IT)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993?, 3super8, spk116it, 3super8,3super8, spoker_state, 3super8, ROT0, "<unknown>", "3 Super 8 (Italy)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //roms are badly dumped
+
+/***************************************************************************
+ Game Drivers
+***************************************************************************/
+
+/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */
+GAME( 1996, spk306us, 0, spoker, spoker, spoker_state, spkleftover, ROT0, "IGS", "Super Poker (v306US)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs proper machine driver
+GAME( 1996, spk205us, spk306us, spoker, spoker, spoker_state, spkleftover, ROT0, "IGS", "Super Poker (v205US)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs proper machine driver
+GAME( 1996, spk203us, spk306us, spoker, spoker, spoker_state, spkleftover, ROT0, "IGS", "Super Poker (v203US)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs proper machine driver
+GAME( 1996, spk200ua, spk306us, spoker, spoker, spoker_state, spkleftover, ROT0, "IGS", "Super Poker (v200UA)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs proper machine driver
+GAME( 1993?, spk116it, spk306us, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v116IT)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993?, spk116itmx, spk306us, spoker, spoker, driver_device, 0, ROT0, "IGS", "Super Poker (v116IT-MX)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs proper machine driver
+GAME( 1993?, spk115it, spk306us, spoker, spoker, spoker_state, spk116it, ROT0, "IGS", "Super Poker (v115IT)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993?, spk114it, spk306us, spoker, spoker, driver_device, 0, ROT0, "IGS", "Super Poker (v114IT)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs proper machine driver
+GAME( 1996, spk102ua, spk306us, spoker, spoker, spoker_state, spkleftover, ROT0, "IGS", "Super Poker (v102UA)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs proper machine driver
+GAME( 1993?, 3super8, 0, 3super8, 3super8, spoker_state, 3super8, ROT0, "<unknown>", "3 Super 8 (Italy)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //roms are badly dumped
diff --git a/src/mame/drivers/sprcros2.cpp b/src/mame/drivers/sprcros2.cpp
index ac9b81efa33..886e3e7b9d9 100644
--- a/src/mame/drivers/sprcros2.cpp
+++ b/src/mame/drivers/sprcros2.cpp
@@ -1,6 +1,21 @@
-// license:???
-// copyright-holders:insideoutboy
-/*
+// license:BSD-3-Clause
+// copyright-holders:Angelo Salese
+/***************************************************************************
+
+ Super Cross II (c) 1987 GM Shoji
+
+ driver by Angelo Salese, based off "wiped off due of not anymore licenseable" driver by insideoutboy.
+
+ TODO:
+ - complete rewrite;
+ - scanline renderer;
+ - understand irq 0 source;
+ - output bit 0 might be watchdog armed bit/sprite start DMA instead of irq enable;
+ - weird visible area resolution, 224 or 240 x 224? Maybe it's really just 256 x 224 and then it's supposed
+ to show garbage/nothing on the edges?
+
+===================================
+
Super Cross II (JPN Ver.)
(c)1986 GM Shoji
@@ -36,102 +51,225 @@ SCM-23.5B
SC-60.4K
SC-61.5A
-Notes:
+***************************************************************************/
-- sprites pop in at the wrong place sometimes before entering the screen
+#include "emu.h"
+#include "cpu/z80/z80.h"
+#include "sound/sn76496.h"
-- correct drawing/animation of bg is very sensitive to cpu speed/interrupts/
- interleave, current settings aren't correct but don't think there's any
- visible problems
+#define MAIN_CLOCK XTAL_10MHz
-- engine rev sound may not be completely correct
+class sprcros2_state : public driver_device
+{
+public:
+ sprcros2_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_master_cpu(*this, "master_cpu"),
+ m_slave_cpu(*this, "slave_cpu"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_fgvram(*this, "fgvram"),
+ m_fgattr(*this, "fgattr"),
+ m_bgvram(*this, "bgvram"),
+ m_bgattr(*this, "bgattr"),
+ m_sprram(*this, "sprram")
+ { }
+
+ // devices
+ required_device<cpu_device> m_master_cpu;
+ required_device<cpu_device> m_slave_cpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+
+ required_shared_ptr<UINT8> m_fgvram;
+ required_shared_ptr<UINT8> m_fgattr;
+ required_shared_ptr<UINT8> m_bgvram;
+ required_shared_ptr<UINT8> m_bgattr;
+ required_shared_ptr<UINT8> m_sprram;
+
+
+ // screen updates
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ DECLARE_PALETTE_INIT(sprcros2);
+ DECLARE_WRITE8_MEMBER(master_output_w);
+ DECLARE_WRITE8_MEMBER(slave_output_w);
+ DECLARE_WRITE8_MEMBER(bg_scrollx_w);
+ DECLARE_WRITE8_MEMBER(bg_scrolly_w);
+ INTERRUPT_GEN_MEMBER(master_vblank_irq);
+ INTERRUPT_GEN_MEMBER(slave_vblank_irq);
+ TIMER_DEVICE_CALLBACK_MEMBER(master_scanline);
+
+ bool m_master_nmi_enable;
+ bool m_master_irq_enable;
+ bool m_slave_nmi_enable;
+ bool m_screen_enable;
+ UINT8 m_bg_scrollx, m_bg_scrolly;
+protected:
+ // driver_device overrides
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ virtual void video_start() override;
+
+private:
+ void legacy_bg_draw(bitmap_ind16 &bitmap,const rectangle &cliprect);
+ void legacy_fg_draw(bitmap_ind16 &bitmap,const rectangle &cliprect);
+ void legacy_obj_draw(bitmap_ind16 &bitmap,const rectangle &cliprect);
+};
-- bg not using second half of prom, of interest is this half is identical to
- the second half of a bankp/appoooh prom, hardware is similar to bankp/appoooh
- in a few ways, there's also an unused SEGA logo in the bg graphics
+void sprcros2_state::video_start()
+{
+}
+
+void sprcros2_state::legacy_bg_draw(bitmap_ind16 &bitmap,const rectangle &cliprect)
+{
+ gfx_element *gfx_0 = m_gfxdecode->gfx(0);
+ int count = 0;
-- fg not using odd colours, shouldn't matter as the colours are duplicated
+ for (int y=0;y<32;y++)
+ {
+ for (int x=0;x<32;x++)
+ {
+ UINT16 tile = m_bgvram[count];
+ tile |= (m_bgattr[count] & 7) << 8;
+ bool flipx = bool(m_bgattr[count] & 0x08);
+ UINT8 color = (m_bgattr[count] & 0xf0) >> 4;
+
+ gfx_0->opaque(bitmap,cliprect,tile,color,flipx,0,x*8-m_bg_scrollx,y*8-m_bg_scrolly);
+ gfx_0->opaque(bitmap,cliprect,tile,color,flipx,0,x*8+256-m_bg_scrollx,y*8-m_bg_scrolly);
+ gfx_0->opaque(bitmap,cliprect,tile,color,flipx,0,x*8-m_bg_scrollx,y*8+256-m_bg_scrolly);
+ gfx_0->opaque(bitmap,cliprect,tile,color,flipx,0,x*8+256-m_bg_scrollx,y*8+256-m_bg_scrolly);
+
+ count++;
+ }
+ }
+
+}
-- sprite priorities are wrong when bikes are jumping as they are ordered on
- vertical position only, assume this is original behaviour
-*/
+void sprcros2_state::legacy_obj_draw(bitmap_ind16 &bitmap,const rectangle &cliprect)
+{
+ gfx_element *gfx_1 = m_gfxdecode->gfx(1);
-#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "sound/sn76496.h"
-#include "includes/sprcros2.h"
+ for(int count=0x40-4;count>-1;count-=4)
+ {
+ UINT8 x,y,tile,color;
+ bool flipx;
+
+ y = 224-m_sprram[count+2];
+ x = m_sprram[count+3];
+ tile = m_sprram[count+0];
+ flipx = bool(m_sprram[count+1] & 2);
+ color = (m_sprram[count+1] & 0x38) >> 3;
+ gfx_1->transpen(bitmap,cliprect,tile,color,flipx,0,x,y & 0xff,0);
+ }
+}
+void sprcros2_state::legacy_fg_draw(bitmap_ind16 &bitmap,const rectangle &cliprect)
+{
+ gfx_element *gfx_2 = m_gfxdecode->gfx(2);
+ int count = 0;
+ for (int y=0;y<32;y++)
+ {
+ for (int x=0;x<32;x++)
+ {
+ UINT16 tile = m_fgvram[count];
+ tile |= (m_fgattr[count] & 3) << 8;
+ UINT8 color = (m_fgattr[count] & 0xfc) >> 2;
+
+ // TODO: was using tileinfo.group, which I don't know what's for at all.
+ // This guess seems as good as the original one for all I know.
+ if((color & 0x30) != 0x30)
+ gfx_2->opaque(bitmap,cliprect,tile,color,0,0,x*8,y*8);
+ else
+ gfx_2->transpen(bitmap,cliprect,tile,color,0,0,x*8,y*8,0);
+
+ count++;
+ }
+ }
+}
-WRITE8_MEMBER(sprcros2_state::m_port7_w)
-{
- //76543210
- //x------- unused
- //-x------ bankswitch halves of scm-01.10k into c000-dfff
- //--xx---- unused
- //----x--- irq enable
- //-----x-- ?? off with title flash and screen clears, possibly layer/sprite enable
- //------x- flip screen
- //-------x nmi enable
- if((m_port7^data)&0x40)
- membank("masterbank")->set_entry((data&0x40)>>6);
- machine().tilemap().set_flip_all(data&0x02?(TILEMAP_FLIPX|TILEMAP_FLIPY):0 );
+UINT32 sprcros2_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
+{
+ if(m_screen_enable == false)
+ {
+ bitmap.fill(0,cliprect);
+ return 0;
+ }
+ legacy_bg_draw(bitmap,cliprect);
+ legacy_obj_draw(bitmap,cliprect);
+ legacy_fg_draw(bitmap,cliprect);
+ return 0;
+}
- m_port7 = data;
+WRITE8_MEMBER(sprcros2_state::master_output_w)
+{
+ //popmessage("%02x",data);
+ //if(data & 0xbe)
+ // printf("master 07 -> %02x\n",data);
+
+ membank("master_rombank")->set_entry((data&0x40)>>6);
+ m_master_nmi_enable = bool(data & 1);
+ m_screen_enable = bool(data & 4);
+ m_master_irq_enable = bool(data & 8);
+// if(data & 0x80)
+// m_master_cpu->set_input_line(0,HOLD_LINE);
}
-WRITE8_MEMBER(sprcros2_state::s_port3_w)
+WRITE8_MEMBER(sprcros2_state::slave_output_w)
{
- //76543210
- //xxxx---- unused
- //----x--- bankswitch halves of scs-27.5k into c000-dfff
- //-----xx- unused
- //-------x nmi enable
+ //if(data & 0xf6)
+ // printf("slave 03 -> %02x\n",data);
+
+ m_slave_nmi_enable = bool(data & 1);
+ membank("slave_rombank")->set_entry((data&8)>>3);
+}
- if((m_s_port3^data)&0x08)
- membank("slavebank")->set_entry((data&0x08)>>3);
+WRITE8_MEMBER(sprcros2_state::bg_scrollx_w)
+{
+ m_bg_scrollx = data;
+}
- m_s_port3 = data;
+WRITE8_MEMBER(sprcros2_state::bg_scrolly_w)
+{
+ m_bg_scrolly = data;
}
-static ADDRESS_MAP_START( sprcros2_master_map, AS_PROGRAM, 8, sprcros2_state )
- AM_RANGE(0x0000, 0xbfff) AM_ROM
- AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("masterbank")
- AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram")
- AM_RANGE(0xe800, 0xe817) AM_RAM //always zero
- AM_RANGE(0xe818, 0xe83f) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0xe840, 0xefff) AM_RAM //always zero
- AM_RANGE(0xf000, 0xf7ff) AM_RAM
- AM_RANGE(0xf800, 0xffff) AM_RAM AM_SHARE("share1") //shared with slave cpu
+static ADDRESS_MAP_START( master_map, AS_PROGRAM, 8, sprcros2_state )
+ AM_RANGE(0x0000, 0xbfff) AM_ROM AM_REGION("master", 0)
+ AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("master_rombank")
+ AM_RANGE(0xe000, 0xe3ff) AM_RAM AM_SHARE("fgvram")
+ AM_RANGE(0xe400, 0xe7ff) AM_RAM AM_SHARE("fgattr")
+ AM_RANGE(0xe800, 0xe83f) AM_RAM AM_SHARE("sprram")
+ AM_RANGE(0xe840, 0xf7ff) AM_RAM
+ AM_RANGE(0xf800, 0xffff) AM_RAM AM_SHARE("shared_ram")
ADDRESS_MAP_END
-static ADDRESS_MAP_START( sprcros2_master_io_map, AS_IO, 8, sprcros2_state )
+static ADDRESS_MAP_START( master_io, AS_IO, 8, sprcros2_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_READ_PORT("P1") AM_DEVWRITE("sn1", sn76489_device, write)
AM_RANGE(0x01, 0x01) AM_READ_PORT("P2") AM_DEVWRITE("sn2", sn76489_device, write)
AM_RANGE(0x02, 0x02) AM_READ_PORT("EXTRA") AM_DEVWRITE("sn3", sn76489_device, write)
AM_RANGE(0x04, 0x04) AM_READ_PORT("DSW1")
AM_RANGE(0x05, 0x05) AM_READ_PORT("DSW2")
- AM_RANGE(0x07, 0x07) AM_WRITE(m_port7_w)
+ AM_RANGE(0x07, 0x07) AM_WRITE(master_output_w)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( sprcros2_slave_map, AS_PROGRAM, 8, sprcros2_state )
- AM_RANGE(0x0000, 0xbfff) AM_ROM
- AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("slavebank")
- AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(bgvideoram_w) AM_SHARE("bgvideoram")
- AM_RANGE(0xe800, 0xefff) AM_RAM //always zero
- AM_RANGE(0xf000, 0xf7ff) AM_RAM
- AM_RANGE(0xf800, 0xffff) AM_RAM AM_SHARE("share1")
+static ADDRESS_MAP_START( slave_map, AS_PROGRAM, 8, sprcros2_state )
+ AM_RANGE(0x0000, 0xbfff) AM_ROM AM_REGION("slave", 0)
+ AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("slave_rombank")
+ AM_RANGE(0xe000, 0xe3ff) AM_RAM AM_SHARE("bgvram")
+ AM_RANGE(0xe400, 0xe7ff) AM_RAM AM_SHARE("bgattr")
+ AM_RANGE(0xe800, 0xf7ff) AM_RAM
+ AM_RANGE(0xf800, 0xffff) AM_RAM AM_SHARE("shared_ram")
ADDRESS_MAP_END
-static ADDRESS_MAP_START( sprcros2_slave_io_map, AS_IO, 8, sprcros2_state )
+static ADDRESS_MAP_START( slave_io, AS_IO, 8, sprcros2_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_WRITE(bgscrollx_w)
- AM_RANGE(0x01, 0x01) AM_WRITE(bgscrolly_w)
- AM_RANGE(0x03, 0x03) AM_WRITE(s_port3_w)
+ AM_RANGE(0x00, 0x00) AM_WRITE(bg_scrollx_w)
+ AM_RANGE(0x01, 0x01) AM_WRITE(bg_scrolly_w)
+ AM_RANGE(0x03, 0x03) AM_WRITE(slave_output_w)
ADDRESS_MAP_END
static INPUT_PORTS_START( sprcros2 )
@@ -187,18 +325,7 @@ static INPUT_PORTS_START( sprcros2 )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
INPUT_PORTS_END
-static const gfx_layout sprcros2_bglayout =
-{
- 8,8,
- RGN_FRAC(1,3),
- 3,
- { RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) },
- { STEP8(0,1) },
- { STEP8(0,8) },
- 8*8
-};
-
-static const gfx_layout sprcros2_spritelayout =
+static const gfx_layout sprite_layout =
{
32,32,
RGN_FRAC(1,3),
@@ -209,7 +336,7 @@ static const gfx_layout sprcros2_spritelayout =
32*32
};
-static const gfx_layout sprcros2_fglayout =
+static const gfx_layout fg_layout =
{
8,8,
RGN_FRAC(1,1),
@@ -221,73 +348,128 @@ static const gfx_layout sprcros2_fglayout =
};
static GFXDECODE_START( sprcros2 )
- GFXDECODE_ENTRY( "gfx1", 0, sprcros2_bglayout, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0, sprcros2_spritelayout, 256, 6 )
- GFXDECODE_ENTRY( "gfx3", 0, sprcros2_fglayout, 512, 64 )
+ GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x3_planar, 0, 16 )
+ GFXDECODE_ENTRY( "gfx2", 0, sprite_layout, 256, 32 )
+ GFXDECODE_ENTRY( "gfx3", 0, fg_layout, 512, 64 )
GFXDECODE_END
-TIMER_DEVICE_CALLBACK_MEMBER(sprcros2_state::m_interrupt)
+
+
+void sprcros2_state::machine_start()
{
- int scanline = param;
+ membank("master_rombank")->configure_entries(0, 2, memregion("master_bank")->base(), 0x2000);
+ membank("slave_rombank")->configure_entries(0, 2, memregion("slave_bank")->base(), 0x2000);
- if (scanline == 240)
+}
+
+void sprcros2_state::machine_reset()
+{
+ m_master_nmi_enable = false;
+ m_slave_nmi_enable = false;
+}
+
+
+PALETTE_INIT_MEMBER(sprcros2_state, sprcros2)
+{
+ const UINT8 *color_prom = memregion("proms")->base();
+ int i;
+
+ /* create a lookup table for the palette */
+ for (i = 0; i < 0x20; i++)
{
- if(m_port7&0x01)
- m_master->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
+ int bit0, bit1, bit2;
+ int r, g, b;
+
+ /* red component */
+ bit0 = (color_prom[i] >> 0) & 0x01;
+ bit1 = (color_prom[i] >> 1) & 0x01;
+ bit2 = (color_prom[i] >> 2) & 0x01;
+ r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+
+ /* green component */
+ bit0 = (color_prom[i] >> 3) & 0x01;
+ bit1 = (color_prom[i] >> 4) & 0x01;
+ bit2 = (color_prom[i] >> 5) & 0x01;
+ g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+
+ /* blue component */
+ bit0 = (color_prom[i] >> 6) & 0x01;
+ bit1 = (color_prom[i] >> 7) & 0x01;
+ b = 0x47 * bit0 + 0xb8 * bit1;
+ palette.set_pen_color(i,rgb_t(r,g,b));
+
+ palette.set_indirect_color(i, rgb_t(r, g, b));
}
- else if(scanline == 0)
+
+ /* color_prom now points to the beginning of the lookup table */
+ color_prom += 0x20;
+
+ /* bg */
+ for (i = 0; i < 0x100; i++)
+ {
+ UINT8 ctabentry = (color_prom[i] & 0x0f) | ((color_prom[i + 0x100] & 0x0f) << 4);
+ palette.set_pen_indirect(i, ctabentry);
+ }
+
+ /* sprites & fg */
+ for (i = 0x100; i < 0x300; i++)
{
- if(m_port7&0x08)
- m_master->set_input_line(0, HOLD_LINE);
+ UINT8 ctabentry = color_prom[i + 0x100];
+ palette.set_pen_indirect(i, ctabentry);
}
}
-INTERRUPT_GEN_MEMBER(sprcros2_state::s_interrupt)
+INTERRUPT_GEN_MEMBER(sprcros2_state::master_vblank_irq)
{
- if(m_s_port3&0x01)
+ if(m_master_nmi_enable == true)
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
-void sprcros2_state::machine_start()
+INTERRUPT_GEN_MEMBER(sprcros2_state::slave_vblank_irq)
+{
+ if(m_slave_nmi_enable == true)
+ device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
+}
+
+TIMER_DEVICE_CALLBACK_MEMBER(sprcros2_state::master_scanline)
{
- membank("masterbank")->configure_entries(0, 2, memregion("master")->base() + 0x10000, 0x2000);
- membank("slavebank")->configure_entries(0, 2, memregion("slave")->base() + 0x10000, 0x2000);
+ int scanline = param;
+
- save_item(NAME(m_port7));
- save_item(NAME(m_s_port3));
+ if(scanline == 0 && m_master_irq_enable == true)
+ m_master_cpu->set_input_line(0, HOLD_LINE);
}
static MACHINE_CONFIG_START( sprcros2, sprcros2_state )
/* basic machine hardware */
- MCFG_CPU_ADD("master", Z80,10000000/2)
- MCFG_CPU_PROGRAM_MAP(sprcros2_master_map)
- MCFG_CPU_IO_MAP(sprcros2_master_io_map)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", sprcros2_state, m_interrupt, "screen", 0, 1)
-
- MCFG_CPU_ADD("slave", Z80,10000000/2)
- MCFG_CPU_PROGRAM_MAP(sprcros2_slave_map)
- MCFG_CPU_IO_MAP(sprcros2_slave_io_map)
- MCFG_CPU_PERIODIC_INT_DRIVER(sprcros2_state, s_interrupt, 2*60) //2 nmis
-
+ MCFG_CPU_ADD("master_cpu",Z80,MAIN_CLOCK/4)
+ MCFG_CPU_PROGRAM_MAP(master_map)
+ MCFG_CPU_IO_MAP(master_io)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", sprcros2_state, master_vblank_irq)
+ MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", sprcros2_state, master_scanline, "screen", 0, 1)
+
+ MCFG_CPU_ADD("slave_cpu",Z80,MAIN_CLOCK/4)
+ MCFG_CPU_PROGRAM_MAP(slave_map)
+ MCFG_CPU_IO_MAP(slave_io)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", sprcros2_state, slave_vblank_irq)
+
+ MCFG_QUANTUM_PERFECT_CPU("master_cpu")
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 2*8, 30*8-1)
MCFG_SCREEN_UPDATE_DRIVER(sprcros2_state, screen_update)
+ MCFG_SCREEN_RAW_PARAMS(MAIN_CLOCK/2, 343, 8, 256-8, 262, 16, 240) // TODO: Wrong screen parameters
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", sprcros2)
+
MCFG_PALETTE_ADD("palette", 768)
MCFG_PALETTE_INDIRECT_ENTRIES(32)
MCFG_PALETTE_INIT_OWNER(sprcros2_state, sprcros2)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
-
MCFG_SOUND_ADD("sn1", SN76489, 10000000/4)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
@@ -298,28 +480,39 @@ static MACHINE_CONFIG_START( sprcros2, sprcros2_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END
+
+/***************************************************************************
+
+ Machine driver(s)
+
+***************************************************************************/
+
+
+
ROM_START( sprcros2 )
- ROM_REGION( 0x14000, "master", 0 )
+ ROM_REGION( 0x0c000, "master", 0 )
ROM_LOAD( "scm-03.10g", 0x00000, 0x4000, CRC(b9757908) SHA1(d59cb2aac1b6268fc766306850f5711d4a12d897) )
ROM_LOAD( "scm-02.10j", 0x04000, 0x4000, CRC(849c5c87) SHA1(0e02c4990e371d6a290efa53301818e769648945) )
ROM_LOAD( "scm-01.10k", 0x08000, 0x4000, CRC(385a62de) SHA1(847bf9d97ab3fa8949d9198e4e509948a940d6aa) )
+
+ ROM_REGION( 0x4000, "master_bank", 0)
+ ROM_LOAD( "scm-00.10l", 0x00000, 0x4000, CRC(13fa3684) SHA1(611b7a237e394f285dcc5beb027dacdbdd58a7a0) )
- ROM_LOAD( "scm-00.10l", 0x10000, 0x4000, CRC(13fa3684) SHA1(611b7a237e394f285dcc5beb027dacdbdd58a7a0) ) //banked into c000-dfff
-
- ROM_REGION( 0x14000, "slave", 0 )
+ ROM_REGION( 0xc000, "slave", 0 )
ROM_LOAD( "scs-30.5f", 0x00000, 0x4000, CRC(c0a40e41) SHA1(e74131b353855749258dffa45091c825ccdbf05a) )
ROM_LOAD( "scs-29.5h", 0x04000, 0x4000, CRC(83d49fa5) SHA1(7112110df2f382bbc0e651adcec975054a485b9b) )
ROM_LOAD( "scs-28.5j", 0x08000, 0x4000, CRC(480d351f) SHA1(d1b86f441ae0e58b30e0f089ab25de219d5f30e3) )
- ROM_LOAD( "scs-27.5k", 0x10000, 0x4000, CRC(2cf720cb) SHA1(a95c5b8c88371cf597bb7d80afeca6a48c7b74e6) ) //banked into c000-dfff
+ ROM_REGION( 0x4000, "slave_bank", 0)
+ ROM_LOAD( "scs-27.5k", 0x00000, 0x4000, CRC(2cf720cb) SHA1(a95c5b8c88371cf597bb7d80afeca6a48c7b74e6) )
ROM_REGION( 0xc000, "gfx1", 0 ) //bg
- ROM_LOAD( "scs-26.4b", 0x0000, 0x4000, CRC(f958b56d) SHA1(a1973179d336d2ba57294155550515f2b8a33a09) )
+ ROM_LOAD( "scs-26.4b", 0x8000, 0x4000, CRC(f958b56d) SHA1(a1973179d336d2ba57294155550515f2b8a33a09) )
ROM_LOAD( "scs-25.4c", 0x4000, 0x4000, CRC(d6fd7ba5) SHA1(1c26c4c1655b2be9cb6103e75386cc2f0cf27fc5) )
- ROM_LOAD( "scs-24.4e", 0x8000, 0x4000, CRC(87783c36) SHA1(7102be795afcddd76b4d41823e95c65fe1ffbca0) )
+ ROM_LOAD( "scs-24.4e", 0x0000, 0x4000, CRC(87783c36) SHA1(7102be795afcddd76b4d41823e95c65fe1ffbca0) )
ROM_REGION( 0xc000, "gfx2", 0 )
- ROM_LOAD( "scm-23.5b", 0x0000, 0x4000, CRC(ab42f8e3) SHA1(8c2213b7c47a48e223fc3f7d323d16c0e4cd0457) ) //sprites
+ ROM_LOAD( "scm-23.5b", 0x0000, 0x4000, CRC(ab42f8e3) SHA1(8c2213b7c47a48e223fc3f7d323d16c0e4cd0457) )
ROM_LOAD( "scm-22.5e", 0x4000, 0x4000, CRC(0cad254c) SHA1(36e30e30b652b3a388a3c4a82251196f79368f59) )
ROM_LOAD( "scm-21.5g", 0x8000, 0x4000, CRC(b6b68998) SHA1(cc3c6d996beeedcc7e5199f10d65c5b1d3c6e666) )
@@ -334,29 +527,30 @@ ROM_START( sprcros2 )
ROM_LOAD( "sc-60.4k", 0x0320, 0x0100, CRC(d7a4e57d) SHA1(6db02ec6aa55b05422cb505e63c71e36b4b11b4a) ) //fg clut
ROM_END
-/* this is probably an old revision */
ROM_START( sprcros2a )
- ROM_REGION( 0x14000, "master", 0 )
+ ROM_REGION( 0xc000, "master", 0 )
ROM_LOAD( "15.bin", 0x00000, 0x4000, CRC(b9d02558) SHA1(775404c6c7648d9dab02b496541739ea700cd481) )
ROM_LOAD( "scm-02.10j", 0x04000, 0x4000, CRC(849c5c87) SHA1(0e02c4990e371d6a290efa53301818e769648945) )
ROM_LOAD( "scm-01.10k", 0x08000, 0x4000, CRC(385a62de) SHA1(847bf9d97ab3fa8949d9198e4e509948a940d6aa) )
- ROM_LOAD( "scm-00.10l", 0x10000, 0x4000, CRC(13fa3684) SHA1(611b7a237e394f285dcc5beb027dacdbdd58a7a0) ) //banked into c000-dfff
-
- ROM_REGION( 0x14000, "slave", 0 )
+ ROM_REGION( 0x4000, "master_bank", 0)
+ ROM_LOAD( "scm-00.10l", 0x00000, 0x4000, CRC(13fa3684) SHA1(611b7a237e394f285dcc5beb027dacdbdd58a7a0) )
+
+ ROM_REGION( 0xc000, "slave", 0 )
ROM_LOAD( "scs-30.5f", 0x00000, 0x4000, CRC(c0a40e41) SHA1(e74131b353855749258dffa45091c825ccdbf05a) )
ROM_LOAD( "scs-29.5h", 0x04000, 0x4000, CRC(83d49fa5) SHA1(7112110df2f382bbc0e651adcec975054a485b9b) )
ROM_LOAD( "scs-28.5j", 0x08000, 0x4000, CRC(480d351f) SHA1(d1b86f441ae0e58b30e0f089ab25de219d5f30e3) )
-
- ROM_LOAD( "scs-27.5k", 0x10000, 0x4000, CRC(2cf720cb) SHA1(a95c5b8c88371cf597bb7d80afeca6a48c7b74e6) ) //banked into c000-dfff
+
+ ROM_REGION( 0x4000, "slave_bank", 0)
+ ROM_LOAD( "scs-27.5k", 0x00000, 0x4000, CRC(2cf720cb) SHA1(a95c5b8c88371cf597bb7d80afeca6a48c7b74e6) )
ROM_REGION( 0xc000, "gfx1", 0 ) //bg
- ROM_LOAD( "scs-26.4b", 0x0000, 0x4000, CRC(f958b56d) SHA1(a1973179d336d2ba57294155550515f2b8a33a09) )
+ ROM_LOAD( "scs-26.4b", 0x8000, 0x4000, CRC(f958b56d) SHA1(a1973179d336d2ba57294155550515f2b8a33a09) )
ROM_LOAD( "scs-25.4c", 0x4000, 0x4000, CRC(d6fd7ba5) SHA1(1c26c4c1655b2be9cb6103e75386cc2f0cf27fc5) )
- ROM_LOAD( "scs-24.4e", 0x8000, 0x4000, CRC(87783c36) SHA1(7102be795afcddd76b4d41823e95c65fe1ffbca0) )
+ ROM_LOAD( "scs-24.4e", 0x0000, 0x4000, CRC(87783c36) SHA1(7102be795afcddd76b4d41823e95c65fe1ffbca0) )
ROM_REGION( 0xc000, "gfx2", 0 )
- ROM_LOAD( "scm-23.5b", 0x0000, 0x4000, CRC(ab42f8e3) SHA1(8c2213b7c47a48e223fc3f7d323d16c0e4cd0457) ) //sprites
+ ROM_LOAD( "scm-23.5b", 0x0000, 0x4000, CRC(ab42f8e3) SHA1(8c2213b7c47a48e223fc3f7d323d16c0e4cd0457) )
ROM_LOAD( "scm-22.5e", 0x4000, 0x4000, CRC(0cad254c) SHA1(36e30e30b652b3a388a3c4a82251196f79368f59) )
ROM_LOAD( "scm-21.5g", 0x8000, 0x4000, CRC(b6b68998) SHA1(cc3c6d996beeedcc7e5199f10d65c5b1d3c6e666) )
diff --git a/src/mame/drivers/ssem.cpp b/src/mame/drivers/ssem.cpp
index 56090713130..278d02518fb 100644
--- a/src/mame/drivers/ssem.cpp
+++ b/src/mame/drivers/ssem.cpp
@@ -18,21 +18,29 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_store(*this, "store"),
- m_screen(*this, "screen") { }
-
- required_device<ssem_device> m_maincpu;
- required_shared_ptr<UINT8> m_store;
- required_device<screen_device> m_screen;
+ m_screen(*this, "screen")
+ {
+ }
- UINT8 m_store_line;
virtual void machine_start() override;
virtual void machine_reset() override;
UINT32 screen_update_ssem(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
DECLARE_INPUT_CHANGED_MEMBER(panel_check);
DECLARE_QUICKLOAD_LOAD_MEMBER(ssem_store);
inline UINT32 reverse(UINT32 v);
- void glyph_print(bitmap_rgb32 &bitmap, INT32 x, INT32 y, const char *msg, ...) ATTR_PRINTF(5,6);
void strlower(char *buf);
+
+private:
+ template <typename Format, typename... Params>
+ void glyph_print(bitmap_rgb32 &bitmap, INT32 x, INT32 y, Format &&fmt, Params &&...args);
+
+ required_device<ssem_device> m_maincpu;
+ required_shared_ptr<UINT8> m_store;
+ required_device<screen_device> m_screen;
+
+ UINT8 m_store_line;
+
+ util::ovectorstream m_glyph_print_buf;
};
@@ -403,20 +411,18 @@ static const UINT8 char_glyphs[0x80][8] =
{ 0xff, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xff },
};
-void ssem_state::glyph_print(bitmap_rgb32 &bitmap, INT32 x, INT32 y, const char *msg, ...)
+template <typename Format, typename... Params>
+void ssem_state::glyph_print(bitmap_rgb32 &bitmap, INT32 x, INT32 y, Format &&fmt, Params &&...args)
{
- va_list arg_list;
- char buf[32768];
- INT32 index = 0;
const rectangle &visarea = m_screen->visible_area();
- va_start( arg_list, msg );
- vsprintf( buf, msg, arg_list );
- va_end( arg_list );
+ m_glyph_print_buf.seekp(0, util::ovectorstream::beg);
+ util::stream_format(m_glyph_print_buf, std::forward<Format>(fmt), std::forward<Params>(args)...);
+ m_glyph_print_buf.put('\0');
- for(index = 0; index < strlen(buf) && index < 32768; index++)
+ for(char const *buf = &m_glyph_print_buf.vec()[0]; *buf; buf++)
{
- UINT8 cur = (UINT8)buf[index];
+ UINT8 cur = UINT8(*buf);
if(cur < 0x80)
{
INT32 line = 0;
@@ -493,7 +499,7 @@ UINT32 ssem_state::screen_update_ssem(screen_device &screen, bitmap_rgb32 &bitma
(m_store[(m_store_line << 2) | 1] << 16) |
(m_store[(m_store_line << 2) | 2] << 8) |
(m_store[(m_store_line << 2) | 3] << 0));
- glyph_print(bitmap, 0, 272, "LINE:%02d VALUE:%08x HALT:%" I64FMT "d", m_store_line, word, m_maincpu->state_int(SSEM_HALT));
+ glyph_print(bitmap, 0, 272, "LINE:%02u VALUE:%08x HALT:%d", m_store_line, word, m_maincpu->state_int(SSEM_HALT));
return 0;
}
@@ -609,6 +615,7 @@ QUICKLOAD_LOAD_MEMBER(ssem_state, ssem_store)
void ssem_state::machine_start()
{
save_item(NAME(m_store_line));
+ m_glyph_print_buf.reserve(1024);
}
void ssem_state::machine_reset()
@@ -628,7 +635,7 @@ static MACHINE_CONFIG_START( ssem, ssem_state )
MCFG_SCREEN_SIZE(256, 280)
MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 279)
MCFG_SCREEN_UPDATE_DRIVER(ssem_state, screen_update_ssem)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* quickload */
MCFG_QUICKLOAD_ADD("quickload", ssem_state, ssem_store, "snp,asm", 1)
diff --git a/src/mame/drivers/sshot.cpp b/src/mame/drivers/sshot.cpp
index 97075424ff0..cb87ec1187d 100644
--- a/src/mame/drivers/sshot.cpp
+++ b/src/mame/drivers/sshot.cpp
@@ -352,7 +352,7 @@ static MACHINE_CONFIG_START( supershot, supershot_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", supershot)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
//...
diff --git a/src/mame/drivers/starcrus.cpp b/src/mame/drivers/starcrus.cpp
index f855f6eb459..9c42109b9f4 100644
--- a/src/mame/drivers/starcrus.cpp
+++ b/src/mame/drivers/starcrus.cpp
@@ -149,7 +149,7 @@ static MACHINE_CONFIG_START( starcrus, starcrus_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", starcrus)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/suna8.cpp b/src/mame/drivers/suna8.cpp
index a09ed61babc..a6a6d91293f 100644
--- a/src/mame/drivers/suna8.cpp
+++ b/src/mame/drivers/suna8.cpp
@@ -1694,8 +1694,8 @@ static INPUT_PORTS_START( starfigh )
PORT_DIPSETTING( 0x38, DEF_STR( Easiest ) )
PORT_DIPSETTING( 0x30, DEF_STR( Very_Easy) )
PORT_DIPSETTING( 0x28, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0x20, "Moderate" )
- PORT_DIPSETTING( 0x18, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x18, "Moderate" )
PORT_DIPSETTING( 0x10, DEF_STR( Harder ) )
PORT_DIPSETTING( 0x08, DEF_STR( Very_Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
@@ -1714,7 +1714,7 @@ static INPUT_PORTS_START( starfigh )
PORT_DIPNAME( 0x04, 0x04, "Play Together" ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x38, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4,5,6")
+ PORT_DIPNAME( 0x38, 0x18, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4,5,6")
PORT_DIPSETTING( 0x30, "10K" )
PORT_DIPSETTING( 0x28, "30K" )
PORT_DIPSETTING( 0x18, "50K, Every 50K" )
diff --git a/src/mame/drivers/super80.cpp b/src/mame/drivers/super80.cpp
index ad47e443f2a..8bbb6c194f7 100644
--- a/src/mame/drivers/super80.cpp
+++ b/src/mame/drivers/super80.cpp
@@ -699,13 +699,13 @@ static MACHINE_CONFIG_START( super80, super80_state )
MCFG_Z80PIO_OUT_PA_CB(WRITE8(super80_state, pio_port_a_w))
MCFG_Z80PIO_IN_PB_CB(READ8(super80_state,pio_port_b_r))
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(48.8)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
MCFG_SCREEN_UPDATE_DRIVER(super80_state, screen_update_super80)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", super80)
MCFG_DEFAULT_LAYOUT( layout_super80 )
diff --git a/src/mame/drivers/superchs.cpp b/src/mame/drivers/superchs.cpp
index 3f88465df2e..035b0ccafc5 100644
--- a/src/mame/drivers/superchs.cpp
+++ b/src/mame/drivers/superchs.cpp
@@ -339,7 +339,7 @@ static MACHINE_CONFIG_START( superchs, superchs_state )
MCFG_TC0480SCP_PALETTE("palette")
/* sound hardware */
- MCFG_FRAGMENT_ADD(taito_en_sound)
+ MCFG_DEVICE_ADD("taito_en", TAITO_EN, 0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( chase3, superchs )
@@ -358,7 +358,7 @@ ROM_START( superchs )
ROM_LOAD32_BYTE( "d46-33+.ic23", 0x00002, 0x40000, CRC(3094bcd0) SHA1(b6779b81a3ebec440a9359868dc43fc3a631ee11) ) /* Actually labeled D46 33* */
ROM_LOAD32_BYTE( "d46-32+.ic21", 0x00003, 0x40000, CRC(4fbeb335) SHA1(430cb753f3a12ab0412e82aef99e6e93b83050d6) ) /* Actually labeled D46 32* */
- ROM_REGION( 0x140000, "audiocpu", 0 ) /* Sound cpu */
+ ROM_REGION( 0x140000, "taito_en:audiocpu", 0 ) /* Sound cpu */
ROM_LOAD16_BYTE( "d46-37.ic8", 0x100000, 0x20000, CRC(60b51b91) SHA1(0d0b017808e0a3bdabe8ef5a726bbe16428db06b) )
ROM_LOAD16_BYTE( "d46-36.ic7", 0x100001, 0x20000, CRC(8f7aa276) SHA1(b3e330e33099d3cbf4cdc43063119b041e9eea3a) )
@@ -408,7 +408,7 @@ ROM_START( superchsu )
ROM_LOAD32_BYTE( "d46-33+.ic23", 0x00002, 0x40000, CRC(3094bcd0) SHA1(b6779b81a3ebec440a9359868dc43fc3a631ee11) ) /* Actually labeled D46 33* */
ROM_LOAD32_BYTE( "d46-31+.ic21", 0x00003, 0x40000, CRC(38b983a3) SHA1(c4859cecc2f3506b7090c462cecd3e4eaabe85aa) ) /* Actually labeled D46 31* */
- ROM_REGION( 0x140000, "audiocpu", 0 ) /* Sound cpu */
+ ROM_REGION( 0x140000, "taito_en:audiocpu", 0 ) /* Sound cpu */
ROM_LOAD16_BYTE( "d46-37.ic8", 0x100000, 0x20000, CRC(60b51b91) SHA1(0d0b017808e0a3bdabe8ef5a726bbe16428db06b) )
ROM_LOAD16_BYTE( "d46-36.ic7", 0x100001, 0x20000, CRC(8f7aa276) SHA1(b3e330e33099d3cbf4cdc43063119b041e9eea3a) )
@@ -458,7 +458,7 @@ ROM_START( superchsj )
ROM_LOAD32_BYTE( "d46-26+.ic23", 0x00002, 0x40000, CRC(2aaba1b0) SHA1(13ceaa678bd671c5c88cac35e8a021a180728a69) ) /* Actually labeled D46 26* */
ROM_LOAD32_BYTE( "d46-25+.ic21", 0x00003, 0x40000, CRC(4241e97a) SHA1(e3e361080e3ebc098805310d41b3afe7f14ff8b4) ) /* Actually labeled D46 25* */
- ROM_REGION( 0x140000, "audiocpu", 0 ) /* Sound cpu */
+ ROM_REGION( 0x140000, "taito_en:audiocpu", 0 ) /* Sound cpu */
ROM_LOAD16_BYTE( "d46-30.ic8", 0x100000, 0x20000, CRC(88f8a421) SHA1(4fd0885d398b1b0e127d7462926d1630a635e305) )
ROM_LOAD16_BYTE( "d46-29.ic7", 0x100001, 0x20000, CRC(04501fa5) SHA1(dfbafc34df8ab0fcaefb5ca4c3143977020b7e58) )
@@ -508,7 +508,7 @@ ROM_START( superchsp )
ROM_LOAD32_BYTE( "ic25 a56c.bin", 0x00001, 0x40000, CRC(553ebaa9) SHA1(cfa544cb147218c3b3d9be313d83350bed34b348) )
ROM_LOAD32_BYTE( "ic27 1a46.bin", 0x00000, 0x40000, CRC(544e34c0) SHA1(57039063fa547e650fc66baf132988fb23ba0565) )
- ROM_REGION( 0x140000, "audiocpu", 0 ) /* Sound cpu */
+ ROM_REGION( 0x140000, "taito_en:audiocpu", 0 ) /* Sound cpu */
ROM_LOAD16_BYTE( "sound ic7 lower.bin", 0x100001, 0x20000, CRC(e70902cc) SHA1(ee3d31c4e2c92c4a338d08d379cb80f42f8fa9cf) )
ROM_LOAD16_BYTE( "sound ic8 upper.bin", 0x100000, 0x20000, CRC(86eea635) SHA1(49615a152c215e1f940ab16be3b0f1120822969c) )
diff --git a/src/mame/drivers/supercon.cpp b/src/mame/drivers/supercon.cpp
deleted file mode 100644
index f40be537c43..00000000000
--- a/src/mame/drivers/supercon.cpp
+++ /dev/null
@@ -1,811 +0,0 @@
-// license:???
-// copyright-holders:Ralf Schaefer, Robbbert
-/******************************************************************************
- Novag SuperConstellation Chess Computer
- 2010 R. Schaefer
-
-
- CPU 6502
- Clock 4 MHz
- IRQ CLK 600 Hz
-
- RAM 0x0000, 0x0fff)
- ROM 0x2000, 0xffff)
- I/O 0x1c00 Unknown
- 0x1d00 Unknown
- 0x1e00 LED's and buttons
- 0x1f00 LED's, buttons and buzzer
-
-
-******************************************************************************/
-
-#include "emu.h"
-#include "cpu/m6502/m6502.h"
-#include "sound/beep.h"
-
-
-class supercon_state : public driver_device
-{
-public:
- supercon_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_beep(*this, "beeper"),
- m_b_white(*this, "B_WHITE"),
- m_b_black(*this, "B_BLACK"),
- m_b_clr(*this, "B_CLR"),
- m_status_1(*this, "STATUS_1"),
- m_status_2(*this, "STATUS_2"),
- m_status_3(*this, "STATUS_3"),
- m_status_4(*this, "STATUS_4"),
- m_status_5(*this, "STATUS_5"),
- m_status_6(*this, "STATUS_6"),
- m_status_7(*this, "STATUS_7"),
- m_status_8(*this, "STATUS_8"),
- m_board_1(*this, "BOARD_1"),
- m_board_2(*this, "BOARD_2"),
- m_board_3(*this, "BOARD_3"),
- m_board_4(*this, "BOARD_4"),
- m_board_5(*this, "BOARD_5"),
- m_board_6(*this, "BOARD_6"),
- m_board_7(*this, "BOARD_7"),
- m_board_8(*this, "BOARD_8") { }
-
- required_device<cpu_device> m_maincpu;
- required_device<beep_device> m_beep;
- DECLARE_READ8_MEMBER(supercon_port1_r);
- DECLARE_READ8_MEMBER(supercon_port2_r);
- DECLARE_READ8_MEMBER(supercon_port3_r);
- DECLARE_READ8_MEMBER(supercon_port4_r);
- DECLARE_WRITE8_MEMBER(supercon_port1_w);
- DECLARE_WRITE8_MEMBER(supercon_port2_w);
- DECLARE_WRITE8_MEMBER(supercon_port3_w);
- DECLARE_WRITE8_MEMBER(supercon_port4_w);
- static const UINT8 m_border_pieces[12];
- emu_timer* m_timer_update_irq;
- emu_timer* m_timer_mouse_click;
- int m_emu_started;
- int m_moving_piece;
- UINT8 m_data_1E00;
- UINT8 m_data_1F00;
- UINT8 m_LED_18;
- UINT8 m_LED_AH;
- UINT8 m_LED_ST;
- UINT8 *m_last_LED;
- UINT8 m_last_LED_value;
- int m_led_update;
- int m_remove_led_flag;
- int m_selecting;
- int m_save_key_data;
- attotime m_wait_time;
- int *m_current_field;
- int m_confirm_board_click;
- int m_board[64];
- int m_save_board[64];
- void set_board();
- void set_pieces();
- void set_border_pieces();
- void clear_pieces();
- void update_leds();
- virtual void machine_reset() override;
- DECLARE_DRIVER_INIT(supercon);
- virtual void machine_start() override;
- TIMER_CALLBACK_MEMBER(mouse_click);
- TIMER_CALLBACK_MEMBER(update_irq);
- TIMER_DEVICE_CALLBACK_MEMBER(update_artwork);
- void board_presave();
- void board_postload();
-
-protected:
- required_ioport m_b_white;
- required_ioport m_b_black;
- required_ioport m_b_clr;
- required_ioport m_status_1;
- required_ioport m_status_2;
- required_ioport m_status_3;
- required_ioport m_status_4;
- required_ioport m_status_5;
- required_ioport m_status_6;
- required_ioport m_status_7;
- required_ioport m_status_8;
- required_ioport m_board_1;
- required_ioport m_board_2;
- required_ioport m_board_3;
- required_ioport m_board_4;
- required_ioport m_board_5;
- required_ioport m_board_6;
- required_ioport m_board_7;
- required_ioport m_board_8;
- void mouse_update();
- int get_first_cleared_bit(UINT8 data);
- int get_first_bit(UINT8 data);
-};
-
-
-#define VERBOSE 0
-#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
-
-enum
-{
- EM, /*No piece*/
- BP,
- BN,
- BB,
- BR,
- BQ,
- BK,
- WP,
- WN,
- WB,
- WR,
- WQ,
- WK
-};
-
-
-#define LED_LINE_AH 0x10
-#define LED_LINE_ST 0x20
-#define LED_LINE_18 0x40
-
-
-#define MAIN_CLOCK 4000000 /* 4 MHz */
-
-#define NOT_VALID 99
-
-#define NO_ACTION 0
-#define TAKE 1
-#define SET 2
-
-/* artwork board */
-
-const UINT8 supercon_state::m_border_pieces[12] = {WK,WQ,WR,WB,WN,WP,BK,BQ,BR,BB,BN,BP};
-
-void supercon_state::set_board()
-{
- static const int start_board[64] = {
- BR, BN, BB, BQ, BK, BB, BN, BR,
- BP, BP, BP, BP, BP, BP, BP, BP,
- EM, EM, EM, EM, EM, EM, EM, EM,
- EM, EM, EM, EM, EM, EM, EM, EM,
- EM, EM, EM, EM, EM, EM, EM, EM,
- EM, EM, EM, EM, EM, EM, EM, EM,
- WP, WP, WP, WP, WP, WP, WP, WP,
- WR, WN, WB, WQ, WK, WB, WN, WR };
-
- for (UINT8 i=0; i<64; i++)
- m_board[i]=start_board[i];
-}
-
-void supercon_state::set_pieces()
-{
- int i;
- for (i=0;i<64;i++)
- output().set_indexed_value("P", i, m_board[i]);
-}
-
-void supercon_state::set_border_pieces()
-{
- UINT8 i;
-
- for (i=0;i<12;i++)
- output().set_indexed_value("Q", i, m_border_pieces[i]);
-}
-
-void supercon_state::clear_pieces()
-{
- int i;
- for (i=0;i<64;i++)
- {
- output().set_indexed_value("P", i, EM);
- m_board[i]=EM;
- }
-}
-
-int supercon_state::get_first_cleared_bit(UINT8 data)
-{
- int i;
-
- for (i = 0; i < 8; i++)
- if (!BIT(data, i))
- return i;
-
- return NOT_VALID;
-}
-
-int supercon_state::get_first_bit(UINT8 data)
-{
- int i;
-
- for (i = 0; i < 8; i++)
- if (BIT(data, i))
- return i;
-
- return NOT_VALID;
-}
-
-
-void supercon_state::update_leds()
-{
- int i;
-
- for (i = 0; i < 8; i++)
- {
- if (BIT(m_LED_18, i))
- output().set_led_value(i + 1, 1);
- else
- output().set_led_value(i + 1, 0);
-
- if (BIT(m_LED_AH, i))
- output().set_led_value(i + 9, 1);
- else
- output().set_led_value(i + 9, 0);
-
- if (BIT(m_LED_ST, i))
- output().set_led_value(i + 17, 1);
- else
- output().set_led_value(i + 17, 0);
- }
-}
-
-void supercon_state::mouse_update()
-{
- UINT8 port_input; // m_left;
- int i;
-
-/* border pieces and moving piece */
-
- port_input = m_b_white->read();
- if (port_input)
- {
- i = get_first_bit(port_input);
- m_moving_piece = m_border_pieces[i];
- output().set_value("MOVING", m_moving_piece);
- return;
- }
-
-
- port_input = m_b_black->read();
- if (port_input)
- {
- i = get_first_bit(port_input);
- m_moving_piece = m_border_pieces[6+i];
- output().set_value("MOVING", m_moving_piece);
- return;
- }
-
-
- port_input = m_b_clr->read();
- if (port_input)
- {
- if (m_moving_piece)
- {
- m_moving_piece=0;
- output().set_value("MOVING", m_moving_piece);
- return;
- }
- }
-}
-
-/* Driver initialization */
-
-DRIVER_INIT_MEMBER(supercon_state,supercon)
-{
- m_LED_18=0;
- m_LED_AH=0;
- m_LED_ST=0;
-
- m_wait_time = attotime::from_hz(4);
- m_save_key_data = 0xff;
-
- m_moving_piece=0;
-}
-
-/* Read 1C000 */
-
-READ8_MEMBER( supercon_state::supercon_port1_r )
-{
- LOG(("Read from %04x \n",0x1C00));
- return 0xff;
-}
-
-/* Read 1D000 */
-
-READ8_MEMBER( supercon_state::supercon_port2_r )
-{
- LOG(("Read from %04x \n",0x1D00));
- return 0xff;
-}
-
-/* Read 1E00 */
-
-READ8_MEMBER( supercon_state::supercon_port3_r )
-{
- int i;
- UINT8 key_data=0;
-
- static const char *const status_lines[8] =
- { "STATUS_1", "STATUS_2", "STATUS_3", "STATUS_4", "STATUS_5", "STATUS_6", "STATUS_7", "STATUS_8" };
-
- LOG(("Read from %04x \n",0x1E00));
-
-/* remove last bit (only if it was not already set) */
-
- if ( m_data_1F00 & LED_LINE_AH )
- {
- if (m_last_LED_value != m_LED_AH)
- m_LED_AH=m_LED_AH & ~m_data_1E00;
- }
- else if ( m_data_1F00 & LED_LINE_ST)
- {
- if (m_last_LED_value != m_LED_ST)
- m_LED_ST=m_LED_ST & ~m_data_1E00;
- }
- else if ( m_data_1F00 & LED_LINE_18 )
- {
- if (m_last_LED_value != m_LED_18)
- m_LED_18=m_LED_18 & ~m_data_1E00;
- }
-
-
- LOG(("LED_18 from %02x \n",m_LED_18));
- LOG(("LED_AH from %02x \n",m_LED_AH));
- LOG(("LED_ST from %02x \n",m_LED_ST));
-
- if (m_led_update) /*No LED Update if Port 1C00,1D00 was read */
- update_leds();
-
- m_remove_led_flag=TRUE;
- m_led_update=TRUE;
-
- m_LED_18=0;
- m_LED_AH=0;
- m_LED_ST=0;
-
-
-/* Start */
-
- if (!m_emu_started)
- return 0xbf;
- else
- m_timer_update_irq->adjust( attotime::zero, 0, attotime::from_hz(598) ); //HACK adjust timer after start ???
-
-
-/* Buttons */
-
- i=get_first_bit(m_data_1E00);
- if (i==NOT_VALID)
- return 0xff;
-
- switch ( i )
- {
- case 0: key_data=m_status_1->read(); break;
- case 1: key_data=m_status_2->read(); break;
- case 2: key_data=m_status_3->read(); break;
- case 3: key_data=m_status_4->read(); break;
- case 4: key_data=m_status_5->read(); break;
- case 5: key_data=m_status_6->read(); break;
- case 6: key_data=m_status_7->read(); break;
- case 7: key_data=m_status_8->read(); break;
- }
-
- if (key_data != 0xc0)
- {
- LOG(("%s, key_data: %02x \n",status_lines[i],key_data));
-
-/* Button: New Game -> initialize board */
-
- if (i==0 && key_data==0x80)
- {
- set_board();
- set_pieces();
-
- m_emu_started=FALSE;
- }
-
-/* Button: Clear Board -> remove all pieces */
-
- if (i==3 && key_data==0x80)
- clear_pieces();
-
- if (key_data != 0xff )
- return key_data;
- }
-
- return 0xc0;
-}
-
-/* Read Port $1F00 */
-
-READ8_MEMBER( supercon_state::supercon_port4_r )
-{
- int i_18, i_AH;
- UINT8 key_data = 0x00;
-
- static const char *const board_lines[8] =
- { "BOARD_1", "BOARD_2", "BOARD_3", "BOARD_4", "BOARD_5", "BOARD_6", "BOARD_7", "BOARD_8" };
-
- LOG(("Read from %04x \n",0x1F00));
-
-/* Board buttons */
-
- i_18=get_first_bit(m_data_1E00);
- if (i_18==NOT_VALID)
- return 0xff;
-
-/* if a button was pressed wait til timer -timer_mouse_click- is fired */
-
- if (m_selecting)
- return m_save_key_data;
- else
- {
- set_pieces();
- output().set_value("MOVING",m_moving_piece);
- }
-
- switch ( i_18 )
- {
- case 0: key_data=m_board_1->read(); break;
- case 1: key_data=m_board_2->read(); break;
- case 2: key_data=m_board_3->read(); break;
- case 3: key_data=m_board_4->read(); break;
- case 4: key_data=m_board_5->read(); break;
- case 5: key_data=m_board_6->read(); break;
- case 6: key_data=m_board_7->read(); break;
- case 7: key_data=m_board_8->read(); break;
- }
-
- if (key_data != 0xff)
- {
- LOG(("%s key_data: %02x \n",board_lines[i_18],key_data));
-
-/* Only if valid data */
-
- if (key_data)
- {
-/* Set or remove pieces */
-
- i_AH=7-get_first_cleared_bit(key_data);
- LOG(("Press -> AH: %d 18: %d Piece: %d\n",i_AH,i_18,m_board[i_18*8 + i_AH]););
-
- m_current_field=&m_board[i_18*8 + i_AH];
-
- if (m_moving_piece)
- {
- *m_current_field = m_moving_piece;
- m_moving_piece = EM;
- }
- else
- {
- m_moving_piece = *m_current_field;
- *m_current_field = EM;
- }
- m_selecting=TRUE; /* Flag is removed in timer -timer_mouse_click- */
- m_save_key_data=key_data; /* return same key_data til flag selecting is removed */
-
- m_timer_mouse_click->adjust(m_wait_time, 0);
-
- return key_data;
- }
- }
-
- return 0xff;
-}
-
-/* Write Port $1C00 */
-
-WRITE8_MEMBER( supercon_state::supercon_port1_w )
-{
- LOG(("Write from %04x data: %02x\n",0x1C00,data));
- m_led_update=FALSE;
-}
-
-/* Write Port $1D00 */
-
-WRITE8_MEMBER( supercon_state::supercon_port2_w )
-{
- LOG(("Write from %04x data: %02x\n",0x1D00,data));
- m_led_update=FALSE;
-}
-
-/* Write Port $1E00 */
-
-WRITE8_MEMBER( supercon_state::supercon_port3_w )
-{
- if (data)
- LOG(("Write from %04x data: %02x\n",0x1E00,data));
-
- if (data)
- {
- m_data_1E00=data;
-
-/* Set bits for LED's */
-
- if ( m_data_1F00)
- {
- if (m_data_1F00 & LED_LINE_AH )
- {
- m_last_LED = &m_LED_AH; /* save last value */
- m_last_LED_value = *m_last_LED;
-
- m_LED_AH=m_LED_AH | m_data_1E00;
- }
- else if (m_data_1F00 & LED_LINE_ST )
- {
- m_last_LED = &m_LED_ST;
- m_last_LED_value = *m_last_LED;
-
- m_LED_ST=m_LED_ST | m_data_1E00;
- }
- else if (m_data_1F00 & LED_LINE_18)
- {
- m_last_LED = &m_LED_18;
- m_last_LED_value = *m_last_LED;
-
- m_LED_18=m_LED_18 | m_data_1E00;
- }
- }
- }
-
- // The IRQ handler writes to both 0x1E00 (1x) and 0x1F00 (2x) ports.
- // Not 100% sure if this is the correct place for clearing the IRQ
- // line.
- m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
-}
-
-/* Write Port $1F00 */
-
-WRITE8_MEMBER( supercon_state::supercon_port4_w )
-{
- if (data)
- LOG(("Write from %04x data: %02x\n",0x1F00,data));
-
- if (data)
- m_data_1F00=data;
-
-/* Bit 7 is set -> Buzzer on */
-
- if ( m_data_1F00 & 0x80 )
- {
- m_beep->set_state(1);
- m_emu_started=TRUE;
- }
- else
- m_beep->set_state(0);
-}
-
-TIMER_CALLBACK_MEMBER(supercon_state::mouse_click)
-{
- m_selecting=FALSE;
-}
-
-TIMER_DEVICE_CALLBACK_MEMBER(supercon_state::update_artwork)
-{
- mouse_update();
-}
-
-TIMER_CALLBACK_MEMBER(supercon_state::update_irq)
-{
- m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
-}
-
-/* Save state call backs */
-
-void supercon_state::board_presave()
-{
- for (int i=0;i<64;i++)
- {
- m_save_board[i] = m_board[i];
- }
-}
-
-void supercon_state::board_postload()
-{
- for (int i=0;i<64;i++)
- {
- m_board[i] = m_save_board[i];
- }
-
- set_pieces();
-}
-
-void supercon_state::machine_start()
-{
- m_timer_update_irq = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supercon_state::update_irq),this));
- m_timer_update_irq->adjust( attotime::zero, 0, attotime::from_hz(1000) );
- m_timer_mouse_click = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supercon_state::mouse_click),this),nullptr);
- save_item(NAME(m_save_board));
- machine().save().register_postload(save_prepost_delegate(FUNC(supercon_state::board_postload),this));
- machine().save().register_presave(save_prepost_delegate(FUNC(supercon_state::board_presave),this));
-}
-
-void supercon_state::machine_reset()
-{
- set_board();
- set_pieces();
- set_border_pieces();
-
- m_emu_started=FALSE;
-}
-
-/* Address maps */
-
-static ADDRESS_MAP_START(supercon_mem, AS_PROGRAM, 8, supercon_state)
- AM_RANGE( 0x0000, 0x0fff) AM_RAM
- AM_RANGE( 0x2000, 0x7fff) AM_ROM
- AM_RANGE( 0x8000, 0xffff) AM_ROM
-
- AM_RANGE( 0x1C00, 0x1C00) AM_WRITE ( supercon_port1_w )
- AM_RANGE( 0x1D00, 0x1D00) AM_WRITE ( supercon_port2_w )
- AM_RANGE( 0x1E00, 0x1E00) AM_WRITE ( supercon_port3_w )
- AM_RANGE( 0x1F00, 0x1F00) AM_WRITE ( supercon_port4_w )
-
- AM_RANGE( 0x1C00, 0x1C00) AM_READ ( supercon_port1_r )
- AM_RANGE( 0x1D00, 0x1D00) AM_READ ( supercon_port2_r )
- AM_RANGE( 0x1E00, 0x1E00) AM_READ ( supercon_port3_r )
- AM_RANGE( 0x1F00, 0x1F00) AM_READ ( supercon_port4_r )
-ADDRESS_MAP_END
-
-/* Input ports */
-
-static INPUT_PORTS_START( supercon )
-
- PORT_START("BOARD_1")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("BOARD_2")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("BOARD_3")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("BOARD_4")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("BOARD_5")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("BOARD_6")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("BOARD_7")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("BOARD_8")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("STATUS_1")
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("STATUS_2")
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("STATUS_3")
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("STATUS_4")
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("STATUS_5")
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("STATUS_6")
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("STATUS_7")
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("STATUS_8")
- PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("B_WHITE")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD)
-
- PORT_START("B_BLACK")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD)
-
- PORT_START("B_CLR")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD)
-
-INPUT_PORTS_END
-
-/* Machine driver */
-static MACHINE_CONFIG_START( supercon, supercon_state )
-
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu",M6502,MAIN_CLOCK)
- MCFG_CPU_PROGRAM_MAP(supercon_mem)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD("beeper", BEEP, 3250)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
-
- MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", supercon_state, update_artwork, attotime::from_hz(20))
-MACHINE_CONFIG_END
-
-/* ROM definition */
-
-ROM_START(supercon)
- ROM_REGION(0x10000,"maincpu",0)
- ROM_LOAD("supercon_low.bin", 0x0000, 0x8000, CRC(b853cf6e) SHA1(1a759072a5023b92c07f1fac01b7a21f7b5b45d0 ))
- ROM_LOAD("supercon_high.bin", 0x8000, 0x8000, CRC(c8f82331) SHA1(f7fd039f9a3344db9749931490ded9e9e309cfbe ))
-ROM_END
-
-/* Driver */
-
-/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
-CONS( 1983, supercon, 0, 0, supercon, supercon, supercon_state, supercon, "Novag", "SuperConstellation", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
diff --git a/src/mame/drivers/suprnova.cpp b/src/mame/drivers/suprnova.cpp
index 95d08b082c5..d8919e56aa4 100644
--- a/src/mame/drivers/suprnova.cpp
+++ b/src/mame/drivers/suprnova.cpp
@@ -226,7 +226,7 @@ void skns_state::hit_recalc()
*/
}
-WRITE32_MEMBER(skns_state::skns_hit_w)
+WRITE32_MEMBER(skns_state::hit_w)
//void hit_w(UINT32 adr, UINT32 data, int type)
{
hit_t &hit = m_hit;
@@ -291,7 +291,7 @@ WRITE32_MEMBER(skns_state::skns_hit_w)
hit_recalc();
}
-WRITE32_MEMBER(skns_state::skns_hit2_w)
+WRITE32_MEMBER(skns_state::hit2_w)
{
hit_t &hit = m_hit;
@@ -324,7 +324,7 @@ WRITE32_MEMBER(skns_state::skns_hit2_w)
}
-READ32_MEMBER(skns_state::skns_hit_r)
+READ32_MEMBER(skns_state::hit_r)
//UINT32 hit_r(UINT32 adr, int type)
{
hit_t &hit = m_hit;
@@ -422,6 +422,46 @@ TIMER_DEVICE_CALLBACK_MEMBER(skns_state::interrupt_callback)
m_maincpu->set_input_line(param, HOLD_LINE);
}
+void skns_state::machine_start()
+{
+ m_btiles = memregion("gfx3")->base();
+
+ save_pointer(NAME(m_btiles), memregion("gfx3")->bytes());
+ save_item(NAME(m_hit.x1p));
+ save_item(NAME(m_hit.y1p));
+ save_item(NAME(m_hit.z1p));
+ save_item(NAME(m_hit.x1s));
+ save_item(NAME(m_hit.y1s));
+ save_item(NAME(m_hit.z1s));
+ save_item(NAME(m_hit.x2p));
+ save_item(NAME(m_hit.y2p));
+ save_item(NAME(m_hit.z2p));
+ save_item(NAME(m_hit.x2s));
+ save_item(NAME(m_hit.y2s));
+ save_item(NAME(m_hit.z2s));
+ save_item(NAME(m_hit.org));
+ save_item(NAME(m_hit.x1_p1));
+ save_item(NAME(m_hit.x1_p2));
+ save_item(NAME(m_hit.y1_p1));
+ save_item(NAME(m_hit.y1_p2));
+ save_item(NAME(m_hit.z1_p1));
+ save_item(NAME(m_hit.z1_p2));
+ save_item(NAME(m_hit.x2_p1));
+ save_item(NAME(m_hit.x2_p2));
+ save_item(NAME(m_hit.y2_p1));
+ save_item(NAME(m_hit.y2_p2));
+ save_item(NAME(m_hit.z2_p1));
+ save_item(NAME(m_hit.z2_p2));
+ save_item(NAME(m_hit.x1tox2));
+ save_item(NAME(m_hit.y1toy2));
+ save_item(NAME(m_hit.z1toz2));
+ save_item(NAME(m_hit.x_in));
+ save_item(NAME(m_hit.y_in));
+ save_item(NAME(m_hit.z_in));
+ save_item(NAME(m_hit.flag));
+ save_item(NAME(m_hit.disconnect));
+}
+
void skns_state::machine_reset()
{
hit_t &hit = m_hit;
@@ -435,7 +475,7 @@ void skns_state::machine_reset()
}
-TIMER_DEVICE_CALLBACK_MEMBER(skns_state::skns_irq)
+TIMER_DEVICE_CALLBACK_MEMBER(skns_state::irq)
{
int scanline = param;
@@ -599,7 +639,7 @@ INPUT_PORTS_END
-WRITE32_MEMBER(skns_state::skns_io_w)
+WRITE32_MEMBER(skns_state::io_w)
{
switch(offset) {
case 2:
@@ -662,10 +702,8 @@ WRITE32_MEMBER(skns_state::skns_io_w)
/* end old driver code */
-WRITE32_MEMBER(skns_state::skns_v3t_w)
+WRITE32_MEMBER(skns_state::v3t_w)
{
- UINT8 *btiles = memregion("gfx3")->base();
-
COMBINE_DATA(&m_v3t_ram[offset]);
m_gfxdecode->gfx(1)->mark_dirty(offset/0x40);
@@ -673,15 +711,16 @@ WRITE32_MEMBER(skns_state::skns_v3t_w)
data = m_v3t_ram[offset];
// i think we need to swap around to decode .. endian issues?
- btiles[offset*4+0] = (data & 0xff000000) >> 24;
- btiles[offset*4+1] = (data & 0x00ff0000) >> 16;
- btiles[offset*4+2] = (data & 0x0000ff00) >> 8;
- btiles[offset*4+3] = (data & 0x000000ff) >> 0;
+
+ m_btiles[offset*4+0] = (data & 0xff000000) >> 24;
+ m_btiles[offset*4+1] = (data & 0x00ff0000) >> 16;
+ m_btiles[offset*4+2] = (data & 0x0000ff00) >> 8;
+ m_btiles[offset*4+3] = (data & 0x000000ff) >> 0;
}
static ADDRESS_MAP_START( skns_map, AS_PROGRAM, 32, skns_state )
AM_RANGE(0x00000000, 0x0007ffff) AM_ROM /* BIOS ROM */
- AM_RANGE(0x00400000, 0x0040000f) AM_WRITE(skns_io_w) /* I/O Write */
+ AM_RANGE(0x00400000, 0x0040000f) AM_WRITE(io_w) /* I/O Write */
AM_RANGE(0x00400000, 0x00400003) AM_READ_PORT("400000")
AM_RANGE(0x00400004, 0x00400007) AM_READ_PORT("400004")
/* In between is write only */
@@ -689,18 +728,18 @@ static ADDRESS_MAP_START( skns_map, AS_PROGRAM, 32, skns_state )
AM_RANGE(0x00800000, 0x00801fff) AM_RAM AM_SHARE("nvram") /* 'backup' RAM */
AM_RANGE(0x00c00000, 0x00c00003) AM_DEVREADWRITE8("ymz", ymz280b_device, read, write, 0xffff0000) /* ymz280_w (sound) */
AM_RANGE(0x01000000, 0x0100000f) AM_DEVREADWRITE8("rtc", msm6242_device, read, write, 0xffffffff)
- AM_RANGE(0x01800000, 0x01800003) AM_WRITE(skns_hit2_w)
+ AM_RANGE(0x01800000, 0x01800003) AM_WRITE(hit2_w)
AM_RANGE(0x02000000, 0x02003fff) AM_RAM AM_SHARE("spriteram") /* sprite ram */
AM_RANGE(0x02100000, 0x0210003f) AM_RAM AM_SHARE("spc_regs") /* sprite registers */
- AM_RANGE(0x02400000, 0x0240007f) AM_RAM_WRITE(skns_v3_regs_w) AM_SHARE("v3_regs") /* tilemap registers */
- AM_RANGE(0x02500000, 0x02503fff) AM_RAM_WRITE(skns_tilemapA_w) AM_SHARE("tilemapa_ram") /* tilemap A */
- AM_RANGE(0x02504000, 0x02507fff) AM_RAM_WRITE(skns_tilemapB_w) AM_SHARE("tilemapb_ram") /* tilemap B */
+ AM_RANGE(0x02400000, 0x0240007f) AM_RAM_WRITE(v3_regs_w) AM_SHARE("v3_regs") /* tilemap registers */
+ AM_RANGE(0x02500000, 0x02503fff) AM_RAM_WRITE(tilemapA_w) AM_SHARE("tilemapa_ram") /* tilemap A */
+ AM_RANGE(0x02504000, 0x02507fff) AM_RAM_WRITE(tilemapB_w) AM_SHARE("tilemapb_ram") /* tilemap B */
AM_RANGE(0x02600000, 0x02607fff) AM_RAM AM_SHARE("v3slc_ram") /* tilemap linescroll */
- AM_RANGE(0x02a00000, 0x02a0001f) AM_RAM_WRITE(skns_pal_regs_w) AM_SHARE("pal_regs")
- AM_RANGE(0x02a40000, 0x02a5ffff) AM_RAM_WRITE(skns_palette_ram_w) AM_SHARE("palette_ram")
- AM_RANGE(0x02f00000, 0x02f000ff) AM_READWRITE(skns_hit_r, skns_hit_w)
+ AM_RANGE(0x02a00000, 0x02a0001f) AM_RAM_WRITE(pal_regs_w) AM_SHARE("pal_regs")
+ AM_RANGE(0x02a40000, 0x02a5ffff) AM_RAM_WRITE(palette_ram_w) AM_SHARE("palette_ram")
+ AM_RANGE(0x02f00000, 0x02f000ff) AM_READWRITE(hit_r, hit_w)
AM_RANGE(0x04000000, 0x041fffff) AM_ROMBANK("bank1") /* GAME ROM */
- AM_RANGE(0x04800000, 0x0483ffff) AM_RAM_WRITE(skns_v3t_w) AM_SHARE("v3t_ram") /* tilemap b ram based tiles */
+ AM_RANGE(0x04800000, 0x0483ffff) AM_RAM_WRITE(v3t_w) AM_SHARE("v3t_ram") /* tilemap b ram based tiles */
AM_RANGE(0x06000000, 0x060fffff) AM_RAM AM_SHARE("main_ram")
AM_RANGE(0xc0000000, 0xc0000fff) AM_RAM AM_SHARE("cache_ram") /* 'cache' RAM */
ADDRESS_MAP_END
@@ -746,7 +785,7 @@ GFXDECODE_END
static MACHINE_CONFIG_START( skns, skns_state )
MCFG_CPU_ADD("maincpu", SH2,28638000)
MCFG_CPU_PROGRAM_MAP(skns_map)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", skns_state, skns_irq, "screen", 0, 1)
+ MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", skns_state, irq, "screen", 0, 1)
MCFG_DEVICE_ADD("rtc", MSM6242, XTAL_32_768kHz)
@@ -765,8 +804,7 @@ static MACHINE_CONFIG_START( skns, skns_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(340,262)
MCFG_SCREEN_VISIBLE_AREA(0,319,0,239)
- MCFG_SCREEN_UPDATE_DRIVER(skns_state, screen_update_skns)
- MCFG_SCREEN_VBLANK_DRIVER(skns_state, screen_eof_skns)
+ MCFG_SCREEN_UPDATE_DRIVER(skns_state, screen_update)
MCFG_PALETTE_ADD("palette", 32768)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", skns_bg)
@@ -944,7 +982,7 @@ READ32_MEMBER(skns_state::sengekij_speedup_r)// 60006ee 600308e
return m_main_ram[0xb7380/4];
}
-void skns_state::init_skns()
+void skns_state::init_drc()
{
// init DRC to fastest options
m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS);
@@ -958,25 +996,25 @@ void skns_state::set_drc_pcflush(UINT32 addr)
m_maincpu->sh2drc_add_pcflush(addr);
}
-DRIVER_INIT_MEMBER(skns_state,galpani4) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-5,-1); init_skns(); }
-DRIVER_INIT_MEMBER(skns_state,galpanis) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-5,-1); init_skns(); }
-DRIVER_INIT_MEMBER(skns_state,cyvern) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(+0,+2); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x604d3c8, 0x604d3cb, read32_delegate(FUNC(skns_state::cyvern_speedup_r),this) ); set_drc_pcflush(0x402ebd2); }
-DRIVER_INIT_MEMBER(skns_state,galpans2) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-1,-1); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x60fb6bc, 0x60fb6bf, read32_delegate(FUNC(skns_state::galpans2_speedup_r),this) ); set_drc_pcflush(0x4049ae2); }
-DRIVER_INIT_MEMBER(skns_state,gutsn) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(+0,+0); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x600c780, 0x600c783, read32_delegate(FUNC(skns_state::gutsn_speedup_r),this) ); set_drc_pcflush(0x402206e); }
-DRIVER_INIT_MEMBER(skns_state,panicstr) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-1,-1); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x60f19e4, 0x60f19e7, read32_delegate(FUNC(skns_state::panicstr_speedup_r),this) ); set_drc_pcflush(0x404e68a); }
-DRIVER_INIT_MEMBER(skns_state,senknow) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(+1,+1); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x60000dc, 0x60000df, read32_delegate(FUNC(skns_state::senknow_speedup_r),this) ); set_drc_pcflush(0x4017dce); }
-DRIVER_INIT_MEMBER(skns_state,puzzloope) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-9,-1); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6081d38, 0x6081d3b, read32_delegate(FUNC(skns_state::puzzloope_speedup_r),this) ); set_drc_pcflush(0x401da14); }
-DRIVER_INIT_MEMBER(skns_state,puzzloopj) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-9,-1); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6086714, 0x6086717, read32_delegate(FUNC(skns_state::puzzloopj_speedup_r),this) ); set_drc_pcflush(0x401dca0); }
-DRIVER_INIT_MEMBER(skns_state,puzzloopa) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-9,-1); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6085bcc, 0x6085bcf, read32_delegate(FUNC(skns_state::puzzloopa_speedup_r),this) ); set_drc_pcflush(0x401d9d4); }
-DRIVER_INIT_MEMBER(skns_state,puzzloopu) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-9,-1); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6085cec, 0x6085cef, read32_delegate(FUNC(skns_state::puzzloopu_speedup_r),this) ); set_drc_pcflush(0x401dab0); }
-DRIVER_INIT_MEMBER(skns_state,jjparads) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(+5,+1); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000994, 0x6000997, read32_delegate(FUNC(skns_state::jjparads_speedup_r),this) ); set_drc_pcflush(0x4015e84); }
-DRIVER_INIT_MEMBER(skns_state,jjparad2) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(+5,+1); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000984, 0x6000987, read32_delegate(FUNC(skns_state::jjparad2_speedup_r),this) ); set_drc_pcflush(0x401620a); }
-DRIVER_INIT_MEMBER(skns_state,ryouran) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(+5,+1); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000a14, 0x6000a17, read32_delegate(FUNC(skns_state::ryouran_speedup_r),this) ); set_drc_pcflush(0x40182ce); }
-DRIVER_INIT_MEMBER(skns_state,teljan) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(+5,+1); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6002fb4, 0x6002fb7, read32_delegate(FUNC(skns_state::teljan_speedup_r),this) ); set_drc_pcflush(0x401ba32); }
-DRIVER_INIT_MEMBER(skns_state,sengekis) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-192,-272); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x60b74bc, 0x60b74bf, read32_delegate(FUNC(skns_state::sengekis_speedup_r),this) ); set_drc_pcflush(0x60006ec); }
-DRIVER_INIT_MEMBER(skns_state,sengekij) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-192,-272); init_skns();m_maincpu->space(AS_PROGRAM).install_read_handler(0x60b7380, 0x60b7383, read32_delegate(FUNC(skns_state::sengekij_speedup_r),this) ); set_drc_pcflush(0x60006ec); }
-DRIVER_INIT_MEMBER(skns_state,sarukani) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-1,-1); init_skns(); set_drc_pcflush(0x4013b42); } // Speedup is in skns_io_w()
-DRIVER_INIT_MEMBER(skns_state,galpans3) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-1,-1); init_skns(); }
+DRIVER_INIT_MEMBER(skns_state,galpani4) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-5,-1); init_drc(); }
+DRIVER_INIT_MEMBER(skns_state,galpanis) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-5,-1); init_drc(); }
+DRIVER_INIT_MEMBER(skns_state,cyvern) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(+0,+2); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x604d3c8, 0x604d3cb, read32_delegate(FUNC(skns_state::cyvern_speedup_r),this) ); set_drc_pcflush(0x402ebd2); }
+DRIVER_INIT_MEMBER(skns_state,galpans2) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-1,-1); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x60fb6bc, 0x60fb6bf, read32_delegate(FUNC(skns_state::galpans2_speedup_r),this) ); set_drc_pcflush(0x4049ae2); }
+DRIVER_INIT_MEMBER(skns_state,gutsn) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(+0,+0); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x600c780, 0x600c783, read32_delegate(FUNC(skns_state::gutsn_speedup_r),this) ); set_drc_pcflush(0x402206e); }
+DRIVER_INIT_MEMBER(skns_state,panicstr) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-1,-1); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x60f19e4, 0x60f19e7, read32_delegate(FUNC(skns_state::panicstr_speedup_r),this) ); set_drc_pcflush(0x404e68a); }
+DRIVER_INIT_MEMBER(skns_state,senknow) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(+1,+1); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x60000dc, 0x60000df, read32_delegate(FUNC(skns_state::senknow_speedup_r),this) ); set_drc_pcflush(0x4017dce); }
+DRIVER_INIT_MEMBER(skns_state,puzzloope) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-9,-1); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6081d38, 0x6081d3b, read32_delegate(FUNC(skns_state::puzzloope_speedup_r),this) ); set_drc_pcflush(0x401da14); }
+DRIVER_INIT_MEMBER(skns_state,puzzloopj) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-9,-1); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6086714, 0x6086717, read32_delegate(FUNC(skns_state::puzzloopj_speedup_r),this) ); set_drc_pcflush(0x401dca0); }
+DRIVER_INIT_MEMBER(skns_state,puzzloopa) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-9,-1); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6085bcc, 0x6085bcf, read32_delegate(FUNC(skns_state::puzzloopa_speedup_r),this) ); set_drc_pcflush(0x401d9d4); }
+DRIVER_INIT_MEMBER(skns_state,puzzloopu) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-9,-1); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6085cec, 0x6085cef, read32_delegate(FUNC(skns_state::puzzloopu_speedup_r),this) ); set_drc_pcflush(0x401dab0); }
+DRIVER_INIT_MEMBER(skns_state,jjparads) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(+5,+1); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000994, 0x6000997, read32_delegate(FUNC(skns_state::jjparads_speedup_r),this) ); set_drc_pcflush(0x4015e84); }
+DRIVER_INIT_MEMBER(skns_state,jjparad2) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(+5,+1); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000984, 0x6000987, read32_delegate(FUNC(skns_state::jjparad2_speedup_r),this) ); set_drc_pcflush(0x401620a); }
+DRIVER_INIT_MEMBER(skns_state,ryouran) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(+5,+1); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000a14, 0x6000a17, read32_delegate(FUNC(skns_state::ryouran_speedup_r),this) ); set_drc_pcflush(0x40182ce); }
+DRIVER_INIT_MEMBER(skns_state,teljan) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(+5,+1); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x6002fb4, 0x6002fb7, read32_delegate(FUNC(skns_state::teljan_speedup_r),this) ); set_drc_pcflush(0x401ba32); }
+DRIVER_INIT_MEMBER(skns_state,sengekis) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-192,-272); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x60b74bc, 0x60b74bf, read32_delegate(FUNC(skns_state::sengekis_speedup_r),this) ); set_drc_pcflush(0x60006ec); }
+DRIVER_INIT_MEMBER(skns_state,sengekij) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-192,-272); init_drc();m_maincpu->space(AS_PROGRAM).install_read_handler(0x60b7380, 0x60b7383, read32_delegate(FUNC(skns_state::sengekij_speedup_r),this) ); set_drc_pcflush(0x60006ec); }
+DRIVER_INIT_MEMBER(skns_state,sarukani) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-1,-1); init_drc(); set_drc_pcflush(0x4013b42); } // Speedup is in io_w()
+DRIVER_INIT_MEMBER(skns_state,galpans3) { machine().device<sknsspr_device>("spritegen")->skns_sprite_kludge(-1,-1); init_drc(); }
diff --git a/src/mame/drivers/svi318.cpp b/src/mame/drivers/svi318.cpp
index a5761935c45..2529508e2b3 100644
--- a/src/mame/drivers/svi318.cpp
+++ b/src/mame/drivers/svi318.cpp
@@ -1,541 +1,498 @@
-// license:???
-// copyright-holders:Sean Young,Tomas Karlsson
-/*
-** svi318.c : driver for Spectravideo SVI-318 and SVI-328
-**
-** Sean Young, Tomas Karlsson
-**
-** Information taken from: http://www.samdal.com/sv318.htm
-**
-** SV-318 : 16KB Video RAM, 16KB RAM
-** SV-328 : 16KB Video RAM, 64KB RAM
-*/
+// license: GPL-2.0+
+// copyright-holders: Dirk Best
+// thanks-to: Tomas Karlsson, Sean Young
+/***************************************************************************
+
+ Spectravideo SVI-318/328
+
+ TODO:
+ - Expansion port (and all attached peripherals)
+
+***************************************************************************/
#include "emu.h"
-#include "includes/svi318.h"
-#include "imagedev/flopdrv.h"
-#include "formats/svi_dsk.h"
+#include "cpu/z80/z80.h"
+#include "machine/ram.h"
+#include "machine/i8255.h"
+#include "video/tms9928a.h"
+#include "sound/ay8910.h"
+#include "sound/speaker.h"
+#include "sound/wave.h"
+#include "imagedev/cassette.h"
#include "formats/svi_cas.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
#include "softlist.h"
-#include "rendlay.h"
-static ADDRESS_MAP_START( svi318_mem, AS_PROGRAM, 8, svi318_state )
- AM_RANGE(0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITE(writemem1)
- AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank2") AM_WRITE(writemem2)
- AM_RANGE(0xc000, 0xffff) AM_READ_BANK("bank3") AM_WRITE(writemem3)
-ADDRESS_MAP_END
-static ADDRESS_MAP_START( svi328_806_mem, AS_PROGRAM, 8, svi318_state )
- AM_RANGE(0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITE(writemem1)
- AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank2") AM_WRITE(writemem2)
- AM_RANGE(0xc000, 0xefff) AM_READ_BANK("bank3") AM_WRITE(writemem3)
- AM_RANGE(0xf000, 0xffff) AM_READ_BANK("bank4") AM_WRITE(writemem4)
-ADDRESS_MAP_END
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
-static ADDRESS_MAP_START( svi318_io, AS_IO, 8, svi318_state )
+class svi3x8_state : public driver_device
+{
+public:
+ svi3x8_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_ram(*this, RAM_TAG),
+ m_basic(*this, "basic"),
+ m_speaker(*this, "speaker"),
+ m_cassette(*this, "cassette"),
+ m_cart(*this, "cartslot"),
+ m_keyboard(*this, "KEY"),
+ m_buttons(*this, "BUTTONS"),
+ m_keyboard_row(0)
+ {}
+
+ DECLARE_READ8_MEMBER( ppi_port_a_r );
+ DECLARE_READ8_MEMBER( ppi_port_b_r );
+ DECLARE_WRITE8_MEMBER( ppi_port_c_w );
+ DECLARE_WRITE8_MEMBER( psg_port_b_w );
+ DECLARE_WRITE_LINE_MEMBER( intvdp_w );
+
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cartridge);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+private:
+ void reset_memory_configuration();
+
+ required_device<cpu_device> m_maincpu;
+ required_device<ram_device> m_ram;
+ required_memory_region m_basic;
+ required_device<speaker_sound_device> m_speaker;
+ required_device<cassette_image_device> m_cassette;
+ required_device<generic_slot_device> m_cart;
+ required_ioport_array<16> m_keyboard;
+ required_ioport m_buttons;
+
+ UINT8 m_keyboard_row;
+};
+
+
+//**************************************************************************
+// ADDRESS MAPS
+//**************************************************************************
+
+static ADDRESS_MAP_START( svi3x8_mem, AS_PROGRAM, 8, svi3x8_state )
ADDRESS_MAP_UNMAP_HIGH
- ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x38) AM_READWRITE(io_ext_r, io_ext_w )
- AM_RANGE(0x80, 0x80) AM_DEVWRITE("tms9928a", tms9928a_device, vram_write)
- AM_RANGE(0x81, 0x81) AM_DEVWRITE("tms9928a", tms9928a_device, register_write)
- AM_RANGE(0x84, 0x84) AM_DEVREAD("tms9928a", tms9928a_device, vram_read)
- AM_RANGE(0x85, 0x85) AM_DEVREAD("tms9928a", tms9928a_device, register_read)
- AM_RANGE(0x88, 0x88) AM_DEVWRITE("ay8910", ay8910_device, address_w)
- AM_RANGE(0x8c, 0x8c) AM_DEVWRITE("ay8910", ay8910_device, data_w)
- AM_RANGE(0x90, 0x90) AM_DEVREAD("ay8910", ay8910_device, data_r)
- AM_RANGE(0x96, 0x97) AM_WRITE(ppi_w)
- AM_RANGE(0x98, 0x9a) AM_DEVREAD("ppi8255", i8255_device, read)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( svi328_806_io, AS_IO, 8, svi318_state )
- ADDRESS_MAP_UNMAP_HIGH
+static ADDRESS_MAP_START( svi3x8_io, AS_IO, 8, svi3x8_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x58) AM_READWRITE(io_ext_r, io_ext_w )
- AM_RANGE(0x80, 0x80) AM_DEVWRITE("tms9928a", tms9928a_device, vram_write)
- AM_RANGE(0x81, 0x81) AM_DEVWRITE("tms9928a", tms9928a_device, register_write)
- AM_RANGE(0x84, 0x84) AM_DEVREAD("tms9928a", tms9928a_device, vram_read)
- AM_RANGE(0x85, 0x85) AM_DEVREAD("tms9928a", tms9928a_device, register_read)
- AM_RANGE(0x88, 0x88) AM_DEVWRITE("ay8910", ay8910_device, address_w)
- AM_RANGE(0x8c, 0x8c) AM_DEVWRITE("ay8910", ay8910_device, data_w)
- AM_RANGE(0x90, 0x90) AM_DEVREAD("ay8910", ay8910_device, data_r)
- AM_RANGE(0x96, 0x97) AM_WRITE(ppi_w)
- AM_RANGE(0x98, 0x9a) AM_DEVREAD("ppi8255", i8255_device, read)
+ AM_RANGE(0x80, 0x80) AM_MIRROR(0x22) AM_DEVWRITE("vdp", tms9928a_device, vram_write)
+ AM_RANGE(0x81, 0x81) AM_MIRROR(0x22) AM_DEVWRITE("vdp", tms9928a_device, register_write)
+ AM_RANGE(0x84, 0x84) AM_MIRROR(0x22) AM_DEVREAD("vdp", tms9928a_device, vram_read)
+ AM_RANGE(0x85, 0x85) AM_MIRROR(0x22) AM_DEVREAD("vdp", tms9928a_device, register_read)
+ AM_RANGE(0x88, 0x88) AM_MIRROR(0x23) AM_DEVWRITE("psg", ay8910_device, address_w)
+ AM_RANGE(0x8c, 0x8c) AM_MIRROR(0x23) AM_DEVWRITE("psg", ay8910_device, data_w)
+ AM_RANGE(0x90, 0x90) AM_MIRROR(0x23) AM_DEVREAD("psg", ay8910_device, data_r)
+ AM_RANGE(0x94, 0x97) AM_DEVWRITE("ppi", i8255_device, write)
+ AM_RANGE(0x98, 0x9a) AM_DEVREAD("ppi", i8255_device, read)
ADDRESS_MAP_END
-/*
- Keyboard status table
- Bit#:| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- | | | | | | | | |
- Line: | | | | | | | | |
- ---------+-----+-----+-----+-----+-----+-----+-----+-----|
- 0 | "7" | "6" | "5" | "4" | "3" | "2" | "1" | "0" |
- ---------+-----+-----+-----+-----+-----+-----+-----+-----|
- 1 | "/" | "." | "=" | "," | "'" | ":" | "9" | "8" |
- ---------+-----+-----+-----+-----+-----+-----+-----+-----|
- 2 | "G" | "F" | "E" | "D" | "C" | "B" | "A" | "-" |
- ---------+-----+-----+-----+-----+-----+-----+-----+-----|
- 3 | "O" | "N" | "M" | "L" | "K" | "J" | "I" | "H" |
- ---------+-----+-----+-----+-----+-----+-----+-----+-----|
- 4 | "W" | "V" | "U" | "T" | "S" | "R" | "Q" | "P" |
- ---------+-----+-----+-----+-----+-----+-----+-----+-----|
- 5 | UP | BS | "]" | "\" | "[" | "Z" | "Y" | "X" |
- ---------+-----+-----+-----+-----+-----+-----+-----+-----|
- 6 |LEFT |ENTER|STOP | ESC |RGRAP|LGRAP|CTRL |SHIFT|
- ---------+-----+-----+-----+-----+-----+-----+-----+-----|
- 7 |DOWN | INS | CLS | F5 | F4 | F3 | F2 | F1 |
- ---------+-----+-----+-----+-----+-----+-----+-----+-----|
- 8 |RIGHT| |PRINT| SEL |CAPS | DEL | TAB |SPACE|
- ---------+-----+-----+-----+-----+-----+-----+-----+-----|
- 9* | "7" | "6" | "5" | "4" | "3" | "2" | "1" | "0" |
- ---------+-----+-----+-----+-----+-----+-----+-----+-----|
- 10* | "," | "." | "/" | "*" | "-" | "+" | "9" | "8" |
- ----------------------------------------------------------
- * Numcerical keypad (SVI-328 only)
-
-2008-05 FP:
-Small note about natural keyboard: currently,
-- "Keypad ," is not mapped
-- "Left Grph" and "Right Grph" are mapped to 'Page Up' and 'Page Down'
-- "Stop" is mapped to 'End'
-- "Select" is mapped to 'F11'
-- "CLS/HM" is mapped to 'Home'
-TODO: How are multiple keys (Copy, Cut, Paste, CLS/HM) expected to
-behave? Do they need multiple mapping in natural keyboard?
-*/
+
+//**************************************************************************
+// INPUTS
+//**************************************************************************
static INPUT_PORTS_START( svi318 )
- PORT_START("LINE.0")
- PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
- PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
- PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
- PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
- PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
- PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
- PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
- PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
-
- PORT_START("LINE.1")
- PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
- PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
- PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':') PORT_CHAR(';')
- PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"')
- PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
- PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
- PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
- PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
-
- PORT_START("LINE.2")
- PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
- PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
- PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
- PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
- PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
- PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
- PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
- PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
-
- PORT_START("LINE.3")
- PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
- PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
- PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('0') PORT_CHAR('J')
- PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
- PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
- PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
- PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
- PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
-
- PORT_START("LINE.4")
- PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
- PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
- PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
- PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
- PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
- PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
- PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
- PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
-
- PORT_START("LINE.5")
- PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
- PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
- PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
- PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
- PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('~')
- PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
- PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
- PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
-
- PORT_START("LINE.6")
- PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
- PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
- PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left Grph") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(PGUP))
- PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right Grph") PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(PGDN))
- PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
- PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Stop") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END))
- PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
- PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
-
- PORT_START("LINE.7")
- PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1 F6") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHAR(UCHAR_MAMEKEY(F6))
- PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2 F7") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_CHAR(UCHAR_MAMEKEY(F7))
- PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F3 F8") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CHAR(UCHAR_MAMEKEY(F8))
- PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F4 F9") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) PORT_CHAR(UCHAR_MAMEKEY(F9))
- PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5 F10") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) PORT_CHAR(UCHAR_MAMEKEY(F10))
- PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CLS/HM Copy") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))
- PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ins Paste") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
- PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
-
- PORT_START("LINE.8")
- PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
- PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
- PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Del Cut") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
- PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
- PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Select") PORT_CODE(KEYCODE_PAUSE) PORT_CHAR(UCHAR_MAMEKEY(F11))
- PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Print") PORT_CODE(KEYCODE_PRTSCR) PORT_CHAR(UCHAR_MAMEKEY(PRTSCR))
- PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
-
- PORT_START("LINE.9")
- PORT_BIT (0xff, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("LINE.10")
- PORT_BIT (0xff, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("JOYSTICKS")
- PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP)
- PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN)
- PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT)
- PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT)
- PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_PLAYER(2)
- PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_PLAYER(2)
- PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_PLAYER(2)
- PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(2)
+ PORT_START("KEY.0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
+
+ PORT_START("KEY.1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':') PORT_CHAR(';')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
+
+ PORT_START("KEY.2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
+
+ PORT_START("KEY.3")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('0') PORT_CHAR('J')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
+
+ PORT_START("KEY.4")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
+
+ PORT_START("KEY.5")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('~')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_NAME(UTF8_UP)
+
+ PORT_START("KEY.6")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2) PORT_NAME("Ctrl")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(PGUP)) PORT_NAME("Left Grph")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(PGDN)) PORT_NAME("Right Grph")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END)) PORT_NAME("Stop")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_NAME(UTF8_LEFT)
+
+ PORT_START("KEY.7")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHAR(UCHAR_MAMEKEY(F6))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_CHAR(UCHAR_MAMEKEY(F7))
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CHAR(UCHAR_MAMEKEY(F8))
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) PORT_CHAR(UCHAR_MAMEKEY(F9))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) PORT_CHAR(UCHAR_MAMEKEY(F10))
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_NAME("CLS/HM Copy")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT)) PORT_NAME("Ins Paste")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_NAME(UTF8_DOWN)
+
+ PORT_START("KEY.8")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_NAME("Del Cut")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_NAME("Caps Lock")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PAUSE) PORT_CHAR(UCHAR_MAMEKEY(F11)) PORT_NAME("Select")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PRTSCR) PORT_CHAR(UCHAR_MAMEKEY(PRTSCR)) PORT_NAME("Print")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_NAME(UTF8_RIGHT)
+
+ PORT_START("KEY.9")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KEY.10")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KEY.11")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KEY.12")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KEY.13")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KEY.14")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KEY.15")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("JOY")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_PLAYER(1)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_PLAYER(1)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_PLAYER(1)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(1)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_PLAYER(2)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_PLAYER(2)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_PLAYER(2)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(2)
PORT_START("BUTTONS")
- PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_BUTTON1)
- PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2)
+ PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2)
+ PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED)
INPUT_PORTS_END
-
static INPUT_PORTS_START( svi328 )
-
- PORT_INCLUDE( svi318 )
-
- PORT_MODIFY("LINE.9")
- PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
- PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
- PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
- PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
- PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
- PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
- PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
- PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
-
- PORT_MODIFY("LINE.10")
- PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
- PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
- PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
- PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))
- PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK))
- PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD))
- PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
- PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad ,") PORT_CODE(KEYCODE_DEL_PAD)
+ PORT_INCLUDE(svi318)
+
+ PORT_MODIFY("KEY.9")
+ PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
+ PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
+ PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
+ PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
+ PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
+ PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
+ PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
+ PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
+
+ PORT_MODIFY("KEY.10")
+ PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
+ PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
+ PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
+ PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))
+ PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK))
+ PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD))
+ PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
+ PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("Keypad ,")
INPUT_PORTS_END
-WRITE_LINE_MEMBER(svi318_state::vdp_interrupt)
-{
- m_maincpu->set_input_line(0, (state ? HOLD_LINE : CLEAR_LINE));
-}
-FLOPPY_FORMATS_MEMBER( svi318_state::floppy_formats )
- FLOPPY_SVI_FORMAT
-FLOPPY_FORMATS_END
+//**************************************************************************
+// VIDEO EMULATION
+//**************************************************************************
-static SLOT_INTERFACE_START( svi_floppies )
- SLOT_INTERFACE("dd", FLOPPY_525_DD)
-SLOT_INTERFACE_END
+WRITE_LINE_MEMBER( svi3x8_state::intvdp_w )
+{
+ // note: schematics show a CNTRL line that allows switching between
+ // IRQ and NMI for the interrupt
+ m_maincpu->set_input_line(INPUT_LINE_IRQ0, state);
+}
-static MACHINE_CONFIG_FRAGMENT( svi318_cartslot )
- MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "svi318_cart")
- MCFG_GENERIC_EXTENSIONS("bin,rom")
- MCFG_GENERIC_LOAD(svi318_state, svi318_cart)
- /* Software lists */
- MCFG_SOFTWARE_LIST_ADD("cart_list","svi318_cart")
-MACHINE_CONFIG_END
+//**************************************************************************
+// MACHINE EMULATION
+//**************************************************************************
-static MACHINE_CONFIG_START( svi318, svi318_state )
- /* Basic machine hardware */
- MCFG_CPU_ADD("maincpu", Z80, 3579545) /* 3.579545 MHz */
- MCFG_CPU_PROGRAM_MAP(svi318_mem)
- MCFG_CPU_IO_MAP(svi318_io)
- MCFG_QUANTUM_TIME(attotime::from_hz(60))
-
- MCFG_DEVICE_ADD("ppi8255", I8255, 0)
- MCFG_I8255_IN_PORTA_CB(READ8(svi318_state, ppi_port_a_r))
- MCFG_I8255_IN_PORTB_CB(READ8(svi318_state, ppi_port_b_r))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(svi318_state, ppi_port_c_w))
-
- MCFG_DEVICE_ADD("ins8250_0", INS8250, 1000000)
- MCFG_INS8250_OUT_INT_CB(WRITELINE(svi318_state, ins8250_interrupt))
- MCFG_DEVICE_ADD("ins8250_1", INS8250, 3072000)
- MCFG_INS8250_OUT_INT_CB(WRITELINE(svi318_state, ins8250_interrupt))
-
- /* Video hardware */
- MCFG_DEVICE_ADD("tms9928a", TMS9929A, XTAL_10_738635MHz / 2)
- MCFG_TMS9928A_VRAM_SIZE(0x4000)
- MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(svi318_state, vdp_interrupt))
- MCFG_TMS9928A_SCREEN_ADD_PAL("screen")
- MCFG_SCREEN_UPDATE_DEVICE("tms9928a", tms9929a_device, screen_update)
+void svi3x8_state::reset_memory_configuration()
+{
+ m_maincpu->space(AS_PROGRAM).install_rom(0x0000, 0x7fff, m_basic->base());
+
+ if (m_ram->size() == 64 * 1024)
+ {
+ // SVI-328
+ m_maincpu->space(AS_PROGRAM).install_ram(0x8000, 0xffff, m_ram->pointer());
+ }
+ else
+ {
+ // SVI-318
+ m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x8000, 0xbfff);
+ m_maincpu->space(AS_PROGRAM).install_ram(0xc000, 0xffff, m_ram->pointer());
+ }
+}
- /* Sound hardware */
- MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD("dac", DAC, 0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
- MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
- MCFG_SOUND_ADD("ay8910", AY8910, 1789773)
- MCFG_AY8910_PORT_A_READ_CB(READ8(svi318_state, psg_port_a_r))
- MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(svi318_state, psg_port_b_w))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
+void svi3x8_state::machine_start()
+{
+ // register for save states
+ save_item(NAME(m_keyboard_row));
+}
- /* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
- MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(svi318_state, write_centronics_busy))
+void svi3x8_state::machine_reset()
+{
+ reset_memory_configuration();
+}
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
+WRITE8_MEMBER( svi3x8_state::psg_port_b_w )
+{
+ reset_memory_configuration();
+
+ // CART
+ if (BIT(data, 0) == 0)
+ {
+ if (m_cart->exists())
+ m_maincpu->space(AS_PROGRAM).install_rom(0x0000, 0x7fff, m_cart->get_rom_base());
+ else
+ m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x0000, 0x7fff);
+ }
+ else
+ {
+ // BK21 (SV-328)
+ if (BIT(data, 1) == 0)
+ {
+ if (m_ram->size() == 64 * 1024)
+ m_maincpu->space(AS_PROGRAM).install_ram(0x0000, 0x7fff, m_ram->pointer() + 0x8000);
+ else
+ m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x0000, 0x7fff);
+ }
+
+ // BK22 (SV-807)
+ if (BIT(data, 2) == 0)
+ m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x8000, 0xffff);
+
+ // BK31 (SV-807)
+ if (BIT(data, 3) == 0)
+ m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x0000, 0x7fff);
+
+ // BK32 (SV-807)
+ if (BIT(data, 4) == 0)
+ m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x8000, 0xffff);
+ }
+
+ output().set_value("led_caps_lock", BIT(data, 5));
+}
- MCFG_CASSETTE_ADD("cassette")
- MCFG_CASSETTE_FORMATS(svi_cassette_formats)
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY)
- MCFG_CASSETTE_INTERFACE("svi318_cass")
+READ8_MEMBER( svi3x8_state::ppi_port_a_r )
+{
+ UINT8 data = 0x3f;
- MCFG_SOFTWARE_LIST_ADD("cass_list", "svi318_cass")
+ // bit 0-3, paddle or tablet input
- MCFG_FD1793_ADD("wd179x", XTAL_1MHz)
- MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(svi318_state, fdc_intrq_w))
- MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(svi318_state, fdc_drq_w))
+ // bit 4-5, joystick buttons
+ data &= m_buttons->read();
- MCFG_FLOPPY_DRIVE_ADD("wd179x:0", svi_floppies, "dd", svi318_state::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("wd179x:1", svi_floppies, "dd", svi318_state::floppy_formats)
+ // bit 6-7, cassette
+ data |= m_cassette->exists() ? 0x00 : 0x40;
+ data |= (m_cassette->input() > 0.0038) ? 0x80 : 0x00;
- MCFG_SOFTWARE_LIST_ADD("disk_list", "svi318_flop")
+ return data;
+}
- MCFG_FRAGMENT_ADD(svi318_cartslot)
+READ8_MEMBER( svi3x8_state::ppi_port_b_r )
+{
+ // bit 0-7, keyboard data
+ return m_keyboard[m_keyboard_row]->read();
+}
- /* internal ram */
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("16K")
- MCFG_RAM_EXTRA_OPTIONS("32K,96K,160K")
-MACHINE_CONFIG_END
+WRITE8_MEMBER( svi3x8_state::ppi_port_c_w )
+{
+ // bit 0-3, keyboard row
+ m_keyboard_row = data & 0x0f;
-static MACHINE_CONFIG_DERIVED( svi318n, svi318 )
+ // bit 4-6, cassette
+ m_cassette->change_state(BIT(data, 4) ? CASSETTE_MOTOR_DISABLED : CASSETTE_MOTOR_ENABLED, CASSETTE_MASK_MOTOR);
+ m_cassette->output(BIT(data, 5) ? -1.0 : +1.0);
+ m_cassette->change_state(BIT(data, 6) ? CASSETTE_SPEAKER_ENABLED : CASSETTE_SPEAKER_MUTED, CASSETTE_MASK_SPEAKER);
- MCFG_DEVICE_REMOVE("tms9928a")
- MCFG_DEVICE_REMOVE("screen")
- MCFG_DEVICE_ADD("tms9928a", TMS9928A, XTAL_10_738635MHz / 2)
- MCFG_TMS9928A_VRAM_SIZE(0x4000)
- MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(svi318_state, vdp_interrupt))
- MCFG_TMS9928A_SCREEN_ADD_NTSC("screen")
- MCFG_SCREEN_UPDATE_DEVICE("tms9928a", tms9928a_device, screen_update)
-MACHINE_CONFIG_END
+ // bit 7, mix psg sound (keyboard click)
+ m_speaker->level_w(BIT(data, 7));
+}
-static MACHINE_CONFIG_DERIVED( svi328, svi318 )
- /* internal ram */
- MCFG_RAM_MODIFY(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("64K")
- MCFG_RAM_EXTRA_OPTIONS("96K,160K")
-MACHINE_CONFIG_END
+//**************************************************************************
+// CARTRIDGE
+//**************************************************************************
-static MACHINE_CONFIG_DERIVED( svi328n, svi318n )
+DEVICE_IMAGE_LOAD_MEMBER( svi3x8_state, cartridge )
+{
+ UINT32 size = m_cart->common_get_size("rom");
- /* internal ram */
- MCFG_RAM_MODIFY(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("64K")
- MCFG_RAM_EXTRA_OPTIONS("96K,160K")
-MACHINE_CONFIG_END
+ if (size != 0x8000)
+ {
+ popmessage("Cartridge image '%s' invalid size: %u bytes", image.filename(), size);
+ return IMAGE_INIT_FAIL;
+ }
+ m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
+ m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
-/* F4 Character Displayer */
-static const gfx_layout svi328_charlayout =
-{
- 8, 8, /* 8 x 16 characters */
- 256, /* 128 characters */
- 1, /* 1 bits per pixel */
- { 0 }, /* no bitplanes */
- /* x offsets */
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- /* y offsets */
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
- 8*16 /* every char takes 16 bytes */
-};
+ return IMAGE_INIT_PASS;
+}
-static GFXDECODE_START( svi328 )
- GFXDECODE_ENTRY( "gfx1", 0x0000, svi328_charlayout, 0, 9 )
-GFXDECODE_END
-static MACHINE_CONFIG_START( svi328_806, svi318_state )
- /* Basic machine hardware */
- MCFG_CPU_ADD("maincpu", Z80, 3579545) /* 3.579545 MHz */
- MCFG_CPU_PROGRAM_MAP(svi328_806_mem)
- MCFG_CPU_IO_MAP(svi328_806_io)
- MCFG_QUANTUM_TIME(attotime::from_hz(60))
+//**************************************************************************
+// MACHINE DEFINTIONS
+//**************************************************************************
- MCFG_DEVICE_ADD("ppi8255", I8255, 0)
- MCFG_I8255_IN_PORTA_CB(READ8(svi318_state, ppi_port_a_r))
- MCFG_I8255_IN_PORTB_CB(READ8(svi318_state, ppi_port_b_r))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(svi318_state, ppi_port_c_w))
+static MACHINE_CONFIG_START( svi318, svi3x8_state )
+ // basic machine hardware
+ MCFG_CPU_ADD("maincpu", Z80, XTAL_10_738635MHz / 3)
+ MCFG_CPU_PROGRAM_MAP(svi3x8_mem)
+ MCFG_CPU_IO_MAP(svi3x8_io)
- MCFG_DEVICE_ADD("ins8250_0", INS8250, 1000000)
- MCFG_INS8250_OUT_INT_CB(WRITELINE(svi318_state, ins8250_interrupt))
- MCFG_DEVICE_ADD("ins8250_1", INS8250, 3072000)
- MCFG_INS8250_OUT_INT_CB(WRITELINE(svi318_state, ins8250_interrupt))
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("16K")
- /* Video hardware */
- MCFG_DEFAULT_LAYOUT(layout_dualhsxs)
+ MCFG_DEVICE_ADD("ppi", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(svi3x8_state, ppi_port_a_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(svi3x8_state, ppi_port_b_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(svi3x8_state, ppi_port_c_w))
- MCFG_DEVICE_ADD("tms9928a", TMS9929A, XTAL_10_738635MHz / 2)
+ // video hardware
+ MCFG_DEVICE_ADD("vdp", TMS9929A, XTAL_10_738635MHz / 2)
MCFG_TMS9928A_VRAM_SIZE(0x4000)
- MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(svi318_state, vdp_interrupt))
- MCFG_TMS9928A_SET_SCREEN("screen")
+ MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(svi3x8_state, intvdp_w))
MCFG_TMS9928A_SCREEN_ADD_PAL("screen")
- MCFG_SCREEN_UPDATE_DEVICE("tms9928a", tms9929a_device, screen_update)
- MCFG_PALETTE_ADD("palette", TMS9928A_PALETTE_SIZE + 2) /* 2 additional entries for monochrome svi806 output */
-
- MCFG_SCREEN_ADD("svi806", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_SIZE(640, 400)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1)
- MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
+ MCFG_SCREEN_UPDATE_DEVICE("vdp", tms9929a_device, screen_update)
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", svi328)
-
- MCFG_MC6845_ADD("crtc", MC6845, "svi806", XTAL_12MHz / 8)
- MCFG_MC6845_SHOW_BORDER_AREA(false)
- MCFG_MC6845_CHAR_WIDTH(8) /* ? */
- MCFG_MC6845_UPDATE_ROW_CB(svi318_state, crtc_update_row)
-
- /* Sound hardware */
+ // sound hardware
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD("dac", DAC, 0)
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
- MCFG_SOUND_ADD("ay8910", AY8910, 1789773)
- MCFG_AY8910_PORT_A_READ_CB(READ8(svi318_state, psg_port_a_r))
- MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(svi318_state, psg_port_b_w))
+ MCFG_SOUND_ADD("psg", AY8910, XTAL_10_738635MHz / 6)
+ MCFG_AY8910_PORT_A_READ_CB(IOPORT("JOY"))
+ MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(svi3x8_state, psg_port_b_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
- /* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
- MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(svi318_state, write_centronics_busy))
-
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
-
+ // cassette
MCFG_CASSETTE_ADD("cassette")
MCFG_CASSETTE_FORMATS(svi_cassette_formats)
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY)
+ MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED)
MCFG_CASSETTE_INTERFACE("svi318_cass")
-
MCFG_SOFTWARE_LIST_ADD("cass_list", "svi318_cass")
- MCFG_FD1793_ADD("wd179x", XTAL_1MHz)
- MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(svi318_state, fdc_intrq_w))
- MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(svi318_state, fdc_drq_w))
-
- MCFG_FLOPPY_DRIVE_ADD("wd179x:0", svi_floppies, "dd", svi318_state::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("wd179x:1", svi_floppies, "dd", svi318_state::floppy_formats)
-
- MCFG_SOFTWARE_LIST_ADD("disk_list", "svi318_flop")
+ // cartridge slot
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "svi318_cart")
+ MCFG_GENERIC_EXTENSIONS("bin,rom")
+ MCFG_GENERIC_LOAD(svi3x8_state, cartridge)
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "svi318_cart")
+MACHINE_CONFIG_END
- MCFG_FRAGMENT_ADD(svi318_cartslot)
+static MACHINE_CONFIG_DERIVED( svi318n, svi318 )
+ MCFG_DEVICE_REMOVE("vdp")
+ MCFG_DEVICE_REMOVE("screen")
+ MCFG_DEVICE_ADD("vdp", TMS9928A, XTAL_10_738635MHz / 2)
+ MCFG_TMS9928A_VRAM_SIZE(0x4000)
+ MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(svi3x8_state, intvdp_w))
+ MCFG_TMS9928A_SCREEN_ADD_NTSC("screen")
+ MCFG_SCREEN_UPDATE_DEVICE("vdp", tms9928a_device, screen_update)
+MACHINE_CONFIG_END
- /* internal ram */
+static MACHINE_CONFIG_DERIVED( svi328, svi318 )
+ MCFG_DEVICE_REMOVE(RAM_TAG)
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("64K")
- MCFG_RAM_EXTRA_OPTIONS("96K,160K")
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( svi328n_806, svi328_806 )
-
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_REFRESH_RATE(60)
+static MACHINE_CONFIG_DERIVED( svi328n, svi318n )
+ MCFG_DEVICE_REMOVE(RAM_TAG)
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("64K")
MACHINE_CONFIG_END
-/***************************************************************************
-
- Game driver(s)
-***************************************************************************/
+//**************************************************************************
+// ROM DEFINITIONS
+//**************************************************************************
+// note: should be split into two 16k chips, document differenes
ROM_START( svi318 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_SYSTEM_BIOS(0, "111", "SV BASIC v1.11")
- ROMX_LOAD("svi111.rom", 0x0000, 0x8000, CRC(bc433df6) SHA1(10349ce675f6d6d47f0976e39cb7188eba858d89), ROM_BIOS(1))
- ROM_SYSTEM_BIOS(1, "110", "SV BASIC v1.1")
- ROMX_LOAD("svi110.rom", 0x0000, 0x8000, CRC(709904e9) SHA1(7d8daf52f78371ca2c9443e04827c8e1f98c8f2c), ROM_BIOS(2))
- ROM_SYSTEM_BIOS(2, "100", "SV BASIC v1.0")
- ROMX_LOAD("svi100.rom", 0x0000, 0x8000, CRC(98d48655) SHA1(07758272df475e5e06187aa3574241df1b14035b), ROM_BIOS(3))
-ROM_END
-
-ROM_START( svi318n )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_SYSTEM_BIOS(0, "111", "SV BASIC v1.11")
+ ROM_REGION(0x8000, "basic", 0)
+ ROM_SYSTEM_BIOS(0, "v111", "SV BASIC v1.11")
ROMX_LOAD("svi111.rom", 0x0000, 0x8000, CRC(bc433df6) SHA1(10349ce675f6d6d47f0976e39cb7188eba858d89), ROM_BIOS(1))
- ROM_SYSTEM_BIOS(1, "110", "SV BASIC v1.1")
+ ROM_SYSTEM_BIOS(1, "v11", "SV BASIC v1.1")
ROMX_LOAD("svi110.rom", 0x0000, 0x8000, CRC(709904e9) SHA1(7d8daf52f78371ca2c9443e04827c8e1f98c8f2c), ROM_BIOS(2))
- ROM_SYSTEM_BIOS(2, "100", "SV BASIC v1.0")
+ ROM_SYSTEM_BIOS(2, "v10", "SV BASIC v1.0")
ROMX_LOAD("svi100.rom", 0x0000, 0x8000, CRC(98d48655) SHA1(07758272df475e5e06187aa3574241df1b14035b), ROM_BIOS(3))
ROM_END
-ROM_START( svi328 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_SYSTEM_BIOS(0, "111", "SV BASIC v1.11")
- ROMX_LOAD("svi111.rom", 0x0000, 0x8000, CRC(bc433df6) SHA1(10349ce675f6d6d47f0976e39cb7188eba858d89), ROM_BIOS(1))
- ROM_SYSTEM_BIOS(1, "110", "SV BASIC v1.1")
- ROMX_LOAD("svi110.rom", 0x0000, 0x8000, CRC(709904e9) SHA1(7d8daf52f78371ca2c9443e04827c8e1f98c8f2c), ROM_BIOS(2))
- ROM_SYSTEM_BIOS(2, "100", "SV BASIC v1.0")
- ROMX_LOAD("svi100.rom", 0x0000, 0x8000, CRC(98d48655) SHA1(07758272df475e5e06187aa3574241df1b14035b), ROM_BIOS(3))
-ROM_END
-
-ROM_START( svi328n )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_SYSTEM_BIOS(0, "111", "SV BASIC v1.11")
- ROMX_LOAD("svi111.rom", 0x0000, 0x8000, CRC(bc433df6) SHA1(10349ce675f6d6d47f0976e39cb7188eba858d89), ROM_BIOS(1))
- ROM_SYSTEM_BIOS(1, "110", "SV BASIC v1.1")
- ROMX_LOAD("svi110.rom", 0x0000, 0x8000, CRC(709904e9) SHA1(7d8daf52f78371ca2c9443e04827c8e1f98c8f2c), ROM_BIOS(2))
- ROM_SYSTEM_BIOS(2, "100", "SV BASIC v1.0")
- ROMX_LOAD("svi100.rom", 0x0000, 0x8000, CRC(98d48655) SHA1(07758272df475e5e06187aa3574241df1b14035b), ROM_BIOS(3))
-ROM_END
+#define rom_svi318n rom_svi318
+#define rom_svi328 rom_svi318
+#define rom_svi328n rom_svi318
-ROM_START( sv328p80 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("svi111.rom", 0x0000, 0x8000, CRC(bc433df6) SHA1(10349ce675f6d6d47f0976e39cb7188eba858d89))
-
- ROM_REGION( 0x1000, "gfx1", 0 )
- ROM_SYSTEM_BIOS(0, "english", "English Character Set")
- ROMX_LOAD("svi806.rom", 0x0000, 0x1000, CRC(850bc232) SHA1(ed45cb0e9bd18a9d7bd74f87e620f016a7ae840f), ROM_BIOS(1))
- ROM_SYSTEM_BIOS(1, "swedish", "Swedish Character Set")
- ROMX_LOAD("svi806se.rom", 0x0000, 0x1000, CRC(daea8956) SHA1(3f16d5513ad35692488ae7d864f660e76c6e8ed3), ROM_BIOS(2))
-ROM_END
-
-ROM_START( sv328n80 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("svi111.rom", 0x0000, 0x8000, CRC(bc433df6) SHA1(10349ce675f6d6d47f0976e39cb7188eba858d89))
-
- ROM_REGION( 0x1000, "gfx1", 0 )
- ROM_SYSTEM_BIOS(0, "english", "English Character Set")
- ROMX_LOAD("svi806.rom", 0x0000, 0x1000, CRC(850bc232) SHA1(ed45cb0e9bd18a9d7bd74f87e620f016a7ae840f), ROM_BIOS(1))
- ROM_SYSTEM_BIOS(1, "swedish", "Swedish Character Set")
- ROMX_LOAD("svi806se.rom", 0x0000, 0x1000, CRC(daea8956) SHA1(3f16d5513ad35692488ae7d864f660e76c6e8ed3), ROM_BIOS(2))
-ROM_END
+//**************************************************************************
+// SYSTEM DRIVERS
+//**************************************************************************
-/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
-COMP( 1983, svi318, 0, 0, svi318, svi318, svi318_state, svi318, "Spectravideo", "SVI-318 (PAL)", MACHINE_SUPPORTS_SAVE )
-COMP( 1983, svi318n, svi318, 0, svi318n, svi318, svi318_state, svi318, "Spectravideo", "SVI-318 (NTSC)", MACHINE_SUPPORTS_SAVE )
-COMP( 1983, svi328, svi318, 0, svi328, svi328, svi318_state, svi318, "Spectravideo", "SVI-328 (PAL)", MACHINE_SUPPORTS_SAVE )
-COMP( 1983, svi328n, svi318, 0, svi328n, svi328, svi318_state, svi318, "Spectravideo", "SVI-328 (NTSC)", MACHINE_SUPPORTS_SAVE )
-COMP( 1983, sv328p80, svi318, 0, svi328_806, svi328, svi318_state, svi328_806, "Spectravideo", "SVI-328 (PAL) + SVI-806 80 column card", MACHINE_SUPPORTS_SAVE )
-COMP( 1983, sv328n80, svi318, 0, svi328n_806, svi328, svi318_state, svi328_806, "Spectravideo", "SVI-328 (NTSC) + SVI-806 80 column card", MACHINE_SUPPORTS_SAVE )
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
+COMP( 1983, svi318, 0, 0, svi318, svi318, driver_device, 0, "Spectravideo", "SVI-318 (PAL)", MACHINE_SUPPORTS_SAVE)
+COMP( 1983, svi318n, svi318, 0, svi318n, svi318, driver_device, 0, "Spectravideo", "SVI-318 (NTSC)", MACHINE_SUPPORTS_SAVE)
+COMP( 1983, svi328, 0, 0, svi328, svi328, driver_device, 0, "Spectravideo", "SVI-328 (PAL)", MACHINE_SUPPORTS_SAVE)
+COMP( 1983, svi328n, svi328, 0, svi328n, svi328, driver_device, 0, "Spectravideo", "SVI-328 (NTSC)", MACHINE_SUPPORTS_SAVE)
diff --git a/src/mame/drivers/swyft.cpp b/src/mame/drivers/swyft.cpp
index 27827228b3b..8799893eded 100644
--- a/src/mame/drivers/swyft.cpp
+++ b/src/mame/drivers/swyft.cpp
@@ -783,7 +783,7 @@ static MACHINE_CONFIG_START( swyft, swyft_state )
MCFG_SCREEN_UPDATE_DRIVER(swyft_state, screen_update_swyft)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_VIDEO_START_OVERRIDE(swyft_state,swyft)
diff --git a/src/mame/drivers/sys2900.cpp b/src/mame/drivers/sys2900.cpp
index 848ec90ff58..01192b40379 100644
--- a/src/mame/drivers/sys2900.cpp
+++ b/src/mame/drivers/sys2900.cpp
@@ -130,7 +130,7 @@ static MACHINE_CONFIG_START( sys2900, sys2900_state )
MCFG_SCREEN_UPDATE_DRIVER(sys2900_state, screen_update_sys2900)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/taito_f3.cpp b/src/mame/drivers/taito_f3.cpp
index 17d62e4f18e..2d13f715018 100644
--- a/src/mame/drivers/taito_f3.cpp
+++ b/src/mame/drivers/taito_f3.cpp
@@ -119,7 +119,7 @@ WRITE32_MEMBER(taito_f3_state::f3_sound_reset_1_w)
WRITE32_MEMBER(taito_f3_state::f3_sound_bankswitch_w)
{
if (m_f3_game==KIRAMEKI) {
- UINT16 *rom = (UINT16 *)memregion("audiocpu")->base();
+ UINT16 *rom = (UINT16 *)memregion("taito_en:audiocpu")->base();
UINT32 idx;
idx = (offset << 1) & 0x1e;
@@ -131,7 +131,7 @@ WRITE32_MEMBER(taito_f3_state::f3_sound_bankswitch_w)
/* Banks are 0x20000 bytes each, divide by two to get data16
pointer rather than byte pointer */
- membank("bank2")->set_base(&rom[(idx*0x20000)/2 + 0x80000]);
+ membank("taito_en:bank2")->set_base(&rom[(idx*0x20000)/2 + 0x80000]);
} else {
logerror("Sound bankswitch in unsupported game\n");
@@ -461,7 +461,7 @@ static MACHINE_CONFIG_START( f3, taito_f3_state )
MCFG_VIDEO_START_OVERRIDE(taito_f3_state,f3)
/* sound hardware */
- MCFG_FRAGMENT_ADD(taito_en_sound)
+ MCFG_DEVICE_ADD("taito_en", TAITO_EN, 0)
MACHINE_CONFIG_END
/* These games reprogram the video output registers to display different scanlines,
@@ -581,7 +581,7 @@ ROM_START( ringrage )
ROM_LOAD ("d21-08.51", 0x180000, 0x080000, CRC(a0d95be9) SHA1(1746097e827ac10906f012c5c4f93c388a30f4b3) )
ROM_FILL ( 0x100000, 0x080000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d21-18.5", 0x100000, 0x20000, CRC(133b55d0) SHA1(feb5c9d0b1adcae3b16eb206c8ac4e73fd88bef4) )
ROM_LOAD16_BYTE("d21-19.6", 0x100001, 0x20000, CRC(1f98908f) SHA1(972c8f7e4e417831466714efd0b4cadca1f3e8e5) )
@@ -610,7 +610,7 @@ ROM_START( ringrageu )
ROM_LOAD ("d21-08.51", 0x180000, 0x080000, CRC(a0d95be9) SHA1(1746097e827ac10906f012c5c4f93c388a30f4b3) )
ROM_FILL ( 0x100000, 0x080000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d21-18.5", 0x100000, 0x20000, CRC(133b55d0) SHA1(feb5c9d0b1adcae3b16eb206c8ac4e73fd88bef4) )
ROM_LOAD16_BYTE("d21-19.6", 0x100001, 0x20000, CRC(1f98908f) SHA1(972c8f7e4e417831466714efd0b4cadca1f3e8e5) )
@@ -639,7 +639,7 @@ ROM_START( ringragej )
ROM_LOAD ("d21-08.51", 0x180000, 0x080000, CRC(a0d95be9) SHA1(1746097e827ac10906f012c5c4f93c388a30f4b3) )
ROM_FILL ( 0x100000, 0x080000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d21-18.5", 0x100000, 0x20000, CRC(133b55d0) SHA1(feb5c9d0b1adcae3b16eb206c8ac4e73fd88bef4) )
ROM_LOAD16_BYTE("d21-19.6", 0x100001, 0x20000, CRC(1f98908f) SHA1(972c8f7e4e417831466714efd0b4cadca1f3e8e5) )
@@ -668,7 +668,7 @@ ROM_START( arabianm )
ROM_LOAD ("d29-08.ic51", 0x180000, 0x080000, CRC(d7562851) SHA1(91d86e75ba7a590ca298b932b4cf8fa9228f115e) )
ROM_FILL ( 0x100000, 0x080000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d29-18.ic5", 0x100000, 0x20000, CRC(d97780df) SHA1(d0f9d2fd7ce13f620bb44083bf012f67dda4b10b) )
ROM_LOAD16_BYTE("d29-19.ic6", 0x100001, 0x20000, CRC(b1ad365c) SHA1(1cd26d8feaaa06b50dfee32e9b7950b8ee92ac55) )
@@ -708,7 +708,7 @@ ROM_START( arabianmj )
ROM_LOAD ("d29-08.ic51", 0x180000, 0x080000, CRC(d7562851) SHA1(91d86e75ba7a590ca298b932b4cf8fa9228f115e) )
ROM_FILL ( 0x100000, 0x080000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d29-18.ic5", 0x100000, 0x20000, CRC(d97780df) SHA1(d0f9d2fd7ce13f620bb44083bf012f67dda4b10b) )
ROM_LOAD16_BYTE("d29-19.ic6", 0x100001, 0x20000, CRC(b1ad365c) SHA1(1cd26d8feaaa06b50dfee32e9b7950b8ee92ac55) )
@@ -748,7 +748,7 @@ ROM_START( arabianmu )
ROM_LOAD ("d29-08.ic51", 0x180000, 0x080000, CRC(d7562851) SHA1(91d86e75ba7a590ca298b932b4cf8fa9228f115e) )
ROM_FILL ( 0x100000, 0x080000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d29-18.ic5", 0x100000, 0x20000, CRC(d97780df) SHA1(d0f9d2fd7ce13f620bb44083bf012f67dda4b10b) )
ROM_LOAD16_BYTE("d29-19.ic6", 0x100001, 0x20000, CRC(b1ad365c) SHA1(1cd26d8feaaa06b50dfee32e9b7950b8ee92ac55) )
@@ -786,7 +786,7 @@ ROM_START( ridingf )
ROM_LOAD16_BYTE("d34-06.50", 0x000001, 0x080000, CRC(edc9b9f3) SHA1(c57bec1c8882d95388c3fae7cb5a321bdb202737) )
ROM_FILL ( 0x100000, 0x100000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d34-07.5", 0x100000, 0x20000, CRC(67239e2b) SHA1(8e0268fab53d26cde5c1928326c4787533dc6ffe) )
ROM_LOAD16_BYTE("d34-08.6", 0x100001, 0x20000, CRC(2cf20323) SHA1(b2bbac3714ecfd75506ae000c7eec603dfe3e13d) )
@@ -813,7 +813,7 @@ ROM_START( ridingfj )
ROM_LOAD16_BYTE("d34-06.50", 0x000001, 0x080000, CRC(edc9b9f3) SHA1(c57bec1c8882d95388c3fae7cb5a321bdb202737) )
ROM_FILL ( 0x100000, 0x100000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d34-07.5", 0x100000, 0x20000, CRC(67239e2b) SHA1(8e0268fab53d26cde5c1928326c4787533dc6ffe) )
ROM_LOAD16_BYTE("d34-08.6", 0x100001, 0x20000, CRC(2cf20323) SHA1(b2bbac3714ecfd75506ae000c7eec603dfe3e13d) )
@@ -840,7 +840,7 @@ ROM_START( ridingfu )
ROM_LOAD16_BYTE("d34-06.50", 0x000001, 0x080000, CRC(edc9b9f3) SHA1(c57bec1c8882d95388c3fae7cb5a321bdb202737) )
ROM_FILL ( 0x100000, 0x100000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d34-07.5", 0x100000, 0x20000, CRC(67239e2b) SHA1(8e0268fab53d26cde5c1928326c4787533dc6ffe) )
ROM_LOAD16_BYTE("d34-08.6", 0x100001, 0x20000, CRC(2cf20323) SHA1(b2bbac3714ecfd75506ae000c7eec603dfe3e13d) )
@@ -871,7 +871,7 @@ ROM_START( gseeker )
ROM_LOAD16_BYTE("d40_06.rom", 0x000001, 0x100000, CRC(a822abe4) SHA1(1a0dd9dcb8e24daab6eb1661307ef0e10f7e4d4e) )
ROM_FILL ( 0x200000, 0x200000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d40_07.rom", 0x100000, 0x20000, CRC(7e9b26c2) SHA1(d88ad39a9d70b4a5bd3f83e0d4d0725f659f1d2a) )
ROM_LOAD16_BYTE("d40_08.rom", 0x100001, 0x20000, CRC(9c926a28) SHA1(9d9ee75eb895edc381c3ab4df5af941f84cd2073) )
@@ -902,7 +902,7 @@ ROM_START( gseekerj )
ROM_LOAD16_BYTE("d40_06.rom", 0x000001, 0x100000, CRC(a822abe4) SHA1(1a0dd9dcb8e24daab6eb1661307ef0e10f7e4d4e) )
ROM_FILL ( 0x200000, 0x200000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d40_07.rom", 0x100000, 0x20000, CRC(7e9b26c2) SHA1(d88ad39a9d70b4a5bd3f83e0d4d0725f659f1d2a) )
ROM_LOAD16_BYTE("d40_08.rom", 0x100001, 0x20000, CRC(9c926a28) SHA1(9d9ee75eb895edc381c3ab4df5af941f84cd2073) )
@@ -933,7 +933,7 @@ ROM_START( gseekeru )
ROM_LOAD16_BYTE("d40_06.rom", 0x000001, 0x100000, CRC(a822abe4) SHA1(1a0dd9dcb8e24daab6eb1661307ef0e10f7e4d4e) )
ROM_FILL ( 0x200000, 0x200000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d40_07.rom", 0x100000, 0x20000, CRC(7e9b26c2) SHA1(d88ad39a9d70b4a5bd3f83e0d4d0725f659f1d2a) )
ROM_LOAD16_BYTE("d40_08.rom", 0x100001, 0x20000, CRC(9c926a28) SHA1(9d9ee75eb895edc381c3ab4df5af941f84cd2073) )
@@ -965,7 +965,7 @@ ROM_START( commandw )
ROM_LOAD ("cw_scr_h.bin", 0x300000, 0x100000, CRC(001f85dd) SHA1(2532377c0b54bc964ea4e74911ff62fea2d53975) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("cw_spr1.bin", 0x100000, 0x20000, CRC(c8f81c25) SHA1(1c914053826587cc2d5d2c0220a3e29a641fe6f9) )
ROM_LOAD16_BYTE("cw_spr0.bin", 0x100001, 0x20000, CRC(2aaa9dfb) SHA1(6d4c36ff54a84035c0ddf40e4f3eafd2adc15a5e) )
@@ -996,7 +996,7 @@ ROM_START( cupfinal )
ROM_LOAD ("d49-11.43", 0x180000, 0x080000, CRC(11318b26) SHA1(a7153f9f406d52189f59cbe58d65f88f4e2e6fcc) )
ROM_FILL ( 0x100000, 0x080000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d49-17.32", 0x100000, 0x20000, CRC(f2058eba) SHA1(7faaa94fadf02b6304287b61fb9613f9f4169fef) )
ROM_LOAD16_BYTE("d49-18.33", 0x100001, 0x20000, CRC(a0fdd270) SHA1(9b5a2c8d35ea3bc6842e3c328447c3bf641b9237) )
@@ -1028,7 +1028,7 @@ ROM_START( hthero93 )
ROM_LOAD ("d49-11.43", 0x180000, 0x080000, CRC(11318b26) SHA1(a7153f9f406d52189f59cbe58d65f88f4e2e6fcc) )
ROM_FILL ( 0x100000, 0x080000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d49-17.32", 0x100000, 0x20000, CRC(f2058eba) SHA1(7faaa94fadf02b6304287b61fb9613f9f4169fef) )
ROM_LOAD16_BYTE("d49-18.33", 0x100001, 0x20000, CRC(a0fdd270) SHA1(9b5a2c8d35ea3bc6842e3c328447c3bf641b9237) )
@@ -1060,7 +1060,7 @@ ROM_START( hthero93u )
ROM_LOAD ("d49-11.43", 0x180000, 0x080000, CRC(11318b26) SHA1(a7153f9f406d52189f59cbe58d65f88f4e2e6fcc) )
ROM_FILL ( 0x100000, 0x080000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d49-17.32", 0x100000, 0x20000, CRC(f2058eba) SHA1(7faaa94fadf02b6304287b61fb9613f9f4169fef) )
ROM_LOAD16_BYTE("d49-18.33", 0x100001, 0x20000, CRC(a0fdd270) SHA1(9b5a2c8d35ea3bc6842e3c328447c3bf641b9237) )
@@ -1108,7 +1108,7 @@ ROM_START( trstar )
ROM_LOAD ("d53-11.50", 0x300000, 0x100000, CRC(39c0a546) SHA1(53f03586f6586032fc3b4f90e987c1128edbb0a7) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d53-13.10", 0x100000, 0x20000, CRC(877f0361) SHA1(eda58d71fb06f739bee1451d7aa7e7e6dee10e03) )
ROM_LOAD16_BYTE("d53-14.23", 0x100001, 0x20000, CRC(a8664867) SHA1(dffddca469019abac33a1abe41c3fe83fbf553ce) )
@@ -1139,7 +1139,7 @@ ROM_START( trstarj )
ROM_LOAD ("d53-11.50", 0x300000, 0x100000, CRC(39c0a546) SHA1(53f03586f6586032fc3b4f90e987c1128edbb0a7) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d53-13.10", 0x100000, 0x20000, CRC(877f0361) SHA1(eda58d71fb06f739bee1451d7aa7e7e6dee10e03) )
ROM_LOAD16_BYTE("d53-14.23", 0x100001, 0x20000, CRC(a8664867) SHA1(dffddca469019abac33a1abe41c3fe83fbf553ce) )
@@ -1170,7 +1170,7 @@ ROM_START( prmtmfgt )
ROM_LOAD ("d53-11.50", 0x300000, 0x100000, CRC(39c0a546) SHA1(53f03586f6586032fc3b4f90e987c1128edbb0a7) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d53-13.10", 0x100000, 0x20000, CRC(877f0361) SHA1(eda58d71fb06f739bee1451d7aa7e7e6dee10e03) )
ROM_LOAD16_BYTE("d53-14.23", 0x100001, 0x20000, CRC(a8664867) SHA1(dffddca469019abac33a1abe41c3fe83fbf553ce) )
@@ -1201,7 +1201,7 @@ ROM_START( trstaro )
ROM_LOAD ("d53-11.50", 0x300000, 0x100000, CRC(39c0a546) SHA1(53f03586f6586032fc3b4f90e987c1128edbb0a7) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d53-13.10", 0x100000, 0x20000, CRC(877f0361) SHA1(eda58d71fb06f739bee1451d7aa7e7e6dee10e03) )
ROM_LOAD16_BYTE("d53-14.23", 0x100001, 0x20000, CRC(a8664867) SHA1(dffddca469019abac33a1abe41c3fe83fbf553ce) )
@@ -1232,7 +1232,7 @@ ROM_START( trstaroj )
ROM_LOAD ("d53-11.50", 0x300000, 0x100000, CRC(39c0a546) SHA1(53f03586f6586032fc3b4f90e987c1128edbb0a7) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d53-13.10", 0x100000, 0x20000, CRC(877f0361) SHA1(eda58d71fb06f739bee1451d7aa7e7e6dee10e03) )
ROM_LOAD16_BYTE("d53-14.23", 0x100001, 0x20000, CRC(a8664867) SHA1(dffddca469019abac33a1abe41c3fe83fbf553ce) )
@@ -1263,7 +1263,7 @@ ROM_START( prmtmfgto )
ROM_LOAD ("d53-11.50", 0x300000, 0x100000, CRC(39c0a546) SHA1(53f03586f6586032fc3b4f90e987c1128edbb0a7) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d53-13.10", 0x100000, 0x20000, CRC(877f0361) SHA1(eda58d71fb06f739bee1451d7aa7e7e6dee10e03) )
ROM_LOAD16_BYTE("d53-14.23", 0x100001, 0x20000, CRC(a8664867) SHA1(dffddca469019abac33a1abe41c3fe83fbf553ce) )
@@ -1291,7 +1291,7 @@ ROM_START( gunlock )
ROM_LOAD ("d66-08.ic49", 0x300000, 0x100000, CRC(9959f30b) SHA1(64bf2bf995c283c00d968e3c078b824de4084d3d) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 code */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 code */
ROM_LOAD16_BYTE("d66-23.ic10", 0x100000, 0x40000, CRC(57fb7c49) SHA1(f8709fd1e9ea7cee10ee2288d13339f675a7d3ae) )
ROM_LOAD16_BYTE("d66-22.ic23", 0x100001, 0x40000, CRC(83dd7f9b) SHA1(dae21f64232d3e268f22b5e9899e0b726fdc9a9f) )
@@ -1319,7 +1319,7 @@ ROM_START( rayforce )
ROM_LOAD ("d66-08.ic49", 0x300000, 0x100000, CRC(9959f30b) SHA1(64bf2bf995c283c00d968e3c078b824de4084d3d) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 code */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 code */
ROM_LOAD16_BYTE("d66-23.ic10", 0x100000, 0x40000, CRC(57fb7c49) SHA1(f8709fd1e9ea7cee10ee2288d13339f675a7d3ae) )
ROM_LOAD16_BYTE("d66-22.ic23", 0x100001, 0x40000, CRC(83dd7f9b) SHA1(dae21f64232d3e268f22b5e9899e0b726fdc9a9f) )
@@ -1347,7 +1347,7 @@ ROM_START( rayforcej )
ROM_LOAD ("d66-08.ic49", 0x300000, 0x100000, CRC(9959f30b) SHA1(64bf2bf995c283c00d968e3c078b824de4084d3d) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 code */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 code */
ROM_LOAD16_BYTE("d66-23.ic10", 0x100000, 0x40000, CRC(57fb7c49) SHA1(f8709fd1e9ea7cee10ee2288d13339f675a7d3ae) )
ROM_LOAD16_BYTE("d66-22.ic23", 0x100001, 0x40000, CRC(83dd7f9b) SHA1(dae21f64232d3e268f22b5e9899e0b726fdc9a9f) )
@@ -1378,7 +1378,7 @@ ROM_START( scfinals ) /* This is the single PCB version */
ROM_LOAD ("d49-11.43", 0x180000, 0x080000, CRC(11318b26) SHA1(a7153f9f406d52189f59cbe58d65f88f4e2e6fcc) )
ROM_FILL ( 0x100000, 0x080000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d49-17.ic5", 0x100000, 0x20000, CRC(f2058eba) SHA1(7faaa94fadf02b6304287b61fb9613f9f4169fef) )
ROM_LOAD16_BYTE("d49-18.ic6", 0x100001, 0x20000, CRC(a0fdd270) SHA1(9b5a2c8d35ea3bc6842e3c328447c3bf641b9237) )
@@ -1413,7 +1413,7 @@ ROM_START( scfinalso ) /* Cart version */
ROM_LOAD ("d49-11.43", 0x180000, 0x080000, CRC(11318b26) SHA1(a7153f9f406d52189f59cbe58d65f88f4e2e6fcc) )
ROM_FILL ( 0x100000, 0x080000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d49-17.32", 0x100000, 0x20000, CRC(f2058eba) SHA1(7faaa94fadf02b6304287b61fb9613f9f4169fef) )
ROM_LOAD16_BYTE("d49-18.33", 0x100001, 0x20000, CRC(a0fdd270) SHA1(9b5a2c8d35ea3bc6842e3c328447c3bf641b9237) )
@@ -1448,7 +1448,7 @@ ROM_START( lightbr )
ROM_LOAD ("d69-05.bin", 0x600000, 0x200000, CRC(f9f5433c) SHA1(d3de66385d883c72967c44bc29983d7a79f665d1) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d69-18.bin", 0x100000, 0x20000, CRC(04600d7b) SHA1(666cfab09b61fd6e0bc4ff277018ebf1cda01b0e) )
ROM_LOAD16_BYTE("d69-19.bin", 0x100001, 0x20000, CRC(1484e853) SHA1(4459c18ba005786483c652857e527c6093efb036) )
@@ -1479,7 +1479,7 @@ ROM_START( dungeonm )
ROM_LOAD ("d69-05.bin", 0x600000, 0x200000, CRC(f9f5433c) SHA1(d3de66385d883c72967c44bc29983d7a79f665d1) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d69-18.bin", 0x100000, 0x20000, CRC(04600d7b) SHA1(666cfab09b61fd6e0bc4ff277018ebf1cda01b0e) )
ROM_LOAD16_BYTE("d69-19.bin", 0x100001, 0x20000, CRC(1484e853) SHA1(4459c18ba005786483c652857e527c6093efb036) )
@@ -1510,7 +1510,7 @@ ROM_START( dungeonmu )
ROM_LOAD ("d69-05.bin", 0x600000, 0x200000, CRC(f9f5433c) SHA1(d3de66385d883c72967c44bc29983d7a79f665d1) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d69-18.bin", 0x100000, 0x20000, CRC(04600d7b) SHA1(666cfab09b61fd6e0bc4ff277018ebf1cda01b0e) )
ROM_LOAD16_BYTE("d69-19.bin", 0x100001, 0x20000, CRC(1484e853) SHA1(4459c18ba005786483c652857e527c6093efb036) )
@@ -1601,7 +1601,7 @@ ROM_START( lightbrj )
ROM_LOAD ("d69-05.bin", 0x600000, 0x200000, CRC(f9f5433c) SHA1(d3de66385d883c72967c44bc29983d7a79f665d1) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d69-18.bin", 0x100000, 0x20000, CRC(04600d7b) SHA1(666cfab09b61fd6e0bc4ff277018ebf1cda01b0e) )
ROM_LOAD16_BYTE("d69-19.bin", 0x100001, 0x20000, CRC(1484e853) SHA1(4459c18ba005786483c652857e527c6093efb036) )
@@ -1632,7 +1632,7 @@ ROM_START( intcup94 )
ROM_LOAD ("d78-03.43", 0x180000, 0x080000, CRC(a8bc36e5) SHA1(5777b9457292e8a9cbb4e8226ba939530ffab07c) )
ROM_FILL ( 0x100000, 0x080000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d78-08.32", 0x100000, 0x20000, CRC(a629d07c) SHA1(b2904e106633a3960ceb2bc58b600ea60034ff0b) )
ROM_LOAD16_BYTE("d78-09.33", 0x100001, 0x20000, CRC(1f0efe01) SHA1(7bff748b9fcee170e430d90ee07eb9975d8fba59) )
@@ -1664,7 +1664,7 @@ ROM_START( hthero94 )
ROM_LOAD ("d78-03.43", 0x180000, 0x080000, CRC(a8bc36e5) SHA1(5777b9457292e8a9cbb4e8226ba939530ffab07c) )
ROM_FILL ( 0x100000, 0x080000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d78-08.32", 0x100000, 0x20000, CRC(a629d07c) SHA1(b2904e106633a3960ceb2bc58b600ea60034ff0b) )
ROM_LOAD16_BYTE("d78-09.33", 0x100001, 0x20000, CRC(1f0efe01) SHA1(7bff748b9fcee170e430d90ee07eb9975d8fba59) )
@@ -1691,7 +1691,7 @@ ROM_START( recalh )
ROM_LOAD16_BYTE("rh_scrm.bin", 0x000001, 0x100000, CRC(37200968) SHA1(4a8d5a17af7eb732f481bf174099845e8d8d6b87) )
ROM_FILL ( 0x200000, 0x200000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("rh_spr1.bin", 0x100000, 0x20000, CRC(504cbc1d) SHA1(35a775c1ebc8107c553e43b9d84eb735446c26fd) )
ROM_LOAD16_BYTE("rh_spr0.bin", 0x100001, 0x20000, CRC(78fba467) SHA1(4586b061724be7ec413784b820c33cc0d6bbcd0c) )
@@ -1732,7 +1732,7 @@ ROM_START( kaiserkn )
ROM_LOAD ("d84-18.rom", 0xb00000, 0x100000, CRC(e812bcc5) SHA1(3574e4a99232d9fc7989ec5d1e8fe76b4b30784a) )
ROM_FILL ( 0x600000, 0x300000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d84-26.32", 0x100000, 0x40000, CRC(4f5b8563) SHA1(1d4e06cbea7bc73a99d6e30be714fff420151bbc) )
ROM_LOAD16_BYTE("d84-27.33", 0x100001, 0x40000, CRC(fb0cb1ba) SHA1(16a79b53651a6131f7636db19738b456b7c28bff) )
@@ -1775,7 +1775,7 @@ ROM_START( kaiserknj )
ROM_LOAD ("d84-18.rom", 0xb00000, 0x100000, CRC(e812bcc5) SHA1(3574e4a99232d9fc7989ec5d1e8fe76b4b30784a) )
ROM_FILL ( 0x600000, 0x300000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d84-26.32", 0x100000, 0x40000, CRC(4f5b8563) SHA1(1d4e06cbea7bc73a99d6e30be714fff420151bbc) )
ROM_LOAD16_BYTE("d84-27.33", 0x100001, 0x40000, CRC(fb0cb1ba) SHA1(16a79b53651a6131f7636db19738b456b7c28bff) )
@@ -1818,7 +1818,7 @@ ROM_START( gblchmp )
ROM_LOAD ("d84-18.rom", 0xb00000, 0x100000, CRC(e812bcc5) SHA1(3574e4a99232d9fc7989ec5d1e8fe76b4b30784a) )
ROM_FILL ( 0x600000, 0x300000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d84-26.32", 0x100000, 0x40000, CRC(4f5b8563) SHA1(1d4e06cbea7bc73a99d6e30be714fff420151bbc) )
ROM_LOAD16_BYTE("d84-27.33", 0x100001, 0x40000, CRC(fb0cb1ba) SHA1(16a79b53651a6131f7636db19738b456b7c28bff) )
@@ -1861,7 +1861,7 @@ ROM_START( dankuga )
ROM_LOAD ("d84-18.rom", 0xb00000, 0x100000, CRC(e812bcc5) SHA1(3574e4a99232d9fc7989ec5d1e8fe76b4b30784a) )
ROM_FILL ( 0x600000, 0x300000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d84-26.32", 0x100000, 0x40000, CRC(4f5b8563) SHA1(1d4e06cbea7bc73a99d6e30be714fff420151bbc) )
ROM_LOAD16_BYTE("d84-27.33", 0x100001, 0x40000, CRC(fb0cb1ba) SHA1(16a79b53651a6131f7636db19738b456b7c28bff) )
@@ -1892,7 +1892,7 @@ ROM_START( dariusg )
ROM_LOAD ("d87-08.bin", 0x600000, 0x200000, CRC(76d23602) SHA1(ca53ea6641182c44a4038bbeaa5effb1687f1980) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d87-13.bin", 0x100000, 0x40000, CRC(15b1fff4) SHA1(28692b731ae98a47c2c5e11a8a71b61a813d9a64) )
ROM_LOAD16_BYTE("d87-14.bin", 0x100001, 0x40000, CRC(eecda29a) SHA1(6eb238e47bc7bf635ffbdbb25fb06a37db980ef8) )
@@ -1920,7 +1920,7 @@ ROM_START( dariusgj )
ROM_LOAD ("d87-08.bin", 0x600000, 0x200000, CRC(76d23602) SHA1(ca53ea6641182c44a4038bbeaa5effb1687f1980) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d87-13.bin", 0x100000, 0x40000, CRC(15b1fff4) SHA1(28692b731ae98a47c2c5e11a8a71b61a813d9a64) )
ROM_LOAD16_BYTE("d87-14.bin", 0x100001, 0x40000, CRC(eecda29a) SHA1(6eb238e47bc7bf635ffbdbb25fb06a37db980ef8) )
@@ -1948,7 +1948,7 @@ ROM_START( dariusgu )
ROM_LOAD ("d87-08.bin", 0x600000, 0x200000, CRC(76d23602) SHA1(ca53ea6641182c44a4038bbeaa5effb1687f1980) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d87-13.bin", 0x100000, 0x40000, CRC(15b1fff4) SHA1(28692b731ae98a47c2c5e11a8a71b61a813d9a64) )
ROM_LOAD16_BYTE("d87-14.bin", 0x100001, 0x40000, CRC(eecda29a) SHA1(6eb238e47bc7bf635ffbdbb25fb06a37db980ef8) )
@@ -1976,7 +1976,7 @@ ROM_START( dariusgx )
ROM_LOAD ("d87-08.bin", 0x600000, 0x200000, CRC(76d23602) SHA1(ca53ea6641182c44a4038bbeaa5effb1687f1980) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d87-13.bin", 0x100000, 0x40000, CRC(15b1fff4) SHA1(28692b731ae98a47c2c5e11a8a71b61a813d9a64) )
ROM_LOAD16_BYTE("d87-14.bin", 0x100001, 0x40000, CRC(eecda29a) SHA1(6eb238e47bc7bf635ffbdbb25fb06a37db980ef8) )
@@ -2005,7 +2005,7 @@ ROM_START( bublbob2 )
ROM_LOAD ("d90-06", 0x300000, 0x100000, CRC(166a72b8) SHA1(7f70b8c960794322e1dc88e6600a2d13d948d873) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d90-13.ic32", 0x100000, 0x40000, CRC(6762bd90) SHA1(771db0382bc8dab2caf13d0fc20648366c685829) )
ROM_LOAD16_BYTE("d90-14.ic33", 0x100001, 0x40000, CRC(8e33357e) SHA1(68b81693c22e6357e37244f2a416818a81338138) )
@@ -2039,7 +2039,7 @@ ROM_START( bublbob2o )
ROM_LOAD ("d90-06", 0x300000, 0x100000, CRC(166a72b8) SHA1(7f70b8c960794322e1dc88e6600a2d13d948d873) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d90-13.ic32", 0x100000, 0x40000, CRC(6762bd90) SHA1(771db0382bc8dab2caf13d0fc20648366c685829) )
ROM_LOAD16_BYTE("d90-14.ic33", 0x100001, 0x40000, CRC(8e33357e) SHA1(68b81693c22e6357e37244f2a416818a81338138) )
@@ -2069,7 +2069,7 @@ ROM_START( bublbob2p )
ROM_LOAD32_BYTE("cq80-scr3-4266.ic4", 0x000003, 0x080000, CRC(c114583f) SHA1(ec85e8f4135e48607bb84b810d57d570ef56b228) )
ROM_LOAD16_BYTE("cq80-scr4-7fe1.ic3", 0x300000, 0x080000, CRC(2bba1728) SHA1(cdd2e651c233a185fcbb3fd8f5eabee2af30f781) )
- ROM_REGION(0x180000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("snd-h-348f.ic66", 0x100000, 0x20000, CRC(f66e60f2) SHA1(b94c97ccde179a69811137c77730c91924236bfe))
ROM_LOAD16_BYTE("snd-l-4ec1.ic65", 0x100001, 0x20000, CRC(d302d8bc) SHA1(02a2e69d0f4406578b12b05ab25d2abdf5bbba3c) )
@@ -2114,7 +2114,7 @@ ROM_START( bubsymphe )
ROM_LOAD ("d90-06", 0x300000, 0x100000, CRC(166a72b8) SHA1(7f70b8c960794322e1dc88e6600a2d13d948d873) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d90-13.ic32", 0x100000, 0x40000, CRC(6762bd90) SHA1(771db0382bc8dab2caf13d0fc20648366c685829) )
ROM_LOAD16_BYTE("d90-14.ic33", 0x100001, 0x40000, CRC(8e33357e) SHA1(68b81693c22e6357e37244f2a416818a81338138) )
@@ -2142,7 +2142,7 @@ ROM_START( bubsymphj )
ROM_LOAD ("d90-06", 0x300000, 0x100000, CRC(166a72b8) SHA1(7f70b8c960794322e1dc88e6600a2d13d948d873) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d90-13.ic32", 0x100000, 0x40000, CRC(6762bd90) SHA1(771db0382bc8dab2caf13d0fc20648366c685829) )
ROM_LOAD16_BYTE("d90-14.ic33", 0x100001, 0x40000, CRC(8e33357e) SHA1(68b81693c22e6357e37244f2a416818a81338138) )
@@ -2231,7 +2231,7 @@ ROM_START( bubsymphu )
ROM_LOAD ("d90-06", 0x300000, 0x100000, CRC(166a72b8) SHA1(7f70b8c960794322e1dc88e6600a2d13d948d873) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("d90-13.ic32", 0x100000, 0x40000, CRC(6762bd90) SHA1(771db0382bc8dab2caf13d0fc20648366c685829) )
ROM_LOAD16_BYTE("d90-14.ic33", 0x100001, 0x40000, CRC(8e33357e) SHA1(68b81693c22e6357e37244f2a416818a81338138) )
@@ -2257,7 +2257,7 @@ ROM_START( spcinvdj )
ROM_LOAD16_BYTE("d93-10.45", 0x000001, 0x20000, CRC(8a3f531b) SHA1(69f9971c45971018108a5d312d5bbcfd3caf9bd0) )
ROM_FILL ( 0x040000, 0x40000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d93-05.bin", 0x100000, 0x20000, CRC(ff365596) SHA1(4cf2e0d6f42cf3fb69796be6092eff8a47f7f8b9) )
ROM_LOAD16_BYTE("d93-06.bin", 0x100001, 0x20000, CRC(ef7ad400) SHA1(01be403d575a543f089b910a5a8c381a6603e67e) )
@@ -2293,7 +2293,7 @@ ROM_START( pwrgoal )
ROM_LOAD ("d94-12.bin", 0x300000, 0x100000, CRC(47064189) SHA1(99ceeb326dcc2e1c3acba8ac14d94dcb17c6e032) )
ROM_FILL ( 0x200000, 0x100000,0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d94-19.bin", 0x100000, 0x40000, CRC(c93dbcf4) SHA1(413520e652d809651aff9b1b74e6353112d34c12) ) /* Over dump?? 0x20000-0x3ffff == 0xFF */
ROM_LOAD16_BYTE("d94-20.bin", 0x100001, 0x40000, CRC(f232bf64) SHA1(bbfeae0785fc49c12aa6d9b1bd6ff7c8515f8fe7) ) /* Over dump?? 0x20000-0x3ffff == 0xFF */
@@ -2327,7 +2327,7 @@ ROM_START( hthero95 )
ROM_LOAD ("d94-12.bin", 0x300000, 0x100000, CRC(47064189) SHA1(99ceeb326dcc2e1c3acba8ac14d94dcb17c6e032) )
ROM_FILL ( 0x200000, 0x100000,0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d94-19.bin", 0x100000, 0x40000, CRC(c93dbcf4) SHA1(413520e652d809651aff9b1b74e6353112d34c12) ) /* Over dump?? 0x20000-0x3ffff == 0xFF */
ROM_LOAD16_BYTE("d94-20.bin", 0x100001, 0x40000, CRC(f232bf64) SHA1(bbfeae0785fc49c12aa6d9b1bd6ff7c8515f8fe7) ) /* Over dump?? 0x20000-0x3ffff == 0xFF */
@@ -2361,7 +2361,7 @@ ROM_START( hthero95u )
ROM_LOAD ("d94-12.bin", 0x300000, 0x100000, CRC(47064189) SHA1(99ceeb326dcc2e1c3acba8ac14d94dcb17c6e032) )
ROM_FILL ( 0x200000, 0x100000,0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d94-19.bin", 0x100000, 0x40000, CRC(c93dbcf4) SHA1(413520e652d809651aff9b1b74e6353112d34c12) ) /* Over dump?? 0x20000-0x3ffff == 0xFF */
ROM_LOAD16_BYTE("d94-20.bin", 0x100001, 0x40000, CRC(f232bf64) SHA1(bbfeae0785fc49c12aa6d9b1bd6ff7c8515f8fe7) ) /* Over dump?? 0x20000-0x3ffff == 0xFF */
@@ -2387,7 +2387,7 @@ ROM_START( qtheater )
ROM_LOAD16_BYTE("d95-05.45", 0x000001, 0x200000, CRC(1a1a852b) SHA1(89827485a31af4e2457775a5d16f747a764b6d67) )
ROM_FILL ( 0x400000, 0x400000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("d95-07.32", 0x100000, 0x40000, CRC(3c201d70) SHA1(89fe4d363f4e1a847ba7d2894a2092708b287a33) )
ROM_LOAD16_BYTE("d95-08.33", 0x100001, 0x40000, CRC(01c23354) SHA1(7b332edc844b1b1c1513e879215089987645fa3f) )
@@ -2415,7 +2415,7 @@ ROM_START( spcinv95u )
ROM_LOAD ("e06-06", 0x300000, 0x100000, CRC(9380db3c) SHA1(83f5a46a01b9c15499e0dc2222df496d26baa0d4) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e06-09.32", 0x100000, 0x40000, CRC(9bcafc87) SHA1(10b3f6da00a41550fe6a705232f0e33fda3c7e7c) )
ROM_LOAD16_BYTE("e06-10.33", 0x100001, 0x40000, CRC(b752b61f) SHA1(e948a8af19c70ba8b8e908c869bc88ed0cac8420) )
@@ -2450,7 +2450,7 @@ ROM_START( spcinv95 )
ROM_LOAD ("e06-06", 0x300000, 0x100000, CRC(9380db3c) SHA1(83f5a46a01b9c15499e0dc2222df496d26baa0d4) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e06-09.32", 0x100000, 0x40000, CRC(9bcafc87) SHA1(10b3f6da00a41550fe6a705232f0e33fda3c7e7c) )
ROM_LOAD16_BYTE("e06-10.33", 0x100001, 0x40000, CRC(b752b61f) SHA1(e948a8af19c70ba8b8e908c869bc88ed0cac8420) )
@@ -2485,7 +2485,7 @@ ROM_START( akkanvdr )
ROM_LOAD ("e06-06", 0x300000, 0x100000, CRC(9380db3c) SHA1(83f5a46a01b9c15499e0dc2222df496d26baa0d4) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e06-09.32", 0x100000, 0x40000, CRC(9bcafc87) SHA1(10b3f6da00a41550fe6a705232f0e33fda3c7e7c) )
ROM_LOAD16_BYTE("e06-10.33", 0x100001, 0x40000, CRC(b752b61f) SHA1(e948a8af19c70ba8b8e908c869bc88ed0cac8420) )
@@ -2598,7 +2598,7 @@ ROM_START( elvactr )
ROM_LOAD ("e02-06.43", 0x600000, 0x200000, CRC(4c8726e9) SHA1(8ce2320a087f43c49428a39dafffec8c40d61b03) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e02-13.32", 0x100000, 0x40000, CRC(80932702) SHA1(c468234d03aa31b2aa0c3bd6bec32034216c2ae4) )
ROM_LOAD16_BYTE("e02-14.33", 0x100001, 0x40000, CRC(706671a5) SHA1(1ac90647d617e73f12a67274a025ae43a6b3a316) )
@@ -2635,7 +2635,7 @@ ROM_START( elvactrj )
ROM_LOAD ("e02-06.43", 0x600000, 0x200000, CRC(4c8726e9) SHA1(8ce2320a087f43c49428a39dafffec8c40d61b03) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e02-13.32", 0x100000, 0x40000, CRC(80932702) SHA1(c468234d03aa31b2aa0c3bd6bec32034216c2ae4) )
ROM_LOAD16_BYTE("e02-14.33", 0x100001, 0x40000, CRC(706671a5) SHA1(1ac90647d617e73f12a67274a025ae43a6b3a316) )
@@ -2663,7 +2663,7 @@ ROM_START( elvact2u )
ROM_LOAD ("e02-06.43", 0x600000, 0x200000, CRC(4c8726e9) SHA1(8ce2320a087f43c49428a39dafffec8c40d61b03) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e02-13.32", 0x100000, 0x40000, CRC(80932702) SHA1(c468234d03aa31b2aa0c3bd6bec32034216c2ae4) )
ROM_LOAD16_BYTE("e02-14.33", 0x100001, 0x40000, CRC(706671a5) SHA1(1ac90647d617e73f12a67274a025ae43a6b3a316) )
@@ -2692,7 +2692,7 @@ ROM_START( twinqix )
ROM_LOAD16_BYTE("scr0-4.b03", 0x300000, 0x080000, CRC(d32280fe) SHA1(56b120128c5e4b8c6598a1de51269e6702a63175) )
ROM_LOAD16_BYTE("scr0-5.b02", 0x300001, 0x080000, CRC(fdd1a85b) SHA1(1d94a4858baef3e78c456049dc58249a574205fe) )
- ROM_REGION(0x180000, "audiocpu", 0) /* sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* sound CPU */
ROM_LOAD16_BYTE("spr0-1.b66", 0x100000, 0x40000, CRC(4b20e99d) SHA1(faf184daea0f1131bafa50edb48bd470d4c0b141) )
ROM_LOAD16_BYTE("spr0-0.b65", 0x100001, 0x40000, CRC(2569eb30) SHA1(ec804131025e600198cd8342925823340e7ef458) )
@@ -2734,7 +2734,7 @@ ROM_START( quizhuhu )
ROM_LOAD ("e08-10.43", 0x300000, 0x100000, CRC(60abc71b) SHA1(f4aa906920c6134c33a4dfb51724f3adbd3d7de4) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e08-18.32", 0x100000, 0x20000, CRC(e695497e) SHA1(9d845b4c0bd9b40471fb4b5ab2f9240058bc324f) )
ROM_LOAD16_BYTE("e08-17.33", 0x100001, 0x20000, CRC(fafc7e4e) SHA1(26f46d5900fbf26d25651e7e818e486fc7a878ec) )
@@ -2764,7 +2764,7 @@ ROM_START( pbobble2 )
ROM_LOAD ("e10-05.rom", 0x300000, 0x100000, CRC(81266151) SHA1(aa3b144f32995425db97efce440e234a3c7a6715) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e10-12.32", 0x100000, 0x40000, CRC(b92dc8ad) SHA1(0c1428d313507b1ae5a2af3b2fbaaa5650135e1e) )
ROM_LOAD16_BYTE("e10-13.33", 0x100001, 0x40000, CRC(87842c13) SHA1(d15b47c7430e677ae172f86fd5be595e4fe72e42) )
@@ -2796,7 +2796,7 @@ ROM_START( pbobble2o )
ROM_LOAD ("e10-05.rom", 0x300000, 0x100000, CRC(81266151) SHA1(aa3b144f32995425db97efce440e234a3c7a6715) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e10-12.32", 0x100000, 0x40000, CRC(b92dc8ad) SHA1(0c1428d313507b1ae5a2af3b2fbaaa5650135e1e) )
ROM_LOAD16_BYTE("e10-13.33", 0x100001, 0x40000, CRC(87842c13) SHA1(d15b47c7430e677ae172f86fd5be595e4fe72e42) )
@@ -2823,7 +2823,7 @@ ROM_START( pbobble2j )
ROM_LOAD ("e10-05.rom", 0x300000, 0x100000, CRC(81266151) SHA1(aa3b144f32995425db97efce440e234a3c7a6715) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e10-12.32", 0x100000, 0x40000, CRC(b92dc8ad) SHA1(0c1428d313507b1ae5a2af3b2fbaaa5650135e1e) )
ROM_LOAD16_BYTE("e10-13.33", 0x100001, 0x40000, CRC(87842c13) SHA1(d15b47c7430e677ae172f86fd5be595e4fe72e42) )
@@ -2850,7 +2850,7 @@ ROM_START( pbobble2u )
ROM_LOAD ("e10-05.rom", 0x300000, 0x100000, CRC(81266151) SHA1(aa3b144f32995425db97efce440e234a3c7a6715) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e10-16.32", 0x100000, 0x40000, CRC(765ce77a) SHA1(e2723bd6238da91d28307081909a7172a1825c83) )
ROM_LOAD16_BYTE("e10-17.33", 0x100001, 0x40000, CRC(0aec3b1e) SHA1(a76a020cefcfbf86b0d893a6eb8ff93cb571abeb) )
@@ -2877,7 +2877,7 @@ ROM_START( pbobble2x )
ROM_LOAD ("e10-05.rom", 0x300000, 0x100000, CRC(81266151) SHA1(aa3b144f32995425db97efce440e234a3c7a6715) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e10-30.32", 0x100000, 0x40000, CRC(bb090c1e) SHA1(af2ff23d6f9bd56c25530cb9bf9f452b6f5210f5) )
ROM_LOAD16_BYTE("e10-31.33", 0x100001, 0x40000, CRC(f4b88d65) SHA1(c74dcb4bed979039fad1d5c7528c14ce4db1d5ec) )
@@ -2912,7 +2912,7 @@ ROM_START( gekiridn )
ROM_LOAD ("e11-06.ic43", 0x600000, 0x200000, CRC(200ce305) SHA1(c80a0b96510913a6411e6763fb72bf413fb792da) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e11-13.ic32", 0x100000, 0x40000, CRC(f5c5486a) SHA1(4091f3ddb1e6cbc9dc89485e1e784a4b6fa191b7) )
ROM_LOAD16_BYTE("e11-14.ic33", 0x100001, 0x40000, CRC(7fa10f96) SHA1(50efefd890535e952022a494c5b4e9b33bb90fad) )
@@ -2940,7 +2940,7 @@ ROM_START( gekiridnj )
ROM_LOAD ("e11-06.ic43", 0x600000, 0x200000, CRC(200ce305) SHA1(c80a0b96510913a6411e6763fb72bf413fb792da) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e11-13.ic32", 0x100000, 0x40000, CRC(f5c5486a) SHA1(4091f3ddb1e6cbc9dc89485e1e784a4b6fa191b7) )
ROM_LOAD16_BYTE("e11-14.ic33", 0x100001, 0x40000, CRC(7fa10f96) SHA1(50efefd890535e952022a494c5b4e9b33bb90fad) )
@@ -2974,7 +2974,7 @@ ROM_START( tcobra2 )
ROM_LOAD16_BYTE("e15-07.ic44", 0x400001, 0x100000, CRC(8164f7ee) SHA1(4550521f820e93ec08b86d148135966d016cbf22) )
ROM_FILL ( 0x600000, 0x600000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e15-15.ic32", 0x100000, 0x20000, CRC(22126dfb) SHA1(a1af17e5c3440f1bab50d79f92c251f1a4536ca0) )
ROM_LOAD16_BYTE("e15-16.ic33", 0x100001, 0x20000, CRC(f8b58ea0) SHA1(c9e196620765efc4c7b535793a5d1f586698ce55) )
@@ -3011,7 +3011,7 @@ ROM_START( tcobra2u )
ROM_LOAD16_BYTE("e15-07.ic44", 0x400001, 0x100000, CRC(8164f7ee) SHA1(4550521f820e93ec08b86d148135966d016cbf22) )
ROM_FILL ( 0x600000, 0x600000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e15-15.ic32", 0x100000, 0x20000, CRC(22126dfb) SHA1(a1af17e5c3440f1bab50d79f92c251f1a4536ca0) )
ROM_LOAD16_BYTE("e15-16.ic33", 0x100001, 0x20000, CRC(f8b58ea0) SHA1(c9e196620765efc4c7b535793a5d1f586698ce55) )
@@ -3048,7 +3048,7 @@ ROM_START( ktiger2 )
ROM_LOAD16_BYTE("e15-07.ic44", 0x400001, 0x100000, CRC(8164f7ee) SHA1(4550521f820e93ec08b86d148135966d016cbf22) )
ROM_FILL ( 0x600000, 0x600000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e15-15.ic32", 0x100000, 0x20000, CRC(22126dfb) SHA1(a1af17e5c3440f1bab50d79f92c251f1a4536ca0) )
ROM_LOAD16_BYTE("e15-16.ic33", 0x100001, 0x20000, CRC(f8b58ea0) SHA1(c9e196620765efc4c7b535793a5d1f586698ce55) )
@@ -3082,7 +3082,7 @@ ROM_START( bubblem )
ROM_LOAD ("e21-05.rom", 0x300000, 0x100000, CRC(07eab58f) SHA1(ae2d7b839b39d88d11652df74804a39230674467) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* Sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* Sound CPU */
ROM_LOAD16_BYTE("e21-12.32", 0x100000, 0x40000, CRC(34093de1) SHA1(d69d6b5f10b8fe86f727d739ed5aecceb15e01f7) )
ROM_LOAD16_BYTE("e21-13.33", 0x100001, 0x40000, CRC(9e9ec437) SHA1(b0265b688846c642d240b2f3677d2330d31eaa87) )
@@ -3112,7 +3112,7 @@ ROM_START( bubblemj )
ROM_LOAD ("e21-05.rom", 0x300000, 0x100000, CRC(07eab58f) SHA1(ae2d7b839b39d88d11652df74804a39230674467) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* Sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* Sound CPU */
ROM_LOAD16_BYTE("e21-12.32", 0x100000, 0x40000, CRC(34093de1) SHA1(d69d6b5f10b8fe86f727d739ed5aecceb15e01f7) )
ROM_LOAD16_BYTE("e21-13.33", 0x100001, 0x40000, CRC(9e9ec437) SHA1(b0265b688846c642d240b2f3677d2330d31eaa87) )
@@ -3142,7 +3142,7 @@ ROM_START( cleopatr )
ROM_LOAD ("e28-04.bin", 0x300000, 0x100000, CRC(57aef029) SHA1(5c07209015d4749d1ffb3e9c1a890e6cfeec8cb0) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x140000, "audiocpu", 0) /* Sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* Sound CPU */
ROM_LOAD16_BYTE("e28-11.bin", 0x100000, 0x20000, CRC(01a06950) SHA1(94d22cd839f9027e9d45264c366e0cb5d698e0b6) )
ROM_LOAD16_BYTE("e28-12.bin", 0x100001, 0x20000, CRC(dc19260f) SHA1(fa0ca03a236326652e4f9898d07cd837c1507a9d) )
@@ -3168,7 +3168,7 @@ ROM_START( pbobble3 )
ROM_LOAD ("e29-06.rom", 0x300000, 0x100000, CRC(c16184f8) SHA1(ded417d9d116b5a2f7518fa404bc2dda1c6a6366) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 code */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 code */
ROM_LOAD16_BYTE("e29-13.rom", 0x100000, 0x40000, CRC(1ef551ef) SHA1(527defe8f35314304adb4b483285b08cd6ebe865) )
ROM_LOAD16_BYTE("e29-14.rom", 0x100001, 0x40000, CRC(7ee7e688) SHA1(d65aa9c449e1d64f10d1be9727a9d93ab1571e65) )
@@ -3197,7 +3197,7 @@ ROM_START( pbobble3u )
ROM_LOAD ("e29-06.rom", 0x300000, 0x100000, CRC(c16184f8) SHA1(ded417d9d116b5a2f7518fa404bc2dda1c6a6366) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 code */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 code */
ROM_LOAD16_BYTE("e29-13.rom", 0x100000, 0x40000, CRC(1ef551ef) SHA1(527defe8f35314304adb4b483285b08cd6ebe865) )
ROM_LOAD16_BYTE("e29-14.rom", 0x100001, 0x40000, CRC(7ee7e688) SHA1(d65aa9c449e1d64f10d1be9727a9d93ab1571e65) )
@@ -3226,7 +3226,7 @@ ROM_START( pbobble3j )
ROM_LOAD ("e29-06.ic43", 0x300000, 0x100000, CRC(c16184f8) SHA1(ded417d9d116b5a2f7518fa404bc2dda1c6a6366) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 code */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 code */
ROM_LOAD16_BYTE("e29-13.ic32", 0x100000, 0x40000, CRC(1ef551ef) SHA1(527defe8f35314304adb4b483285b08cd6ebe865) )
ROM_LOAD16_BYTE("e29-14.ic33", 0x100001, 0x40000, CRC(7ee7e688) SHA1(d65aa9c449e1d64f10d1be9727a9d93ab1571e65) )
@@ -3251,7 +3251,7 @@ ROM_START( arkretrn )
ROM_LOAD32_BYTE("e36-09.18", 0x000002, 0x040000, CRC(f16985e0) SHA1(a74cfee8f958e7a32354d4353eeb199a7fb1ce64) )
ROM_LOAD32_BYTE("e36-15.17", 0x000003, 0x040000, CRC(4467ff37) SHA1(509a0d516def02d86d81b9868de0d9593539e65c) )
- ROM_REGION(0x180000, "audiocpu", 0) /* Sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* Sound CPU */
ROM_LOAD16_BYTE("e36-12.32", 0x100000, 0x40000, CRC(3bae39be) SHA1(777142ecc24799b934ed51ac4cd8700bb6da7e3c) )
ROM_LOAD16_BYTE("e36-13.33", 0x100001, 0x40000, CRC(94448e82) SHA1(d7766490318623be770545918391c5e6144dd619) )
@@ -3285,7 +3285,7 @@ ROM_START( arkretrnu )
ROM_LOAD32_BYTE("e36-09.18", 0x000002, 0x040000, CRC(f16985e0) SHA1(a74cfee8f958e7a32354d4353eeb199a7fb1ce64) )
ROM_LOAD32_BYTE("e36-14.17", 0x000003, 0x040000, CRC(3360cfa1) SHA1(b06afc392b3864a895aed3a406d5d9886b1d0894) )
- ROM_REGION(0x180000, "audiocpu", 0) /* Sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* Sound CPU */
ROM_LOAD16_BYTE("e36-12.32", 0x100000, 0x40000, CRC(3bae39be) SHA1(777142ecc24799b934ed51ac4cd8700bb6da7e3c) )
ROM_LOAD16_BYTE("e36-13.33", 0x100001, 0x40000, CRC(94448e82) SHA1(d7766490318623be770545918391c5e6144dd619) )
@@ -3319,7 +3319,7 @@ ROM_START( arkretrnj )
ROM_LOAD32_BYTE("e36-09.18", 0x000002, 0x040000, CRC(f16985e0) SHA1(a74cfee8f958e7a32354d4353eeb199a7fb1ce64) )
ROM_LOAD32_BYTE("e36-08.17", 0x000003, 0x040000, CRC(aa699e1b) SHA1(6bde0759940e0f238e4fa5bd228115574ff927d8) )
- ROM_REGION(0x180000, "audiocpu", 0) /* Sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* Sound CPU */
ROM_LOAD16_BYTE("e36-12.32", 0x100000, 0x40000, CRC(3bae39be) SHA1(777142ecc24799b934ed51ac4cd8700bb6da7e3c) )
ROM_LOAD16_BYTE("e36-13.33", 0x100001, 0x40000, CRC(94448e82) SHA1(d7766490318623be770545918391c5e6144dd619) )
@@ -3371,7 +3371,7 @@ ROM_START( kirameki )
ROM_LOAD ("e44-09.42", 0xb00000, 0x100000, CRC(a8e68eb7) SHA1(843bbb8a61bd4b9cbb14c7242281ce0c83c432ff) )
ROM_FILL ( 0x600000, 0x300000, 0x00 )
- ROM_REGION(0x400000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x400000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e44-20.51", 0x100000, 0x080000, CRC(4df7e051) SHA1(db0f5758458764a1c04116d5d5bbb20d4d36c875) )
ROM_LOAD16_BYTE("e44-21.52", 0x100001, 0x080000, CRC(d31b94b8) SHA1(41ee381d10254dc6e7163c5f353568539a96fc20) )
ROM_LOAD16_WORD_SWAP("e44-15.53", 0x200000, 0x200000, CRC(5043b608) SHA1(a328b8cc27ba1620a75a17cdf8571e217c42b9fd) ) /* Banked data */
@@ -3403,7 +3403,7 @@ ROM_START( puchicar )
ROM_LOAD ("e46-10", 0x300000, 0x100000, CRC(1999b76a) SHA1(83d6d2efe250bf3b119982bbf701f9b9d856af2d) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e46-21", 0x100000, 0x40000, CRC(b466cff6) SHA1(0757984f15a6ac9939c1e8625d5b9bfcbc788acc) )
ROM_LOAD16_BYTE("e46-22", 0x100001, 0x40000, CRC(c67b767e) SHA1(19f3db6615d7a6ed4d2636b6beabe2f3ed6d0c38) )
@@ -3443,7 +3443,7 @@ ROM_START( puchicarj )
ROM_LOAD ("e46-10", 0x300000, 0x100000, CRC(1999b76a) SHA1(83d6d2efe250bf3b119982bbf701f9b9d856af2d) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e46-19", 0x100000, 0x40000, CRC(2624eba0) SHA1(ba0b13bda241c648c7f8520106acd8c0c888fe29) )
ROM_LOAD16_BYTE("e46-20", 0x100001, 0x40000, CRC(065e934f) SHA1(0ec1b5ae33b1c43776b9327c9d380787d64ed5f9) )
@@ -3479,7 +3479,7 @@ ROM_START( pbobble4 )
ROM_LOAD ("e49-06", 0x300000, 0x100000, CRC(ec85f7ce) SHA1(9fead68c38fc9ca84d34d70343b13665978c362b) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 code */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 code */
ROM_LOAD16_BYTE("e49-13.32", 0x100000, 0x40000, CRC(83536f7f) SHA1(2252cee00ae260954cc76d92af8eb2a87d23cbfb) )
ROM_LOAD16_BYTE("e49-14.33", 0x100001, 0x40000, CRC(19815bdb) SHA1(38ad682236c7df0710055dd8dbdec30d5da0839d) )
@@ -3515,7 +3515,7 @@ ROM_START( pbobble4j )
ROM_LOAD ("e49-06", 0x300000, 0x100000, CRC(ec85f7ce) SHA1(9fead68c38fc9ca84d34d70343b13665978c362b) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 code */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 code */
ROM_LOAD16_BYTE("e49-13.32", 0x100000, 0x40000, CRC(83536f7f) SHA1(2252cee00ae260954cc76d92af8eb2a87d23cbfb) )
ROM_LOAD16_BYTE("e49-14.33", 0x100001, 0x40000, CRC(19815bdb) SHA1(38ad682236c7df0710055dd8dbdec30d5da0839d) )
@@ -3551,7 +3551,7 @@ ROM_START( pbobble4u )
ROM_LOAD ("e49-06", 0x300000, 0x100000, CRC(ec85f7ce) SHA1(9fead68c38fc9ca84d34d70343b13665978c362b) )
ROM_FILL ( 0x200000, 0x100000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 code */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 code */
ROM_LOAD16_BYTE("e49-13.32", 0x100000, 0x40000, CRC(83536f7f) SHA1(2252cee00ae260954cc76d92af8eb2a87d23cbfb) )
ROM_LOAD16_BYTE("e49-14.33", 0x100001, 0x40000, CRC(19815bdb) SHA1(38ad682236c7df0710055dd8dbdec30d5da0839d) )
@@ -3588,7 +3588,7 @@ ROM_START( popnpopj )
ROM_LOAD ("e51-06.43", 0x600000, 0x200000, CRC(c240d6c8) SHA1(6f3b5224b7eb8783893375d432bbbfc37f81c230) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e51-13.32", 0x100000, 0x40000, CRC(3b9e3986) SHA1(26340bda0ad2ea580e2395135617966676a71ad5) )
ROM_LOAD16_BYTE("e51-14.33", 0x100001, 0x40000, CRC(1f9a5015) SHA1(5da38c5fe2a50bcde6bd46ab1cb9a56dbab1a882) )
@@ -3623,7 +3623,7 @@ ROM_START( popnpop )
ROM_LOAD ("e51-06.43", 0x600000, 0x200000, CRC(c240d6c8) SHA1(6f3b5224b7eb8783893375d432bbbfc37f81c230) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e51-13.32", 0x100000, 0x40000, CRC(3b9e3986) SHA1(26340bda0ad2ea580e2395135617966676a71ad5) )
ROM_LOAD16_BYTE("e51-14.33", 0x100001, 0x40000, CRC(1f9a5015) SHA1(5da38c5fe2a50bcde6bd46ab1cb9a56dbab1a882) )
@@ -3658,7 +3658,7 @@ ROM_START( popnpopu )
ROM_LOAD ("e51-06.43", 0x600000, 0x200000, CRC(c240d6c8) SHA1(6f3b5224b7eb8783893375d432bbbfc37f81c230) )
ROM_FILL ( 0x400000, 0x200000, 0x00 )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e51-13.32", 0x100000, 0x40000, CRC(3b9e3986) SHA1(26340bda0ad2ea580e2395135617966676a71ad5) )
ROM_LOAD16_BYTE("e51-14.33", 0x100001, 0x40000, CRC(1f9a5015) SHA1(5da38c5fe2a50bcde6bd46ab1cb9a56dbab1a882) )
@@ -3737,7 +3737,7 @@ ROM_START( landmakr )
- ROM_REGION(0x140000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x140000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("e61-14.32", 0x100000, 0x20000, CRC(b905f4a7) SHA1(613b954e3e129fd44b4ce64958f16e5636012d6e) )
ROM_LOAD16_BYTE("e61-15.33", 0x100001, 0x20000, CRC(87909869) SHA1(7b90c23899a673966cac3352d375d17b83e66596) )
@@ -3787,7 +3787,7 @@ ROM_START( landmakrp )
- ROM_REGION(0x180000, "audiocpu", 0) /* 68000 sound CPU */
+ ROM_REGION(0x180000, "taito_en:audiocpu", 0) /* 68000 sound CPU */
ROM_LOAD16_BYTE("spro-1.66", 0x100000, 0x40000, CRC(18961bbb) SHA1(df054def35a49c0754356c15ec15336cbf28b063) )
ROM_LOAD16_BYTE("spro-0.65", 0x100001, 0x40000, CRC(2c64557a) SHA1(768007162d5d2cbe650c735bc1af2c10ed13b046) )
diff --git a/src/mame/drivers/taitojc.cpp b/src/mame/drivers/taitojc.cpp
index df177c2aa40..01e7a6a86b4 100644
--- a/src/mame/drivers/taitojc.cpp
+++ b/src/mame/drivers/taitojc.cpp
@@ -1123,7 +1123,7 @@ static MACHINE_CONFIG_START( taitojc, taitojc_state )
MCFG_DEVICE_ADD("tc0780fpa", TC0780FPA, 0)
/* sound hardware */
- MCFG_FRAGMENT_ADD(taito_en_sound)
+ MCFG_DEVICE_ADD("taito_en", TAITO_EN, 0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( dendego, taitojc )
@@ -1201,7 +1201,7 @@ ROM_START( sidebs ) /* Side by Side ver 2.7 J */
ROM_LOAD32_BYTE( "e23-49.ic38", 0x000002, 0x80000, CRC(b2fdded3) SHA1(8e0f2d2d967a2e6b7d1954548941bc6257799d2d) )
ROM_LOAD32_BYTE( "e23-50.ic39", 0x000003, 0x80000, CRC(76510731) SHA1(b8b9836fa121d2028e0218f4d439af0d7dae295e) )
- ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e23-23.ic30", 0x100001, 0x40000, CRC(cffbffe5) SHA1(c01ac44390dacab4b49bb066a46d81a184b07a1e) )
ROM_LOAD16_BYTE( "e23-24.ic31", 0x100000, 0x40000, CRC(64bae246) SHA1(f929f664881487615b1259db43a0721135830274) )
@@ -1243,7 +1243,7 @@ ROM_START( sidebsja ) /* Side by Side ver 2.5 J */
ROM_LOAD32_BYTE( "e23-21.ic38", 0x000002, 0x80000, CRC(357f2e10) SHA1(226922f2649d9ac78d253200f5bbff4fb3ac74c8) )
ROM_LOAD32_BYTE( "e23-22.ic39", 0x000003, 0x80000, CRC(c793ba43) SHA1(0ddbf625320968b4e18309d8e732ce4a2b9f4bce) )
- ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e23-23.ic30", 0x100001, 0x40000, CRC(cffbffe5) SHA1(c01ac44390dacab4b49bb066a46d81a184b07a1e) )
ROM_LOAD16_BYTE( "e23-24.ic31", 0x100000, 0x40000, CRC(64bae246) SHA1(f929f664881487615b1259db43a0721135830274) )
@@ -1285,7 +1285,7 @@ ROM_START( sidebs2 )
ROM_LOAD32_BYTE( "sbs2_p2.ic38", 0x000002, 0x80000, CRC(ade07d7e) SHA1(a5200ea3ddbfef37d302e7cb27015b6f6aa8a7c1) )
ROM_LOAD32_BYTE( "sbs2_p3.ic39", 0x000003, 0x80000, CRC(94e943d6) SHA1(2bc7332526b969e5084b9d73063f1c0d18ec5181) )
- ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e38-19.ic30", 0x100001, 0x40000, CRC(3f50cb7b) SHA1(76af65c9b74ede843a3182f79cecda8c3e3febe6) )
ROM_LOAD16_BYTE( "e38-20.ic31", 0x100000, 0x40000, CRC(d01340e7) SHA1(76ee48d644dc1ec415d47e0df4864c64ac928b9d) )
@@ -1351,7 +1351,7 @@ ROM_START( sidebs2j ) /* This version has the sub-title of "Evoluzione" */
ROM_LOAD32_BYTE( "e38-25+.ic38", 0x000002, 0x80000, CRC(f1a8a4df) SHA1(e4cf75969fb0503df2290522194b097f5cb983a3) ) /* Actual label E38-25* */
ROM_LOAD32_BYTE( "e38-26+.ic39", 0x000003, 0x80000, CRC(b550fbf2) SHA1(a0a461af7e71c6ad6468cfdee2bc7161ae31bbfb) ) /* Actual label E38-26* */
- ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e38-19.ic30", 0x100001, 0x040000, CRC(3f50cb7b) SHA1(76af65c9b74ede843a3182f79cecda8c3e3febe6) )
ROM_LOAD16_BYTE( "e38-20.ic31", 0x100000, 0x040000, CRC(d01340e7) SHA1(76ee48d644dc1ec415d47e0df4864c64ac928b9d) )
@@ -1417,7 +1417,7 @@ ROM_START( dendego )
ROM_LOAD32_BYTE( "e35-23.ic38", 0x000002, 0x80000, CRC(1da4acd6) SHA1(2ce11c5f37287526bb1d39185f793d79fc73d5b5) )
ROM_LOAD32_BYTE( "e35-24.ic39", 0x000003, 0x80000, CRC(0318afb0) SHA1(9c86330c85536fb1a093ed40610b1c3ddb7813c3) )
- ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e35-25.ic30", 0x100001, 0x40000, CRC(8104de13) SHA1(e518fbaf91704cf5cb8ffbb4833e3adba8c18658) )
ROM_LOAD16_BYTE( "e35-26.ic31", 0x100000, 0x40000, CRC(61821cc9) SHA1(87cd5bd3bb22c9f4ca4b6d96f75434d48418321b) )
@@ -1464,7 +1464,7 @@ ROM_START( dendegox )
ROM_LOAD32_BYTE( "e35-32.ic38", 0x000002, 0x80000, CRC(66be29d5) SHA1(e73937f5bda709a606d5cdf7316b26051317c22f) ) //ex
ROM_LOAD32_BYTE( "e35-33.ic39", 0x000003, 0x80000, CRC(76a6bde2) SHA1(ca456ec3f0410777362e3eb977ae156866271bd5) ) //ex
- ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e35-25.ic30", 0x100001, 0x40000, CRC(8104de13) SHA1(e518fbaf91704cf5cb8ffbb4833e3adba8c18658) )
ROM_LOAD16_BYTE( "e35-26.ic31", 0x100000, 0x40000, CRC(61821cc9) SHA1(87cd5bd3bb22c9f4ca4b6d96f75434d48418321b) )
@@ -1511,7 +1511,7 @@ ROM_START( dendego2 )
ROM_LOAD32_BYTE( "e52-27-1.ic38", 0x000002, 0x80000, CRC(25f0d81d) SHA1(c33c3e6b1ad49b63b31a2f1227d43141faef4eab) )
ROM_LOAD32_BYTE( "e52-28-1.ic39", 0x000003, 0x80000, CRC(e76ff6a1) SHA1(674c00f19df034de8134d48a8c2d2e42f7eb1be7) )
- ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e52-29.ic30", 0x100001, 0x40000, CRC(6010162a) SHA1(f14920b26887f5387b3e261b63573d850195982a) )
ROM_LOAD16_BYTE( "e52-30.ic31", 0x100000, 0x40000, CRC(2881af4a) SHA1(5918f6508b3cd3bef3751e3bda2a48152569c1cd) )
@@ -1562,7 +1562,7 @@ ROM_START( dendego23k )
ROM_LOAD32_BYTE( "e52-37.ic38", 0x000002, 0x80000, CRC(65b8ef31) SHA1(b61b391b160e81715ff355aeef65026d7e4dd9af) ) //2ex
ROM_LOAD32_BYTE( "e52-38.ic39", 0x000003, 0x80000, CRC(cf61f321) SHA1(c8493d2499afba673174b26044aca537e384916c) ) //2ex
- ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e52-29.ic30", 0x100001, 0x40000, CRC(6010162a) SHA1(f14920b26887f5387b3e261b63573d850195982a) )
ROM_LOAD16_BYTE( "e52-30.ic31", 0x100000, 0x40000, CRC(2881af4a) SHA1(5918f6508b3cd3bef3751e3bda2a48152569c1cd) )
@@ -1619,7 +1619,7 @@ ROM_START( landgear ) /* Landing Gear Ver 4.2 O */
ROM_LOAD32_BYTE( "e17-39.ic38", 0x000002, 0x80000, CRC(ccbbcc7b) SHA1(52d91fcaa1683d2679ed4f14ebc11dc487527898) )
ROM_LOAD32_BYTE( "e17-40.ic39", 0x000003, 0x80000, CRC(ce9231d2) SHA1(d2c3955d910dbd0cac95862047c58791af626722) ) /* 0x7ffff == 03 - One byte difference from E17-36.ic39 */
- ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e17-21.ic30", 0x100001, 0x40000, CRC(8b54f46c) SHA1(c6d16197ab7768945becf9b49b6d286113b4d1cc) )
ROM_LOAD16_BYTE( "e17-22.ic31", 0x100000, 0x40000, CRC(b96f6cd7) SHA1(0bf086e5dc6d524cd00e33df3e3d2a8b9231eb72) )
@@ -1673,7 +1673,7 @@ ROM_START( landgearj ) /* Landing Gear Ver 4.2 J */
ROM_LOAD32_BYTE( "e17-35.ic38", 0x000002, 0x80000, CRC(ccbbcc7b) SHA1(52d91fcaa1683d2679ed4f14ebc11dc487527898) ) /* matches E17-39.ic38, verified correct */
ROM_LOAD32_BYTE( "e17-36.ic39", 0x000003, 0x80000, CRC(209c50fe) SHA1(42e0eaa182730e260ee4361d936b133ed85f8221) ) /* 0x7ffff == 01 - One byte difference from E17-40.ic39 */
- ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e17-21.ic30", 0x100001, 0x40000, CRC(8b54f46c) SHA1(c6d16197ab7768945becf9b49b6d286113b4d1cc) )
ROM_LOAD16_BYTE( "e17-22.ic31", 0x100000, 0x40000, CRC(b96f6cd7) SHA1(0bf086e5dc6d524cd00e33df3e3d2a8b9231eb72) )
@@ -1727,7 +1727,7 @@ ROM_START( landgeara ) /* Landing Gear Ver 3.1 O, is there an alternate set with
ROM_LOAD32_BYTE( "e17-26+.ic38", 0x000002, 0x80000, CRC(3032bbe7) SHA1(201c61f236c81928f50815d8ad12e312a3c7427b) ) /* Actually labeled E17-26* */
ROM_LOAD32_BYTE( "e17-27+.ic39", 0x000003, 0x80000, CRC(e936224c) SHA1(8699cbb756844d12b7585e66198b7faed2af8e24) ) /* Actually labeled E17-27* */
- ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e17-21.ic30", 0x100001, 0x40000, CRC(8b54f46c) SHA1(c6d16197ab7768945becf9b49b6d286113b4d1cc) )
ROM_LOAD16_BYTE( "e17-22.ic31", 0x100000, 0x40000, CRC(b96f6cd7) SHA1(0bf086e5dc6d524cd00e33df3e3d2a8b9231eb72) )
@@ -1781,7 +1781,7 @@ ROM_START( landgearja ) /* Landing Gear Ver 3.0 J, is there an alternate set wit
ROM_LOAD32_BYTE( "e17-19+.ic38", 0x000002, 0x80000, CRC(1c487204) SHA1(f6c8ddd80c57ed63b0785b240c4b00416a1a87f3) ) /* Actually labeled E17-19* */
ROM_LOAD32_BYTE( "e17-20+.ic39", 0x000003, 0x80000, CRC(1311234f) SHA1(5211cae0d6dc1710bc669bcf81a247b01f8aebff) ) /* Actually labeled E17-20* */
- ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e17-21.ic30", 0x100001, 0x40000, CRC(8b54f46c) SHA1(c6d16197ab7768945becf9b49b6d286113b4d1cc) )
ROM_LOAD16_BYTE( "e17-22.ic31", 0x100000, 0x40000, CRC(b96f6cd7) SHA1(0bf086e5dc6d524cd00e33df3e3d2a8b9231eb72) )
@@ -1835,7 +1835,7 @@ ROM_START( dangcurv )
ROM_LOAD32_BYTE( "e09-25.ic38", 0x000002, 0x80000, CRC(aa233404) SHA1(a2b14e54eb1b5f6d4ed9f289b30ecfa654f21c87) )
ROM_LOAD32_BYTE( "e09-26.ic39", 0x000003, 0x80000, CRC(78337271) SHA1(bd29de6a5b6db3baddecf82c3b6c8b366c64289e) )
- ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */
+ ROM_REGION( 0x180000, "taito_en:audiocpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "e09-27.ic30", 0x100001, 0x40000, CRC(6d54839c) SHA1(a28c9b0727128b82bb0fa71dc951e3f03ee45e1b) )
ROM_LOAD16_BYTE( "e09-28.ic31", 0x100000, 0x40000, CRC(566d7d83) SHA1(92661ccb631f843bf704c50d54fae28f6b5b272b) )
diff --git a/src/mame/drivers/tandy1t.cpp b/src/mame/drivers/tandy1t.cpp
index 3ba893c7610..8696eeff89c 100644
--- a/src/mame/drivers/tandy1t.cpp
+++ b/src/mame/drivers/tandy1t.cpp
@@ -32,39 +32,55 @@ Tandy 1000 (80386) variations:
1000RSX/1000RSX-HD 1M-9M RAM 25.0/8.0 MHz v01.10.00 */
#include "emu.h"
-#include "includes/genpc.h"
+#include "machine/genpc.h"
#include "machine/pckeybrd.h"
#include "machine/nvram.h"
#include "machine/pc_fdc.h"
+#include "machine/bankdev.h"
#include "video/pc_t1t.h"
#include "sound/sn76496.h"
#include "cpu/i86/i86.h"
#include "cpu/i86/i286.h"
-#include "bus/isa/isa.h"
-#include "bus/isa/isa_cards.h"
#include "softlist.h"
+class t1000_mb_device : public pc_noppi_mb_device
+{
+public:
+ // construction/destruction
+ t1000_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pc_noppi_mb_device(mconfig, tag, owner, clock) { }
+protected:
+ virtual void device_start() override;
+};
+
+void t1000_mb_device::device_start()
+{
+}
+
+const device_type T1000_MOTHERBOARD = &device_creator<t1000_mb_device>;
+
class tandy1000_state : public driver_device
{
public:
tandy1000_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
- , m_romcs0(*this, "romcs0")
- , m_romcs1(*this, "romcs1")
, m_biosbank(*this, "biosbank")
, m_keyboard(*this, "pc_keyboard")
- , m_mb(*this, "mb") { }
+ , m_mb(*this, "mb")
+ , m_video(*this, "pcvideo_t1000")
+ , m_ram(*this, RAM_TAG)
+ , m_vram_bank(0) { }
required_device<cpu_device> m_maincpu;
// Memory regions for the machines that support rom banking
- optional_memory_region m_romcs0;
- optional_memory_region m_romcs1;
- optional_memory_bank m_biosbank;
+ optional_device<address_map_bank_device> m_biosbank;
required_device<pc_keyboard_device> m_keyboard;
- required_device<pc_noppi_mb_device> m_mb;
+ required_device<t1000_mb_device> m_mb;
+ required_device<pcvideo_t1000_device> m_video;
+ required_device<ram_device> m_ram;
DECLARE_WRITE8_MEMBER ( pc_t1t_p37x_w );
DECLARE_READ8_MEMBER ( pc_t1t_p37x_r );
@@ -73,13 +89,18 @@ public:
DECLARE_READ8_MEMBER(tandy1000_pio_r);
DECLARE_READ8_MEMBER( tandy1000_bank_r );
DECLARE_WRITE8_MEMBER( tandy1000_bank_w );
+ DECLARE_WRITE8_MEMBER( nmi_vram_bank_w );
+ DECLARE_WRITE8_MEMBER( vram_bank_w );
+ DECLARE_READ8_MEMBER( vram_r );
+ DECLARE_WRITE8_MEMBER( vram_w );
+ DECLARE_WRITE8_MEMBER( devctrl_w );
+ DECLARE_READ8_MEMBER( unk_r );
int tandy1000_read_eeprom();
void tandy1000_write_eeprom(UINT8 data);
void tandy1000_set_bios_bank();
- DECLARE_DRIVER_INIT(t1000hx);
- DECLARE_DRIVER_INIT(t1000sl);
+ void machine_start() override;
DECLARE_MACHINE_RESET(tandy1000rl);
@@ -97,6 +118,7 @@ public:
UINT8 m_tandy_bios_bank; /* I/O port FFEAh */
UINT8 m_tandy_ppi_portb, m_tandy_ppi_portc;
+ UINT8 m_vram_bank;
};
/* tandy 1000 eeprom
@@ -294,39 +316,64 @@ READ8_MEMBER(tandy1000_state::tandy1000_pio_r)
return data;
}
+WRITE8_MEMBER( tandy1000_state::nmi_vram_bank_w )
+{
+ m_mb->nmi_enable_w(space, 0, data & 0x80);
+ vram_bank_w(space, 0, data & 0x1e);
+ m_video->disable_w((data & 1) ? ASSERT_LINE : CLEAR_LINE);
+}
-void tandy1000_state::tandy1000_set_bios_bank()
+WRITE8_MEMBER( tandy1000_state::vram_bank_w )
{
- UINT8 *p = nullptr;
+ m_vram_bank = (data >> 1) & 7;
+}
- assert( m_romcs0 != nullptr );
- assert( m_romcs1 != nullptr );
- assert( m_biosbank != nullptr );
+WRITE8_MEMBER( tandy1000_state::devctrl_w )
+{
+ m_video->disable_w((data & 4) ? ASSERT_LINE : CLEAR_LINE);
+}
+
+READ8_MEMBER( tandy1000_state::unk_r )
+{
+ return 0; // status port?
+}
+
+READ8_MEMBER( tandy1000_state::vram_r )
+{
+ UINT8 vram_base = (m_ram->size() >> 17) - 1;
+ if((m_vram_bank - vram_base) == (offset >> 17))
+ return m_ram->pointer()[offset & 0x1ffff];
+ return 0xff;
+}
+
+WRITE8_MEMBER( tandy1000_state::vram_w )
+{
+ UINT8 vram_base = (m_ram->size() >> 17) - 1;
+ if((m_vram_bank - vram_base) == (offset >> 17))
+ m_ram->pointer()[offset & 0x1ffff] = data;
+}
+
+void tandy1000_state::tandy1000_set_bios_bank()
+{
+ int bank;
if ( m_tandy_bios_bank & 0x10 )
{
- if ( m_tandy_bios_bank & 0x04 )
+ if (m_tandy_bios_bank & 0x04 )
{
- p = m_romcs0->base() + ( m_tandy_bios_bank & 0x03 ) * 0x10000;
+ bank = (m_tandy_bios_bank & 3) + 8;
}
else
{
- p = m_romcs1->base() + ( m_tandy_bios_bank & 0x03 ) * 0x10000;
+ bank = m_tandy_bios_bank & 3;
}
}
else
{
- if ( m_tandy_bios_bank & 0x08 )
- {
- p = m_romcs0->base() + ( m_tandy_bios_bank & 0x07 ) * 0x10000;
- }
- else
- {
- p = m_romcs1->base() + ( m_tandy_bios_bank & 0x07 ) * 0x10000;
- }
+ bank = m_tandy_bios_bank & 0x0f;
}
- m_biosbank->set_base( p );
+ m_biosbank->set_bank( bank );
}
MACHINE_RESET_MEMBER(tandy1000_state, tandy1000rl)
@@ -335,28 +382,18 @@ MACHINE_RESET_MEMBER(tandy1000_state, tandy1000rl)
tandy1000_set_bios_bank();
}
-DRIVER_INIT_MEMBER(tandy1000_state,t1000hx)
+void tandy1000_state::machine_start()
{
+ m_maincpu->space(AS_PROGRAM).install_ram(0, m_ram->size() - (128*1024) - 1, &m_ram->pointer()[128*1024]);
+ if(m_maincpu->space(AS_PROGRAM).data_width() == 8)
+ m_maincpu->space(AS_PROGRAM).install_readwrite_handler(m_ram->size() - (128*1024), 640*1024 - 1,
+ read8_delegate(FUNC(tandy1000_state::vram_r), this), write8_delegate(FUNC(tandy1000_state::vram_w), this));
+ else
+ m_maincpu->space(AS_PROGRAM).install_readwrite_handler(m_ram->size() - (128*1024), 640*1024 - 1,
+ read8_delegate(FUNC(tandy1000_state::vram_r), this), write8_delegate(FUNC(tandy1000_state::vram_w), this), 0xffff);
machine().device<nvram_device>("nvram")->set_base(m_eeprom_ee, sizeof(m_eeprom_ee));
}
-
-DRIVER_INIT_MEMBER(tandy1000_state,t1000sl)
-{
- // Fix up memory region (highest address bit flipped??)
- UINT8 *rom = memregion("romcs0")->base();
-
- for( int i = 0; i < 0x40000; i++ )
- {
- UINT8 d = rom[0x40000 + i];
- rom[0x40000 + i] = rom[i];
- rom[i] = d;
- }
-
- DRIVER_INIT_NAME(t1000hx)();
-}
-
-
READ8_MEMBER( tandy1000_state::tandy1000_bank_r )
{
UINT8 data = 0xFF;
@@ -467,61 +504,64 @@ static INPUT_PORTS_START( tandy1t )
INPUT_PORTS_END
static ADDRESS_MAP_START(tandy1000_map, AS_PROGRAM, 8, tandy1000_state )
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xaffff) AM_RAM
- AM_RANGE(0xb0000, 0xb7fff) AM_NOP
- AM_RANGE(0xb8000, 0xbffff) AM_DEVREADWRITE("pcvideo_t1000", pcvideo_t1000_device, videoram_r, videoram_w);
- AM_RANGE(0xc0000, 0xc7fff) AM_NOP
- AM_RANGE(0xc8000, 0xc9fff) AM_ROM
- AM_RANGE(0xca000, 0xcffff) AM_NOP
- AM_RANGE(0xd0000, 0xeffff) AM_NOP
- AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0xb8000, 0xbffff) AM_DEVICE("pcvideo_t1000:vram", address_map_bank_device, amap8)
+ AM_RANGE(0xe0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START(tandy1000_io, AS_IO, 8, tandy1000_state )
- AM_RANGE(0x0060, 0x0063) AM_READWRITE(tandy1000_pio_r, tandy1000_pio_w)
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0060, 0x0063) AM_READWRITE(tandy1000_pio_r, tandy1000_pio_w)
+ AM_RANGE(0x00a0, 0x00a0) AM_WRITE(nmi_vram_bank_w)
AM_RANGE(0x00c0, 0x00c0) AM_DEVWRITE("sn76496", ncr7496_device, write)
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", t1000_mb_device, map)
AM_RANGE(0x0200, 0x0207) AM_DEVREADWRITE("pc_joy", pc_joy_device, joy_port_r, joy_port_w)
- AM_RANGE(0x0378, 0x037f) AM_READWRITE(pc_t1t_p37x_r, pc_t1t_p37x_w)
+ AM_RANGE(0x0378, 0x037f) AM_READWRITE(pc_t1t_p37x_r, pc_t1t_p37x_w)
AM_RANGE(0x03d0, 0x03df) AM_DEVREADWRITE("pcvideo_t1000", pcvideo_t1000_device, read, write)
ADDRESS_MAP_END
-static ADDRESS_MAP_START(tandy1000_16_map, AS_PROGRAM, 16, tandy1000_state )
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xaffff) AM_RAM
- AM_RANGE(0xb0000, 0xb7fff) AM_NOP
- AM_RANGE(0xb8000, 0xbffff) AM_DEVREADWRITE8("pcvideo_t1000", pcvideo_t1000_device, videoram_r, videoram_w, 0xffff)
- AM_RANGE(0xc0000, 0xc7fff) AM_NOP
- AM_RANGE(0xc8000, 0xc9fff) AM_ROM
- AM_RANGE(0xca000, 0xcffff) AM_NOP
- AM_RANGE(0xe0000, 0xeffff) AM_ROMBANK("biosbank") /* Banked part of the BIOS */
- AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION( "romcs0", 0x70000 )
+static ADDRESS_MAP_START(tandy1000_bank_map, AS_PROGRAM, 16, tandy1000_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0xb8000, 0xbffff) AM_DEVICE8("pcvideo_t1000:vram", address_map_bank_device, amap8, 0xffff)
+ AM_RANGE(0xe0000, 0xeffff) AM_DEVICE("biosbank", address_map_bank_device, amap16)
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION( "rom", 0x70000 )
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START(biosbank_map, AS_0, 16, tandy1000_state)
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x80000, 0xfffff) AM_ROM AM_REGION("rom", 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START(tandy1000_16_io, AS_IO, 16, tandy1000_state )
- AM_RANGE(0x0060, 0x0063) AM_READWRITE8(tandy1000_pio_r, tandy1000_pio_w, 0xffff)
- AM_RANGE(0x00c0, 0x00c1) AM_DEVWRITE8("sn76496", ncr7496_device, write, 0xffff)
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0060, 0x0063) AM_READWRITE8(tandy1000_pio_r, tandy1000_pio_w, 0xffff)
+ AM_RANGE(0x0064, 0x0065) AM_WRITE8(devctrl_w, 0xff00)
+ AM_RANGE(0x00a0, 0x00a1) AM_READ8(unk_r, 0x00ff)
+ AM_RANGE(0x00c0, 0x00c1) AM_DEVWRITE8("sn76496", ncr7496_device, write, 0xffff)
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE8("mb", t1000_mb_device, map, 0xffff)
AM_RANGE(0x0200, 0x0207) AM_DEVREADWRITE8("pc_joy", pc_joy_device, joy_port_r, joy_port_w, 0xffff)
- AM_RANGE(0x0378, 0x037f) AM_READWRITE8(pc_t1t_p37x_r, pc_t1t_p37x_w, 0xffff)
+ AM_RANGE(0x0378, 0x037f) AM_READWRITE8(pc_t1t_p37x_r, pc_t1t_p37x_w, 0xffff)
AM_RANGE(0x03d0, 0x03df) AM_DEVREADWRITE8("pcvideo_t1000", pcvideo_t1000_device, read, write, 0xffff)
+ AM_RANGE(0xffe8, 0xffe9) AM_WRITE8(vram_bank_w, 0x00ff)
ADDRESS_MAP_END
-static ADDRESS_MAP_START(tandy1000_16_bank_io, AS_IO, 16, tandy1000_state )
+static ADDRESS_MAP_START(tandy1000_bank_io, AS_IO, 16, tandy1000_state )
+ ADDRESS_MAP_UNMAP_HIGH
AM_IMPORT_FROM(tandy1000_16_io)
AM_RANGE(0xffea, 0xffeb) AM_READWRITE8(tandy1000_bank_r, tandy1000_bank_w, 0xffff)
ADDRESS_MAP_END
+static ADDRESS_MAP_START(tandy1000tx_io, AS_IO, 16, tandy1000_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x00a0, 0x00a1) AM_WRITE8(nmi_vram_bank_w, 0x00ff)
+ AM_IMPORT_FROM(tandy1000_16_io)
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START(tandy1000_286_map, AS_PROGRAM, 16, tandy1000_state )
+ ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0x000fffff)
- AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
- AM_RANGE(0xa0000, 0xaffff) AM_RAM
- AM_RANGE(0xb0000, 0xb7fff) AM_NOP
- AM_RANGE(0xb8000, 0xbffff) AM_DEVREADWRITE8("pcvideo_t1000", pcvideo_t1000_device, videoram_r, videoram_w, 0xffff)
- AM_RANGE(0xc0000, 0xc7fff) AM_NOP
- AM_RANGE(0xc8000, 0xc9fff) AM_ROM
- AM_RANGE(0xca000, 0xcffff) AM_NOP
- AM_RANGE(0xe0000, 0xeffff) AM_NOP
- AM_RANGE(0xf8000, 0xfffff) AM_ROM
+ AM_RANGE(0xb8000, 0xbffff) AM_DEVICE8("pcvideo_t1000:vram", address_map_bank_device, amap8, 0xffff)
+ AM_RANGE(0xe0000, 0xfffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
static const gfx_layout t1000_charlayout =
@@ -555,7 +595,8 @@ static GFXDECODE_START( t1000 )
GFXDECODE_END
static MACHINE_CONFIG_FRAGMENT(tandy1000_common)
- MCFG_PCNOPPI_MOTHERBOARD_ADD("mb", "maincpu")
+ MCFG_DEVICE_ADD("mb", T1000_MOTHERBOARD, 0)
+ t1000_mb_device::static_set_cputag(*device, "maincpu");
/* video hardware */
MCFG_PCVIDEO_T1000_ADD("pcvideo_t1000")
@@ -591,6 +632,8 @@ static MACHINE_CONFIG_START( t1000hx, tandy1000_state )
// plus cards are isa with a nonstandard conntector
MCFG_ISA8_SLOT_ADD("mb:isa", "plus1", pc_isa8_cards, nullptr, false)
+ MCFG_DEVICE_MODIFY(RAM_TAG)
+ MCFG_RAM_EXTRA_OPTIONS("256K, 384K")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( t1000sx, t1000hx )
@@ -604,21 +647,31 @@ static MACHINE_CONFIG_DERIVED( t1000sx, t1000hx )
/* software lists */
MCFG_SOFTWARE_LIST_ADD("disk_list","ibm5150")
+ MCFG_DEVICE_MODIFY(RAM_TAG)
+ MCFG_RAM_EXTRA_OPTIONS("384K")
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( t1000_16, tandy1000_state )
+static MACHINE_CONFIG_START( t1000rl, tandy1000_state )
MCFG_CPU_ADD("maincpu", I8086, XTAL_28_63636MHz / 3)
- MCFG_CPU_PROGRAM_MAP(tandy1000_16_map)
- MCFG_CPU_IO_MAP(tandy1000_16_bank_io)
+ MCFG_CPU_PROGRAM_MAP(tandy1000_bank_map)
+ MCFG_CPU_IO_MAP(tandy1000_bank_io)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb)
MCFG_FRAGMENT_ADD(tandy1000_common)
- MCFG_MACHINE_RESET_OVERRIDE(tandy1000_state,tandy1000rl)
+ MCFG_DEVICE_ADD("biosbank", ADDRESS_MAP_BANK, 0)
+ MCFG_DEVICE_PROGRAM_MAP(biosbank_map)
+ MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
+ MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(16)
+ MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(20)
+ MCFG_ADDRESS_MAP_BANK_STRIDE(0x10000)
+ MCFG_MACHINE_RESET_OVERRIDE(tandy1000_state,tandy1000rl)
+ MCFG_DEVICE_MODIFY(RAM_TAG)
+ MCFG_RAM_EXTRA_OPTIONS("384K")
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( t1000_16_8, t1000_16 )
+static MACHINE_CONFIG_DERIVED( t1000sl2, t1000rl )
MCFG_CPU_MODIFY( "maincpu" )
MCFG_CPU_CLOCK( XTAL_24MHz / 3 )
@@ -628,7 +681,7 @@ static MACHINE_CONFIG_DERIVED( t1000_16_8, t1000_16 )
MCFG_ISA8_SLOT_ADD("mb:isa", "isa4", pc_isa8_cards, nullptr, false)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( t1000_286, tandy1000_state )
+static MACHINE_CONFIG_START( t1000tl, tandy1000_state )
MCFG_CPU_ADD("maincpu", I80286, XTAL_28_63636MHz / 2)
MCFG_CPU_PROGRAM_MAP(tandy1000_286_map)
MCFG_CPU_IO_MAP(tandy1000_16_io)
@@ -643,14 +696,19 @@ static MACHINE_CONFIG_START( t1000_286, tandy1000_state )
MCFG_ISA8_SLOT_ADD("mb:isa", "isa5", pc_isa8_cards, nullptr, false)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( t1000tx, t1000tl )
+ MCFG_CPU_MODIFY( "maincpu" )
+ MCFG_CPU_IO_MAP(tandy1000tx_io)
+MACHINE_CONFIG_END
+
#ifdef UNUSED_DEFINITION
ROM_START( t1000 )
// Schematics displays 2 32KB ROMs at U9 and U10
- ROM_REGION(0x100000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
ROM_SYSTEM_BIOS( 0, "v010000", "v010000" )
- ROMX_LOAD("v010000.f0", 0xf0000, 0x10000, NO_DUMP, ROM_BIOS(1))
+ ROMX_LOAD("v010000.f0", 0x10000, 0x10000, NO_DUMP, ROM_BIOS(1))
ROM_SYSTEM_BIOS( 1, "v010100", "v010100" )
- ROMX_LOAD("v010100.f0", 0xf0000, 0x10000, CRC(b6760881) SHA1(8275e4c48ac09cf36685db227434ca438aebe0b9), ROM_BIOS(2))
+ ROMX_LOAD("v010100.f0", 0x10000, 0x10000, CRC(b6760881) SHA1(8275e4c48ac09cf36685db227434ca438aebe0b9), ROM_BIOS(2))
// Part of video array at u76?
ROM_REGION(0x08000,"gfx1", 0)
@@ -658,21 +716,21 @@ ROM_START( t1000 )
ROM_END
ROM_START( t1000a )
- ROM_REGION(0x100000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
// partlist says it has 1 128kbyte rom
- ROM_LOAD("t1000hx.e0", 0xe0000, 0x10000, CRC(61dbf242) SHA1(555b58d8aa8e0b0839259621c44b832d993beaef)) // not sure about this one
- ROM_LOAD("v010100.f0", 0xf0000, 0x10000, CRC(b6760881) SHA1(8275e4c48ac09cf36685db227434ca438aebe0b9))
+ ROM_LOAD("t1000hx.e0", 0x00000, 0x10000, CRC(61dbf242) SHA1(555b58d8aa8e0b0839259621c44b832d993beaef)) // not sure about this one
+ ROM_LOAD("v010100.f0", 0x10000, 0x10000, CRC(b6760881) SHA1(8275e4c48ac09cf36685db227434ca438aebe0b9))
ROM_REGION(0x08000,"gfx1", 0)
ROM_LOAD("8079027.u25", 0x00000, 0x04000, CRC(33d64a11) SHA1(b63da2a656b6c0a8a32f2be8bdcb51aed983a450)) // TODO: Verify location
ROM_END
ROM_START( t1000ex )
- ROM_REGION(0x100000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
// partlist says it has 1 128kb rom, schematics list a 32k x 8 rom
// "8040328.u17"
- ROM_LOAD("t1000hx.e0", 0xe0000, 0x10000, CRC(61dbf242) SHA1(555b58d8aa8e0b0839259621c44b832d993beaef)) // not sure about this one
- ROM_LOAD("v010200.f0", 0xf0000, 0x10000, CRC(0e016ecf) SHA1(2f5ac8921b7cba56b02122ef772f5f11bbf6d8a2))
+ ROM_LOAD("t1000hx.e0", 0x00000, 0x10000, CRC(61dbf242) SHA1(555b58d8aa8e0b0839259621c44b832d993beaef)) // not sure about this one
+ ROM_LOAD("v010200.f0", 0x10000, 0x10000, CRC(0e016ecf) SHA1(2f5ac8921b7cba56b02122ef772f5f11bbf6d8a2))
// TODO: Add dump of the 8048 at u8 if it ever gets dumped
ROM_REGION(0x400, "kbdc", 0)
@@ -685,22 +743,22 @@ ROM_END
// The T1000SL and T1000SL/2 only differ in amount of RAM installed and BIOS version (SL/2 has v01.04.04)
ROM_START( t1000sl )
- ROM_REGION(0x100000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
// 8076312.hu1 - most likely v01.04.00
// 8075312.hu2
// partlist says it has 1 128kbyte rom
- ROM_LOAD("t1000hx.e0", 0xe0000, 0x10000, CRC(61dbf242) SHA1(555b58d8aa8e0b0839259621c44b832d993beaef)) // not sure about this one
+ ROM_LOAD("t1000hx.e0", 0x00000, 0x10000, CRC(61dbf242) SHA1(555b58d8aa8e0b0839259621c44b832d993beaef)) // not sure about this one
ROM_SYSTEM_BIOS( 0, "v010400", "v010400" )
- ROMX_LOAD("v010400.f0", 0xf0000, 0x10000, NO_DUMP, ROM_BIOS(1) )
+ ROMX_LOAD("v010400.f0", 0x10000, 0x10000, NO_DUMP, ROM_BIOS(1) )
ROM_SYSTEM_BIOS( 1, "v010401", "v010401" )
- ROMX_LOAD("v010401.f0", 0xf0000, 0x10000, NO_DUMP, ROM_BIOS(2) )
+ ROMX_LOAD("v010401.f0", 0x10000, 0x10000, NO_DUMP, ROM_BIOS(2) )
ROM_SYSTEM_BIOS( 2, "v010402", "v010402" )
- ROMX_LOAD("v010402.f0", 0xf0000, 0x10000, NO_DUMP, ROM_BIOS(3) )
+ ROMX_LOAD("v010402.f0", 0x10000, 0x10000, NO_DUMP, ROM_BIOS(3) )
ROM_SYSTEM_BIOS( 3, "v020001", "v020001" )
- ROMX_LOAD("v020001.f0", 0xf0000, 0x10000, NO_DUMP, ROM_BIOS(4) )
+ ROMX_LOAD("v020001.f0", 0x10000, 0x10000, NO_DUMP, ROM_BIOS(4) )
ROM_REGION(0x08000,"gfx1", 0)
ROM_LOAD("8079027.u25", 0x00000, 0x04000, CRC(33d64a11) SHA1(b63da2a656b6c0a8a32f2be8bdcb51aed983a450))
@@ -708,7 +766,7 @@ ROM_END
ROM_START( t1000tl )
- ROM_REGIoN(0x100000, "maincpu", ROMREGION_ERASE00)
+ ROM_REGIoN(0x10000, "bios", ROMREGION_ERASE00)
ROM_REGION(0x80000, "romcs0", 0)
// These 2 sets most likely have the same contents
@@ -731,8 +789,8 @@ ROM_END
#endif
ROM_START( t1000hx )
- ROM_REGION(0x100000,"maincpu", 0)
- ROM_LOAD("v020000.u12", 0xe0000, 0x20000, CRC(6f3acd80) SHA1(976af8c04c3f6fde14d7047f6521d302bdc2d017)) // TODO: Rom label
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD("v020000.u12", 0x00000, 0x20000, CRC(6f3acd80) SHA1(976af8c04c3f6fde14d7047f6521d302bdc2d017)) // TODO: Rom label
// TODO: Add dump of the 8048 at u9 if it ever gets dumped
ROM_REGION(0x400, "kbdc", 0)
@@ -743,8 +801,8 @@ ROM_START( t1000hx )
ROM_END
ROM_START( t1000sx )
- ROM_REGION(0x100000,"maincpu", 0)
- ROM_LOAD("8040328.u41", 0xf8000, 0x8000, CRC(4e2b9f0b) SHA1(e79a9ed9e885736e30d9b135557f0e596ce5a70b))
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD("8040328.u41", 0x18000, 0x8000, CRC(4e2b9f0b) SHA1(e79a9ed9e885736e30d9b135557f0e596ce5a70b))
// No character rom is listed in the schematics?
// But disabling it results in no text being printed
@@ -755,10 +813,10 @@ ROM_END
ROM_START( t1000tx )
- ROM_REGION(0x100000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
// There should be 2 32KBx8 ROMs, one for odd at u38, one for even at u39
// The machine already boots up with just this one rom
- ROM_LOAD("t1000tx.bin", 0xf8000, 0x8000, BAD_DUMP CRC(9b34765c) SHA1(0b07e87f6843393f7d4ca4634b832b0c0bec304e))
+ ROM_LOAD("t1000tx.bin", 0x18000, 0x8000, BAD_DUMP CRC(9b34765c) SHA1(0b07e87f6843393f7d4ca4634b832b0c0bec304e))
// No character rom is listed in the schematics?
// It is most likely part of the big blue chip at u36
@@ -768,14 +826,11 @@ ROM_END
ROM_START( t1000rl )
- ROM_REGION(0x100000,"maincpu", ROMREGION_ERASE00)
-
// bankable ROM regions
- ROM_REGION(0x80000, "romcs0", 0)
+ ROM_REGION(0x80000, "rom", 0)
/* v2.0.0.1 */
/* Rom is labeled "(C) TANDY CORP. 1990 // 8079073 // LH534G70 JAPAN // 9034 D" */
ROM_LOAD("8079073.u23", 0x00000, 0x80000, CRC(6fab50f7) SHA1(2ccc02bee4c250dc1b7c17faef2590bc158860b0) )
- ROM_REGION(0x80000, "romcs1", ROMREGION_ERASEFF)
ROM_REGION(0x08000,"gfx1", 0)
/* Character rom located at U3 w/label "8079027 // NCR // 609-2495004 // F841030 A9025" */
@@ -784,14 +839,14 @@ ROM_END
ROM_START( t1000sl2 )
- ROM_REGION(0x100000,"maincpu", ROMREGION_ERASE00)
-
// bankable ROM regions
- ROM_REGION(0x80000, "romcs0", 0)
+ ROM_REGION(0x80000, "rom", 0)
// v01.04.04 BIOS
- ROM_LOAD16_BYTE("8079047.hu1", 0x00000, 0x40000, CRC(c773ec0e) SHA1(7deb71f14c2c418400b639d60066ab61b7e9df32))
- ROM_LOAD16_BYTE("8079048.hu2", 0x00001, 0x40000, CRC(0f3e6586) SHA1(10f1a7204f69b82a18bc94a3010c9660aec0c802))
- ROM_REGION(0x80000, "romcs1", ROMREGION_ERASEFF)
+ // Fix up memory region (highest address bit flipped??)
+ ROM_LOAD16_BYTE("8079047.hu1", 0x40000, 0x20000, CRC(c773ec0e) SHA1(7deb71f14c2c418400b639d60066ab61b7e9df32))
+ ROM_CONTINUE(0x00000, 0x20000)
+ ROM_LOAD16_BYTE("8079048.hu2", 0x40001, 0x20000, CRC(0f3e6586) SHA1(10f1a7204f69b82a18bc94a3010c9660aec0c802))
+ ROM_CONTINUE(0x00001, 0x20000)
ROM_REGION(0x08000,"gfx1", 0)
ROM_LOAD("8079027.u25", 0x00000, 0x04000, CRC(33d64a11) SHA1(b63da2a656b6c0a8a32f2be8bdcb51aed983a450))
@@ -802,8 +857,8 @@ ROM_END
ROM_START( t1000tl2 )
- ROM_REGION(0x100000, "maincpu", 0)
- ROM_LOAD( "t10000tl2.bin", 0xf0000, 0x10000, CRC(e288f12c) SHA1(9d54ccf773cd7202c9906323f1b5a68b1b3a3a67))
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD( "t10000tl2.bin", 0x10000, 0x10000, CRC(e288f12c) SHA1(9d54ccf773cd7202c9906323f1b5a68b1b3a3a67))
ROM_REGION(0x08000,"gfx1", 0)
ROM_LOAD("8079027.u24", 0x00000, 0x04000, CRC(33d64a11) SHA1(b63da2a656b6c0a8a32f2be8bdcb51aed983a450)) // TODO: Verify location
@@ -812,9 +867,9 @@ ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
// tandy 1000
-COMP( 1987, t1000hx, ibm5150, 0, t1000hx, tandy1t, tandy1000_state, t1000hx, "Tandy Radio Shack", "Tandy 1000 HX", 0)
-COMP( 1987, t1000sx, ibm5150, 0, t1000sx, tandy1t, tandy1000_state, t1000hx, "Tandy Radio Shack", "Tandy 1000 SX", 0)
-COMP( 1987, t1000tx, ibm5150, 0, t1000_286, tandy1t, tandy1000_state, t1000hx, "Tandy Radio Shack", "Tandy 1000 TX", 0)
-COMP( 1989, t1000rl, ibm5150, 0, t1000_16, tandy1t, tandy1000_state, t1000hx, "Tandy Radio Shack", "Tandy 1000 RL", 0)
-COMP( 1989, t1000tl2, ibm5150, 0, t1000_286, tandy1t, tandy1000_state, t1000hx, "Tandy Radio Shack", "Tandy 1000 TL/2", 0)
-COMP( 1988, t1000sl2, ibm5150, 0, t1000_16_8, tandy1t, tandy1000_state, t1000sl, "Tandy Radio Shack", "Tandy 1000 SL/2", 0)
+COMP( 1987, t1000hx, ibm5150, 0, t1000hx, tandy1t, driver_device, 0, "Tandy Radio Shack", "Tandy 1000 HX", 0)
+COMP( 1987, t1000sx, ibm5150, 0, t1000sx, tandy1t, driver_device, 0, "Tandy Radio Shack", "Tandy 1000 SX", 0)
+COMP( 1987, t1000tx, ibm5150, 0, t1000tx, tandy1t, driver_device, 0, "Tandy Radio Shack", "Tandy 1000 TX", 0)
+COMP( 1989, t1000rl, ibm5150, 0, t1000rl, tandy1t, driver_device, 0, "Tandy Radio Shack", "Tandy 1000 RL", 0)
+COMP( 1989, t1000tl2, ibm5150, 0, t1000tl, tandy1t, driver_device, 0, "Tandy Radio Shack", "Tandy 1000 TL/2", 0)
+COMP( 1988, t1000sl2, ibm5150, 0, t1000sl2, tandy1t, driver_device, 0, "Tandy Radio Shack", "Tandy 1000 SL/2", 0)
diff --git a/src/mame/drivers/tandy2k.cpp b/src/mame/drivers/tandy2k.cpp
index d88f3120b98..61c26bce428 100644
--- a/src/mame/drivers/tandy2k.cpp
+++ b/src/mame/drivers/tandy2k.cpp
@@ -767,7 +767,7 @@ static MACHINE_CONFIG_START( tandy2k, tandy2k_state )
MCFG_80186_IRQ_SLAVE_ACK(DEVREAD8(DEVICE_SELF, tandy2k_state, irq_callback))
// video hardware
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
MCFG_SCREEN_SIZE(640, 400)
@@ -775,7 +775,7 @@ static MACHINE_CONFIG_START( tandy2k, tandy2k_state )
//MCFG_SCREEN_UPDATE_DEVICE(CRT9021B_TAG, crt9021_t, screen_update)
MCFG_SCREEN_UPDATE_DRIVER(tandy2k_state, screen_update)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD(CRT9007_TAG, CRT9007, XTAL_16MHz*28/20/8)
MCFG_DEVICE_ADDRESS_MAP(AS_0, vpac_mem)
diff --git a/src/mame/drivers/tavernie.cpp b/src/mame/drivers/tavernie.cpp
index 9c15b99f5c1..c6ccd0fb51a 100644
--- a/src/mame/drivers/tavernie.cpp
+++ b/src/mame/drivers/tavernie.cpp
@@ -349,7 +349,7 @@ static MACHINE_CONFIG_DERIVED( ivg09, cpu09 )
MCFG_SCREEN_SIZE(80*8, 25*10)
MCFG_SCREEN_VISIBLE_AREA(0, 80*8-1, 0, 25*10-1)
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEFAULT_LAYOUT(layout_tavernie)
/* sound hardware */
diff --git a/src/mame/drivers/tdv2324.cpp b/src/mame/drivers/tdv2324.cpp
index 5d943ec505a..539d0f2e2aa 100644
--- a/src/mame/drivers/tdv2324.cpp
+++ b/src/mame/drivers/tdv2324.cpp
@@ -267,13 +267,13 @@ static MACHINE_CONFIG_START( tdv2324, tdv2324_state )
MCFG_CPU_PROGRAM_MAP(tdv2324_fdc_mem)
// video hardware
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_UPDATE_DRIVER(tdv2324_state, screen_update)
MCFG_SCREEN_SIZE(800, 400)
MCFG_SCREEN_VISIBLE_AREA(0, 800-1, 0, 400-1)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD(TMS9937NL_TAG, TMS9927, XTAL_25_39836MHz)
MCFG_TMS9927_CHAR_WIDTH(8)
diff --git a/src/mame/drivers/tecmo16.cpp b/src/mame/drivers/tecmo16.cpp
index 9ef5e52641b..820de48507a 100644
--- a/src/mame/drivers/tecmo16.cpp
+++ b/src/mame/drivers/tecmo16.cpp
@@ -1,5 +1,5 @@
-// license:???
-// copyright-holders:Eisuke Watanabe, Nicola Salmoria
+// license:BSD-3-Clause
+// copyright-holders:Hau, Nicola Salmoria
/******************************************************************************
Ganbare Ginkun (Japan) (c)1995 TECMO
@@ -8,7 +8,7 @@
--
-driver by Eisuke Watanabe, Nicola Salmoria
+driver by Hau, Nicola Salmoria
special thanks to Nekomata, NTD & code-name'Siberia'
diff --git a/src/mame/drivers/tek405x.cpp b/src/mame/drivers/tek405x.cpp
index a2e58454346..acec32694cd 100644
--- a/src/mame/drivers/tek405x.cpp
+++ b/src/mame/drivers/tek405x.cpp
@@ -1000,14 +1000,14 @@ static MACHINE_CONFIG_START( tek4051, tek4051_state )
// video hardware
MCFG_VECTOR_ADD("vector")
- MCFG_SCREEN_ADD(SCREEN_TAG, VECTOR)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, VECTOR, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
MCFG_SCREEN_SIZE(1024, 780)
MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 780-1)
MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
// sound hardware
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -1107,14 +1107,14 @@ static MACHINE_CONFIG_START( tek4052, tek4052_state )
// video hardware
MCFG_VECTOR_ADD("vector")
- MCFG_SCREEN_ADD(SCREEN_TAG, VECTOR)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, VECTOR, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
MCFG_SCREEN_SIZE(1024, 780)
MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 780-1)
MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
// sound hardware
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/terak.cpp b/src/mame/drivers/terak.cpp
index 714a2d3fcfb..7b747489cdd 100644
--- a/src/mame/drivers/terak.cpp
+++ b/src/mame/drivers/terak.cpp
@@ -104,7 +104,7 @@ static MACHINE_CONFIG_START( terak, terak_state )
MCFG_SCREEN_UPDATE_DRIVER(terak_state, screen_update_terak)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/thunderj.cpp b/src/mame/drivers/thunderj.cpp
index 0f4f00105f0..cc8733ed986 100644
--- a/src/mame/drivers/thunderj.cpp
+++ b/src/mame/drivers/thunderj.cpp
@@ -317,9 +317,8 @@ ROM_START( thunderj )
ROM_LOAD16_BYTE( "136076-1012.17n", 0x00001, 0x10000, CRC(53e5e638) SHA1(75593e5d328ede105b8db64005dd5d1c5cae11ed) )
ROM_COPY( "maincpu", 0x60000, 0x60000, 0x20000 )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "136076-2015.1b", 0x10000, 0x4000, CRC(d8feb7fb) SHA1(684ebf2f0c0df742c98e7f45f74de86a11c8d6e8) ) /* Rev 2 program rom */
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136076-2015.1b", 0x00000, 0x10000, CRC(d8feb7fb) SHA1(684ebf2f0c0df742c98e7f45f74de86a11c8d6e8) ) /* Rev 2 program rom */
ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "136076-1021.5s", 0x000000, 0x10000, CRC(d8432766) SHA1(04e7d820974c0890fde1257b4710cf7b520d7d48) ) /* graphics, plane 0 */
@@ -394,9 +393,8 @@ ROM_START( thunderja )
ROM_LOAD16_BYTE( "136076-1012.17n", 0x00001, 0x10000, CRC(53e5e638) SHA1(75593e5d328ede105b8db64005dd5d1c5cae11ed) )
ROM_COPY( "maincpu", 0x60000, 0x60000, 0x20000 )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "136076-2015.1b", 0x10000, 0x4000, CRC(d8feb7fb) SHA1(684ebf2f0c0df742c98e7f45f74de86a11c8d6e8) ) /* Rev 2 program rom */
- ROM_CONTINUE( 0x04000, 0xc000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136076-2015.1b", 0x00000, 0x10000, CRC(d8feb7fb) SHA1(684ebf2f0c0df742c98e7f45f74de86a11c8d6e8) ) /* Rev 2 program rom */
ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "136076-1021.5s", 0x000000, 0x10000, CRC(d8432766) SHA1(04e7d820974c0890fde1257b4710cf7b520d7d48) ) /* graphics, plane 0 */
diff --git a/src/mame/drivers/ti99_2.cpp b/src/mame/drivers/ti99_2.cpp
index 2eaf0250d68..8bffc874560 100644
--- a/src/mame/drivers/ti99_2.cpp
+++ b/src/mame/drivers/ti99_2.cpp
@@ -376,7 +376,7 @@ static MACHINE_CONFIG_START( ti99_2, ti99_2_state )
/* video hardware */
/*MCFG_TMS9928A( &tms9918_interface )*/
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::white)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(256, 192)
@@ -385,7 +385,7 @@ static MACHINE_CONFIG_START( ti99_2, ti99_2_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ti99_2)
- MCFG_PALETTE_ADD_WHITE_AND_BLACK("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/ticalc1x.cpp b/src/mame/drivers/ticalc1x.cpp
index c8bbdfd0171..3d0a0cceeae 100644
--- a/src/mame/drivers/ticalc1x.cpp
+++ b/src/mame/drivers/ticalc1x.cpp
@@ -48,11 +48,11 @@ public:
/***************************************************************************
TI SR-16 (1974, first consumer product with TMS1000 series MCU)
- * TMS1000 MCU labeled TMS1001NL (die labeled 1000, 1001A)
+ * TMS1000 MCU label TMS1001NL (die label 1000, 1001A)
* 12-digit 7seg LED display
TI SR-16 II (1975 version)
- * TMS1000 MCU labeled TMS1016NL (die labeled 1000B, 1016A)
+ * TMS1000 MCU label TMS1016NL (die label 1000B, 1016A)
* notes: cost-reduced 'sequel', [10^x] was removed, and [pi] was added.
***************************************************************************/
@@ -264,11 +264,11 @@ MACHINE_CONFIG_END
/***************************************************************************
TI-1250/TI-1200 (1975 version), Spirit of '76
- * TMS0950 MCU labeled TMC0952NL, K0952 (die labeled 0950A 0952)
+ * TMS0950 MCU label TMC0952NL, K0952 (die label 0950A 0952)
* 9-digit 7seg LED display
TI-1250/TI-1200 (1976 version), TI-1400, TI-1450, TI-1205, TI-1255, LADY 1200, ABLE
- * TMS0970 MCU labeled TMS0972NL ZA0348, JP0972A (die labeled 0970D-72A)
+ * TMS0970 MCU label TMS0972NL ZA0348, JP0972A (die label 0970D-72A)
* 8-digit 7seg LED display, or 9 digits with leftmost unused
As seen listed above, the basic 4-function TMS0972 calculator MCU was used
@@ -280,7 +280,7 @@ MACHINE_CONFIG_END
available buttons.
TI-1270
- * TMS0970 MCU labeled TMC0974NL ZA0355, DP0974A (die labeled 0970D-74A)
+ * TMS0970 MCU label TMC0974NL ZA0355, DP0974A (die label 0970D-74A)
* 8-digit 7seg LED display
* notes: almost same hardware as TMS0972 TI-1250, minor scientific functions
@@ -413,11 +413,11 @@ MACHINE_CONFIG_END
/***************************************************************************
TI-1000 (1977 version)
- * TMS1990 MCU labeled TMC1991NL (die labeled 1991-91A)
+ * TMS1990 MCU label TMC1991NL (die label 1991-91A)
* 8-digit 7seg LED display
TI-1000 (1978 version)
- * TMS1990 MCU labeled TMC1992-4NL **not dumped yet
+ * TMS1990 MCU label TMC1992-4NL **not dumped yet
***************************************************************************/
@@ -513,7 +513,7 @@ MACHINE_CONFIG_END
/***************************************************************************
TI WIZ-A-TRON
- * TMS0970 MCU labeled TMC0907NL ZA0379, DP0907BS (die labeled 0970F-07B)
+ * TMS0970 MCU label TMC0907NL ZA0379, DP0907BS (die label 0970F-07B)
* 9-digit 7seg LED display(one custom digit)
***************************************************************************/
@@ -613,7 +613,7 @@ MACHINE_CONFIG_END
/***************************************************************************
TI Little Professor (1976 version)
- * TMS0970 MCU labeled TMS0975NL ZA0356, GP0975CS (die labeled 0970D-75C)
+ * TMS0970 MCU label TMS0975NL ZA0356, GP0975CS (die label 0970D-75C)
* 9-digit 7seg LED display(one custom digit)
The hardware is nearly identical to Wiz-A-Tron (or vice versa, since this
@@ -687,7 +687,7 @@ MACHINE_CONFIG_END
/***************************************************************************
TI Little Professor (1978 version)
- * TMS1990 MCU labeled TMC1993NL (die labeled 1990C-c3C)
+ * TMS1990 MCU label TMC1993NL (die label 1990C-c3C)
* 9-digit 7seg LED display(one custom digit)
1978 re-release, with on/off and level select on buttons instead of
@@ -797,7 +797,7 @@ MACHINE_CONFIG_END
/***************************************************************************
TI DataMan
- * TMS1980 MCU labeled TMC1982NL (die labeled 1980A 82B)
+ * TMS1980 MCU label TMC1982NL (die label 1980A 82B)
* 10-digit cyan VFD display(3 digits are custom)
***************************************************************************/
@@ -912,7 +912,7 @@ MACHINE_CONFIG_END
TMC098x series Majestic-line calculators
TI-30, SR-40, TI-15(less buttons) and several by Koh-I-Noor
- * TMS0980 MCU labeled TMC0981NL (die labeled 0980B-81F)
+ * TMS0980 MCU label TMC0981NL (die label 0980B-81F)
* 9-digit 7seg LED display
Of note is a peripheral by Schoenherr, called the Braillotron. It acts as
@@ -921,10 +921,10 @@ MACHINE_CONFIG_END
the original LED display to a 25-pin D-Sub connector.
TI Business Analyst, TI Business Analyst-I, TI Money Manager, TI-31, TI-41
- * TMS0980 MCU labeled TMC0982NL (die labeled 0980B-82F)
+ * TMS0980 MCU label TMC0982NL (die label 0980B-82F)
TI Programmer
- * TMS0980 MCU labeled ZA0675NL, JP0983AT (die labeled 0980B-83)
+ * TMS0980 MCU label ZA0675NL, JP0983AT (die label 0980B-83)
***************************************************************************/
diff --git a/src/mame/drivers/tim011.cpp b/src/mame/drivers/tim011.cpp
index 42e644bba84..218dc66c686 100644
--- a/src/mame/drivers/tim011.cpp
+++ b/src/mame/drivers/tim011.cpp
@@ -148,7 +148,7 @@ static MACHINE_CONFIG_START( tim011,tim011_state )
MCFG_SCREEN_UPDATE_DRIVER(tim011_state, screen_update_tim011)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/tispeak.cpp b/src/mame/drivers/tispeak.cpp
index 68cae4eb3ce..f6bd51bca24 100644
--- a/src/mame/drivers/tispeak.cpp
+++ b/src/mame/drivers/tispeak.cpp
@@ -34,7 +34,7 @@ Wiz-A-Tron or Little Professor. But the popularity of this product was much
above expectations. TI continued to manufacture many products for this line.
Speak & Spell (US), 1978
- - MCU: TMC0271*, labeled TMC0271NL (die label unknown)
+ - MCU: TMC0271*, label TMC0271NL (die label unknown)
- TMS51xx: TMC0281
- VSM(1/2): 16KB TMC0351NL
- VSM(2/2): 16KB TMC0352NL
@@ -42,7 +42,7 @@ above expectations. TI continued to manufacture many products for this line.
- notes: keyboard has buttons instead of cheap membrane
Speak & Spell (US), 1979
- - MCU: TMC0271, labeled TMC0271H-N2L (die labeled 0271H T0270D)
+ - MCU: TMC0271, label TMC0271H-N2L (die label 0271H T0270D)
- TMS51xx: TMC0281
- VSM(1/2): 16KB TMC0351N2L
- VSM(2/2): 16KB TMC0352N2L
@@ -79,8 +79,15 @@ above expectations. TI continued to manufacture many products for this line.
- VFD: some seen with the one from Speak & Math(!)
- notes: this one has a dedicated voice actor
+ Speak & Spell (Spanish), 1981
+ - MCU: CD2701N2L*
+ - TMS51xx: TMC0281
+ - VSM(1/2): 16KB? CD2319*
+ - VSM(2/2): 16KB? CD2320*
+ - VFD: 8 digits with 14 segments, DP and accent mark
+
Speak & Spell (France) "La Dictee Magique", 1980
- - MCU: CD2702, labeled CD2702AN2L (die labeled TMC0270F 2702A)
+ - MCU: CD2702, label CD2702AN2L (die label TMC0270F 2702A)
- TMS51xx: CD2801
- VSM: 16KB CD2352
@@ -96,7 +103,7 @@ above expectations. TI continued to manufacture many products for this line.
- notes: it appears that TI ran out of original snspell VFDs in the early 80s?
Speak & Spell Compact (US), 1981
- - MCU: CD8011, labeled CD8011A-NL (die labeled 1100B)
+ - MCU: CD8011, label CD8011A-NL (die label 1100B)
- TMS51xx: TMC0281D
- VSM: 16KB CD2354, CD2354(rev.A)
- notes: no display, MCU is TMS1100 instead of TMS0270, overall similar to Touch & Tell
@@ -143,7 +150,7 @@ Note that they are interchangeable, eg. you can use a French module on a US Spea
Speak & Math:
Speak & Math (US), 1980 (renamed to "Speak & Maths" in UK, but is the same product)
- - MCU: CD2704, labeled CD2704B-N2L (die labeled TMC0270F 2704B) - 2nd revision?(mid-1982)
+ - MCU: CD2704, label CD2704B-N2L (die label TMC0270F 2704B) - 2nd revision?(mid-1982)
- TMS51xx: CD2801
- VSM(1/2): 16KB CD2392
- VSM(2/2): 16KB CD2393
@@ -154,7 +161,7 @@ Speak & Math:
Apparently QA never found out and it ended up in the final product.
Speak & Math (US), 1986
- - MCU: CD2708, labeled CD2708N2L (die labeled TMC0270F 2708A)
+ - MCU: CD2708, label CD2708N2L (die label TMC0270F 2708A)
- TMS51xx: CD2801
- VSM(1/2): 16KB CD2381
- VSM(2/2): 4KB CD2614
@@ -170,7 +177,7 @@ Speak & Math:
Speak & Read:
Speak & Read (US), 1980
- - MCU: CD2705, labeled CD2705B-N2L (die labeled TMC0270E 2705B) - 2nd revision?(late-1981)
+ - MCU: CD2705, label CD2705B-N2L (die label TMC0270E 2705B) - 2nd revision?(late-1981)
- TMS51xx: CD2801
- VSM(1/2): 16KB CD2394(rev.A)
- VSM(2/2): 16KB CD2395(rev.A)
@@ -192,7 +199,7 @@ Speak & Read modules:
Touch & Tell:
Touch & Tell (US), 1981
- - MCU: CD8012, labeled CD8012NL (die labeled 1100G CD8012)
+ - MCU: CD8012, label CD8012NL (die label 1100G CD8012)
- TMS51xx: CD2802
- VSM: 4KB CD2610
- notes: MCU is TMS1100 instead of TMS0270. CD8010 is seen in some devices
diff --git a/src/mame/drivers/tispellb.cpp b/src/mame/drivers/tispellb.cpp
index 00f581759ef..9966dc2a534 100644
--- a/src/mame/drivers/tispellb.cpp
+++ b/src/mame/drivers/tispellb.cpp
@@ -13,8 +13,8 @@
1st revision:
Spelling B (US), 1978
- - TMS0270 MCU TMC0272 (die labeled 0272A T0270B)
- - TMS1980 MCU TMC1984 (die labeled 1980A 84A)
+ - TMS0270 MCU TMC0272 (die label 0272A T0270B)
+ - TMS1980 MCU TMC1984 (die label 1980A 84A)
- 8-digit cyan VFD display (seen with and without apostrophe)
Spelling ABC (UK), 1979: exact same hardware as US version
diff --git a/src/mame/drivers/tk80bs.cpp b/src/mame/drivers/tk80bs.cpp
index 99d6f1f1db5..766a371e638 100644
--- a/src/mame/drivers/tk80bs.cpp
+++ b/src/mame/drivers/tk80bs.cpp
@@ -181,7 +181,7 @@ static MACHINE_CONFIG_START( tk80bs, tk80bs_state )
MCFG_SCREEN_UPDATE_DRIVER(tk80bs_state, screen_update_tk80bs)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", tk80bs)
/* Devices */
diff --git a/src/mame/drivers/toobin.cpp b/src/mame/drivers/toobin.cpp
index 90d36d79ccd..8a3bc6d3872 100644
--- a/src/mame/drivers/toobin.cpp
+++ b/src/mame/drivers/toobin.cpp
@@ -250,9 +250,8 @@ ROM_START( toobin )
ROM_LOAD16_BYTE( "1136-5j.061", 0x060000, 0x010000, CRC(5ae3eeac) SHA1(583b6c3f61e8ad4d98449205fedecf3e21ee993c) )
ROM_LOAD16_BYTE( "1140-5f.061", 0x060001, 0x010000, CRC(dacbbd94) SHA1(0e3a93f439ff9f3dd57ee13604be02e9c74c8eec) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "1141-2k.061", 0x010000, 0x004000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "1141-2k.061", 0x00000, 0x10000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
ROM_REGION( 0x080000, "gfx1", 0 )
ROM_LOAD( "1101-1a.061", 0x000000, 0x010000, CRC(02696f15) SHA1(51856c331c45d287e574e2e4013b62a6472ad720) )
@@ -306,9 +305,8 @@ ROM_START( toobine )
ROM_LOAD16_BYTE( "1136-5j.061", 0x060000, 0x010000, CRC(5ae3eeac) SHA1(583b6c3f61e8ad4d98449205fedecf3e21ee993c) )
ROM_LOAD16_BYTE( "1140-5f.061", 0x060001, 0x010000, CRC(dacbbd94) SHA1(0e3a93f439ff9f3dd57ee13604be02e9c74c8eec) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "1141-2k.061", 0x010000, 0x004000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "1141-2k.061", 0x00000, 0x10000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
ROM_REGION( 0x080000, "gfx1", 0 )
ROM_LOAD( "1101-1a.061", 0x000000, 0x010000, CRC(02696f15) SHA1(51856c331c45d287e574e2e4013b62a6472ad720) )
@@ -362,9 +360,8 @@ ROM_START( toobing )
ROM_LOAD16_BYTE( "1136-5j.061", 0x060000, 0x010000, CRC(5ae3eeac) SHA1(583b6c3f61e8ad4d98449205fedecf3e21ee993c) )
ROM_LOAD16_BYTE( "1140-5f.061", 0x060001, 0x010000, CRC(dacbbd94) SHA1(0e3a93f439ff9f3dd57ee13604be02e9c74c8eec) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "1141-2k.061", 0x010000, 0x004000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "1141-2k.061", 0x00000, 0x10000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
ROM_REGION( 0x080000, "gfx1", 0 )
ROM_LOAD( "1101-1a.061", 0x000000, 0x010000, CRC(02696f15) SHA1(51856c331c45d287e574e2e4013b62a6472ad720) )
@@ -418,9 +415,8 @@ ROM_START( toobin2e )
ROM_LOAD16_BYTE( "1136-5j.061", 0x060000, 0x010000, CRC(5ae3eeac) SHA1(583b6c3f61e8ad4d98449205fedecf3e21ee993c) )
ROM_LOAD16_BYTE( "1140-5f.061", 0x060001, 0x010000, CRC(dacbbd94) SHA1(0e3a93f439ff9f3dd57ee13604be02e9c74c8eec) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "1141-2k.061", 0x010000, 0x004000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "1141-2k.061", 0x00000, 0x10000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
ROM_REGION( 0x080000, "gfx1", 0 )
ROM_LOAD( "1101-1a.061", 0x000000, 0x010000, CRC(02696f15) SHA1(51856c331c45d287e574e2e4013b62a6472ad720) )
@@ -474,9 +470,8 @@ ROM_START( toobin2 )
ROM_LOAD16_BYTE( "1136-5j.061", 0x060000, 0x010000, CRC(5ae3eeac) SHA1(583b6c3f61e8ad4d98449205fedecf3e21ee993c) )
ROM_LOAD16_BYTE( "1140-5f.061", 0x060001, 0x010000, CRC(dacbbd94) SHA1(0e3a93f439ff9f3dd57ee13604be02e9c74c8eec) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "1141-2k.061", 0x010000, 0x004000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "1141-2k.061", 0x00000, 0x10000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
ROM_REGION( 0x080000, "gfx1", 0 )
ROM_LOAD( "1101-1a.061", 0x000000, 0x010000, CRC(02696f15) SHA1(51856c331c45d287e574e2e4013b62a6472ad720) )
@@ -530,9 +525,8 @@ ROM_START( toobin1 )
ROM_LOAD16_BYTE( "1136-5j.061", 0x060000, 0x010000, CRC(5ae3eeac) SHA1(583b6c3f61e8ad4d98449205fedecf3e21ee993c) )
ROM_LOAD16_BYTE( "1140-5f.061", 0x060001, 0x010000, CRC(dacbbd94) SHA1(0e3a93f439ff9f3dd57ee13604be02e9c74c8eec) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "1141-2k.061", 0x010000, 0x004000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "1141-2k.061", 0x00000, 0x10000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
ROM_REGION( 0x080000, "gfx1", 0 )
ROM_LOAD( "1101-1a.061", 0x000000, 0x010000, CRC(02696f15) SHA1(51856c331c45d287e574e2e4013b62a6472ad720) )
diff --git a/src/mame/drivers/toypop.cpp b/src/mame/drivers/toypop.cpp
index 1b5d309a7ac..4f76815374f 100644
--- a/src/mame/drivers/toypop.cpp
+++ b/src/mame/drivers/toypop.cpp
@@ -1,18 +1,11 @@
-// license:???
-// copyright-holders:Edgardo E. Contini Salvan
+// license:BSD-3-Clause
+// copyright-holders:Angelo Salese
/****************************************
Libble Rabble (c) 1983 Namco
Toypop (c) 1986 Namco
-driver by Edgardo E. Contini Salvan (pag2806@iperbole.bologna.it)
-
-6809 main CPU,
-6809 sound and
-68000 to create the background image.
-
-Libble Rabble and Toypop run on the same board, but the memory map is subtly
-different.
+Namco "Universal System 16" Hardware
Notes:
------
@@ -24,235 +17,274 @@ Notes:
9xU 2xR 9xD 2xL
(c) 1983 NAMCO LTD. will appear on the screen.
-
-TODO:
-- I haven't found any Easter egg in Toy Pop. Maybe they had stopped inserting
- them by that time.
-
****************************************/
#include "emu.h"
#include "cpu/m6809/m6809.h"
#include "cpu/m68000/m68000.h"
-#include "includes/toypop.h"
-
-
-READ16_MEMBER(toypop_state::toypop_m68000_sharedram_r)
-{
- return m_m68000_sharedram[offset];
-}
+#include "machine/namcoio.h"
+#include "sound/namco.h"
-WRITE16_MEMBER(toypop_state::toypop_m68000_sharedram_w)
-{
- if (ACCESSING_BITS_0_7)
- {
- m_m68000_sharedram[offset] = data & 0xff;
- }
-}
+#define MASTER_CLOCK XTAL_6_144MHz
-READ8_MEMBER(toypop_state::toypop_main_interrupt_enable_r)
+class namcos16_state : public driver_device
{
- m_main_irq_mask = 1;
- return 0;
-}
+public:
+ namcos16_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_master_cpu(*this,"maincpu"),
+ m_slave_cpu(*this, "slave"),
+ m_sound_cpu(*this, "audiocpu"),
+ m_namco15xx(*this, "namco"),
+ m_namco58xx(*this, "58xx"),
+ m_namco56xx_1(*this, "56xx_1"),
+ m_namco56xx_2(*this, "56xx_2"),
+ m_palette(*this, "palette"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_slave_sharedram(*this, "slave_sharedram"),
+ m_bgvram(*this, "bgvram"),
+ m_fgvram(*this, "fgvram"),
+ m_fgattr(*this, "fgattr")
+ { }
+
+ required_device<cpu_device> m_master_cpu;
+ required_device<cpu_device> m_slave_cpu;
+ required_device<cpu_device> m_sound_cpu;
+
+ required_device<namco_15xx_device> m_namco15xx;
+ required_device<namco58xx_device> m_namco58xx;
+ required_device<namco56xx_device> m_namco56xx_1;
+ required_device<namco56xx_device> m_namco56xx_2;
+ required_device<palette_device> m_palette;
+ required_device<gfxdecode_device> m_gfxdecode;
+
+ required_shared_ptr<UINT8> m_slave_sharedram;
+ required_shared_ptr<UINT16> m_bgvram;
+ required_shared_ptr<UINT8> m_fgvram;
+ required_shared_ptr<UINT8> m_fgattr;
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ INTERRUPT_GEN_MEMBER(master_vblank_irq);
+ INTERRUPT_GEN_MEMBER(slave_vblank_irq);
+
+ DECLARE_READ8_MEMBER(irq_enable_r);
+ DECLARE_WRITE8_MEMBER(irq_disable_w);
+ DECLARE_PALETTE_INIT(toypop);
+ DECLARE_READ8_MEMBER(dipA_l);
+ DECLARE_READ8_MEMBER(dipA_h);
+ DECLARE_READ8_MEMBER(dipB_l);
+ DECLARE_READ8_MEMBER(dipB_h);
+ //DECLARE_WRITE8_MEMBER(out_coin0);
+ //DECLARE_WRITE8_MEMBER(out_coin1);
+ DECLARE_WRITE8_MEMBER(flip);
+ DECLARE_WRITE8_MEMBER(slave_halt_ctrl_w);
+ DECLARE_READ8_MEMBER(slave_shared_r);
+ DECLARE_WRITE8_MEMBER(slave_shared_w);
+ DECLARE_WRITE16_MEMBER(slave_irq_enable_w);
+ DECLARE_WRITE8_MEMBER(sound_halt_ctrl_w);
+protected:
+ // driver_device overrides
+// virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+// virtual void video_start() override;
+private:
+ bool m_master_irq_enable;
+ bool m_slave_irq_enable;
+
+ void legacy_bg_draw(bitmap_ind16 &bitmap,const rectangle &cliprect);
+ void legacy_fg_draw(bitmap_ind16 &bitmap,const rectangle &cliprect);
-WRITE8_MEMBER(toypop_state::toypop_main_interrupt_enable_w)
-{
- m_main_irq_mask = 1;
-}
+};
-WRITE8_MEMBER(toypop_state::toypop_main_interrupt_disable_w)
+PALETTE_INIT_MEMBER(namcos16_state, toypop)
{
- m_main_irq_mask = 0;
-// m_maincpu->set_input_line(0, CLEAR_LINE);
-}
+ const UINT8 *color_prom = memregion("proms")->base();
-WRITE8_MEMBER(toypop_state::toypop_sound_interrupt_enable_acknowledge_w)
-{
- m_sound_irq_mask = 1;
-// m_audiocpu->set_input_line(0, CLEAR_LINE);
-}
+ for (int i = 0;i < 256;i++)
+ {
+ int bit0,bit1,bit2,bit3,r,g,b;
+
+ // red component
+ bit0 = (color_prom[i] >> 0) & 0x01;
+ bit1 = (color_prom[i] >> 1) & 0x01;
+ bit2 = (color_prom[i] >> 2) & 0x01;
+ bit3 = (color_prom[i] >> 3) & 0x01;
+ r = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
+ // green component
+ bit0 = (color_prom[i+0x100] >> 0) & 0x01;
+ bit1 = (color_prom[i+0x100] >> 1) & 0x01;
+ bit2 = (color_prom[i+0x100] >> 2) & 0x01;
+ bit3 = (color_prom[i+0x100] >> 3) & 0x01;
+ g = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
+ // blue component
+ bit0 = (color_prom[i+0x200] >> 0) & 0x01;
+ bit1 = (color_prom[i+0x200] >> 1) & 0x01;
+ bit2 = (color_prom[i+0x200] >> 2) & 0x01;
+ bit3 = (color_prom[i+0x200] >> 3) & 0x01;
+ b = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
+
+ palette.set_indirect_color(i, rgb_t(r,g,b));
+ }
-WRITE8_MEMBER(toypop_state::toypop_sound_interrupt_disable_w)
-{
- m_sound_irq_mask = 0;
+ for (int i = 0;i < 256;i++)
+ {
+ UINT8 entry;
+
+ // characters
+ palette.set_pen_indirect(i + 0*256, (color_prom[i + 0x300] & 0x0f) | 0x70);
+ palette.set_pen_indirect(i + 1*256, (color_prom[i + 0x300] & 0x0f) | 0xf0);
+ // sprites
+ entry = color_prom[i + 0x500];
+ palette.set_pen_indirect(i + 2*256, entry);
+ }
+ for (int i = 0;i < 16;i++)
+ {
+ // background
+ palette.set_pen_indirect(i + 3*256 + 0*16, 0x60 + i);
+ palette.set_pen_indirect(i + 3*256 + 1*16, 0xe0 + i);
+ }
}
-void toypop_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+void namcos16_state::legacy_bg_draw(bitmap_ind16 &bitmap,const rectangle &cliprect)
{
- switch (id)
+ int x, y;
+ const UINT16 pal_base = 0x300;
+ const UINT32 src_base = 0x200/2;
+ const UINT16 src_pitch = 288 / 2;
+
+ for (y = cliprect.min_y; y <= cliprect.max_y; ++y)
{
- case TIMER_NAMCOIO_RUN:
- namcoio_run(ptr, param);
- break;
- default:
- assert_always(FALSE, "Unknown id in toypop_state::device_timer");
+ UINT16 *src = &m_bgvram[y * src_pitch + cliprect.min_x + src_base];
+ UINT16 *dst = &bitmap.pix16(y, cliprect.min_x);
+
+ for (x = cliprect.min_x; x <= cliprect.max_x; x += 2)
+ {
+ UINT32 srcpix = *src++;
+ *dst++ = m_palette->pen(((srcpix >> 8) & 0xf) + pal_base);
+ *dst++ = m_palette->pen((srcpix & 0xf) + pal_base);
+ }
}
}
-TIMER_CALLBACK_MEMBER(toypop_state::namcoio_run)
+void namcos16_state::legacy_fg_draw(bitmap_ind16 &bitmap,const rectangle &cliprect)
{
- switch (param)
+ gfx_element *gfx_0 = m_gfxdecode->gfx(0);
+ int count;
+
+ for (count=0;count<32*32;count++)
{
- case 0:
- m_namco58xx->customio_run();
- break;
- case 1:
- m_namco56xx_1->customio_run();
- break;
- case 2:
- m_namco56xx_2->customio_run();
- break;
+ int x;// = (count % 32);
+ int y; //= count / 32;
+
+ if(count < 64)
+ {
+ x = 34 + (count / 32);
+ y = (count % 32) - 2;
+ }
+ else if(count >= 32*30)
+ {
+ x = (count / 32) - 30;
+ y = (count % 32) - 2;
+ }
+ else
+ {
+ x = 2 + (count % 32);
+ y = (count / 32) - 2;
+ }
+
+ UINT16 tile = m_fgvram[count];
+ UINT8 color = (m_fgattr[count] & 0x3f) + 0x40;
+
+ gfx_0->transpen(bitmap,cliprect,tile,color,0,0,x*8,y*8,0);
}
}
-INTERRUPT_GEN_MEMBER(toypop_state::toypop_main_vblank_irq)
+UINT32 namcos16_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
{
- if(m_main_irq_mask)
- device.execute().set_input_line(0, HOLD_LINE);
-
- if (!m_namco58xx->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_NAMCOIO_RUN);
-
- if (!m_namco56xx_1->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_NAMCOIO_RUN, 1);
-
- if (!m_namco56xx_2->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_NAMCOIO_RUN, 2);
-
+ legacy_bg_draw(bitmap,cliprect);
+ legacy_fg_draw(bitmap,cliprect);
+ return 0;
}
-INTERRUPT_GEN_MEMBER(toypop_state::toypop_sound_timer_irq)
+READ8_MEMBER(namcos16_state::irq_enable_r)
{
- if(m_sound_irq_mask)
- device.execute().set_input_line(0, HOLD_LINE);
+ m_master_irq_enable = true;
+ return 0;
}
-WRITE8_MEMBER(toypop_state::toypop_sound_clear_w)
+WRITE8_MEMBER(namcos16_state::irq_disable_w)
{
- m_audiocpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
+ m_master_irq_enable = false;
}
-WRITE8_MEMBER(toypop_state::toypop_sound_assert_w)
+WRITE8_MEMBER(namcos16_state::slave_halt_ctrl_w)
{
- m_audiocpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
+ m_slave_cpu->set_input_line(INPUT_LINE_RESET,offset & 0x800 ? ASSERT_LINE : CLEAR_LINE);
}
-WRITE8_MEMBER(toypop_state::toypop_m68000_clear_w)
+WRITE8_MEMBER(namcos16_state::sound_halt_ctrl_w)
{
- m_subcpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
+ m_sound_cpu->set_input_line(INPUT_LINE_RESET,offset & 0x800 ? ASSERT_LINE : CLEAR_LINE);
}
-WRITE8_MEMBER(toypop_state::toypop_m68000_assert_w)
+READ8_MEMBER(namcos16_state::slave_shared_r)
{
- m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
+ return m_slave_sharedram[offset];
}
-void toypop_state::machine_reset()
+WRITE8_MEMBER(namcos16_state::slave_shared_w)
{
- m_main_irq_mask = 0;
- m_maincpu->set_input_line(0, CLEAR_LINE);
-
- m_sound_irq_mask = 0;
- m_audiocpu->set_input_line(0, CLEAR_LINE);
-
- m_interrupt_enable_68k = 0;
+ m_slave_sharedram[offset] = data;
}
-INTERRUPT_GEN_MEMBER(toypop_state::toypop_m68000_interrupt)
+WRITE16_MEMBER(namcos16_state::slave_irq_enable_w)
{
- if (m_interrupt_enable_68k)
- device.execute().set_input_line(6, HOLD_LINE);
+ m_slave_irq_enable = (offset & 0x40000) ? false : true;
}
-WRITE16_MEMBER(toypop_state::toypop_m68000_interrupt_enable_w)
-{
- m_interrupt_enable_68k = 1;
-}
+READ8_MEMBER(namcos16_state::dipA_l){ return ioport("DSW1")->read(); } // dips A
+READ8_MEMBER(namcos16_state::dipA_h){ return ioport("DSW1")->read() >> 4; } // dips A
+READ8_MEMBER(namcos16_state::dipB_l){ return ioport("DSW2")->read(); } // dips B
+READ8_MEMBER(namcos16_state::dipB_h){ return ioport("DSW2")->read() >> 4; } // dips B
-WRITE16_MEMBER(toypop_state::toypop_m68000_interrupt_disable_w)
+WRITE8_MEMBER(namcos16_state::flip)
{
- m_interrupt_enable_68k = 0;
+ flip_screen_set(data & 1);
}
-
-
-/*************************************
- *
- * Main CPU memory handlers
- *
- *************************************/
-
-static ADDRESS_MAP_START( liblrabl_map, AS_PROGRAM, 8, toypop_state )
- AM_RANGE(0x0000, 0x07ff) AM_RAM_WRITE(toypop_videoram_w) AM_SHARE("videoram") /* video RAM */
- AM_RANGE(0x0800, 0x1fff) AM_RAM AM_SHARE("spriteram") /* general RAM, area 1 */
- AM_RANGE(0x2800, 0x2fff) AM_RAM AM_SHARE("m68k_shared") /* shared RAM with the 68000 CPU */
- AM_RANGE(0x6000, 0x63ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with sound CPU */
- AM_RANGE(0x6800, 0x680f) AM_DEVREADWRITE("58xx", namco58xx_device, read, write) /* custom I/O */
- AM_RANGE(0x6810, 0x681f) AM_DEVREADWRITE("56xx_1", namco56xx_device, read, write) /* custom I/O */
- AM_RANGE(0x6820, 0x682f) AM_DEVREADWRITE("56xx_2", namco56xx_device, read, write) /* custom I/O */
- AM_RANGE(0x7000, 0x7000) AM_WRITE(toypop_main_interrupt_enable_w) /* enable interrupt */
- AM_RANGE(0x7800, 0x7800) AM_READ(watchdog_reset_r) AM_WRITE(toypop_main_interrupt_disable_w) /* disable interrupt */
- AM_RANGE(0x8000, 0x8000) AM_WRITE(toypop_m68000_clear_w) /* reset 68000 */
- AM_RANGE(0x8800, 0x8800) AM_WRITE(toypop_m68000_assert_w) /* reset 68000 */
- AM_RANGE(0x9000, 0x9000) AM_WRITE(toypop_sound_clear_w) /* sound CPU reset */
- AM_RANGE(0x9800, 0x9800) AM_WRITE(toypop_sound_assert_w) /* sound CPU reset */
- AM_RANGE(0xa000, 0xa001) AM_WRITE(toypop_palettebank_w) /* background image palette */
- AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM code */
+static ADDRESS_MAP_START( master_map, AS_PROGRAM, 8, namcos16_state )
+ AM_RANGE(0x0000, 0x03ff) AM_RAM AM_SHARE("fgvram")
+ AM_RANGE(0x0400, 0x07ff) AM_RAM AM_SHARE("fgattr")
+ AM_RANGE(0x0800, 0x1fff) AM_RAM
+ AM_RANGE(0x2800, 0x2fff) AM_RAM AM_SHARE("slave_sharedram")
+ // TODO: 0x6xxx-0x7xxx seems to be programmable somehow (PAL?)
+ AM_RANGE(0x6000, 0x600f) AM_DEVREADWRITE("58xx", namco58xx_device, read, write)
+ AM_RANGE(0x6010, 0x601f) AM_DEVREADWRITE("56xx_1", namco56xx_device, read, write)
+ AM_RANGE(0x6020, 0x602f) AM_DEVREADWRITE("56xx_2", namco56xx_device, read, write)
+ AM_RANGE(0x6800, 0x6bff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w)
+ AM_RANGE(0x7000, 0x7000) AM_READWRITE(irq_enable_r,irq_disable_w)
+
+ AM_RANGE(0x8000, 0x8fff) AM_WRITE(slave_halt_ctrl_w)
+ AM_RANGE(0x9000, 0x9fff) AM_WRITE(sound_halt_ctrl_w)
+ // 0xa000 palette bank
+ AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("master_rom",0)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( toypop_map, AS_PROGRAM, 8, toypop_state )
- AM_RANGE(0x0000, 0x07ff) AM_RAM_WRITE(toypop_videoram_w) AM_SHARE("videoram") /* video RAM */
- AM_RANGE(0x0800, 0x1fff) AM_RAM AM_SHARE("spriteram") /* general RAM, area 1 */
- AM_RANGE(0x2800, 0x2fff) AM_RAM AM_SHARE("m68k_shared") /* shared RAM with the 68000 CPU */
- AM_RANGE(0x6000, 0x600f) AM_DEVREADWRITE("58xx", namco58xx_device, read, write) /* custom I/O */
- AM_RANGE(0x6010, 0x601f) AM_DEVREADWRITE("56xx_1", namco56xx_device, read, write) /* custom I/O */
- AM_RANGE(0x6020, 0x602f) AM_DEVREADWRITE("56xx_2", namco56xx_device, read, write) /* custom I/O */
- AM_RANGE(0x6800, 0x6bff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with sound CPU */
- AM_RANGE(0x7000, 0x7000) AM_READWRITE(toypop_main_interrupt_enable_r, toypop_main_interrupt_disable_w) /* disable interrupt */
- AM_RANGE(0x8000, 0x8000) AM_WRITE(toypop_m68000_clear_w) /* reset 68000 */
- AM_RANGE(0x8800, 0x8800) AM_WRITE(toypop_m68000_assert_w) /* reset 68000 */
- AM_RANGE(0x9000, 0x9000) AM_WRITE(toypop_sound_clear_w) /* sound CPU reset */
- AM_RANGE(0x9800, 0x9800) AM_WRITE(toypop_sound_assert_w) /* sound CPU reset */
- AM_RANGE(0xa000, 0xa001) AM_WRITE(toypop_palettebank_w) /* background image palette */
- AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM code */
+static ADDRESS_MAP_START( slave_map, AS_PROGRAM, 16, namcos16_state )
+ AM_RANGE(0x000000, 0x007fff) AM_ROM AM_REGION("slave_rom", 0)
+ AM_RANGE(0x080000, 0x0bffff) AM_RAM
+ AM_RANGE(0x100000, 0x100fff) AM_READWRITE8(slave_shared_r,slave_shared_w,0x00ff)
+ AM_RANGE(0x190000, 0x1dffff) AM_RAM AM_SHARE("bgvram")
+ AM_RANGE(0x300000, 0x3fffff) AM_WRITE(slave_irq_enable_w)
ADDRESS_MAP_END
-
-/*************************************
- *
- * Sound CPU memory handlers
- *
- *************************************/
-
-static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, toypop_state )
- AM_RANGE(0x0000, 0x03ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the main CPU + sound registers */
- AM_RANGE(0x2000, 0x2000) AM_WRITE(toypop_sound_interrupt_disable_w) /* ??? toypop doesn't write here */
- AM_RANGE(0x4000, 0x4000) AM_WRITE(toypop_sound_interrupt_enable_acknowledge_w)
- AM_RANGE(0x6000, 0x6000) AM_WRITE(watchdog_reset_w)
- AM_RANGE(0xe000, 0xffff) AM_ROM
-ADDRESS_MAP_END
-
-
-
-/*************************************
- *
- * 68k CPU memory handlers
- *
- *************************************/
-
-static ADDRESS_MAP_START( m68k_map, AS_PROGRAM, 16, toypop_state )
- AM_RANGE(0x000000, 0x007fff) AM_ROM /* ROM code */
- AM_RANGE(0x080000, 0x0bffff) AM_RAM /* RAM */
- AM_RANGE(0x100000, 0x100fff) AM_READWRITE(toypop_m68000_sharedram_r, toypop_m68000_sharedram_w) /* shared RAM with the main CPU */
- AM_RANGE(0x180000, 0x187fff) AM_READWRITE(toypop_merged_background_r, toypop_merged_background_w) /* RAM that has to be merged with the background image */
- AM_RANGE(0x18fffc, 0x18ffff) AM_WRITE(toypop_flipscreen_w) /* flip mode */
- AM_RANGE(0x190000, 0x1dffff) AM_RAM AM_SHARE("bg_image") /* RAM containing the background image */
- AM_RANGE(0x300000, 0x300001) AM_WRITE(toypop_m68000_interrupt_enable_w) /* interrupt enable */
- AM_RANGE(0x380000, 0x380001) AM_WRITE(toypop_m68000_interrupt_disable_w)/* interrupt disable */
+static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, namcos16_state )
+ AM_RANGE(0x0000, 0x03ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w)
+ AM_RANGE(0xe000, 0xffff) AM_ROM AM_REGION("sound_rom", 0)
ADDRESS_MAP_END
-
static INPUT_PORTS_START( liblrabl )
/* The inputs are not memory mapped, they are handled by three I/O chips. */
PORT_START("P1_RIGHT") /* 58XX #0 pins 22-29 */
@@ -445,7 +477,6 @@ static INPUT_PORTS_START( toypop )
INPUT_PORTS_END
-
static const gfx_layout charlayout =
{
8,8,
@@ -475,170 +506,140 @@ static GFXDECODE_START( toypop )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 128*4, 64 )
GFXDECODE_END
-/***************************************************************************
-
- Custom I/O initialization
-
-***************************************************************************/
-
-READ8_MEMBER(toypop_state::dipA_l){ return ioport("DSW1")->read(); } // dips A
-READ8_MEMBER(toypop_state::dipA_h){ return ioport("DSW1")->read() >> 4; } // dips A
-READ8_MEMBER(toypop_state::dipB_l){ return ioport("DSW2")->read(); } // dips B
-READ8_MEMBER(toypop_state::dipB_h){ return ioport("DSW2")->read() >> 4; } // dips B
-
-WRITE8_MEMBER(toypop_state::out_coin0)
+void namcos16_state::machine_reset()
{
- machine().bookkeeping().coin_lockout_global_w(data & 4);
- machine().bookkeeping().coin_counter_w(0, ~data & 8);
+ m_master_irq_enable = false;
+ m_slave_irq_enable = false;
+ m_slave_cpu->set_input_line(INPUT_LINE_RESET,ASSERT_LINE);
+ m_sound_cpu->set_input_line(INPUT_LINE_RESET,ASSERT_LINE);
}
-WRITE8_MEMBER(toypop_state::out_coin1)
+INTERRUPT_GEN_MEMBER(namcos16_state::master_vblank_irq)
{
- machine().bookkeeping().coin_counter_w(1, ~data & 1);
+ if(m_master_irq_enable == true)
+ device.execute().set_input_line(M6809_IRQ_LINE,HOLD_LINE);
}
-WRITE8_MEMBER(toypop_state::flip)
+INTERRUPT_GEN_MEMBER(namcos16_state::slave_vblank_irq)
{
- flip_screen_set(data & 1);
+ if(m_slave_irq_enable == true)
+ device.execute().set_input_line(6,HOLD_LINE);
}
-static MACHINE_CONFIG_START( liblrabl, toypop_state )
+static MACHINE_CONFIG_START( liblrabl, namcos16_state )
+ MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK/4)
+ MCFG_CPU_PROGRAM_MAP(master_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", namcos16_state, master_vblank_irq)
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M6809, 1536000) /* 1.536 MHz (measured on Libble Rabble board) */
- MCFG_CPU_PROGRAM_MAP(liblrabl_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", toypop_state, toypop_main_vblank_irq)
+ MCFG_CPU_ADD("slave", M68000, MASTER_CLOCK)
+ MCFG_CPU_PROGRAM_MAP(slave_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", namcos16_state, slave_vblank_irq)
- MCFG_CPU_ADD("audiocpu", M6809, 1536000)
+ MCFG_CPU_ADD("audiocpu", M6809, MASTER_CLOCK/4)
MCFG_CPU_PROGRAM_MAP(sound_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", toypop_state, toypop_sound_timer_irq)
+ MCFG_CPU_PERIODIC_INT_DRIVER(namcos16_state, irq0_line_hold, 60)
+
+
- MCFG_CPU_ADD("sub", M68000, 6144000) /* 6.144 MHz (measured on Libble Rabble board) */
- MCFG_CPU_PROGRAM_MAP(m68k_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", toypop_state, toypop_m68000_interrupt)
-
- MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
- /* synchronization of the CPUs */
-
- MCFG_DEVICE_ADD("58xx", NAMCO58XX, 0)
+ MCFG_DEVICE_ADD("58xx", NAMCO58XX, 0)
MCFG_NAMCO58XX_IN_0_CB(IOPORT("COINS"))
MCFG_NAMCO58XX_IN_1_CB(IOPORT("P1_RIGHT"))
MCFG_NAMCO58XX_IN_2_CB(IOPORT("P2_RIGHT"))
MCFG_NAMCO58XX_IN_3_CB(IOPORT("BUTTONS"))
MCFG_DEVICE_ADD("56xx_1", NAMCO56XX, 0)
- MCFG_NAMCO56XX_IN_0_CB(READ8(toypop_state, dipA_h))
- MCFG_NAMCO56XX_IN_1_CB(READ8(toypop_state, dipB_l))
- MCFG_NAMCO56XX_IN_2_CB(READ8(toypop_state, dipB_h))
- MCFG_NAMCO56XX_IN_3_CB(READ8(toypop_state, dipA_l))
- MCFG_NAMCO56XX_OUT_0_CB(WRITE8(toypop_state, flip))
+ MCFG_NAMCO56XX_IN_0_CB(READ8(namcos16_state, dipA_h))
+ MCFG_NAMCO56XX_IN_1_CB(READ8(namcos16_state, dipB_l))
+ MCFG_NAMCO56XX_IN_2_CB(READ8(namcos16_state, dipB_h))
+ MCFG_NAMCO56XX_IN_3_CB(READ8(namcos16_state, dipA_l))
+ MCFG_NAMCO56XX_OUT_0_CB(WRITE8(namcos16_state, flip))
MCFG_DEVICE_ADD("56xx_2", NAMCO56XX, 0)
MCFG_NAMCO56XX_IN_1_CB(IOPORT("P1_LEFT"))
MCFG_NAMCO56XX_IN_2_CB(IOPORT("P2_LEFT"))
MCFG_NAMCO56XX_IN_3_CB(IOPORT("SERVICE"))
- /* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60.606060)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(36*8, 28*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(toypop_state, screen_update_toypop)
+ MCFG_SCREEN_SIZE(36*8, 32*8)
+ MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 32*8-1)
+ MCFG_SCREEN_UPDATE_DRIVER(namcos16_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", toypop)
MCFG_PALETTE_ADD("palette", 128*4+64*4+16*2)
MCFG_PALETTE_INDIRECT_ENTRIES(256)
- MCFG_PALETTE_INIT_OWNER(toypop_state, toypop)
+ MCFG_PALETTE_INIT_OWNER(namcos16_state, toypop)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
-
MCFG_SOUND_ADD("namco", NAMCO_15XX, 24000)
MCFG_NAMCO_AUDIO_VOICES(8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( toypop, liblrabl )
-
- /* basic machine hardware */
- MCFG_CPU_MODIFY("maincpu")
- MCFG_CPU_PROGRAM_MAP(toypop_map)
-
- MCFG_DEVICE_MODIFY("58xx")
- MCFG_NAMCO58XX_OUT_0_CB(WRITE8(toypop_state, out_coin0))
- MCFG_NAMCO58XX_OUT_1_CB(WRITE8(toypop_state, out_coin1))
MACHINE_CONFIG_END
-
-/*************************************
- *
- * ROM definitions
- *
- *************************************/
-
ROM_START( liblrabl )
- ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for the first CPU */
- ROM_LOAD( "5b.rom", 0x8000, 0x4000, CRC(da7a93c2) SHA1(fe4a02cdab66722eb7b8cf58825f899b1949a6a2) )
- ROM_LOAD( "5c.rom", 0xc000, 0x4000, CRC(6cae25dc) SHA1(de74317a7d5de1865d096c377923a764be5e6879) )
+ ROM_REGION( 0x8000, "master_rom", 0 )
+ ROM_LOAD( "5b.rom", 0x0000, 0x4000, CRC(da7a93c2) SHA1(fe4a02cdab66722eb7b8cf58825f899b1949a6a2) )
+ ROM_LOAD( "5c.rom", 0x4000, 0x4000, CRC(6cae25dc) SHA1(de74317a7d5de1865d096c377923a764be5e6879) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the second CPU */
- ROM_LOAD( "2c.rom", 0xe000, 0x2000, CRC(7c09e50a) SHA1(5f004d60bbb7355e008a9cda137b28bc2192b8ef) )
+ ROM_REGION( 0x2000, "sound_rom", 0 )
+ ROM_LOAD( "2c.rom", 0x0000, 0x2000, CRC(7c09e50a) SHA1(5f004d60bbb7355e008a9cda137b28bc2192b8ef) )
- ROM_REGION( 0x8000, "sub", 0 ) /* 32k for the third CPU */
- ROM_LOAD16_BYTE( "8c.rom", 0x0000, 0x4000, CRC(a00cd959) SHA1(cc5621103c31cfbc65941615cab391db0f74e6ce) )
- ROM_LOAD16_BYTE("10c.rom", 0x0001, 0x4000, CRC(09ce209b) SHA1(2ed46d6592f8227bac8ab54963d9a300706ade47) )
+ ROM_REGION( 0x8000, "slave_rom", 0 )
+ ROM_LOAD16_BYTE("8c.rom", 0x0001, 0x4000, CRC(a00cd959) SHA1(cc5621103c31cfbc65941615cab391db0f74e6ce) )
+ ROM_LOAD16_BYTE("10c.rom", 0x0000, 0x4000, CRC(09ce209b) SHA1(2ed46d6592f8227bac8ab54963d9a300706ade47) )
- /* temporary space for graphics (disposed after conversion) */
ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "5p.rom", 0x0000, 0x2000, CRC(3b4937f0) SHA1(06d9de576f1c2262c34aeb91054e68c9298af688) ) /* characters */
+ ROM_LOAD( "5p.rom", 0x0000, 0x2000, CRC(3b4937f0) SHA1(06d9de576f1c2262c34aeb91054e68c9298af688) )
ROM_REGION( 0x4000, "gfx2", 0 )
- ROM_LOAD( "9t.rom", 0x0000, 0x4000, CRC(a88e24ca) SHA1(eada133579f19de09255084dcdc386311606a335) ) /* sprites */
+ ROM_LOAD( "9t.rom", 0x0000, 0x4000, CRC(a88e24ca) SHA1(eada133579f19de09255084dcdc386311606a335) )
- ROM_REGION( 0x0600, "proms", 0 ) /* color proms */
- ROM_LOAD( "lr1-3.1r", 0x0000, 0x0100, CRC(f3ec0d07) SHA1(b0aad1fb6df79f202889600f486853995352f9c2) ) // palette: red component
- ROM_LOAD( "lr1-2.1s", 0x0100, 0x0100, CRC(2ae4f702) SHA1(838fdca9e91fea4f64a59880ac47c48973bb8fbf) ) // palette: green component
- ROM_LOAD( "lr1-1.1t", 0x0200, 0x0100, CRC(7601f208) SHA1(572d070ca387b780030ed5de38a8970b7cc14349) ) // palette: blue component
- ROM_LOAD( "lr1-5.5l", 0x0300, 0x0100, CRC(940f5397) SHA1(825a7bd78a8a08d30bad2e4890ae6e9ad88b36b8) ) /* characters */
- ROM_LOAD( "lr1-6.2p", 0x0400, 0x0200, CRC(a6b7f850) SHA1(7cfde16dfd5c4d5b876b4fbe4f924f1385932a93) ) /* sprites */
+ ROM_REGION( 0x0600, "proms", 0 )
+ ROM_LOAD( "lr1-3.1r", 0x0000, 0x0100, CRC(f3ec0d07) SHA1(b0aad1fb6df79f202889600f486853995352f9c2) )
+ ROM_LOAD( "lr1-2.1s", 0x0100, 0x0100, CRC(2ae4f702) SHA1(838fdca9e91fea4f64a59880ac47c48973bb8fbf) )
+ ROM_LOAD( "lr1-1.1t", 0x0200, 0x0100, CRC(7601f208) SHA1(572d070ca387b780030ed5de38a8970b7cc14349) )
+ ROM_LOAD( "lr1-5.5l", 0x0300, 0x0100, CRC(940f5397) SHA1(825a7bd78a8a08d30bad2e4890ae6e9ad88b36b8) )
+ ROM_LOAD( "lr1-6.2p", 0x0400, 0x0200, CRC(a6b7f850) SHA1(7cfde16dfd5c4d5b876b4fbe4f924f1385932a93) )
- ROM_REGION( 0x0100, "namco", 0 ) /* sound prom */
+ ROM_REGION( 0x0100, "namco", 0 )
ROM_LOAD( "lr1-4.3d", 0x0000, 0x0100, CRC(16a9166a) SHA1(847cbaf7c88616576c410177e066ae1d792ac0ba) )
ROM_END
ROM_START( toypop )
- ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for the first CPU */
- ROM_LOAD( "tp1-2.5b", 0x8000, 0x4000, CRC(87469620) SHA1(2ee257486c9c044386ac7d0cd4a90583eaeb3e97) )
- ROM_LOAD( "tp1-1.5c", 0xc000, 0x4000, CRC(dee2fd6e) SHA1(b2c12008d6d3e7544ba3c12a52a6abf9181842c8) )
+ ROM_REGION( 0x8000, "master_rom", 0 )
+ ROM_LOAD( "tp1-2.5b", 0x0000, 0x4000, CRC(87469620) SHA1(2ee257486c9c044386ac7d0cd4a90583eaeb3e97) )
+ ROM_LOAD( "tp1-1.5c", 0x4000, 0x4000, CRC(dee2fd6e) SHA1(b2c12008d6d3e7544ba3c12a52a6abf9181842c8) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the second CPU */
- ROM_LOAD( "tp1-3.2c", 0xe000, 0x2000, CRC(5f3bf6e2) SHA1(d1b3335661b9b23cb10001416c515b77b5e783e9) )
+ ROM_REGION( 0x2000, "sound_rom", 0 )
+ ROM_LOAD( "tp1-3.2c", 0x0000, 0x2000, CRC(5f3bf6e2) SHA1(d1b3335661b9b23cb10001416c515b77b5e783e9) )
- ROM_REGION( 0x8000, "sub", 0 ) /* 32k for the third CPU */
- ROM_LOAD16_BYTE( "tp1-4.8c", 0x0000, 0x4000, CRC(76997db3) SHA1(5023a2f20a5f2c9baff130f6832583493c71f883) )
- ROM_LOAD16_BYTE("tp1-5.10c", 0x0001, 0x4000, CRC(37de8786) SHA1(710365e34c05d01815844c414518f93234b6160b) )
+ ROM_REGION( 0x8000, "slave_rom", 0 )
+ ROM_LOAD16_BYTE("tp1-4.8c", 0x0001, 0x4000, CRC(76997db3) SHA1(5023a2f20a5f2c9baff130f6832583493c71f883) )
+ ROM_LOAD16_BYTE("tp1-5.10c", 0x0000, 0x4000, CRC(37de8786) SHA1(710365e34c05d01815844c414518f93234b6160b) )
- /* temporary space for graphics (disposed after conversion) */
ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "tp1-7.5p", 0x0000, 0x2000, CRC(95076f9e) SHA1(1e3d32b21f6d46591ec3921aba51f672d64a9023) ) /* characters */
+ ROM_LOAD( "tp1-7.5p", 0x0000, 0x2000, CRC(95076f9e) SHA1(1e3d32b21f6d46591ec3921aba51f672d64a9023) )
ROM_REGION( 0x4000, "gfx2", 0 )
- ROM_LOAD( "tp1-6.9t", 0x0000, 0x4000, CRC(481ffeaf) SHA1(c51735ad3a1dbb46ad414408b54554e9223b2219) ) /* sprites */
+ ROM_LOAD( "tp1-6.9t", 0x0000, 0x4000, CRC(481ffeaf) SHA1(c51735ad3a1dbb46ad414408b54554e9223b2219) )
- ROM_REGION( 0x0600, "proms", 0 ) /* color proms */
- ROM_LOAD( "tp1-3.1r", 0x0000, 0x0100, CRC(cfce2fa5) SHA1(b42aa0f34d885389d2650bf7a0531b95703b8a28) ) // palette: red component
- ROM_LOAD( "tp1-2.1s", 0x0100, 0x0100, CRC(aeaf039d) SHA1(574560526100d38635aecd71eb73499c4f57d586) ) // palette: green component
- ROM_LOAD( "tp1-1.1t", 0x0200, 0x0100, CRC(08e7cde3) SHA1(5261aca6834d635d17f8afaa8e35848930030ba4) ) // palette: blue component
- ROM_LOAD( "tp1-4.5l", 0x0300, 0x0100, CRC(74138973) SHA1(2e21dbb1b19dd089da52e70fcb0ca91336e004e6) ) /* characters */
- ROM_LOAD( "tp1-5.2p", 0x0400, 0x0200, CRC(4d77fa5a) SHA1(2438910314b23ecafb553230244f3931861ad2da) ) /* sprites */
+ ROM_REGION( 0x0600, "proms", 0 )
+ ROM_LOAD( "tp1-3.1r", 0x0000, 0x0100, CRC(cfce2fa5) SHA1(b42aa0f34d885389d2650bf7a0531b95703b8a28) )
+ ROM_LOAD( "tp1-2.1s", 0x0100, 0x0100, CRC(aeaf039d) SHA1(574560526100d38635aecd71eb73499c4f57d586) )
+ ROM_LOAD( "tp1-1.1t", 0x0200, 0x0100, CRC(08e7cde3) SHA1(5261aca6834d635d17f8afaa8e35848930030ba4) )
+ ROM_LOAD( "tp1-4.5l", 0x0300, 0x0100, CRC(74138973) SHA1(2e21dbb1b19dd089da52e70fcb0ca91336e004e6) )
+ ROM_LOAD( "tp1-5.2p", 0x0400, 0x0200, CRC(4d77fa5a) SHA1(2438910314b23ecafb553230244f3931861ad2da) )
- ROM_REGION( 0x0100, "namco", 0 ) /* sound prom */
+ ROM_REGION( 0x0100, "namco", 0 )
ROM_LOAD( "tp1-6.3d", 0x0000, 0x0100, CRC(16a9166a) SHA1(847cbaf7c88616576c410177e066ae1d792ac0ba) )
ROM_END
-// YEAR, NAME, PARENT,MACHINE, INPUT, INIT,MONITOR,COMPANY,FULLNAME,FLAGS
-GAME( 1983, liblrabl, 0, liblrabl, liblrabl, driver_device, 0, ROT0, "Namco", "Libble Rabble", 0 )
-GAME( 1986, toypop, 0, toypop, toypop, driver_device, 0, ROT0, "Namco", "Toypop", 0 )
+GAME( 1983, liblrabl, 0, liblrabl, liblrabl, driver_device, 0, ROT0, "Namco", "Libble Rabble", MACHINE_IS_SKELETON )
+GAME( 1986, toypop, 0, toypop, toypop, driver_device, 0, ROT0, "Namco", "Toypop", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/trackfld.cpp b/src/mame/drivers/trackfld.cpp
index c898f8d4bde..4f8a41ef80a 100644
--- a/src/mame/drivers/trackfld.cpp
+++ b/src/mame/drivers/trackfld.cpp
@@ -1266,6 +1266,52 @@ ROM_START( hyprolymba )
ROM_LOAD( "pal16l8.e6", 0x0200, 0x0104, CRC(122f23e6) SHA1(d178510843a46f043ecafaa44d95bb590ad67fb0) )
ROM_END
+ROM_START( hipoly )
+ /* These ROM's are located on the CPU/Video Board */
+ ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_LOAD( "2.1a", 0x6000, 0x2000, CRC(82257fb7) SHA1(4a5038292e582d5c3b5f2d82b01c57ccb24f3095) ) // only one byte of difference with hyprolymba
+ ROM_LOAD( "2.2a", 0x8000, 0x2000, CRC(15b83099) SHA1(79827590d74f20c9a95723e06b05af2b15c34f5f) ) // ok
+ ROM_LOAD( "2.4a", 0xa000, 0x2000, CRC(93a32a97) SHA1(4fbb2fcdf9bc7a3d273dbc27b8157f163ff9bf11) ) // too different... maybe a bad dump?
+ ROM_LOAD( "2.5a", 0xc000, 0x2000, CRC(d099b1e8) SHA1(0472991ad6caef41ec6b8ec8bf3d9d07584a57cc) ) // ok
+ ROM_LOAD( "2.7a", 0xe000, 0x2000, CRC(974ff815) SHA1(11512df2008a79ba44bbb84bd70885f187113211) ) // ok
+
+ /* These ROM's are located on the Sound Board */
+ ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_LOAD( "1.2c", 0x0000, 0x2000, CRC(95bf79b6) SHA1(ea9135acd7ad162c19c5cdde356e69792d61b675) )
+
+ /* These ROM's are located on the Sound Board */
+ ROM_REGION( 0x10000, "adpcm", 0 ) /* 64k for the 6802 which plays ADPCM samples */
+ ROM_LOAD( "1.11d", 0x8000, 0x2000, CRC(102d3a78) SHA1(0587e87c579f6d333fb1793d20eb7a3c769fbd11) )
+ ROM_LOAD( "1.10d", 0xa000, 0x2000, CRC(e9919365) SHA1(bd11d6e3ee2c6e698159c2768e315389d666107f) )
+ ROM_LOAD( "1.11c", 0xc000, 0x2000, CRC(c3ec42e1) SHA1(048a95726c4f031552e629c3788952c1bc5e7251) )
+ ROM_LOAD( "1.10c", 0xe000, 0x2000, CRC(76998389) SHA1(499189b0e20296af88712199b93b958655083608) )
+
+ /* These ROM's are located on the CPU/Video Board */
+ ROM_REGION( 0x8000, "gfx1", 0 )
+ ROM_LOAD( "2.18a", 0x0000, 0x2000, CRC(8d28864f) SHA1(b6827592095543c92384a7e8b817a741d249cff8) )
+ ROM_LOAD( "2.19a", 0x2000, 0x2000, CRC(800ff1f1) SHA1(33d73b18903e3e6bfb30f1a06db4b8105d4040d8) )
+ ROM_LOAD( "2.21a", 0x4000, 0x2000, CRC(d9faf183) SHA1(4448b6242790783d37acf50704d597af5878c2ab) )
+ ROM_LOAD( "2.22a", 0x6000, 0x2000, CRC(5886c802) SHA1(884a12a8f63600da4f23b29be6dbaacef37add20) )
+
+ /* These ROM's are located on the CPU/Video Board */
+ ROM_REGION( 0x6000, "gfx2", 0 )
+ ROM_LOAD( "2.22h", 0x0000, 0x2000, CRC(6c107a9c) SHA1(139e99b126aad16223573ef987adc94d96d17857) )
+ ROM_LOAD( "2.21h", 0x2000, 0x2000, CRC(21847e56) SHA1(dcc4f6e85e7125a6dfa2de9874f6adf8382e019c) )
+ ROM_LOAD( "2.19h", 0x4000, 0x2000, CRC(c2166a5c) SHA1(5ba25900e653ce4edcf35f1fbce758a327a715ce) )
+
+ /* These PROM's are located on the CPU/Video Board, borrowed from other sets */
+ ROM_REGION( 0x0220, "proms", 0 )
+ ROM_LOAD( "361b16.e1", 0x0000, 0x0020, CRC(d55f30b5) SHA1(4d6a851f4886778307f75771645078b97ad55f5f) ) /* palette */
+ ROM_LOAD( "361b17.b15", 0x0020, 0x0100, CRC(d2ba4d32) SHA1(894b5cedf01ba9225a0d6215291857e455b84903) ) /* sprite lookup table */
+ ROM_LOAD( "361b18.f22", 0x0120, 0x0100, CRC(053e5861) SHA1(6740a62cf7b6938a4f936a2fed429704612060a5) ) /* char lookup table */
+
+ /* These PAL's are located on the CPU/Video Board */
+ ROM_REGION( 0x0400, "plds", 0 )
+ ROM_LOAD( "pal16l8.e4", 0x0000, 0x0104, NO_DUMP )
+ ROM_LOAD( "pal16l8.e6", 0x0200, 0x0104, NO_DUMP )
+ROM_END
+
+
ROM_START( atlantol )
ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
ROM_LOAD( "atl37", 0x00000, 0x10000, CRC(aca8da51) SHA1(50e96fd8496ed32e11eb43bcbfd468ce566caa47) )
@@ -1556,6 +1602,7 @@ GAME( 1983, trackfldc, trackfld, trackfld, trackfld, trackfld_state, trackfld, R
GAME( 1983, hyprolym, trackfld, trackfld, trackfld, trackfld_state, trackfld, ROT0, "Konami", "Hyper Olympic", MACHINE_SUPPORTS_SAVE )
GAME( 1983, hyprolymb, trackfld, hyprolyb, trackfld, trackfld_state, trackfld, ROT0, "bootleg", "Hyper Olympic (bootleg, set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1983, hyprolymba,trackfld, hyprolyb, trackfld, trackfld_state, trackfld, ROT0, "bootleg", "Hyper Olympic (bootleg, set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1983, hipoly, trackfld, hyprolyb, trackfld, trackfld_state, trackfld, ROT0, "bootleg", "Hipoly (bootleg of Hyper Olympic)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 1996, atlantol, trackfld, atlantol, atlantol, trackfld_state, atlantol, ROT0, "bootleg", "Atlant Olimpic", MACHINE_SUPPORTS_SAVE )
GAME( 1982, trackfldnz,trackfld, trackfld, trackfld, trackfld_state, trackfldnz,ROT0, "bootleg? (Goldberg Enterprizes Inc.)", "Track & Field (NZ bootleg?)", MACHINE_SUPPORTS_SAVE) // bootleg of the Centuri version
diff --git a/src/mame/drivers/trs80.cpp b/src/mame/drivers/trs80.cpp
index 8a9c0c3af24..a946124cbe4 100644
--- a/src/mame/drivers/trs80.cpp
+++ b/src/mame/drivers/trs80.cpp
@@ -574,7 +574,7 @@ static MACHINE_CONFIG_START( trs80, trs80_state ) // the original model I,
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", trs80)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/trs80m2.cpp b/src/mame/drivers/trs80m2.cpp
index 9c84301cc74..e642a894edd 100644
--- a/src/mame/drivers/trs80m2.cpp
+++ b/src/mame/drivers/trs80m2.cpp
@@ -706,14 +706,14 @@ static MACHINE_CONFIG_START( trs80m2, trs80m2_state )
MCFG_CPU_IO_MAP(z80_io)
// video hardware
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_UPDATE_DRIVER(trs80m2_state, screen_update)
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 479)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_12_48MHz/8)
MCFG_MC6845_SHOW_BORDER_AREA(true)
@@ -796,14 +796,14 @@ static MACHINE_CONFIG_START( trs80m16, trs80m16_state )
MCFG_DEVICE_DISABLE()
// video hardware
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_UPDATE_DRIVER(trs80m2_state, screen_update)
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 479)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_12_48MHz/8)
MCFG_MC6845_SHOW_BORDER_AREA(true)
diff --git a/src/mame/drivers/ts803.cpp b/src/mame/drivers/ts803.cpp
index f706f95a693..c18f41cfda2 100644
--- a/src/mame/drivers/ts803.cpp
+++ b/src/mame/drivers/ts803.cpp
@@ -496,12 +496,12 @@ static MACHINE_CONFIG_START( ts803, ts803_state )
MCFG_CPU_CONFIG(daisy_chain)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_SIZE(640,240)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 240-1)
MCFG_SCREEN_UPDATE_DEVICE("crtc", sy6545_1_device, screen_update)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* crtc */
MCFG_MC6845_ADD("crtc", SY6545_1, "screen", 13608000 / 8)
diff --git a/src/mame/drivers/tsamurai.cpp b/src/mame/drivers/tsamurai.cpp
index f157d504367..7cd2d5de543 100644
--- a/src/mame/drivers/tsamurai.cpp
+++ b/src/mame/drivers/tsamurai.cpp
@@ -6,6 +6,8 @@
TODO:
- colors for this HW are a complete mystery and probably needs HW tests.
+ - vsgongf sets 0 as player color in work RAM 0xc502 and it's never ever
+ set up properly. Assume protection related issue.
driver by Phil Stroffolino
@@ -721,7 +723,7 @@ static MACHINE_CONFIG_START( tsamurai, tsamurai_state )
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 8, 255-8)
+ MCFG_SCREEN_VISIBLE_AREA(0, 255, 16, 255-16)
MCFG_SCREEN_UPDATE_DRIVER(tsamurai_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
@@ -762,7 +764,7 @@ static MACHINE_CONFIG_START( vsgongf, tsamurai_state )
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 8, 255-8)
+ MCFG_SCREEN_VISIBLE_AREA(0, 255, 16, 255-16)
MCFG_SCREEN_UPDATE_DRIVER(tsamurai_state, screen_update_vsgongf)
MCFG_SCREEN_PALETTE("palette")
@@ -807,7 +809,7 @@ static MACHINE_CONFIG_START( m660, tsamurai_state )
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 8, 255-8)
+ MCFG_SCREEN_VISIBLE_AREA(0, 255, 16, 255-16)
MCFG_SCREEN_UPDATE_DRIVER(tsamurai_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
@@ -1264,7 +1266,7 @@ ROM_START( ringfgt2 )
ROM_LOAD( "clr.6p", 0x200, 0x0100, CRC(0e4fd17a) SHA1(d4e32bd9dd903177af61f77976a25c5db1467bba) )
ROM_END
-GAME( 1984, vsgongf, 0, vsgongf, vsgongf, driver_device, 0, ROT90, "Kaneko", "VS Gong Fight", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
+GAME( 1984, vsgongf, 0, vsgongf, vsgongf, driver_device, 0, ROT90, "Kaneko", "VS Gong Fight", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION )
GAME( 1984, ringfgt, vsgongf, vsgongf, vsgongf, driver_device, 0, ROT90, "Kaneko (Taito license)", "Ring Fighter (set 1)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
GAME( 1984, ringfgt2, vsgongf, vsgongf, vsgongf, driver_device, 0, ROT90, "Kaneko (Taito license)", "Ring Fighter (set 2)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/tsispch.cpp b/src/mame/drivers/tsispch.cpp
index 7617c1fb7ef..54bd3e0d04d 100644
--- a/src/mame/drivers/tsispch.cpp
+++ b/src/mame/drivers/tsispch.cpp
@@ -132,23 +132,22 @@
*****************************************************************************/
WRITE_LINE_MEMBER(tsispch_state::i8251_rxrdy_int)
{
- machine().device<pic8259_device>("pic8259")->ir1_w(state);
+ m_pic->ir1_w(state);
}
WRITE_LINE_MEMBER(tsispch_state::i8251_txempty_int)
{
- machine().device<pic8259_device>("pic8259")->ir2_w(state);
+ m_pic->ir2_w(state);
}
WRITE_LINE_MEMBER(tsispch_state::i8251_txrdy_int)
{
- machine().device<pic8259_device>("pic8259")->ir3_w(state);
+ m_pic->ir3_w(state);
}
WRITE8_MEMBER( tsispch_state::i8251_rxd )
{
- i8251_device *uart = machine().device<i8251_device>("i8251a_u15");
- uart->receive_character(data);
+ m_uart->receive_character(data);
}
/*****************************************************************************
diff --git a/src/mame/drivers/tvgame.cpp b/src/mame/drivers/tvgame.cpp
index 44ede341caf..c667bce0570 100644
--- a/src/mame/drivers/tvgame.cpp
+++ b/src/mame/drivers/tvgame.cpp
@@ -105,7 +105,7 @@ static MACHINE_CONFIG_START( tvgame, tvgame_state )
MCFG_SCREEN_SIZE(216, 213)
MCFG_SCREEN_VISIBLE_AREA(0, 215, 0, 212)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/uknc.cpp b/src/mame/drivers/uknc.cpp
index af546c28b6e..b7d97e481d2 100644
--- a/src/mame/drivers/uknc.cpp
+++ b/src/mame/drivers/uknc.cpp
@@ -76,7 +76,7 @@ static MACHINE_CONFIG_START( uknc, uknc_state )
MCFG_SCREEN_UPDATE_DRIVER(uknc_state, screen_update_uknc)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/undrfire.cpp b/src/mame/drivers/undrfire.cpp
index 25e7dda6841..65e79c5acee 100644
--- a/src/mame/drivers/undrfire.cpp
+++ b/src/mame/drivers/undrfire.cpp
@@ -711,7 +711,7 @@ static MACHINE_CONFIG_START( undrfire, undrfire_state )
MCFG_TC0480SCP_PALETTE("palette")
/* sound hardware */
- MCFG_FRAGMENT_ADD(taito_en_sound)
+ MCFG_DEVICE_ADD("taito_en", TAITO_EN, 0)
MACHINE_CONFIG_END
@@ -760,7 +760,7 @@ static MACHINE_CONFIG_START( cbombers, undrfire_state )
MCFG_TC0480SCP_PALETTE("palette")
/* sound hardware */
- MCFG_FRAGMENT_ADD(taito_en_sound)
+ MCFG_DEVICE_ADD("taito_en", TAITO_EN, 0)
MACHINE_CONFIG_END
@@ -775,7 +775,7 @@ ROM_START( undrfire )
ROM_LOAD32_BYTE( "d67-17", 0x00002, 0x80000, CRC(34e030b7) SHA1(62c270c817199a56e647ea74849fe5c07717ac18) )
ROM_LOAD32_BYTE( "d67-23", 0x00003, 0x80000, CRC(28e84e0a) SHA1(74c73c6df07d33ef4c0a29f8c1ee1a33eee922da) )
- ROM_REGION( 0x140000, "audiocpu", 0 )
+ ROM_REGION( 0x140000, "taito_en:audiocpu", 0 )
ROM_LOAD16_BYTE( "d67-20", 0x100000, 0x20000, CRC(974ebf69) SHA1(8a5de503c514bf0da0c956e2dfdf0cfb83ea1f72) )
ROM_LOAD16_BYTE( "d67-21", 0x100001, 0x20000, CRC(8fc6046f) SHA1(28522ce5c5900f74d3faa86710256a7201b32500) )
@@ -815,7 +815,7 @@ ROM_START( undrfireu )
ROM_LOAD32_BYTE( "d67-17", 0x00002, 0x80000, CRC(34e030b7) SHA1(62c270c817199a56e647ea74849fe5c07717ac18) )
ROM_LOAD32_BYTE( "d67-22", 0x00003, 0x80000, CRC(5fef7e9c) SHA1(03a6ea0715ce8705d74550186b22940f8a49c088) )
- ROM_REGION( 0x140000, "audiocpu", 0 )
+ ROM_REGION( 0x140000, "taito_en:audiocpu", 0 )
ROM_LOAD16_BYTE( "d67-20", 0x100000, 0x20000, CRC(974ebf69) SHA1(8a5de503c514bf0da0c956e2dfdf0cfb83ea1f72) )
ROM_LOAD16_BYTE( "d67-21", 0x100001, 0x20000, CRC(8fc6046f) SHA1(28522ce5c5900f74d3faa86710256a7201b32500) )
@@ -854,7 +854,7 @@ ROM_START( undrfirej )
ROM_LOAD32_BYTE( "d67-17", 0x00002, 0x80000, CRC(34e030b7) SHA1(62c270c817199a56e647ea74849fe5c07717ac18) )
ROM_LOAD32_BYTE( "d67-16", 0x00003, 0x80000, CRC(c6e62f26) SHA1(6a430916f829a4b0240ccf8477dcbb1f39a26e90) )
- ROM_REGION( 0x140000, "audiocpu", 0 )
+ ROM_REGION( 0x140000, "taito_en:audiocpu", 0 )
ROM_LOAD16_BYTE( "d67-20", 0x100000, 0x20000, CRC(974ebf69) SHA1(8a5de503c514bf0da0c956e2dfdf0cfb83ea1f72) )
ROM_LOAD16_BYTE( "d67-21", 0x100001, 0x20000, CRC(8fc6046f) SHA1(28522ce5c5900f74d3faa86710256a7201b32500) )
@@ -893,7 +893,7 @@ ROM_START( cbombers )
ROM_LOAD32_BYTE( "d83_40.ic3", 0x00002, 0x80000, CRC(b05f59ea) SHA1(e46a31737f44be2a3d478b8010fe0d6383290e03) )
ROM_LOAD32_BYTE( "d83_38.ic16", 0x00003, 0x80000, CRC(0a10616c) SHA1(c9cfc8c870f8a989f004d2db4f6fb76e5b7b7f9b) )
- ROM_REGION( 0x140000, "audiocpu", 0 ) /* Sound cpu */
+ ROM_REGION( 0x140000, "taito_en:audiocpu", 0 ) /* Sound cpu */
ROM_LOAD16_BYTE( "d83_26.ic37", 0x100000, 0x20000, CRC(4f49b484) SHA1(96daa3cb7fa4aae3aedc91ec27d85945311dfcc9) )
ROM_LOAD16_BYTE( "d83_27.ic38", 0x100001, 0x20000, CRC(2aa1a237) SHA1(b809f75bbbbb4eb5d0df725aaa31aae8a6fba552) )
@@ -947,7 +947,7 @@ ROM_START( cbombersj )
ROM_LOAD32_BYTE( "d83_35.ic3", 0x00002, 0x80000, CRC(b0379b1e) SHA1(fc398f5f67d1347b594563a3703db4c0e01d5dff) )
ROM_LOAD32_BYTE( "d83_33.ic16", 0x00003, 0x80000, CRC(72fb42a7) SHA1(7c0b02be604b8b90c444a973962d4b29a5b8b047) )
- ROM_REGION( 0x140000, "audiocpu", 0 ) /* Sound cpu */
+ ROM_REGION( 0x140000, "taito_en:audiocpu", 0 ) /* Sound cpu */
ROM_LOAD16_BYTE( "d83_26.ic37", 0x100000, 0x20000, CRC(4f49b484) SHA1(96daa3cb7fa4aae3aedc91ec27d85945311dfcc9) )
ROM_LOAD16_BYTE( "d83_27.ic38", 0x100001, 0x20000, CRC(2aa1a237) SHA1(b809f75bbbbb4eb5d0df725aaa31aae8a6fba552) )
@@ -1003,7 +1003,7 @@ ROM_START( cbombersp )
ROM_LOAD32_BYTE( "lh.bin", 0x00002, 0x80000, CRC(77ad9acb) SHA1(73bc156c377d42e7c752d71686ca5ad3dc506053) )
ROM_LOAD32_BYTE( "ll.bin", 0x00003, 0x80000, CRC(54c060a5) SHA1(7623eb418734d2adc4e913b5a99d4caeb857b3ac) )
- ROM_REGION( 0x140000, "audiocpu", 0 ) // Sound cpu
+ ROM_REGION( 0x140000, "taito_en:audiocpu", 0 ) // Sound cpu
ROM_LOAD16_BYTE( "ic47_eprg_h_up_c5c5.bin", 0x100000, 0x20000, CRC(cb0d11b1) SHA1(0ac192f31f531defe088ed899aadbaa0798df4d6) )
ROM_LOAD16_BYTE( "ic46_eprg_l_low_d5e.bin", 0x100001, 0x20000, CRC(567ae215) SHA1(32d40d1c24e014ffb52a81df4a0d5adb20f0048c) )
diff --git a/src/mame/drivers/univac.cpp b/src/mame/drivers/univac.cpp
index 588b2a1bc39..b8131c8c5cb 100644
--- a/src/mame/drivers/univac.cpp
+++ b/src/mame/drivers/univac.cpp
@@ -173,14 +173,14 @@ static MACHINE_CONFIG_START( uts20, univac_state )
MCFG_CPU_CONFIG(daisy_chain)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DRIVER(univac_state, screen_update)
MCFG_SCREEN_SIZE(640, 250)
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_NVRAM_ADD_1FILL("nvram")
MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL_4MHz)
diff --git a/src/mame/drivers/unixpc.cpp b/src/mame/drivers/unixpc.cpp
index 1e08d3b6574..4e8259840c7 100644
--- a/src/mame/drivers/unixpc.cpp
+++ b/src/mame/drivers/unixpc.cpp
@@ -200,7 +200,7 @@ static MACHINE_CONFIG_START( unixpc, unixpc_state )
MCFG_DEFAULT_LAYOUT(layout_unixpc)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
// internal ram
MCFG_RAM_ADD(RAM_TAG)
diff --git a/src/mame/drivers/ut88.cpp b/src/mame/drivers/ut88.cpp
index adcb42cf7e6..8849215091a 100644
--- a/src/mame/drivers/ut88.cpp
+++ b/src/mame/drivers/ut88.cpp
@@ -194,7 +194,7 @@ static MACHINE_CONFIG_START( ut88, ut88_state )
MCFG_SCREEN_UPDATE_DRIVER(ut88_state, screen_update_ut88)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ut88 )
/* audio hardware */
diff --git a/src/mame/drivers/v6809.cpp b/src/mame/drivers/v6809.cpp
index 6acbf18954e..df1ef0cb255 100644
--- a/src/mame/drivers/v6809.cpp
+++ b/src/mame/drivers/v6809.cpp
@@ -308,7 +308,7 @@ static MACHINE_CONFIG_START( v6809, v6809_state )
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
MCFG_SCREEN_UPDATE_DEVICE("crtc", sy6545_1_device, screen_update)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", v6809)
/* sound hardware */
diff --git a/src/mame/drivers/victor9k.cpp b/src/mame/drivers/victor9k.cpp
index 6c48143b051..b01d0d9fe37 100644
--- a/src/mame/drivers/victor9k.cpp
+++ b/src/mame/drivers/victor9k.cpp
@@ -464,14 +464,14 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state )
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE(I8259A_TAG, pic8259_device, inta_cb)
// video hardware
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
MCFG_SCREEN_UPDATE_DEVICE(HD46505S_TAG, hd6845_device, screen_update)
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette")
+ MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
MCFG_MC6845_ADD(HD46505S_TAG, HD6845, SCREEN_TAG, XTAL_30MHz/11) // HD6845 == HD46505S
MCFG_MC6845_SHOW_BORDER_AREA(true)
diff --git a/src/mame/drivers/videopin.cpp b/src/mame/drivers/videopin.cpp
index 160a1b0307a..38b0603cd79 100644
--- a/src/mame/drivers/videopin.cpp
+++ b/src/mame/drivers/videopin.cpp
@@ -371,7 +371,7 @@ static MACHINE_CONFIG_START( videopin, videopin_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", videopin)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/vindictr.cpp b/src/mame/drivers/vindictr.cpp
index ade2ce54585..be840d5bd59 100644
--- a/src/mame/drivers/vindictr.cpp
+++ b/src/mame/drivers/vindictr.cpp
@@ -234,9 +234,8 @@ ROM_START( vindictr )
ROM_LOAD16_BYTE( "136059-5121.k1", 0x040000, 0x010000, CRC(96b150c5) SHA1(405c848f7990c981fefd355ca635bfb0ac24eb26) )
ROM_LOAD16_BYTE( "136059-5122.k3", 0x040001, 0x010000, CRC(6415d312) SHA1(0115e32c1c42421cb3d978cc8642f7f88d492043) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "136059-1124.2k", 0x010000, 0x004000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) )
@@ -272,9 +271,8 @@ ROM_START( vindictre )
ROM_LOAD16_BYTE( "136059-5721.k1", 0x040000, 0x010000, CRC(96b150c5) SHA1(405c848f7990c981fefd355ca635bfb0ac24eb26) )
ROM_LOAD16_BYTE( "136059-5722.k3", 0x040001, 0x010000, CRC(6415d312) SHA1(0115e32c1c42421cb3d978cc8642f7f88d492043) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "136059-1124.2k", 0x010000, 0x004000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) )
@@ -310,9 +308,8 @@ ROM_START( vindictrg )
ROM_LOAD16_BYTE( "136059-1221.k1", 0x040000, 0x010000, CRC(ee1b1014) SHA1(ddfe01cdec4654a42c9e49660e3532e5c865a9b7) )
ROM_LOAD16_BYTE( "136059-1222.k3", 0x040001, 0x010000, CRC(517b33f0) SHA1(f6430862bb00e11a68e964c89adcad1f05bc021b) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "136059-1124.2k", 0x010000, 0x004000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) )
@@ -348,9 +345,8 @@ ROM_START( vindictre4 )
ROM_LOAD16_BYTE( "136059-4121.k1", 0x040000, 0x010000, CRC(9a0444ee) SHA1(211be931a8b6ca42dd140baf3e165ce23f75431f) )
ROM_LOAD16_BYTE( "136059-4122.k3", 0x040001, 0x010000, CRC(d5022d78) SHA1(eeb6876ee6994f5736114a786c5c4ba97f26ef01) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "136059-1124.2k", 0x010000, 0x004000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) )
@@ -386,9 +382,8 @@ ROM_START( vindictr4 )
ROM_LOAD16_BYTE( "136059-4121.k1", 0x040000, 0x010000, CRC(9a0444ee) SHA1(211be931a8b6ca42dd140baf3e165ce23f75431f) )
ROM_LOAD16_BYTE( "136059-4122.k3", 0x040001, 0x010000, CRC(d5022d78) SHA1(eeb6876ee6994f5736114a786c5c4ba97f26ef01) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "136059-1124.2k", 0x010000, 0x004000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) )
@@ -424,9 +419,8 @@ ROM_START( vindictre3 )
ROM_LOAD16_BYTE( "136059-2121.k1", 0x040000, 0x010000, CRC(9b6111e0) SHA1(427197b21a5db2a06751ab281fde7a2f63818db8) )
ROM_LOAD16_BYTE( "136059-2122.k3", 0x040001, 0x010000, CRC(8d029a28) SHA1(a166d2a767f70050397f0f12add44ad1f5bc9fde) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "136059-1124.2k", 0x010000, 0x004000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) )
@@ -462,9 +456,8 @@ ROM_START( vindictr2 )
ROM_LOAD16_BYTE( "136059-2121.k1", 0x040000, 0x010000, CRC(9b6111e0) SHA1(427197b21a5db2a06751ab281fde7a2f63818db8) )
ROM_LOAD16_BYTE( "136059-2122.k3", 0x040001, 0x010000, CRC(8d029a28) SHA1(a166d2a767f70050397f0f12add44ad1f5bc9fde) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "136059-1124.2k", 0x010000, 0x004000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) )
@@ -500,9 +493,8 @@ ROM_START( vindictr1 )
ROM_LOAD16_BYTE( "136059-1121.k1", 0x040000, 0x010000, CRC(9b6111e0) SHA1(427197b21a5db2a06751ab281fde7a2f63818db8) )
ROM_LOAD16_BYTE( "136059-1122.k3", 0x040001, 0x010000, CRC(a94773f1) SHA1(2be841ab755d4ce319f3d562e9990918923384ee) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k + 16k for 6502 code */
- ROM_LOAD( "136059-1124.2k", 0x010000, 0x004000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) )
ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) )
diff --git a/src/mame/drivers/vixen.cpp b/src/mame/drivers/vixen.cpp
index 0365076cb5f..d3c77194da5 100644
--- a/src/mame/drivers/vixen.cpp
+++ b/src/mame/drivers/vixen.cpp
@@ -740,13 +740,13 @@ static MACHINE_CONFIG_START( vixen, vixen_state )
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(vixen_state,vixen_int_ack)
// video hardware
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::amber)
MCFG_SCREEN_UPDATE_DRIVER(vixen_state, screen_update)
MCFG_SCREEN_RAW_PARAMS(XTAL_23_9616MHz/2, 96*8, 0*8, 81*8, 27*10, 0*10, 26*10)
MCFG_TIMER_DRIVER_ADD_SCANLINE("vsync", vixen_state, vsync_tick, SCREEN_TAG, 26*10, 27*10)
- MCFG_PALETTE_ADD_MONOCHROME_AMBER("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
// sound hardware
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/vk100.cpp b/src/mame/drivers/vk100.cpp
index abe616047a8..ac757f3380b 100644
--- a/src/mame/drivers/vk100.cpp
+++ b/src/mame/drivers/vk100.cpp
@@ -694,7 +694,7 @@ ADDRESS_MAP_END
x 0 x x x x x 1 RW CRTC register r/w
x 1 * * * ** ** ** read area (rightmost 74ls138):
x 1 0 0 0 * * * R SYSTAT_A (a0-a3 chooses the bit of the dipswitches read via d3)
- x 1 0 0 1 x x x R SYSTAT_B
+ x 1 0 0 1 x x x R SYSTAT_B
x 1 0 1 0 x x 0 R i8251 UART data
x 1 0 1 0 x x 1 R i8251 UART status
x 1 0 1 1 x x x R unused
diff --git a/src/mame/drivers/vt100.cpp b/src/mame/drivers/vt100.cpp
index 3561394bfbe..95791341fc3 100644
--- a/src/mame/drivers/vt100.cpp
+++ b/src/mame/drivers/vt100.cpp
@@ -405,7 +405,7 @@ static MACHINE_CONFIG_START( vt100, vt100_state )
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(vt100_state,vt100_irq_callback)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(80*10, 25*10)
@@ -414,7 +414,7 @@ static MACHINE_CONFIG_START( vt100, vt100_state )
MCFG_SCREEN_PALETTE("vt100_video:palette")
MCFG_GFXDECODE_ADD("gfxdecode", "vt100_video:palette", vt100)
-// MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+// MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEFAULT_LAYOUT( layout_vt100 )
diff --git a/src/mame/drivers/vt220.cpp b/src/mame/drivers/vt220.cpp
index 42fcb2ea2c1..bdb1ebd9a99 100644
--- a/src/mame/drivers/vt220.cpp
+++ b/src/mame/drivers/vt220.cpp
@@ -74,7 +74,7 @@ static MACHINE_CONFIG_START( vt220, vt220_state )
MCFG_SCREEN_UPDATE_DRIVER(vt220_state, screen_update_vt220)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
diff --git a/src/mame/drivers/vt240.cpp b/src/mame/drivers/vt240.cpp
index 153cc6f249f..51a8e280393 100644
--- a/src/mame/drivers/vt240.cpp
+++ b/src/mame/drivers/vt240.cpp
@@ -219,7 +219,7 @@ static MACHINE_CONFIG_FRAGMENT( vt240_motherboard )
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
// MCFG_VIDEO_START_OVERRIDE(vt240_state,vt240)
MCFG_SCREEN_UPDATE_DEVICE("upd7220", upd7220_device, screen_update)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", vt240)
MCFG_DEVICE_ADD("upd7220", UPD7220, XTAL_4MHz / 4)
diff --git a/src/mame/drivers/vt320.cpp b/src/mame/drivers/vt320.cpp
index 5a661b962b6..cb40407e0ac 100644
--- a/src/mame/drivers/vt320.cpp
+++ b/src/mame/drivers/vt320.cpp
@@ -97,7 +97,7 @@ static MACHINE_CONFIG_START( vt320, vt320_state )
MCFG_SCREEN_UPDATE_DRIVER(vt320_state, screen_update_vt320)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
diff --git a/src/mame/drivers/vt520.cpp b/src/mame/drivers/vt520.cpp
index c65c7ebe5ee..c9f88584245 100644
--- a/src/mame/drivers/vt520.cpp
+++ b/src/mame/drivers/vt520.cpp
@@ -88,7 +88,7 @@ static MACHINE_CONFIG_START( vt520, vt520_state )
MCFG_SCREEN_UPDATE_DRIVER(vt520_state, screen_update_vt520)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
// On the board there are two M5M44256BJ-7 chips
// Which are DRAM 256K x 4bit
diff --git a/src/mame/drivers/wacky_gator.cpp b/src/mame/drivers/wacky_gator.cpp
index 77f67d7165e..bd86cd9cd4f 100644
--- a/src/mame/drivers/wacky_gator.cpp
+++ b/src/mame/drivers/wacky_gator.cpp
@@ -1,4 +1,4 @@
-// license:GPL2+
+// license:GPL-2.0+
// copyright-holders:FelipeSanches, Sandro Ronco
//
// Wacky Gator
diff --git a/src/mame/drivers/wicat.cpp b/src/mame/drivers/wicat.cpp
index 81b17bb1bb2..207c048e7c8 100644
--- a/src/mame/drivers/wicat.cpp
+++ b/src/mame/drivers/wicat.cpp
@@ -874,13 +874,13 @@ static MACHINE_CONFIG_START( wicat, wicat_state )
MCFG_X2210_ADD("vsram") // XD2210
- MCFG_SCREEN_ADD("screen",RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_SIZE(720,300)
MCFG_SCREEN_VISIBLE_AREA(0,720-1,0,300-1)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_UPDATE_DEVICE("video",i8275_device,screen_update)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD("video", I8275, XTAL_19_6608MHz/8)
MCFG_I8275_CHARACTER_WIDTH(9)
diff --git a/src/mame/drivers/xerox820.cpp b/src/mame/drivers/xerox820.cpp
index bb35067b6a1..0e49169dd2d 100644
--- a/src/mame/drivers/xerox820.cpp
+++ b/src/mame/drivers/xerox820.cpp
@@ -552,7 +552,7 @@ static MACHINE_CONFIG_START( xerox820, xerox820_state )
MCFG_SCREEN_RAW_PARAMS(XTAL_10_69425MHz, 700, 0, 560, 260, 0, 240)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", xerox820)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* devices */
MCFG_DEVICE_ADD(Z80PIO_KB_TAG, Z80PIO, XTAL_20MHz/8)
@@ -626,7 +626,7 @@ static MACHINE_CONFIG_START( xerox820ii, xerox820ii_state )
MCFG_SCREEN_RAW_PARAMS(XTAL_10_69425MHz, 700, 0, 560, 260, 0, 240)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", xerox820ii)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/xybots.cpp b/src/mame/drivers/xybots.cpp
index 9cb32712bd2..59641033576 100644
--- a/src/mame/drivers/xybots.cpp
+++ b/src/mame/drivers/xybots.cpp
@@ -237,9 +237,8 @@ ROM_START( xybots )
ROM_LOAD16_BYTE( "136054-2114.17b", 0x020000, 0x008000, CRC(d31890cb) SHA1(b58722a4dcc79e97484c2f5e35b8dbf8c3520bd9) )
ROM_LOAD16_BYTE( "136054-2115.19b", 0x020001, 0x008000, CRC(750ab1b0) SHA1(0638de738bd804bde4b93cd23190ee0465887cf8) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136054-1116.2k", 0x010000, 0x004000, CRC(3b9f155d) SHA1(7080681a7eab282023034379825ca88adc6b300f) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136054-1116.2k", 0x00000, 0x10000, CRC(3b9f155d) SHA1(7080681a7eab282023034379825ca88adc6b300f) )
ROM_REGION( 0x40000, "gfx1", 0 )
ROM_LOAD( "136054-2102.12l", 0x000000, 0x008000, CRC(c1309674) SHA1(5a163c894142c8d662557c8322dc04fded637227) )
@@ -268,9 +267,8 @@ ROM_START( xybotsg )
ROM_LOAD16_BYTE( "136054-3214.17b", 0x020000, 0x008000, CRC(4ad35093) SHA1(6d2d82fb481c68819ec6c87d483eed17d4ae5d1a) )
ROM_LOAD16_BYTE( "136054-3215.19b", 0x020001, 0x008000, CRC(3a2afbaf) SHA1(61b88d15d95681eb24559d0696203cd4ee63d11f) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136054-1116.2k", 0x010000, 0x004000, CRC(3b9f155d) SHA1(7080681a7eab282023034379825ca88adc6b300f) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136054-1116.2k", 0x00000, 0x10000, CRC(3b9f155d) SHA1(7080681a7eab282023034379825ca88adc6b300f) )
ROM_REGION( 0x40000, "gfx1", 0 )
ROM_LOAD( "136054-2102.12l", 0x000000, 0x008000, CRC(c1309674) SHA1(5a163c894142c8d662557c8322dc04fded637227) )
@@ -299,9 +297,8 @@ ROM_START( xybotsf )
ROM_LOAD16_BYTE( "136054-3614.17b", 0x020000, 0x008000, CRC(7385e0b6) SHA1(98a69901069872b14413c1bfe48783fdb43c1c37) )
ROM_LOAD16_BYTE( "136054-3615.19b", 0x020001, 0x008000, CRC(8e37b812) SHA1(40f973a49c4b40f3a5d982d332995e792f718dcc) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136054-1116.2k", 0x010000, 0x004000, CRC(3b9f155d) SHA1(7080681a7eab282023034379825ca88adc6b300f) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136054-1116.2k", 0x00000, 0x10000, CRC(3b9f155d) SHA1(7080681a7eab282023034379825ca88adc6b300f) )
ROM_REGION( 0x40000, "gfx1", 0 )
ROM_LOAD( "136054-2102.12l", 0x000000, 0x008000, CRC(c1309674) SHA1(5a163c894142c8d662557c8322dc04fded637227) )
@@ -330,9 +327,8 @@ ROM_START( xybots1 )
ROM_LOAD16_BYTE( "136054-1114.17b", 0x020000, 0x008000, CRC(7444f88f) SHA1(e2a27754a57a809398ee639fe5d0920b564d4c0b) )
ROM_LOAD16_BYTE( "136054-1115.19b", 0x020001, 0x008000, CRC(848d072d) SHA1(c4d1181f0227200e60d99a99c1a83897275b055f) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136054-1116.2k", 0x010000, 0x004000, CRC(3b9f155d) SHA1(7080681a7eab282023034379825ca88adc6b300f) )
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136054-1116.2k", 0x00000, 0x10000, CRC(3b9f155d) SHA1(7080681a7eab282023034379825ca88adc6b300f) )
ROM_REGION( 0x40000, "gfx1", 0 )
ROM_LOAD( "136054-2102.12l", 0x000000, 0x008000, CRC(c1309674) SHA1(5a163c894142c8d662557c8322dc04fded637227) )
@@ -361,9 +357,8 @@ ROM_START( xybots0 )
ROM_LOAD16_BYTE( "136054-0114.17b", 0x020000, 0x008000, CRC(18b875f7) SHA1(aa78553bd3556d0b209513ba80b782cfb0e3bb8b) )
ROM_LOAD16_BYTE( "136054-0115.19b", 0x020001, 0x008000, CRC(7f116360) SHA1(d12c339ce973bd74be4a4ac9e9d293f6a6e358d6) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
- ROM_LOAD( "136054-0116.2k", 0x010000, 0x004000, BAD_DUMP CRC(3b9f155d) SHA1(7080681a7eab282023034379825ca88adc6b300f) ) // not dumped from this pcb, rom taken from another set instead
- ROM_CONTINUE( 0x004000, 0x00c000 )
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_LOAD( "136054-0116.2k", 0x00000, 0x10000, BAD_DUMP CRC(3b9f155d) SHA1(7080681a7eab282023034379825ca88adc6b300f) ) // not dumped from this pcb, rom taken from another set instead
ROM_REGION( 0x40000, "gfx1", 0 )
ROM_LOAD( "136054-1102.12l", 0x000000, 0x008000, CRC(0d304e5b) SHA1(203c86c865667b1538f61c0950682fb17ebd9abb) )
diff --git a/src/mame/drivers/yiear.cpp b/src/mame/drivers/yiear.cpp
index 18beaa4ca3e..444a644dfab 100644
--- a/src/mame/drivers/yiear.cpp
+++ b/src/mame/drivers/yiear.cpp
@@ -1,9 +1,9 @@
-// license:???
-// copyright-holders:Enrique Sanchez
+// license:BSD-3-Clause
+// copyright-holders:Phil Stroffolino
+// thanks-to:Enrique Sanchez
/***************************************************************************
Yie Ar Kung-Fu memory map (preliminary)
- enrique.sanchez@cs.us.es
CPU: Motorola 6809
diff --git a/src/mame/drivers/z1013.cpp b/src/mame/drivers/z1013.cpp
index ca1d5c3a3bf..160b2744960 100644
--- a/src/mame/drivers/z1013.cpp
+++ b/src/mame/drivers/z1013.cpp
@@ -378,7 +378,7 @@ static MACHINE_CONFIG_START( z1013, z1013_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", z1013)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/zapcomputer.cpp b/src/mame/drivers/zapcomputer.cpp
index f6dab84cc73..b876fcaf555 100644
--- a/src/mame/drivers/zapcomputer.cpp
+++ b/src/mame/drivers/zapcomputer.cpp
@@ -1,4 +1,4 @@
-// license:GPL2+
+// license:GPL-2.0+
// copyright-holders:FelipeSanches
/*
ZAP - Z80 Applications Processor
diff --git a/src/mame/drivers/zorba.cpp b/src/mame/drivers/zorba.cpp
index d6ab846e84c..c2275dcf454 100644
--- a/src/mame/drivers/zorba.cpp
+++ b/src/mame/drivers/zorba.cpp
@@ -353,11 +353,11 @@ static MACHINE_CONFIG_START( zorba, zorba_state )
MCFG_CPU_PROGRAM_MAP(zorba_kbdmem)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_UPDATE_DEVICE("crtc", i8275_device, screen_update)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", zorba)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette")
+ MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/zrt80.cpp b/src/mame/drivers/zrt80.cpp
index dc895e73e9c..ed0cc48ea07 100644
--- a/src/mame/drivers/zrt80.cpp
+++ b/src/mame/drivers/zrt80.cpp
@@ -280,14 +280,14 @@ static MACHINE_CONFIG_START( zrt80, zrt80_state )
MCFG_CPU_IO_MAP(zrt80_io)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
MCFG_SCREEN_SIZE(640, 200)
MCFG_SCREEN_VISIBLE_AREA(0, 640 - 1, 0, 200 - 1)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", zrt80)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/includes/aerofgt.h b/src/mame/includes/aerofgt.h
index 194640f805c..a5b8583791e 100644
--- a/src/mame/includes/aerofgt.h
+++ b/src/mame/includes/aerofgt.h
@@ -107,6 +107,7 @@ public:
DECLARE_VIDEO_START(spinlbrk);
DECLARE_VIDEO_START(turbofrc);
DECLARE_VIDEO_START(wbbc97);
+ DECLARE_DRIVER_INIT(banked_oki);
UINT32 screen_update_pspikes(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_spikes91(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_pspikesb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
diff --git a/src/mame/includes/badlands.h b/src/mame/includes/badlands.h
index a23ec09a2c3..fe4e9a68e6d 100644
--- a/src/mame/includes/badlands.h
+++ b/src/mame/includes/badlands.h
@@ -26,11 +26,8 @@ public:
required_device<atari_motion_objects_device> m_mob;
UINT8 m_pedal_value[2];
-
- UINT8 * m_bank_base;
- UINT8 * m_bank_source_data;
-
UINT8 m_playfield_tile_bank;
+
virtual void update_interrupts() override;
virtual void scanline_update(screen_device &screen, int scanline) override;
DECLARE_READ16_MEMBER(sound_busy_r);
diff --git a/src/mame/includes/bking.h b/src/mame/includes/bking.h
index ffd455d3421..c6776381cb0 100644
--- a/src/mame/includes/bking.h
+++ b/src/mame/includes/bking.h
@@ -1,5 +1,5 @@
-// license:???
-// copyright-holders:Ed Mueller, Mike Balfour, Zsolt Vasvari
+// license:BSD-3-Clause
+// copyright-holders:Mike Balfour, Zsolt Vasvari
#include "machine/buggychl.h"
class bking_state : public driver_device
diff --git a/src/mame/includes/carjmbre.h b/src/mame/includes/carjmbre.h
deleted file mode 100644
index e19917b9f43..00000000000
--- a/src/mame/includes/carjmbre.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// license:???
-// copyright-holders:insideoutboy, Nicola Salmoria
-/***************************************************************************
-
- Car Jamboree
-
-***************************************************************************/
-
-class carjmbre_state : public driver_device
-{
-public:
- carjmbre_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_videoram(*this, "videoram"),
- m_spriteram(*this, "spriteram"),
- m_maincpu(*this, "maincpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
-
- /* memory pointers */
- required_shared_ptr<UINT8> m_videoram;
- required_shared_ptr<UINT8> m_spriteram;
-
- /* video-related */
- tilemap_t *m_cj_tilemap;
- UINT8 m_flipscreen;
- UINT16 m_bgcolor;
-
- UINT8 m_nmi_mask;
- DECLARE_WRITE8_MEMBER(nmi_mask_w);
- DECLARE_WRITE8_MEMBER(carjmbre_flipscreen_w);
- DECLARE_WRITE8_MEMBER(carjmbre_bgcolor_w);
- DECLARE_WRITE8_MEMBER(carjmbre_8806_w);
- DECLARE_WRITE8_MEMBER(carjmbre_videoram_w);
- TILE_GET_INFO_MEMBER(get_carjmbre_tile_info);
- virtual void machine_reset() override;
- virtual void video_start() override;
- DECLARE_PALETTE_INIT(carjmbre);
- UINT32 screen_update_carjmbre(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- INTERRUPT_GEN_MEMBER(vblank_irq);
- required_device<cpu_device> m_maincpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
-};
diff --git a/src/mame/includes/cyberbal.h b/src/mame/includes/cyberbal.h
index aca6711a0ae..1ad764daba9 100644
--- a/src/mame/includes/cyberbal.h
+++ b/src/mame/includes/cyberbal.h
@@ -57,7 +57,6 @@ public:
UINT16 m_playfield_xscroll[2];
UINT16 m_playfield_yscroll[2];
- UINT8 * m_bank_base;
UINT8 m_fast_68k_int;
UINT8 m_io_68k_int;
UINT8 m_sound_data_from_68k;
@@ -81,6 +80,7 @@ public:
TILE_GET_INFO_MEMBER(get_alpha_tile_info);
TILE_GET_INFO_MEMBER(get_playfield_tile_info);
DECLARE_MACHINE_START(cyberbal);
+ DECLARE_MACHINE_START(cyberbal2p);
DECLARE_MACHINE_RESET(cyberbal);
DECLARE_VIDEO_START(cyberbal);
DECLARE_MACHINE_RESET(cyberbal2p);
diff --git a/src/mame/includes/ec184x.h b/src/mame/includes/ec184x.h
index 7921bf5b97e..268fbeffe86 100644
--- a/src/mame/includes/ec184x.h
+++ b/src/mame/includes/ec184x.h
@@ -9,7 +9,7 @@
#ifndef EC184X_H_
#define EC184X_H_
-#include "includes/genpc.h"
+#include "machine/genpc.h"
#define MCFG_EC1841_MOTHERBOARD_ADD(_tag, _cputag) \
MCFG_DEVICE_ADD(_tag, EC1841_MOTHERBOARD, 0) \
diff --git a/src/mame/includes/flower.h b/src/mame/includes/flower.h
deleted file mode 100644
index cc2ff96ced2..00000000000
--- a/src/mame/includes/flower.h
+++ /dev/null
@@ -1,126 +0,0 @@
-// license:???
-// copyright-holders:insideoutboy, David Haywood, Stephh
-class flower_state : public driver_device
-{
-public:
- flower_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_sn_nmi_enable(*this, "sn_nmi_enable"),
- m_spriteram(*this, "spriteram"),
- m_textram(*this, "textram"),
- m_bg0ram(*this, "bg0ram"),
- m_bg1ram(*this, "bg1ram"),
- m_bg0_scroll(*this, "bg0_scroll"),
- m_bg1_scroll(*this, "bg1_scroll"),
- m_maincpu(*this, "maincpu"),
- m_audiocpu(*this, "audiocpu"),
- m_subcpu(*this, "subcpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
-
- required_shared_ptr<UINT8> m_sn_nmi_enable;
- required_shared_ptr<UINT8> m_spriteram;
- required_shared_ptr<UINT8> m_textram;
- required_shared_ptr<UINT8> m_bg0ram;
- required_shared_ptr<UINT8> m_bg1ram;
- required_shared_ptr<UINT8> m_bg0_scroll;
- required_shared_ptr<UINT8> m_bg1_scroll;
- tilemap_t *m_bg0_tilemap;
- tilemap_t *m_bg1_tilemap;
- tilemap_t *m_text_tilemap;
- tilemap_t *m_text_right_tilemap;
- DECLARE_WRITE8_MEMBER(flower_maincpu_irq_ack);
- DECLARE_WRITE8_MEMBER(flower_subcpu_irq_ack);
- DECLARE_WRITE8_MEMBER(flower_soundcpu_irq_ack);
- DECLARE_WRITE8_MEMBER(flower_coin_counter_w);
- DECLARE_WRITE8_MEMBER(flower_coin_lockout_w);
- DECLARE_WRITE8_MEMBER(sound_command_w);
- DECLARE_WRITE8_MEMBER(flower_textram_w);
- DECLARE_WRITE8_MEMBER(flower_bg0ram_w);
- DECLARE_WRITE8_MEMBER(flower_bg1ram_w);
- DECLARE_WRITE8_MEMBER(flower_flipscreen_w);
- DECLARE_INPUT_CHANGED_MEMBER(coin_inserted);
- TILE_GET_INFO_MEMBER(get_bg0_tile_info);
- TILE_GET_INFO_MEMBER(get_bg1_tile_info);
- TILE_GET_INFO_MEMBER(get_text_tile_info);
- virtual void video_start() override;
- UINT32 screen_update_flower(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect );
- required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_audiocpu;
- required_device<cpu_device> m_subcpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
-};
-
-
-// ======================> flower_sound_device
-
-
-/* this structure defines the parameters for a channel */
-struct flower_sound_channel
-{
- UINT32 start;
- UINT32 pos;
- UINT16 freq;
- UINT8 volume;
- UINT8 voltab;
- UINT8 oneshot;
- UINT8 active;
- UINT8 effect;
- UINT32 ecount;
-
-};
-
-class flower_sound_device : public device_t,
- public device_sound_interface
-{
-public:
- flower_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
- ~flower_sound_device() {}
-
- enum
- {
- TIMER_CLOCK_EFFECT
- };
-
- DECLARE_WRITE8_MEMBER( sound1_w );
- DECLARE_WRITE8_MEMBER( sound2_w );
-
-protected:
- // device-level overrides
- virtual void device_config_complete() override;
- virtual void device_start() override;
- virtual void device_reset() override;
-
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
-
- // sound stream update overrides
- virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
-
-private:
- void make_mixer_table(int voices, int gain);
-
- // internal state
- emu_timer *m_effect_timer;
-
- /* data about the sound system */
- flower_sound_channel m_channel_list[8];
- flower_sound_channel *m_last_channel;
-
- /* global sound parameters */
- const UINT8 *m_sample_rom;
- const UINT8 *m_volume_rom;
- sound_stream * m_stream;
-
- /* mixer tables and internal buffers */
- std::unique_ptr<INT16[]> m_mixer_table;
- INT16 *m_mixer_lookup;
- std::unique_ptr<short[]> m_mixer_buffer;
-
- UINT8 m_soundregs1[0x40];
- UINT8 m_soundregs2[0x40];
-
-};
-
-extern const device_type FLOWER;
diff --git a/src/mame/includes/galastrm.h b/src/mame/includes/galastrm.h
index c2413a6d11d..b62d797cdc1 100644
--- a/src/mame/includes/galastrm.h
+++ b/src/mame/includes/galastrm.h
@@ -1,4 +1,4 @@
-// license:???
+// license:BSD-3-Clause
// copyright-holders:Hau
#include "machine/eepromser.h"
diff --git a/src/mame/includes/hh_tms1k.h b/src/mame/includes/hh_tms1k.h
index fc05dc3baf9..46f6530ae7a 100644
--- a/src/mame/includes/hh_tms1k.h
+++ b/src/mame/includes/hh_tms1k.h
@@ -50,8 +50,8 @@ public:
int m_display_maxy; // display matrix number of rows
int m_display_maxx; // display matrix number of columns (max 31 for now)
- UINT32 m_grid; // VFD current row data
- UINT32 m_plate; // VFD current column data
+ UINT32 m_grid; // VFD/LED current row data
+ UINT32 m_plate; // VFD/LED current column data
UINT32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on)
UINT16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments
diff --git a/src/mame/includes/kaypro.h b/src/mame/includes/kaypro.h
index f2b5cc3df29..1560c96f9d8 100644
--- a/src/mame/includes/kaypro.h
+++ b/src/mame/includes/kaypro.h
@@ -79,6 +79,11 @@ public:
kay_kbd_t *m_kbd;
int m_centronics_busy;
required_device<palette_device> m_palette;
+ void kay_kbd_in(UINT8 data );
+ UINT8 kay_kbd_c_r();
+ UINT8 kay_kbd_d_r();
+ TIMER_CALLBACK_MEMBER( kay_kbd_beepoff );
+ void kay_kbd_d_w( UINT8 data );
private:
bool m_is_motor_off;
@@ -102,11 +107,4 @@ private:
required_device<beep_device> m_beep;
};
-
-/*----------- defined in machine/kay_kbd.c -----------*/
-
-UINT8 kay_kbd_c_r( running_machine &machine );
-UINT8 kay_kbd_d_r( running_machine &machine );
-void kay_kbd_d_w( running_machine &machine, UINT8 data );
-
INPUT_PORTS_EXTERN( kay_kbd );
diff --git a/src/mame/includes/mac.h b/src/mame/includes/mac.h
index 8b093993abc..c8d2e16d05b 100644
--- a/src/mame/includes/mac.h
+++ b/src/mame/includes/mac.h
@@ -520,6 +520,8 @@ public:
TIMER_CALLBACK_MEMBER(mac_scanline_tick);
TIMER_CALLBACK_MEMBER(dafb_vbl_tick);
TIMER_CALLBACK_MEMBER(dafb_cursor_tick);
+ TIMER_CALLBACK_MEMBER(mac_adb_tick); // macadb.c
+ TIMER_CALLBACK_MEMBER(mac_pmu_tick); // macadb.c
DECLARE_WRITE_LINE_MEMBER(mac_via_out_cb2);
DECLARE_WRITE_LINE_MEMBER(mac_adb_via_out_cb2);
DECLARE_READ8_MEMBER(mac_via_in_a);
diff --git a/src/mame/includes/mboard.h b/src/mame/includes/mboard.h
deleted file mode 100644
index b6e8c5028f4..00000000000
--- a/src/mame/includes/mboard.h
+++ /dev/null
@@ -1,122 +0,0 @@
-// license:???
-// copyright-holders:Ralf Schaefer, Cowering
-/**********************************************************************
-
- Mephisto Chess Computers
-
-**********************************************************************/
-
-#ifndef __MBOARD_H__
-#define __MBOARD_H__
-
-/***************************************************************************
- MACROS
-***************************************************************************/
-
-enum
-{
- EM, /*No piece*/
- BP,
- BN,
- BB,
- BR,
- BQ,
- BK,
- WP,
- WN,
- WB,
- WR,
- WQ,
- WK
-};
-
-#define NOT_VALID 99
-#define BORDER_PIECE 64
-
-
-/***************************************************************************
- FUNCTION PROTOTYPES
-***************************************************************************/
-
-class mboard_state : public driver_device
-{
-public:
- mboard_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_line(*this, "LINE"),
- m_line10(*this, "LINE10"),
- m_b_white(*this, "B_WHITE"),
- m_b_black(*this, "B_BLACK"),
- m_b_buttons(*this, "B_BUTTONS"),
- m_mouse_x(*this, "MOUSE_X"),
- m_mouse_y(*this, "MOUSE_Y"),
- m_button_l(*this, "BUTTON_L"),
- m_button_r(*this, "BUTTON_R")
- { }
-
- DECLARE_READ8_MEMBER(mboard_read_board_8);
- DECLARE_WRITE8_MEMBER(mboard_write_board_8);
- DECLARE_WRITE8_MEMBER(mboard_write_LED_8);
-
- DECLARE_READ16_MEMBER(mboard_read_board_16);
- DECLARE_WRITE16_MEMBER(mboard_write_board_16);
- DECLARE_WRITE16_MEMBER(mboard_write_LED_16);
-
- DECLARE_READ32_MEMBER(mboard_read_board_32);
- DECLARE_WRITE32_MEMBER(mboard_write_board_32);
- DECLARE_WRITE32_MEMBER(mboard_write_LED_32);
-
- TIMER_DEVICE_CALLBACK_MEMBER( mboard_update_artwork);
-
- void mboard_savestate_register();
-
- void mboard_set_board();
- void mboard_set_border_pieces();
-
- inline UINT8 pos_to_num(UINT8 val);
-
- UINT8 mboard_lcd_invert;
- UINT8 mboard_key_select;
- UINT8 mboard_key_selector;
-
- int get_first_cleared_bit(UINT8 data);
-private:
- static const int start_board[64];
- static UINT8 border_pieces[12];
-
- int m_board[64];
- int save_board[64];
- UINT16 Line18_LED;
- UINT16 Line18_REED;
-
- int mouse_hold_border_piece;
- UINT8 mouse_hold_from;
- UINT8 mouse_hold_piece;
-
- int read_board_flag;
- int get_first_bit(UINT8 data);
- UINT8 read_board();
- void write_board(UINT8 data);
- void write_LED(UINT8 data);
- void board_presave();
- void board_postload();
- void clear_board();
- void set_artwork();
- void check_board_buttons();
-public:
- required_device<cpu_device> m_maincpu;
- required_ioport_array<8> m_line;
- required_ioport m_line10;
- required_ioport m_b_white;
- required_ioport m_b_black;
- required_ioport m_b_buttons;
- required_ioport m_mouse_x;
- required_ioport m_mouse_y;
- required_ioport m_button_l;
- required_ioport m_button_r;
-};
-
-
-
-#endif /* __MBOARD_H__ */
diff --git a/src/mame/includes/poisk1.h b/src/mame/includes/poisk1.h
deleted file mode 100644
index 57a24f0c052..00000000000
--- a/src/mame/includes/poisk1.h
+++ /dev/null
@@ -1,101 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Sergey Svishchev
-/*****************************************************************************
- *
- * includes/poisk1.h
- *
- ****************************************************************************/
-
-#ifndef POISK1_H_
-#define POISK1_H_
-
-#include "imagedev/cassette.h"
-#include "machine/i8255.h"
-#include "bus/isa/isa.h"
-#include "machine/pic8259.h"
-#include "machine/pit8253.h"
-#include "machine/ram.h"
-#include "bus/isa/xsu_cards.h"
-#include "sound/speaker.h"
-
-#define POISK1_UPDATE_ROW(name) \
- void name(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT8 *videoram, UINT16 ma, UINT8 ra, UINT8 stride)
-
-class p1_state : public driver_device
-{
-public:
- p1_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_pic8259(*this, "pic8259"),
- m_pit8253(*this, "pit8253"),
- m_ppi8255n1(*this, "ppi8255n1"),
- m_ppi8255n2(*this, "ppi8255n2"),
- m_isabus(*this, "isa"),
- m_speaker(*this, "speaker"),
- m_cassette(*this, "cassette"),
- m_ram(*this, RAM_TAG),
- m_palette(*this, "palette") { }
-
- required_device<cpu_device> m_maincpu;
- required_device<pic8259_device> m_pic8259;
- required_device<pit8253_device> m_pit8253;
- required_device<i8255_device> m_ppi8255n1;
- required_device<i8255_device> m_ppi8255n2;
- required_device<isa8_device> m_isabus;
- required_device<speaker_sound_device> m_speaker;
- required_device<cassette_image_device> m_cassette;
- required_device<ram_device> m_ram;
-
- DECLARE_DRIVER_INIT(poisk1);
- DECLARE_MACHINE_START(poisk1);
- DECLARE_MACHINE_RESET(poisk1);
-
- DECLARE_PALETTE_INIT(p1);
- virtual void video_start() override;
- UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- void set_palette_luts();
- POISK1_UPDATE_ROW(cga_gfx_2bpp_update_row);
- POISK1_UPDATE_ROW(cga_gfx_1bpp_update_row);
- POISK1_UPDATE_ROW(poisk1_gfx_1bpp_update_row);
-
- DECLARE_WRITE_LINE_MEMBER(p1_pit8253_out2_changed);
- DECLARE_WRITE_LINE_MEMBER(p1_speaker_set_spkrdata);
- UINT8 m_p1_spkrdata;
- UINT8 m_p1_input;
-
- UINT8 m_kbpoll_mask;
-
- struct
- {
- UINT8 trap[4];
- std::unique_ptr<UINT8[]> videoram_base;
- UINT8 *videoram;
- UINT8 mode_control_6a;
- UINT8 color_select_68;
- UINT8 palette_lut_2bpp[4];
- int stride;
- void *update_row(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT8 *videoram, UINT16 ma, UINT8 ra, UINT8 stride);
- } m_video;
-
- DECLARE_READ8_MEMBER(p1_trap_r);
- DECLARE_WRITE8_MEMBER(p1_trap_w);
- DECLARE_READ8_MEMBER(p1_cga_r);
- DECLARE_WRITE8_MEMBER(p1_cga_w);
- DECLARE_WRITE8_MEMBER(p1_vram_w);
-
- DECLARE_READ8_MEMBER(p1_ppi_r);
- DECLARE_WRITE8_MEMBER(p1_ppi_w);
- DECLARE_WRITE8_MEMBER(p1_ppi_porta_w);
- DECLARE_READ8_MEMBER(p1_ppi_porta_r);
- DECLARE_READ8_MEMBER(p1_ppi_portb_r);
- DECLARE_READ8_MEMBER(p1_ppi_portc_r);
- DECLARE_WRITE8_MEMBER(p1_ppi_portc_w);
- DECLARE_WRITE8_MEMBER(p1_ppi2_porta_w);
- DECLARE_WRITE8_MEMBER(p1_ppi2_portb_w);
- DECLARE_READ8_MEMBER(p1_ppi2_portc_r);
- required_device<palette_device> m_palette;
- const char *m_cputag;
-};
-
-#endif /* POISK1_H_ */
diff --git a/src/mame/includes/popper.h b/src/mame/includes/popper.h
deleted file mode 100644
index 9ef9f287e95..00000000000
--- a/src/mame/includes/popper.h
+++ /dev/null
@@ -1,71 +0,0 @@
-// license:???
-// copyright-holders:David Haywood,insideoutboy, Pierpaolo Prazzoli
-/***************************************************************************
-
- Popper
-
-***************************************************************************/
-
-class popper_state : public driver_device
-{
-public:
- popper_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_ol_videoram(*this, "ol_videoram"),
- m_videoram(*this, "videoram"),
- m_ol_attribram(*this, "ol_attribram"),
- m_attribram(*this, "attribram"),
- m_spriteram(*this, "spriteram"),
- m_audiocpu(*this, "audiocpu"),
- m_maincpu(*this, "maincpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_screen(*this, "screen"),
- m_palette(*this, "palette") { }
-
- /* memory pointers */
- required_shared_ptr<UINT8> m_ol_videoram;
- required_shared_ptr<UINT8> m_videoram;
- required_shared_ptr<UINT8> m_ol_attribram;
- required_shared_ptr<UINT8> m_attribram;
- required_shared_ptr<UINT8> m_spriteram;
-
- /* video-related */
- tilemap_t *m_p123_tilemap;
- tilemap_t *m_p0_tilemap;
- tilemap_t *m_ol_p123_tilemap;
- tilemap_t *m_ol_p0_tilemap;
- INT32 m_flipscreen;
- INT32 m_e002;
- INT32 m_gfx_bank;
- rectangle m_tilemap_clip;
-
- /* devices */
- required_device<cpu_device> m_audiocpu;
-
- UINT8 m_nmi_mask;
- DECLARE_READ8_MEMBER(popper_input_ports_r);
- DECLARE_READ8_MEMBER(popper_soundcpu_nmi_r);
- DECLARE_WRITE8_MEMBER(nmi_mask_w);
- DECLARE_WRITE8_MEMBER(popper_ol_videoram_w);
- DECLARE_WRITE8_MEMBER(popper_videoram_w);
- DECLARE_WRITE8_MEMBER(popper_ol_attribram_w);
- DECLARE_WRITE8_MEMBER(popper_attribram_w);
- DECLARE_WRITE8_MEMBER(popper_flipscreen_w);
- DECLARE_WRITE8_MEMBER(popper_e002_w);
- DECLARE_WRITE8_MEMBER(popper_gfx_bank_w);
- TILE_GET_INFO_MEMBER(get_popper_p123_tile_info);
- TILE_GET_INFO_MEMBER(get_popper_p0_tile_info);
- TILE_GET_INFO_MEMBER(get_popper_ol_p123_tile_info);
- TILE_GET_INFO_MEMBER(get_popper_ol_p0_tile_info);
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void video_start() override;
- DECLARE_PALETTE_INIT(popper);
- UINT32 screen_update_popper(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- INTERRUPT_GEN_MEMBER(vblank_irq);
- void draw_sprites( bitmap_ind16 &bitmap,const rectangle &cliprect );
- required_device<cpu_device> m_maincpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<screen_device> m_screen;
- required_device<palette_device> m_palette;
-};
diff --git a/src/mame/includes/qdrmfgp.h b/src/mame/includes/qdrmfgp.h
index 5c8968e12ee..565b507933b 100644
--- a/src/mame/includes/qdrmfgp.h
+++ b/src/mame/includes/qdrmfgp.h
@@ -1,5 +1,5 @@
-// license:???
-// copyright-holders:Eisuke Watanabe
+// license:BSD-3-Clause
+// copyright-holders:Hau
#include "machine/ataintf.h"
#include "sound/k054539.h"
#include "machine/k053252.h"
diff --git a/src/mame/includes/sprcros2.h b/src/mame/includes/sprcros2.h
deleted file mode 100644
index bc3a468306c..00000000000
--- a/src/mame/includes/sprcros2.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// license:???
-// copyright-holders:insideoutboy
-class sprcros2_state : public driver_device
-{
-public:
- sprcros2_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_master(*this,"master"),
- m_slave(*this,"slave"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette"),
- m_fgvideoram(*this, "fgvideoram"),
- m_bgvideoram(*this, "bgvideoram"),
- m_spriteram(*this, "spriteram") { }
-
- required_device<cpu_device> m_master;
- required_device<cpu_device> m_slave;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
-
- required_shared_ptr<UINT8> m_fgvideoram;
- required_shared_ptr<UINT8> m_bgvideoram;
- required_shared_ptr<UINT8> m_spriteram;
-
- UINT8 m_s_port3;
- UINT8 m_port7;
- tilemap_t *m_bgtilemap;
- tilemap_t *m_fgtilemap;
-
- DECLARE_WRITE8_MEMBER(m_port7_w);
- DECLARE_WRITE8_MEMBER(s_port3_w);
- DECLARE_WRITE8_MEMBER(fgvideoram_w);
- DECLARE_WRITE8_MEMBER(bgvideoram_w);
- DECLARE_WRITE8_MEMBER(bgscrollx_w);
- DECLARE_WRITE8_MEMBER(bgscrolly_w);
-
- TILE_GET_INFO_MEMBER(get_bgtile_info);
- TILE_GET_INFO_MEMBER(get_fgtile_info);
-
- virtual void machine_start() override;
- virtual void video_start() override;
- DECLARE_PALETTE_INIT(sprcros2);
-
- INTERRUPT_GEN_MEMBER(s_interrupt);
- TIMER_DEVICE_CALLBACK_MEMBER(m_interrupt);
-
- UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect);
-};
diff --git a/src/mame/includes/suprnova.h b/src/mame/includes/suprnova.h
index 672ceb3efd5..a9eddacfe30 100644
--- a/src/mame/includes/suprnova.h
+++ b/src/mame/includes/suprnova.h
@@ -59,7 +59,6 @@ public:
required_shared_ptr<UINT32> m_cache_ram;
hit_t m_hit;
- UINT32 m_timer_0_temp[4];
bitmap_ind16 m_sprite_bitmap;
bitmap_ind16 m_tilemap_bitmap_lower;
bitmap_ind8 m_tilemap_bitmapflags_lower;
@@ -88,14 +87,20 @@ public:
int m_alt_enable_sprites;
tilemap_t *m_tilemap_A;
tilemap_t *m_tilemap_B;
-
+ UINT8 *m_btiles;
UINT8 m_region;
- DECLARE_WRITE32_MEMBER(skns_hit_w);
- DECLARE_WRITE32_MEMBER(skns_hit2_w);
- DECLARE_READ32_MEMBER(skns_hit_r);
- DECLARE_WRITE32_MEMBER(skns_io_w);
- DECLARE_WRITE32_MEMBER(skns_v3t_w);
+ DECLARE_WRITE32_MEMBER(hit_w);
+ DECLARE_WRITE32_MEMBER(hit2_w);
+ DECLARE_READ32_MEMBER(hit_r);
+ DECLARE_WRITE32_MEMBER(io_w);
+ DECLARE_WRITE32_MEMBER(v3t_w);
+ DECLARE_WRITE32_MEMBER(pal_regs_w);
+ DECLARE_WRITE32_MEMBER(palette_ram_w);
+ DECLARE_WRITE32_MEMBER(tilemapA_w);
+ DECLARE_WRITE32_MEMBER(tilemapB_w);
+ DECLARE_WRITE32_MEMBER(v3_regs_w);
+
DECLARE_READ32_MEMBER(gutsn_speedup_r);
DECLARE_READ32_MEMBER(cyvern_speedup_r);
DECLARE_READ32_MEMBER(puzzloopj_speedup_r);
@@ -111,12 +116,9 @@ public:
DECLARE_READ32_MEMBER(panicstr_speedup_r);
DECLARE_READ32_MEMBER(sengekis_speedup_r);
DECLARE_READ32_MEMBER(sengekij_speedup_r);
- DECLARE_WRITE32_MEMBER(skns_pal_regs_w);
- DECLARE_WRITE32_MEMBER(skns_palette_ram_w);
- DECLARE_WRITE32_MEMBER(skns_tilemapA_w);
- DECLARE_WRITE32_MEMBER(skns_tilemapB_w);
- DECLARE_WRITE32_MEMBER(skns_v3_regs_w);
+
DECLARE_CUSTOM_INPUT_MEMBER(paddle_r);
+
DECLARE_DRIVER_INIT(sengekis);
DECLARE_DRIVER_INIT(cyvern);
DECLARE_DRIVER_INIT(puzzloopa);
@@ -136,8 +138,7 @@ public:
DECLARE_DRIVER_INIT(senknow);
DECLARE_DRIVER_INIT(galpani4);
DECLARE_DRIVER_INIT(ryouran);
- TILE_GET_INFO_MEMBER(get_tilemap_A_tile_info);
- TILE_GET_INFO_MEMBER(get_tilemap_B_tile_info);
+ virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
virtual void video_reset() override;
@@ -146,16 +147,18 @@ public:
DECLARE_MACHINE_RESET(sknsu);
DECLARE_MACHINE_RESET(sknse);
DECLARE_MACHINE_RESET(sknsk);
- UINT32 screen_update_skns(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- void screen_eof_skns(screen_device &screen, bool state);
+
+ TILE_GET_INFO_MEMBER(get_tilemap_A_tile_info);
+ TILE_GET_INFO_MEMBER(get_tilemap_B_tile_info);
+ UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(interrupt_callback);
- TIMER_DEVICE_CALLBACK_MEMBER(skns_irq);
- void suprnova_draw_roz(bitmap_ind16 &bitmap, bitmap_ind8& bitmapflags, const rectangle &cliprect, tilemap_t *tmap, UINT32 startx, UINT32 starty, int incxx, int incxy, int incyx, int incyy, int wraparound, int columnscroll, UINT32* scrollram);
+ TIMER_DEVICE_CALLBACK_MEMBER(irq);
+ void draw_roz(bitmap_ind16 &bitmap, bitmap_ind8& bitmapflags, const rectangle &cliprect, tilemap_t *tmap, UINT32 startx, UINT32 starty, int incxx, int incxy, int incyx, int incyy, int wraparound, int columnscroll, UINT32* scrollram);
void palette_set_rgb_brightness (int offset, UINT8 brightness_r, UINT8 brightness_g, UINT8 brightness_b);
void palette_update();
- void supernova_draw_a( bitmap_ind16 &bitmap, bitmap_ind8 &bitmap_flags, const rectangle &cliprect, int tran );
- void supernova_draw_b( bitmap_ind16 &bitmap, bitmap_ind8 &bitmap_flags, const rectangle &cliprect, int tran );
+ void draw_a( bitmap_ind16 &bitmap, bitmap_ind8 &bitmap_flags, const rectangle &cliprect, int tran );
+ void draw_b( bitmap_ind16 &bitmap, bitmap_ind8 &bitmap_flags, const rectangle &cliprect, int tran );
void hit_recalc();
- void init_skns();
+ void init_drc();
void set_drc_pcflush(UINT32 addr);
};
diff --git a/src/mame/includes/svi318.h b/src/mame/includes/svi318.h
deleted file mode 100644
index 1e0fc0d0d30..00000000000
--- a/src/mame/includes/svi318.h
+++ /dev/null
@@ -1,159 +0,0 @@
-// license:???
-// copyright-holders:Sean Young,Tomas Karlsson
-/*****************************************************************************
- *
- * includes/svi318.h
- *
- * Spectravideo SVI-318 and SVI-328
- *
- ****************************************************************************/
-
-#ifndef SVI318_H_
-#define SVI318_H_
-
-#include "cpu/z80/z80.h"
-#include "machine/i8255.h"
-#include "machine/ins8250.h"
-#include "machine/wd_fdc.h"
-#include "machine/ram.h"
-#include "machine/buffer.h"
-#include "imagedev/cassette.h"
-#include "sound/dac.h"
-#include "sound/ay8910.h"
-#include "sound/wave.h"
-#include "video/mc6845.h"
-#include "video/tms9928a.h"
-#include "bus/centronics/ctronics.h"
-#include "bus/generic/slot.h"
-#include "bus/generic/carts.h"
-
-
-class svi318_state : public driver_device
-{
-public:
- svi318_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_cassette(*this, "cassette"),
- m_dac(*this, "dac"),
- m_ppi(*this, "ppi8255"),
- m_ram(*this, RAM_TAG),
- m_centronics(*this, "centronics"),
- m_cent_data_out(*this, "cent_data_out"),
- m_ins8250_0(*this, "ins8250_0"),
- m_ins8250_1(*this, "ins8250_1"),
- m_cart(*this, "cartslot"),
- m_fd1793(*this, "wd179x"),
- m_floppy0(*this, "wd179x:0"),
- m_floppy1(*this, "wd179x:1"),
- m_crtc(*this, "crtc"),
- m_line(*this, "LINE"),
- m_joysticks(*this, "JOYSTICKS"),
- m_buttons(*this, "BUTTONS"),
- m_palette(*this, "palette"),
- m_floppy(nullptr),
- m_bank1(*this, "bank1"),
- m_bank2(*this, "bank2"),
- m_bank3(*this, "bank3"),
- m_bank4(*this, "bank4")
- { }
-
- DECLARE_FLOPPY_FORMATS(floppy_formats);
-
- // FDC
- int m_drq;
- int m_irq;
-
- DECLARE_WRITE8_MEMBER(ppi_w);
- DECLARE_READ8_MEMBER(psg_port_a_r);
- DECLARE_WRITE8_MEMBER(psg_port_b_w);
- DECLARE_WRITE8_MEMBER(fdc_drive_motor_w);
- DECLARE_WRITE8_MEMBER(fdc_density_side_w);
- DECLARE_READ8_MEMBER(fdc_irqdrq_r);
- DECLARE_WRITE8_MEMBER(svi806_ram_enable_w);
- DECLARE_WRITE8_MEMBER(writemem1);
- DECLARE_WRITE8_MEMBER(writemem2);
- DECLARE_WRITE8_MEMBER(writemem3);
- DECLARE_WRITE8_MEMBER(writemem4);
- DECLARE_READ8_MEMBER(io_ext_r);
- DECLARE_WRITE8_MEMBER(io_ext_w);
- DECLARE_DRIVER_INIT(svi318);
- DECLARE_DRIVER_INIT(svi328_806);
- DECLARE_WRITE_LINE_MEMBER(vdp_interrupt);
- DECLARE_WRITE_LINE_MEMBER(ins8250_interrupt);
- DECLARE_READ8_MEMBER(ppi_port_a_r);
- DECLARE_READ8_MEMBER(ppi_port_b_r);
- DECLARE_WRITE8_MEMBER(ppi_port_c_w);
- DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
- DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
- bool cart_verify(UINT8 *ROM);
- DECLARE_DEVICE_IMAGE_LOAD_MEMBER(svi318_cart);
- DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
-
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
- MC6845_UPDATE_ROW(crtc_update_row);
- memory_region *m_cart_rom;
- memory_region *m_bios_rom;
-
-protected:
- required_device<z80_device> m_maincpu;
- required_device<cassette_image_device> m_cassette;
- required_device<dac_device> m_dac;
- required_device<i8255_device> m_ppi;
- required_device<ram_device> m_ram;
- required_device<centronics_device> m_centronics;
- required_device<output_latch_device> m_cent_data_out;
- required_device<ins8250_device> m_ins8250_0;
- required_device<ins8250_device> m_ins8250_1;
- required_device<generic_slot_device> m_cart;
- required_device<fd1793_t> m_fd1793;
- required_device<floppy_connector> m_floppy0;
- required_device<floppy_connector> m_floppy1;
- optional_device<mc6845_device> m_crtc;
- required_ioport_array<11> m_line;
- required_ioport m_joysticks;
- required_ioport m_buttons;
- optional_device<palette_device> m_palette;
-
-private:
-
- void set_banks();
- void postload();
-
- // memory banking
- UINT8 m_bank_switch;
- UINT8 m_bank_low;
- UINT8 m_bank_high;
-
- UINT8 m_bank_low_read_only;
- UINT8 m_bank_high1_read_only;
- UINT8 m_bank_high2_read_only;
-
- std::unique_ptr<UINT8[]> m_empty_bank;
- UINT8 *m_bank_low_ptr;
- UINT8 *m_bank_high1_ptr;
- UINT8 *m_bank_high2_ptr;
-
- // keyboard
- UINT8 m_keyboard_row;
-
- floppy_image_device *m_floppy;
-
- // centronics
- int m_centronics_busy;
-
- // SVI-806 80 column card
- UINT8 m_svi806_present;
- UINT8 m_svi806_ram_enabled;
- dynamic_buffer m_svi806_ram;
- UINT8 *m_svi806_gfx;
-
- required_memory_bank m_bank1;
- required_memory_bank m_bank2;
- required_memory_bank m_bank3;
- optional_memory_bank m_bank4;
-};
-
-#endif /* SVI318_H_ */
diff --git a/src/mame/includes/taito_f3.h b/src/mame/includes/taito_f3.h
index 5b31c9db98c..97e5642c007 100644
--- a/src/mame/includes/taito_f3.h
+++ b/src/mame/includes/taito_f3.h
@@ -55,7 +55,7 @@ public:
taito_f3_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_audiocpu(*this, "audiocpu"),
+ m_audiocpu(*this, "taito_en:audiocpu"),
m_oki(*this, "oki"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
diff --git a/src/mame/includes/tecmo16.h b/src/mame/includes/tecmo16.h
index cfdbb55acf1..f4a10d1f5be 100644
--- a/src/mame/includes/tecmo16.h
+++ b/src/mame/includes/tecmo16.h
@@ -1,5 +1,5 @@
-// license:???
-// copyright-holders:Eisuke Watanabe, Nicola Salmoria
+// license:BSD-3-Clause
+// copyright-holders:Hau, Nicola Salmoria
#include "video/tecmo_spr.h"
#include "video/tecmo_mix.h"
diff --git a/src/mame/includes/toypop.h b/src/mame/includes/toypop.h
deleted file mode 100644
index 7669fecd778..00000000000
--- a/src/mame/includes/toypop.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// license:???
-// copyright-holders:Edgardo E. Contini Salvan
-#include "machine/namcoio.h"
-#include "sound/namco.h"
-
-class toypop_state : public driver_device
-{
-public:
- enum
- {
- TIMER_NAMCOIO_RUN
- };
-
- toypop_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_videoram(*this, "videoram"),
- m_spriteram(*this, "spriteram"),
- m_m68000_sharedram(*this, "m68k_shared"),
- m_bg_image(*this, "bg_image"),
- m_maincpu(*this, "maincpu"),
- m_audiocpu(*this, "audiocpu"),
- m_subcpu(*this, "sub"),
- m_namco15xx(*this, "namco"),
- m_namco58xx(*this, "58xx"),
- m_namco56xx_1(*this, "56xx_1"),
- m_namco56xx_2(*this, "56xx_2"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
-
- required_shared_ptr<UINT8> m_videoram;
- required_shared_ptr<UINT8> m_spriteram;
- required_shared_ptr<UINT8> m_m68000_sharedram;
- required_shared_ptr<UINT16> m_bg_image;
-
- required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_audiocpu;
- required_device<cpu_device> m_subcpu;
- required_device<namco_15xx_device> m_namco15xx;
- required_device<namco58xx_device> m_namco58xx;
- required_device<namco56xx_device> m_namco56xx_1;
- required_device<namco56xx_device> m_namco56xx_2;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
-
- tilemap_t *m_bg_tilemap;
-
- int m_bitmapflip;
- int m_palettebank;
- int m_interrupt_enable_68k;
- UINT8 m_main_irq_mask;
- UINT8 m_sound_irq_mask;
- DECLARE_READ16_MEMBER(toypop_m68000_sharedram_r);
- DECLARE_WRITE16_MEMBER(toypop_m68000_sharedram_w);
- DECLARE_READ8_MEMBER(toypop_main_interrupt_enable_r);
- DECLARE_WRITE8_MEMBER(toypop_main_interrupt_enable_w);
- DECLARE_WRITE8_MEMBER(toypop_main_interrupt_disable_w);
- DECLARE_WRITE8_MEMBER(toypop_sound_interrupt_enable_acknowledge_w);
- DECLARE_WRITE8_MEMBER(toypop_sound_interrupt_disable_w);
- DECLARE_WRITE8_MEMBER(toypop_sound_clear_w);
- DECLARE_WRITE8_MEMBER(toypop_sound_assert_w);
- DECLARE_WRITE8_MEMBER(toypop_m68000_clear_w);
- DECLARE_WRITE8_MEMBER(toypop_m68000_assert_w);
- DECLARE_WRITE16_MEMBER(toypop_m68000_interrupt_enable_w);
- DECLARE_WRITE16_MEMBER(toypop_m68000_interrupt_disable_w);
- DECLARE_WRITE8_MEMBER(toypop_videoram_w);
- DECLARE_WRITE8_MEMBER(toypop_palettebank_w);
- DECLARE_WRITE16_MEMBER(toypop_flipscreen_w);
- DECLARE_READ16_MEMBER(toypop_merged_background_r);
- DECLARE_WRITE16_MEMBER(toypop_merged_background_w);
- DECLARE_READ8_MEMBER(dipA_l);
- DECLARE_READ8_MEMBER(dipA_h);
- DECLARE_READ8_MEMBER(dipB_l);
- DECLARE_READ8_MEMBER(dipB_h);
- DECLARE_WRITE8_MEMBER(out_coin0);
- DECLARE_WRITE8_MEMBER(out_coin1);
- DECLARE_WRITE8_MEMBER(flip);
- TILEMAP_MAPPER_MEMBER(tilemap_scan);
- TILE_GET_INFO_MEMBER(get_tile_info);
- virtual void machine_reset() override;
- virtual void video_start() override;
- DECLARE_PALETTE_INIT(toypop);
- UINT32 screen_update_toypop(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- INTERRUPT_GEN_MEMBER(toypop_main_vblank_irq);
- INTERRUPT_GEN_MEMBER(toypop_sound_timer_irq);
- INTERRUPT_GEN_MEMBER(toypop_m68000_interrupt);
- TIMER_CALLBACK_MEMBER(namcoio_run);
- void draw_background(bitmap_ind16 &bitmap);
- void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8 *spriteram_base);
-
-protected:
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
-};
diff --git a/src/mame/includes/xbox.h b/src/mame/includes/xbox.h
index 8094ac33100..045d7504700 100644
--- a/src/mame/includes/xbox.h
+++ b/src/mame/includes/xbox.h
@@ -1,6 +1,8 @@
// license:BSD-3-Clause
// copyright-holders:Samuele Zannoli
+#include <forward_list>
+
struct OHCIEndpointDescriptor {
int mps; // MaximumPacketSize
int f; // Format
@@ -211,29 +213,79 @@ enum USBDeviceState
ConfiguredState
};
+enum USBControlDirection
+{
+ HostToDevice=0,
+ DeviceToHost=1
+};
+
+enum USBEndpointType
+{
+ ControlEndpoint=0,
+ IsochronousEndpoint,
+ BulkEndpoint,
+ InterruptEndpoint
+};
+
+struct usb_device_interface_alternate
+{
+ USBStandardInterfaceDescriptor interface_descriptor;
+ std::forward_list<USBStandardEndpointDescriptor> endpoint_descriptors;
+};
+
+struct usb_device_interface
+{
+ std::forward_list<usb_device_interface_alternate> alternate_settings;
+ int selected_alternate;
+};
+
+struct usb_device_configuration
+{
+ USBStandardConfigurationDescriptor configuration_descriptor;
+ std::forward_list<usb_device_interface> interfaces;
+};
+
class ohci_function_device {
public:
ohci_function_device(running_machine &machine);
void execute_reset();
int execute_transfer(int address, int endpoint, int pid, UINT8 *buffer, int size);
+protected:
+ int handle_nonstandard_request(int endpoint, USBSetupPacket *setup);
+ virtual int handle_get_status_request(int endpoint, USBSetupPacket *setup) = 0;
+ virtual int handle_clear_feature_request(int endpoint, USBSetupPacket *setup) = 0;
+ virtual int handle_set_feature_request(int endpoint, USBSetupPacket *setup) = 0;
+ virtual int handle_set_descriptor_request(int endpoint, USBSetupPacket *setup) = 0;
+ virtual int handle_synch_frame_request(int endpoint, USBSetupPacket *setup) = 0;
private:
void add_device_descriptor(USBStandardDeviceDescriptor &descriptor);
void add_configuration_descriptor(USBStandardConfigurationDescriptor &descriptor);
void add_interface_descriptor(USBStandardInterfaceDescriptor &descriptor);
void add_endpoint_descriptor(USBStandardEndpointDescriptor &descriptor);
- int handle_nonstandard_request(USBSetupPacket *setup);
+ void select_configuration(int index);
+ void select_alternate(int interfacei, int index);
+ int find_alternate(int interfacei);
+ struct {
+ int type;
+ int controldirection;
+ int controltype;
+ int controlrecipient;
+ int remain;
+ UINT8 *position;
+ UINT8 buffer[4];
+ } endpoints[256];
int state;
- int address;
+ bool settingaddress;
int newaddress;
- int controldirection;
- int controltype;
- int controlrecipient;
+ int address;
int configurationvalue;
- bool settingaddress;
- int remain;
- UINT8 *position;
UINT8 *descriptors;
int descriptors_pos;
+ USBStandardDeviceDescriptor device_descriptor;
+ std::forward_list<usb_device_configuration> configurations;
+ usb_device_configuration *latest_configuration;
+ usb_device_interface_alternate *latest_alternate;
+ usb_device_configuration *selected_configuration;
};
class xbox_base_state : public driver_device
diff --git a/src/mame/includes/yiear.h b/src/mame/includes/yiear.h
index 1c495709603..d7af61a6429 100644
--- a/src/mame/includes/yiear.h
+++ b/src/mame/includes/yiear.h
@@ -1,5 +1,6 @@
-// license:???
-// copyright-holders:Enrique Sanchez
+// license:BSD-3-Clause
+// copyright-holders:Phil Stroffolino
+// thanks-to:Enrique Sanchez
#include "sound/sn76496.h"
#include "sound/vlm5030.h"
diff --git a/src/mame/layout/LICENSE b/src/mame/layout/LICENSE
new file mode 100644
index 00000000000..670154e3538
--- /dev/null
+++ b/src/mame/layout/LICENSE
@@ -0,0 +1,116 @@
+CC0 1.0 Universal
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later
+claims of infringement build upon, modify, incorporate in other works, reuse
+and redistribute as freely as possible in any form whatsoever and for any
+purposes, including without limitation commercial purposes. These owners may
+contribute to the Commons to promote the ideal of a free culture and the
+further production of creative, cultural and scientific works, or to gain
+reputation or greater distribution for their Work in part through the use and
+efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with a
+Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not limited
+to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display, communicate,
+ and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or performer(s);
+
+ iii. publicity and privacy rights pertaining to a person's image or likeness
+ depicted in a Work;
+
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+
+ v. rights protecting the extraction, dissemination, use and reuse of data in
+ a Work;
+
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation thereof,
+ including any amended or successor version of such directive); and
+
+ vii. other similar, equivalent or corresponding rights throughout the world
+ based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time
+extensions), (iii) in any current or future medium and for any number of
+copies, and (iv) for any purpose whatsoever, including without limitation
+commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
+the Waiver for the benefit of each member of the public at large and to the
+detriment of Affirmer's heirs and successors, fully intending that such Waiver
+shall not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of the Work
+by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account
+Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
+is so judged Affirmer hereby grants to each affected person a royalty-free,
+non transferable, non sublicensable, non exclusive, irrevocable and
+unconditional license to exercise Affirmer's Copyright and Related Rights in
+the Work (i) in all territories worldwide, (ii) for the maximum duration
+provided by applicable law or treaty (including future time extensions), (iii)
+in any current or future medium and for any number of copies, and (iv) for any
+purpose whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed effective as
+of the date CC0 was applied by Affirmer to the Work. Should any part of the
+License for any reason be judged legally invalid or ineffective under
+applicable law, such partial invalidity or ineffectiveness shall not
+invalidate the remainder of the License, and in such case Affirmer hereby
+affirms that he or she will not (i) exercise any of his or her remaining
+Copyright and Related Rights in the Work or (ii) assert any associated claims
+and causes of action with respect to the Work, in either case contrary to
+Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+
+ b. Affirmer offers the Work as-is and makes no representations or warranties
+ of any kind concerning the Work, express, implied, statutory or otherwise,
+ including without limitation warranties of title, merchantability, fitness
+ for a particular purpose, non infringement, or the absence of latent or
+ other defects, accuracy, or the present or absence of errors, whether or not
+ discoverable, all to the greatest extent permissible under applicable law.
+
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without limitation
+ any person's Copyright and Related Rights in the Work. Further, Affirmer
+ disclaims responsibility for obtaining any necessary consents, permissions
+ or other rights required for any use of the Work.
+
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to this
+ CC0 or use of the Work.
+
+For more information, please see
+<http://creativecommons.org/publicdomain/zero/1.0/>
diff --git a/src/mame/layout/README.md b/src/mame/layout/README.md
new file mode 100644
index 00000000000..78ef2e5e6ad
--- /dev/null
+++ b/src/mame/layout/README.md
@@ -0,0 +1,6 @@
+# **Layout** #
+
+Layouts files are definiton files to describe look and fell of emulated machines, and are product
+of many different contributors.
+
+Licensed under [CC0 1.0 Universal (CC0 1.0)](https://creativecommons.org/publicdomain/zero/1.0/) \ No newline at end of file
diff --git a/src/mame/layout/cnfball.lay b/src/mame/layout/cnfball.lay
new file mode 100644
index 00000000000..bb5a3720d5f
--- /dev/null
+++ b/src/mame/layout/cnfball.lay
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.25" blue="0.26" /></led7seg>
+ </element>
+ <element name="seg" defstate="0">
+ <rect state="0"><color red="0.13" green="0.0325" blue="0.0338" /></rect>
+ <rect state="1"><color red="1.0" green="0.25" blue="0.26" /></rect>
+ </element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="0" right="100" top="0" bottom="50" />
+
+ <bezel name="digit7" element="digit"><bounds x="10" y="0" width="10" height="15" /></bezel>
+ <bezel name="digit6" element="digit"><bounds x="20" y="0" width="10" height="15" /></bezel>
+
+ <bezel name="digit5" element="digit"><bounds x="40" y="0" width="10" height="15" /></bezel>
+ <bezel name="digit4" element="digit"><bounds x="50" y="0" width="10" height="15" /></bezel>
+ <bezel name="digit3" element="digit"><bounds x="60" y="0" width="10" height="15" /></bezel>
+
+ <bezel name="digit1" element="digit"><bounds x="80" y="0" width="10" height="15" /></bezel>
+ <bezel name="digit0" element="digit"><bounds x="90" y="0" width="10" height="15" /></bezel>
+
+ <bezel name="8.10" element="seg"><bounds x="0" y="20" width="5" height="1" /></bezel>
+ <bezel name="8.9" element="seg"><bounds x="0" y="25" width="5" height="1" /></bezel>
+ <bezel name="8.8" element="seg"><bounds x="0" y="30" width="5" height="1" /></bezel>
+
+ <bezel name="7.10" element="seg"><bounds x="10" y="20" width="5" height="1" /></bezel>
+ <bezel name="7.9" element="seg"><bounds x="10" y="25" width="5" height="1" /></bezel>
+ <bezel name="7.8" element="seg"><bounds x="10" y="30" width="5" height="1" /></bezel>
+
+ <bezel name="6.10" element="seg"><bounds x="20" y="20" width="5" height="1" /></bezel>
+ <bezel name="6.9" element="seg"><bounds x="20" y="25" width="5" height="1" /></bezel>
+ <bezel name="6.8" element="seg"><bounds x="20" y="30" width="5" height="1" /></bezel>
+
+ <bezel name="5.10" element="seg"><bounds x="30" y="20" width="5" height="1" /></bezel>
+ <bezel name="5.9" element="seg"><bounds x="30" y="25" width="5" height="1" /></bezel>
+ <bezel name="5.8" element="seg"><bounds x="30" y="30" width="5" height="1" /></bezel>
+
+ <bezel name="4.10" element="seg"><bounds x="40" y="20" width="5" height="1" /></bezel>
+ <bezel name="4.9" element="seg"><bounds x="40" y="25" width="5" height="1" /></bezel>
+ <bezel name="4.8" element="seg"><bounds x="40" y="30" width="5" height="1" /></bezel>
+
+ <bezel name="3.10" element="seg"><bounds x="50" y="20" width="5" height="1" /></bezel>
+ <bezel name="3.9" element="seg"><bounds x="50" y="25" width="5" height="1" /></bezel>
+ <bezel name="3.8" element="seg"><bounds x="50" y="30" width="5" height="1" /></bezel>
+
+ <bezel name="2.10" element="seg"><bounds x="60" y="20" width="5" height="1" /></bezel>
+ <bezel name="2.9" element="seg"><bounds x="60" y="25" width="5" height="1" /></bezel>
+ <bezel name="2.8" element="seg"><bounds x="60" y="30" width="5" height="1" /></bezel>
+
+ <bezel name="1.10" element="seg"><bounds x="70" y="20" width="5" height="1" /></bezel>
+ <bezel name="1.9" element="seg"><bounds x="70" y="25" width="5" height="1" /></bezel>
+ <bezel name="1.8" element="seg"><bounds x="70" y="30" width="5" height="1" /></bezel>
+
+ <bezel name="0.10" element="seg"><bounds x="80" y="20" width="5" height="1" /></bezel>
+ <bezel name="0.9" element="seg"><bounds x="80" y="25" width="5" height="1" /></bezel>
+ <bezel name="0.8" element="seg"><bounds x="80" y="30" width="5" height="1" /></bezel>
+
+
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/ctstein.lay b/src/mame/layout/ctstein.lay
new file mode 100644
index 00000000000..d86f5caa719
--- /dev/null
+++ b/src/mame/layout/ctstein.lay
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="static_white"><rect><color red="0.75" green="0.73" blue="0.7" /></rect></element>
+ <element name="static_white2"><rect><color red="0.6" green="0.59" blue="0.57" /></rect></element>
+
+ <element name="text_best">
+ <rect><color red="0.6" green="0.59" blue="0.57" /></rect>
+ <text string="BEST"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_score">
+ <rect><color red="0.6" green="0.59" blue="0.57" /></rect>
+ <text string="SCORE"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_start">
+ <rect><color red="0.6" green="0.59" blue="0.57" /></rect>
+ <text string="START"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+ <element name="text_game">
+ <rect><color red="0.6" green="0.59" blue="0.57" /></rect>
+ <text string="GAME"><color red="0.0" green="0.0" blue="0.0" /></text>
+ </element>
+
+ <element name="lamp_r" defstate="0">
+ <rect state="0"><color red="0.5" green="0.15" blue="0.1" /></rect>
+ <rect state="1"><color red="1.0" green="0.4" blue="0.28" /></rect>
+ </element>
+ <element name="lamp_b" defstate="0">
+ <rect state="0"><color red="0.1" green="0.15" blue="0.5" /></rect>
+ <rect state="1"><color red="0.3" green="0.42" blue="1.0" /></rect>
+ </element>
+ <element name="lamp_g" defstate="0">
+ <rect state="0"><color red="0.15" green="0.5" blue="0.1" /></rect>
+ <rect state="1"><color red="0.52" green="1.0" blue="0.4" /></rect>
+ </element>
+ <element name="lamp_y" defstate="0">
+ <rect state="0"><color red="0.5" green="0.45" blue="0.1" /></rect>
+ <rect state="1"><color red="1.0" green="0.93" blue="0.4" /></rect>
+ </element>
+
+ <element name="button_r" defstate="0">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="0">
+ <color red="0.8" green="0.35" blue="0.1" />
+ <bounds x="0.2" y="0.2" width="0.6" height="0.6" />
+ </disk>
+ <disk state="1">
+ <color red="0.8" green="0.35" blue="0.1" />
+ <bounds x="0.28" y="0.28" width="0.44" height="0.44" />
+ </disk>
+ </element>
+ <element name="button_b" defstate="0">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="0">
+ <color red="0.2" green="0.25" blue="0.8" />
+ <bounds x="0.2" y="0.2" width="0.6" height="0.6" />
+ </disk>
+ <disk state="1">
+ <color red="0.2" green="0.25" blue="0.8" />
+ <bounds x="0.28" y="0.28" width="0.44" height="0.44" />
+ </disk>
+ </element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="0" right="50" top="0" bottom="22" />
+ <bezel element="static_white">
+ <bounds left="-1" right="51" top="-1" bottom="23" />
+ </bezel>
+
+ <bezel name="0.0" element="lamp_r" inputtag="IN.2" inputmask="0x01">
+ <bounds x="-1" y="-1" width="21" height="11" />
+ </bezel>
+ <bezel name="0.1" element="lamp_y" inputtag="IN.2" inputmask="0x02">
+ <bounds x="30" y="12" width="21" height="11" />
+ </bezel>
+ <bezel name="0.2" element="lamp_g" inputtag="IN.2" inputmask="0x04">
+ <bounds x="-1" y="12" width="21" height="11" />
+ </bezel>
+ <bezel name="0.3" element="lamp_b" inputtag="IN.2" inputmask="0x08">
+ <bounds x="30" y="-1" width="21" height="11" />
+ </bezel>
+
+ <bezel element="static_white2"><bounds x="21" y="1" width="8" height="20" /></bezel>
+
+ <bezel element="text_best"><bounds x="21.4" y="3.5" width="3" height="0.75" /></bezel>
+ <bezel element="text_score"><bounds x="25.9" y="3.5" width="3" height="0.75" /></bezel>
+ <bezel element="button_b" inputtag="IN.1" inputmask="0x02"><bounds x="24" y="3" width="2" height="2" /></bezel>
+
+ <bezel element="text_start"><bounds x="21.2" y="18.5" width="3" height="0.75" /></bezel>
+ <bezel element="text_game"><bounds x="25.8" y="18.5" width="3" height="0.75" /></bezel>
+ <bezel element="button_r" inputtag="IN.1" inputmask="0x01"><bounds x="24" y="18" width="2" height="2" /></bezel>
+
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/fxmcr165.lay b/src/mame/layout/fxmcr165.lay
new file mode 100644
index 00000000000..6cbc66fcbf9
--- /dev/null
+++ b/src/mame/layout/fxmcr165.lay
@@ -0,0 +1,57 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.20" blue="0.22" /></led7seg>
+ </element>
+ <element name="led" defstate="0">
+ <disk state="0"><color red="0.15" green="0.03" blue="0.04" /></disk>
+ <disk state="1"><color red="1.0" green="0.20" blue="0.22" /></disk>
+ </element>
+
+ <element name="text_0"><text string="0"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_1"><text string="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_2"><text string="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_3"><text string="3"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_4"><text string="4"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_5"><text string="5"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_6"><text string="6"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_8"><text string="8"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="0" right="29" top="0" bottom="11" />
+
+ <bezel element="text_4"><bounds x="0.5" y="0.5" width="2" height="1" /></bezel>
+ <bezel element="text_2"><bounds x="3.5" y="0.5" width="2" height="1" /></bezel>
+ <bezel element="text_1"><bounds x="6.5" y="0.5" width="2" height="1" /></bezel>
+ <bezel element="text_8"><bounds x="9.5" y="0.5" width="2" height="1" /></bezel>
+ <bezel element="text_4"><bounds x="12.5" y="0.5" width="2" height="1" /></bezel>
+ <bezel element="text_2"><bounds x="15.5" y="0.5" width="2" height="1" /></bezel>
+ <bezel element="text_1"><bounds x="18.5" y="0.5" width="2" height="1" /></bezel>
+
+ <bezel element="text_6"><bounds x="0.5" y="3.5" width="2" height="1" /></bezel>
+ <bezel element="text_5"><bounds x="3.5" y="3.5" width="2" height="1" /></bezel>
+ <bezel element="text_4"><bounds x="6.5" y="3.5" width="2" height="1" /></bezel>
+ <bezel element="text_3"><bounds x="9.5" y="3.5" width="2" height="1" /></bezel>
+ <bezel element="text_2"><bounds x="12.5" y="3.5" width="2" height="1" /></bezel>
+ <bezel element="text_1"><bounds x="15.5" y="3.5" width="2" height="1" /></bezel>
+ <bezel element="text_0"><bounds x="18.5" y="3.5" width="2" height="1" /></bezel>
+
+ <bezel name="1.6" element="led"><bounds x="1" y="2" width="1" height="1" /></bezel>
+ <bezel name="1.5" element="led"><bounds x="4" y="2" width="1" height="1" /></bezel>
+ <bezel name="1.4" element="led"><bounds x="7" y="2" width="1" height="1" /></bezel>
+ <bezel name="1.3" element="led"><bounds x="10" y="2" width="1" height="1" /></bezel>
+ <bezel name="1.2" element="led"><bounds x="13" y="2" width="1" height="1" /></bezel>
+ <bezel name="1.1" element="led"><bounds x="16" y="2" width="1" height="1" /></bezel>
+ <bezel name="1.0" element="led"><bounds x="19" y="2" width="1" height="1" /></bezel>
+
+ <bezel name="digit0" element="digit"><bounds x="23" y="2" width="5" height="7.5" /></bezel>
+
+
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/h2hbaskb.lay b/src/mame/layout/h2hbaskb.lay
new file mode 100644
index 00000000000..1ddaff0b0ce
--- /dev/null
+++ b/src/mame/layout/h2hbaskb.lay
@@ -0,0 +1,137 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
+ <element name="static_white"><rect><color red="0.85" green="0.85" blue="0.85" /></rect></element>
+ <element name="disk_white"><disk><color red="0.85" green="0.85" blue="0.85" /></disk></element>
+ <element name="disk_black"><disk><color red="0.0" green="0.0" blue="0.0" /></disk></element>
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.20" blue="0.22" /></led7seg>
+ </element>
+
+ <element name="led" defstate="0">
+ <disk state="0"><color red="0.14" green="0.02" blue="0.03" /></disk>
+ <disk state="1"><color red="1.0" green="0.20" blue="0.22" /></disk>
+ </element>
+ <element name="ledr" defstate="0">
+ <rect state="0"><color red="0.14" green="0.02" blue="0.03" /></rect>
+ <rect state="1"><color red="1.0" green="0.20" blue="0.22" /></rect>
+ </element>
+
+ <element name="text_goal"><text string="GOAL"><color red="0.95" green="0.95" blue="0.95" /></text></element>
+ <element name="text_home"><text string="HOME"><color red="0.95" green="0.95" blue="0.95" /></text></element>
+ <element name="text_away"><text string="AWAY"><color red="0.95" green="0.95" blue="0.95" /></text></element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="26" right="124" top="5" bottom="85.5" />
+
+ <bezel name="digit1" element="digit"><bounds x="36" y="15" width="6" height="9" /></bezel>
+ <bezel name="digit0" element="digit"><bounds x="42" y="15" width="6" height="9" /></bezel>
+
+ <!-- field, goal -->
+
+ <bezel element="static_white"><bounds x="25" y="26" width="100" height="1" /></bezel>
+ <bezel element="disk_white"><bounds x="60" y="40" width="30" height="30" /></bezel>
+ <bezel element="disk_black"><bounds x="61" y="41" width="28" height="28" /></bezel>
+ <bezel element="static_white"><bounds x="60" y="5" width="30" height="50" /></bezel>
+ <bezel element="static_black"><bounds x="61" y="5" width="28" height="50.1" /></bezel>
+ <bezel element="static_white"><bounds x="57.5" y="4.9" width="35" height="1.1" /></bezel>
+ <bezel element="static_white"><bounds x="60.5" y="51" width="29" height="1" /></bezel>
+
+ <bezel element="static_black"><bounds x="59.5" y="10.5" width="31" height="0.9" /></bezel>
+ <bezel element="static_black"><bounds x="59.5" y="17.0" width="31" height="0.9" /></bezel>
+ <bezel element="static_black"><bounds x="59.5" y="23.5" width="31" height="0.9" /></bezel>
+ <bezel element="static_black"><bounds x="59.5" y="30.0" width="31" height="0.9" /></bezel>
+ <bezel element="static_black"><bounds x="59.5" y="36.5" width="31" height="0.9" /></bezel>
+ <bezel element="static_black"><bounds x="59.5" y="43.0" width="31" height="0.9" /></bezel>
+ <bezel element="static_black"><bounds x="59.5" y="49.5" width="31" height="0.9" /></bezel>
+
+ <bezel element="text_goal"><bounds x="60" y="11.5" width="12" height="3" /></bezel>
+ <bezel element="disk_white"><bounds x="70" y="8" width="10" height="10" /></bezel>
+ <bezel element="static_white"><bounds x="72" y="5.5" width="1" height="6" /></bezel>
+ <bezel element="static_white"><bounds x="77" y="5.5" width="1" height="6" /></bezel>
+
+ <bezel element="disk_black"><bounds x="71" y="9" width="8" height="8" /></bezel>
+ <bezel name="13.0" element="led"><bounds x="73" y="11" width="4" height="4" /></bezel>
+
+ <bezel name="3.0" element="led"><bounds x="62" y="21" width="4" height="4" /></bezel>
+ <bezel name="3.1" element="led"><bounds x="67" y="25" width="4" height="4" /></bezel>
+ <bezel name="3.2" element="led"><bounds x="73" y="26" width="4" height="4" /></bezel>
+ <bezel name="3.3" element="led"><bounds x="79" y="25" width="4" height="4" /></bezel>
+ <bezel name="3.4" element="led"><bounds x="84" y="21" width="4" height="4" /></bezel>
+
+ <!-- men -->
+
+ <bezel element="disk_white"><bounds x="72" y="54" width="6" height="6" /></bezel>
+ <bezel name="8.0" element="led"><bounds x="73" y="55" width="4" height="4" /></bezel>
+
+ <bezel element="disk_white"><bounds x="35" y="47" width="6" height="6" /></bezel>
+ <bezel name="5.0" element="led"><bounds x="36" y="48" width="4" height="4" /></bezel>
+
+ <bezel element="disk_white"><bounds x="109" y="47" width="6" height="6" /></bezel>
+ <bezel name="9.0" element="led"><bounds x="110" y="48" width="4" height="4" /></bezel>
+
+ <bezel element="disk_white"><bounds x="55" y="74" width="6" height="6" /></bezel>
+ <bezel name="4.0" element="led"><bounds x="56" y="75" width="4" height="4" /></bezel>
+ <bezel element="text_home"><bounds x="52" y="80.5" width="12" height="3" /></bezel>
+
+ <bezel element="disk_white"><bounds x="89" y="74" width="6" height="6" /></bezel>
+ <bezel name="10.0" element="led"><bounds x="90" y="75" width="4" height="4" /></bezel>
+ <bezel element="text_away"><bounds x="86" y="80.5" width="12" height="3" /></bezel>
+
+ <!-- small leds -->
+
+ <bezel name="11.1" element="led"><bounds x="57.1" y="29.1" width="1" height="1" /></bezel>
+ <bezel name="11.2" element="led"><bounds x="52.7" y="33.7" width="1" height="1" /></bezel>
+ <bezel name="11.3" element="led"><bounds x="48.3" y="38.3" width="1" height="1" /></bezel> <!-- unpopulated, but is used -->
+ <bezel name="2.0" element="ledr"><bounds x="44.6" y="40.6" width="4" height="1" /></bezel>
+ <bezel name="11.4" element="led"><bounds x="43.9" y="42.9" width="1" height="1" /></bezel>
+
+ <bezel name="12.1" element="led"><bounds x="74.5" y="34" width="1" height="1" /></bezel>
+ <bezel name="12.2" element="led"><bounds x="74.5" y="39" width="1" height="1" /></bezel>
+ <bezel name="12.3" element="led"><bounds x="74.5" y="44" width="1" height="1" /></bezel> <!-- unpopulated, but is used -->
+ <bezel name="2.2" element="ledr"><bounds x="73" y="46.5" width="4" height="1" /></bezel>
+ <bezel name="12.4" element="led"><bounds x="74.5" y="49" width="1" height="1" /></bezel>
+
+ <bezel name="13.1" element="led"><bounds x="91.9" y="29.1" width="1" height="1" /></bezel>
+ <bezel name="13.2" element="led"><bounds x="96.3" y="33.7" width="1" height="1" /></bezel>
+ <bezel name="13.3" element="led"><bounds x="100.7" y="38.3" width="1" height="1" /></bezel> <!-- unpopulated, but is used -->
+ <bezel name="2.4" element="ledr"><bounds x="101.4" y="40.6" width="4" height="1" /></bezel>
+ <bezel name="13.4" element="led"><bounds x="105.1" y="42.9" width="1" height="1" /></bezel>
+
+ <bezel name="5.1" element="led"><bounds x="45.6" y="50.9" width="1" height="1" /></bezel>
+ <bezel name="5.2" element="led"><bounds x="52.2" y="52.3" width="1" height="1" /></bezel>
+ <bezel name="2.1" element="ledr"><bounds x="55.5" y="51.5" width="1" height="4" /></bezel>
+ <bezel name="5.3" element="led"><bounds x="58.8" y="53.7" width="1" height="1" /></bezel> <!-- unpopulated, but is used -->
+ <bezel name="5.4" element="led"><bounds x="65.4" y="55.1" width="1" height="1" /></bezel>
+
+ <bezel name="8.4" element="led"><bounds x="103.4" y="50.9" width="1" height="1" /></bezel>
+ <bezel name="8.3" element="led"><bounds x="96.8" y="52.3" width="1" height="1" /></bezel>
+ <bezel name="2.3" element="ledr"><bounds x="93.5" y="51.5" width="1" height="4" /></bezel>
+ <bezel name="8.2" element="led"><bounds x="90.2" y="53.7" width="1" height="1" /></bezel> <!-- unpopulated, but is used -->
+ <bezel name="8.1" element="led"><bounds x="83.6" y="55.1" width="1" height="1" /></bezel>
+
+ <bezel name="4.4" element="led"><bounds x="42.7" y="56.1" width="1" height="1" /></bezel>
+ <bezel name="4.3" element="led"><bounds x="45.9" y="60.7" width="1" height="1" /></bezel>
+ <bezel name="4.2" element="led"><bounds x="49.1" y="65.3" width="1" height="1" /></bezel>
+ <bezel name="4.1" element="led"><bounds x="52.3" y="69.9" width="1" height="1" /></bezel>
+
+ <bezel name="10.4" element="led"><bounds x="65.5" y="76.5" width="1" height="1" /></bezel>
+ <bezel name="10.3" element="led"><bounds x="71.5" y="76.5" width="1" height="1" /></bezel>
+ <bezel name="10.2" element="led"><bounds x="77.5" y="76.5" width="1" height="1" /></bezel>
+ <bezel name="10.1" element="led"><bounds x="83.5" y="76.5" width="1" height="1" /></bezel>
+
+ <bezel name="9.1" element="led"><bounds x="107.3" y="56.1" width="1" height="1" /></bezel>
+ <bezel name="9.2" element="led"><bounds x="104.1" y="60.7" width="1" height="1" /></bezel>
+ <bezel name="9.3" element="led"><bounds x="100.9" y="65.3" width="1" height="1" /></bezel>
+ <bezel name="9.4" element="led"><bounds x="97.7" y="69.9" width="1" height="1" /></bezel>
+
+
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/sc4fd7tha.lay b/src/mame/layout/sc4fd7tha.lay
new file mode 100644
index 00000000000..5fdf86c0d3a
--- /dev/null
+++ b/src/mame/layout/sc4fd7tha.lay
@@ -0,0 +1,6388 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!-- **************************************************** -->
+<!-- * This MAME layout file was generated by MFME2MAME * -->
+<!-- * Please visit mfme2mame.org for more information. * -->
+<!-- **************************************************** -->
+
+<mamelayout version="2">
+ <element name="backdrop_colour">
+ <rect>
+ <color red="0.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_98_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_98_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <text string="CL">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_54_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_54_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <text string="%">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_76_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_76_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <text string="HI">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_88_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_88_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <text string="LO">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_251_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.38" green="0.38" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.09" green="0.09" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_251_1" defstate="0">
+ <rect state="1">
+ <color red="0.75" green="0.75" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.19" green="0.19" blue="0.19">
+ </color>
+ </rect>
+ <text string="L">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.22">
+ </bounds>
+ </text>
+ <text string="O">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.28" width="0.90" height="0.22">
+ </bounds>
+ </text>
+ <text string="S">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.22">
+ </bounds>
+ </text>
+ <text string="E">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.72" width="0.90" height="0.22">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_70_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_70_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="FRA">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_71_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_71_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="NKIE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_72_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_72_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="DETT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_73_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_73_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="ORI'S">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_74_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_74_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="7TH">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_75_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_75_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="HEAVEN">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_208_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_208_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="SHOT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_209_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_209_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="2">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="SHOT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_210_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_210_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="3">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="SHOT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_211_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_211_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="4">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="SHOT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_212_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_212_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="5">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="SHOT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_213_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_213_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="6">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="SHOT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_214_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_214_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="7">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="SHOT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_215_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_215_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="8">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="SHOT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_216_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_216_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="9">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="SHOT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_217_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.13" green="0.25" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.03" green="0.06" blue="0.06">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_217_1" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.50" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.13" blue="0.13">
+ </color>
+ </rect>
+ <text string="JACK">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="POT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_201_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.13" green="0.25" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.03" green="0.06" blue="0.06">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_201_1" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.50" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.13" blue="0.13">
+ </color>
+ </rect>
+ <text string="JACK">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="POT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_200_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_200_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="9">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_199_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_199_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="8">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_198_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_198_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="7">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_197_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_197_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="6">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_196_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_196_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="5">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_195_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_195_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="4">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_194_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_194_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="3">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_193_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_193_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="2">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_192_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_192_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_176_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_176_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="$1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_177_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_177_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="$1.60">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_178_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_178_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="$2">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_179_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_179_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="$2.40">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_180_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_180_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="$3">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_181_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_181_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="$4">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_182_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_182_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="$5">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_183_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_183_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="$6">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_184_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_184_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="$8">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_185_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.13" green="0.25" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.03" green="0.06" blue="0.06">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_185_1" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.50" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.13" blue="0.13">
+ </color>
+ </rect>
+ <text string="JACK">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="POT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_160_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_160_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="LUCKY">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="7s">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_161_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_161_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="ROUND">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="ROBIN">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_162_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_162_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="ACCUM-">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="ULATOR">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_163_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_163_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="ON THE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="RAILS">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_164_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_164_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="REEL">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="RACE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_165_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_165_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="TIC TAC">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="CASH">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_166_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_166_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="MAGIC">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="7s">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_167_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_167_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="OVER THE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="ODDS">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_168_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_168_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="WIN">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="SERIES">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_169_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.13" green="0.25" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.03" green="0.06" blue="0.06">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_169_1" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.50" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.13" blue="0.13">
+ </color>
+ </rect>
+ <text string="JACK">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="POT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_107_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_107_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_106_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_106_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="LUCKY">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_105_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_105_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="2">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_104_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_104_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_103_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_103_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ <text string="LOSE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_225_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.12" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_225_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="1.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.25" blue="0.25">
+ </color>
+ </rect>
+ <text string="EXTRA">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="BETS">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_224_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_224_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_220_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_220_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="LUCKY">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_219_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_219_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_204_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_204_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <text string="STEW">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="ARD">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_203_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_203_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="2">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_188_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_188_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_187_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_187_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_172_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_172_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_171_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_171_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_90_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_90_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="CRAZY">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="HORSE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_89_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_89_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_108_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_108_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <text string="STEW">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="ARD">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_97_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_97_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="2">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_96_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_96_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_99_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_99_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_100_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_100_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <text string="STEW">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="ARD">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_101_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.12" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_101_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="1.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.25" blue="0.25">
+ </color>
+ </rect>
+ <text string="EXTRA">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="BETS">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_102_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_102_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_144_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_144_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="CRAZY">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="HORSE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_151_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.12" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_151_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="1.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.25" blue="0.25">
+ </color>
+ </rect>
+ <text string="EXTRA">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="BETS">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_150_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_150_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_149_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_149_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="LUCKY">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_148_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_148_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_147_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_147_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="LOSE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_146_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_146_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <text string="STEW">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="ARD">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_145_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_145_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="2">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_226_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.25" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.06" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_226_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.13" blue="0.25">
+ </color>
+ </rect>
+ <text string="HELD">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_250_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.25" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.06" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_250_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.50" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.13" blue="0.06">
+ </color>
+ </rect>
+ <text string="8">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_249_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.25" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.06" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_249_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.50" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.13" blue="0.06">
+ </color>
+ </rect>
+ <text string="7">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_248_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.25" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.06" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_248_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.50" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.13" blue="0.06">
+ </color>
+ </rect>
+ <text string="6">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_247_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.25" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.06" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_247_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.50" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.13" blue="0.06">
+ </color>
+ </rect>
+ <text string="5">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_245_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.25" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.06" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_245_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.50" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.13" blue="0.06">
+ </color>
+ </rect>
+ <text string="3">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_246_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.25" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.06" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_246_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.50" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.13" blue="0.06">
+ </color>
+ </rect>
+ <text string="BONUS">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_244_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.25" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.06" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_244_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.50" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.13" blue="0.06">
+ </color>
+ </rect>
+ <text string="2">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_243_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.25" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.06" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_243_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.50" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.13" blue="0.06">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_60_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_60_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_38_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_38_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="2">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_59_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.38" green="0.38" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.09" green="0.09" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_59_1" defstate="0">
+ <rect state="1">
+ <color red="0.75" green="0.75" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.19" green="0.19" blue="0.19">
+ </color>
+ </rect>
+ <text string="L">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.22">
+ </bounds>
+ </text>
+ <text string="O">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.28" width="0.90" height="0.22">
+ </bounds>
+ </text>
+ <text string="S">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.22">
+ </bounds>
+ </text>
+ <text string="E">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.72" width="0.90" height="0.22">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_34_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_34_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="6">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_35_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_35_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="5">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_36_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_36_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="4">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_37_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_37_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="3">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="NUDG">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_9_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.00" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_9_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <text string="WIN">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="$4">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_10_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.00" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_10_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <text string="WIN">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="$3">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_11_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.00" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_11_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <text string="WIN">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="$2">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_12_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.00" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_12_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <text string="WIN">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="$1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_55_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.00" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_55_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <text string="WIN">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="$8">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_8_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.00" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_8_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <text string="WIN">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="$6">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_236_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_236_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="LUCKY">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_152_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.12" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_152_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="1.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.25" blue="0.25">
+ </color>
+ </rect>
+ <text string="CRACK">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="WHIP">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_153_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_153_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="HEDGE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="BETS">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_154_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_154_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="RUN">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="WILD">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_155_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.25" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.06" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_155_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.50" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.13" blue="0.25">
+ </color>
+ </rect>
+ <text string="UP THE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="ANTE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_156_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.00" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_156_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <text string="ALTER">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="BETS">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_92_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.12" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_92_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="1.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.25" blue="0.25">
+ </color>
+ </rect>
+ <text string="WHIP">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_91_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_91_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="EXCESS">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="USE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_228_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_228_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="EXTRA">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="BET">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_229_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.25" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.06" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_229_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.50" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.13" blue="0.06">
+ </color>
+ </rect>
+ <text string="ODDS">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="ON">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_230_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_230_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="WALK">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="COURSE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_231_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.12" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_231_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="1.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.25" blue="0.25">
+ </color>
+ </rect>
+ <text string="DISQU-">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="ALIFIED">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_232_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_232_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="RANDOM">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="SELECT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_233_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.25" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.06" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_233_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.50" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.13" blue="0.06">
+ </color>
+ </rect>
+ <text string="COLLECT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="A BET">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_234_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_234_1" defstate="0">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="PLACE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="A BET">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_235_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.12" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_235_1" defstate="0">
+ <rect state="1">
+ <color red="0.00" green="1.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.25" blue="0.25">
+ </color>
+ </rect>
+ <text string="RACE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="OVER">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_227_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_227_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <text string="STEW">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="ARD">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_129_1_border" defstate="0">
+ <disk state="1">
+ <color red="0.25" green="0.25" blue="0.38">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.06" green="0.06" blue="0.09">
+ </color>
+ </disk>
+ </element>
+ <element name="lamp_129_1" defstate="0">
+ <disk state="1">
+ <color red="0.50" green="0.50" blue="0.75">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.13" green="0.13" blue="0.19">
+ </color>
+ </disk>
+ <text string="X">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_130_1_border" defstate="0">
+ <disk state="1">
+ <color red="0.25" green="0.25" blue="0.38">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.06" green="0.06" blue="0.09">
+ </color>
+ </disk>
+ </element>
+ <element name="lamp_130_1" defstate="0">
+ <disk state="1">
+ <color red="0.50" green="0.50" blue="0.75">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.13" green="0.13" blue="0.19">
+ </color>
+ </disk>
+ <text string="X">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_131_1_border" defstate="0">
+ <disk state="1">
+ <color red="0.25" green="0.25" blue="0.38">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.06" green="0.06" blue="0.09">
+ </color>
+ </disk>
+ </element>
+ <element name="lamp_131_1" defstate="0">
+ <disk state="1">
+ <color red="0.50" green="0.50" blue="0.75">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.13" green="0.13" blue="0.19">
+ </color>
+ </disk>
+ <text string="X">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_132_1_border" defstate="0">
+ <disk state="1">
+ <color red="0.25" green="0.25" blue="0.38">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.06" green="0.06" blue="0.09">
+ </color>
+ </disk>
+ </element>
+ <element name="lamp_132_1" defstate="0">
+ <disk state="1">
+ <color red="0.50" green="0.50" blue="0.75">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.13" green="0.13" blue="0.19">
+ </color>
+ </disk>
+ <text string="X">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_133_1_border" defstate="0">
+ <disk state="1">
+ <color red="0.25" green="0.25" blue="0.38">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.06" green="0.06" blue="0.09">
+ </color>
+ </disk>
+ </element>
+ <element name="lamp_133_1" defstate="0">
+ <disk state="1">
+ <color red="0.50" green="0.50" blue="0.75">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.13" green="0.13" blue="0.19">
+ </color>
+ </disk>
+ <text string="X">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_134_1_border" defstate="0">
+ <disk state="1">
+ <color red="0.25" green="0.25" blue="0.38">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.06" green="0.06" blue="0.09">
+ </color>
+ </disk>
+ </element>
+ <element name="lamp_134_1" defstate="0">
+ <disk state="1">
+ <color red="0.50" green="0.50" blue="0.75">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.13" green="0.13" blue="0.19">
+ </color>
+ </disk>
+ <text string="X">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_135_1_border" defstate="0">
+ <disk state="1">
+ <color red="0.25" green="0.25" blue="0.38">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.06" green="0.06" blue="0.09">
+ </color>
+ </disk>
+ </element>
+ <element name="lamp_135_1" defstate="0">
+ <disk state="1">
+ <color red="0.50" green="0.50" blue="0.75">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.13" green="0.13" blue="0.19">
+ </color>
+ </disk>
+ <text string="X">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_136_1_border" defstate="0">
+ <disk state="1">
+ <color red="0.25" green="0.25" blue="0.38">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.06" green="0.06" blue="0.09">
+ </color>
+ </disk>
+ </element>
+ <element name="lamp_136_1" defstate="0">
+ <disk state="1">
+ <color red="0.50" green="0.50" blue="0.75">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.13" green="0.13" blue="0.19">
+ </color>
+ </disk>
+ <text string="X">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_137_1_border" defstate="0">
+ <disk state="1">
+ <color red="0.25" green="0.25" blue="0.38">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.06" green="0.06" blue="0.09">
+ </color>
+ </disk>
+ </element>
+ <element name="lamp_137_1" defstate="0">
+ <disk state="1">
+ <color red="0.50" green="0.50" blue="0.75">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.13" green="0.13" blue="0.19">
+ </color>
+ </disk>
+ <text string="X">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_138_1_border" defstate="0">
+ <disk state="1">
+ <color red="0.25" green="0.25" blue="0.38">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.06" green="0.06" blue="0.09">
+ </color>
+ </disk>
+ </element>
+ <element name="lamp_138_1" defstate="0">
+ <disk state="1">
+ <color red="0.50" green="0.50" blue="0.75">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.13" green="0.13" blue="0.19">
+ </color>
+ </disk>
+ <text string="X">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_139_1_border" defstate="0">
+ <disk state="1">
+ <color red="0.25" green="0.25" blue="0.38">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.06" green="0.06" blue="0.09">
+ </color>
+ </disk>
+ </element>
+ <element name="lamp_139_1" defstate="0">
+ <disk state="1">
+ <color red="0.50" green="0.50" blue="0.75">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.13" green="0.13" blue="0.19">
+ </color>
+ </disk>
+ <text string="X">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_140_1_border" defstate="0">
+ <disk state="1">
+ <color red="0.25" green="0.25" blue="0.38">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.06" green="0.06" blue="0.09">
+ </color>
+ </disk>
+ </element>
+ <element name="lamp_140_1" defstate="0">
+ <disk state="1">
+ <color red="0.50" green="0.50" blue="0.75">
+ </color>
+ </disk>
+ <disk state="0">
+ <color red="0.13" green="0.13" blue="0.19">
+ </color>
+ </disk>
+ <text string="X">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_124_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_124_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ <text string="$1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_123_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_123_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ <text string="$1.20">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_122_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_122_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ <text string="$1.60">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_121_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_121_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ <text string="$2">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_120_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_120_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ <text string="$2.40">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_119_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_119_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ <text string="$3">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_118_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_118_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ <text string="$3.60">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_117_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_117_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ <text string="$4">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_113_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_113_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ <text string="$8">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_114_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_114_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ <text string="$7">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_115_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_115_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ <text string="$6">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_116_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_116_1" defstate="0">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.06">
+ </color>
+ </rect>
+ <text string="$5">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="lamp_112_1_border" defstate="0">
+ <rect state="1">
+ <color red="0.13" green="0.25" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.03" green="0.06" blue="0.06">
+ </color>
+ </rect>
+ </element>
+ <element name="lamp_112_1" defstate="0">
+ <rect state="1">
+ <color red="0.25" green="0.50" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.13" blue="0.13">
+ </color>
+ </rect>
+ <text string="JACKPOT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="+ REPEAT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="colour_button_169_border">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="colour_button_169">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="CANCEL">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="colour_button_170_border">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="colour_button_170">
+ <rect state="1">
+ <color red="0.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="HOLD">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="colour_button_171_border">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="colour_button_171">
+ <rect state="1">
+ <color red="0.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="HOLD">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="HI">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="colour_button_172_border">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="colour_button_172">
+ <rect state="1">
+ <color red="0.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="HOLD">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="LO">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="colour_button_173_border">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="colour_button_173">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="STOP">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="COLLECT">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="colour_button_174_border">
+ <rect state="1">
+ <color red="0.25" green="0.00" blue="0.50">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.06" green="0.00" blue="0.12">
+ </color>
+ </rect>
+ </element>
+ <element name="colour_button_174">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="1.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.13" green="0.00" blue="0.25">
+ </color>
+ </rect>
+ <text string="nudge">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ <text string="BUSTER">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.50" width="0.90" height="0.45">
+ </bounds>
+ </text>
+ </element>
+ <element name="colour_button_175_border">
+ <rect state="1">
+ <color red="0.50" green="0.25" blue="0.13">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.06" blue="0.03">
+ </color>
+ </rect>
+ </element>
+ <element name="colour_button_175">
+ <rect state="1">
+ <color red="1.00" green="0.50" blue="0.25">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.13" blue="0.06">
+ </color>
+ </rect>
+ <text string="EXCHANGE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="colour_button_176_border">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="colour_button_176">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="START">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="colour_button_177_border">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="colour_button_177">
+ <rect state="1">
+ <color red="0.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="$1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.05" y="0.05" width="0.90" height="0.90">
+ </bounds>
+ </text>
+ </element>
+ <element name="colour_button_179_border">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.38">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.09">
+ </color>
+ </rect>
+ </element>
+ <element name="colour_button_179">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.75">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.19">
+ </color>
+ </rect>
+ <text string="TAKE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="colour_button_180_border">
+ <rect state="1">
+ <color red="0.50" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="colour_button_180">
+ <rect state="1">
+ <color red="1.00" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.00" blue="0.00">
+ </color>
+ </rect>
+ <text string="TAKE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="colour_button_181_border">
+ <rect state="1">
+ <color red="0.00" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.06" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="colour_button_181">
+ <rect state="1">
+ <color red="0.00" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.00" green="0.13" blue="0.00">
+ </color>
+ </rect>
+ <text string="TAKE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="colour_button_182_border">
+ <rect state="1">
+ <color red="0.50" green="0.50" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.12" green="0.12" blue="0.00">
+ </color>
+ </rect>
+ </element>
+ <element name="colour_button_182">
+ <rect state="1">
+ <color red="1.00" green="1.00" blue="0.00">
+ </color>
+ </rect>
+ <rect state="0">
+ <color red="0.25" green="0.25" blue="0.00">
+ </color>
+ </rect>
+ <text string="TAKE">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ <bounds x="0.10" y="0.10" width="0.80" height="0.80">
+ </bounds>
+ </text>
+ </element>
+ <element name="reel_background">
+ <rect>
+ <color red="1.0" green="1.0" blue="1.0">
+ </color>
+ </rect>
+ </element>
+ <element name="reel0" defstate="0">
+ <reel reelreversed="1" stateoffset="-6144" numsymbolsvisible="3" symbollist="Red7,PurpleBar(1),Blue7,YellowBar,Jackpot,PurpleBar(2),Red7,YellowBar,Blue7,PurpleBar,Jackpot,YellowBar(2),Red7,PurpleBar(1),Blue7,YellowBar">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ </reel>
+ </element>
+ <element name="reel1" defstate="0">
+ <reel reelreversed="1" stateoffset="-6144" numsymbolsvisible="3" symbollist="Blue7,PurpleBar,Red7,YellowBar(1),Jackpot,PurpleBar,Red7,YellowBar,Red7(3),PurpleBar,Jackpot,YellowBar(2),Blue7,PurpleBar,Blue7(1),YellowBar">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ </reel>
+ </element>
+ <element name="reel2" defstate="0">
+ <reel reelreversed="1" stateoffset="-6144" numsymbolsvisible="3" symbollist="Red7,PurpleBar(2),Blue7,YellowBar,Jackpot,PurpleBar(4),Red7,YellowBar,Blue7(1),PurpleBar,Jackpot,YellowBar,Red7,PurpleBar(2),Blue7,YellowBar">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ </reel>
+ </element>
+ <element name="reel3" defstate="0">
+ <reel reelreversed="0" stateoffset="-15701" numsymbolsvisible="1" symbollist="12,11,10,9,8,7,6,5,4,3,2,1">
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ </reel>
+ </element>
+ <element name="led_background">
+ <rect>
+ <color red="0.4" green="0.0" blue="0.0">
+ </color>
+ </rect>
+ </element>
+ <element name="led_on">
+ <rect state="1">
+ <color red="1.0" green="0.0" blue="0.0">
+ </color>
+ </rect>
+ </element>
+ <element name="led_dot_on">
+ <disk state="1">
+ <color red="1.0" green="0.0" blue="0.0">
+ </color>
+ </disk>
+ </element>
+ <element name="led_off">
+ <rect state="0">
+ <color red="0.5" green="0.0" blue="0.0">
+ </color>
+ </rect>
+ </element>
+ <element name="led_dot_off">
+ <disk state="0">
+ <color red="0.5" green="0.0" blue="0.0">
+ </color>
+ </disk>
+ </element>
+ <element name="led_digit">
+ <led7seg>
+ <color red="1.0" green="0.0" blue="0.0">
+ </color>
+ </led7seg>
+ </element>
+ <element name="vfd0">
+ <led14segsc>
+ <color red="0.0" green="1.0" blue="1.0">
+ </color>
+ </led14segsc>
+ </element>
+ <element name="vfd0_background">
+ <rect>
+ <color red="0.0" green="0.0" blue="0.0">
+ </color>
+ </rect>
+ </element>
+ <element name="reel_lamp_layer_0" defstate="0">
+ <rect>
+ <color red="0.40" green="0.40" blue="0.40">
+ </color>
+ </rect>
+ <disk state="1">
+ <color red="0.50" green="0.50" blue="0.50">
+ </color>
+ </disk>
+ </element>
+ <element name="reel_lamp_layer_1" defstate="0">
+ <disk state="1">
+ <color red="0.60" green="0.60" blue="0.60">
+ </color>
+ </disk>
+ </element>
+ <element name="reel_lamp_layer_2" defstate="0">
+ <disk state="1">
+ <color red="0.70" green="0.70" blue="0.70">
+ </color>
+ </disk>
+ </element>
+ <element name="reel_lamp_layer_3" defstate="0">
+ <disk state="1">
+ <color red="0.80" green="0.80" blue="0.80">
+ </color>
+ </disk>
+ </element>
+ <element name="reel_lamp_layer_4" defstate="0">
+ <disk state="1">
+ <color red="0.90" green="0.90" blue="0.90">
+ </color>
+ </disk>
+ </element>
+ <element name="reel_lamp_layer_5" defstate="0">
+ <disk state="1">
+ <color red="1.00" green="1.00" blue="1.00">
+ </color>
+ </disk>
+ </element>
+
+ <view name="AWP Simulated Video">
+ <backdrop element="backdrop_colour">
+ <bounds x="0" y="0" width="1003" height="651">
+ </bounds>
+ </backdrop>
+ <backdrop element="reel_background">
+ <bounds x="125" y="440" width="80" height="140">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp48" element="reel_lamp_layer_0" state="0">
+ <bounds x="125.0000" y="440.0000" width="80.0000" height="46.6667">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp48" element="reel_lamp_layer_1" state="0">
+ <bounds x="128.3333" y="441.9445" width="73.3333" height="42.7778">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp48" element="reel_lamp_layer_2" state="0">
+ <bounds x="131.6667" y="443.8889" width="66.6667" height="38.8889">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp48" element="reel_lamp_layer_3" state="0">
+ <bounds x="135.0000" y="445.8333" width="60.0000" height="35.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp48" element="reel_lamp_layer_4" state="0">
+ <bounds x="138.3333" y="447.7778" width="53.3333" height="31.1111">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp48" element="reel_lamp_layer_5" state="0">
+ <bounds x="141.6667" y="449.7222" width="46.6667" height="27.2222">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp49" element="reel_lamp_layer_0" state="0">
+ <bounds x="125.0000" y="486.6667" width="80.0000" height="46.6667">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp49" element="reel_lamp_layer_1" state="0">
+ <bounds x="128.3333" y="488.6111" width="73.3333" height="42.7778">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp49" element="reel_lamp_layer_2" state="0">
+ <bounds x="131.6667" y="490.5555" width="66.6667" height="38.8889">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp49" element="reel_lamp_layer_3" state="0">
+ <bounds x="135.0000" y="492.5000" width="60.0000" height="35.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp49" element="reel_lamp_layer_4" state="0">
+ <bounds x="138.3333" y="494.4444" width="53.3333" height="31.1111">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp49" element="reel_lamp_layer_5" state="0">
+ <bounds x="141.6667" y="496.3889" width="46.6667" height="27.2222">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp50" element="reel_lamp_layer_0" state="0">
+ <bounds x="125.0000" y="533.3333" width="80.0000" height="46.6667">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp50" element="reel_lamp_layer_1" state="0">
+ <bounds x="128.3333" y="535.2778" width="73.3333" height="42.7778">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp50" element="reel_lamp_layer_2" state="0">
+ <bounds x="131.6667" y="537.2222" width="66.6667" height="38.8889">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp50" element="reel_lamp_layer_3" state="0">
+ <bounds x="135.0000" y="539.1666" width="60.0000" height="35.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp50" element="reel_lamp_layer_4" state="0">
+ <bounds x="138.3333" y="541.1111" width="53.3333" height="31.1111">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp50" element="reel_lamp_layer_5" state="0">
+ <bounds x="141.6667" y="543.0555" width="46.6667" height="27.2222">
+ </bounds>
+ </backdrop>
+ <backdrop name="sreel1" element="reel0" state="0">
+ <bounds x="125" y="440" width="80" height="140">
+ </bounds>
+ </backdrop>
+ <backdrop element="reel_background">
+ <bounds x="225" y="440" width="80" height="140">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp51" element="reel_lamp_layer_0" state="0">
+ <bounds x="225.0000" y="440.0000" width="80.0000" height="46.6667">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp51" element="reel_lamp_layer_1" state="0">
+ <bounds x="228.3333" y="441.9445" width="73.3333" height="42.7778">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp51" element="reel_lamp_layer_2" state="0">
+ <bounds x="231.6667" y="443.8889" width="66.6667" height="38.8889">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp51" element="reel_lamp_layer_3" state="0">
+ <bounds x="235.0000" y="445.8333" width="60.0000" height="35.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp51" element="reel_lamp_layer_4" state="0">
+ <bounds x="238.3333" y="447.7778" width="53.3333" height="31.1111">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp51" element="reel_lamp_layer_5" state="0">
+ <bounds x="241.6667" y="449.7222" width="46.6667" height="27.2222">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp52" element="reel_lamp_layer_0" state="0">
+ <bounds x="225.0000" y="486.6667" width="80.0000" height="46.6667">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp52" element="reel_lamp_layer_1" state="0">
+ <bounds x="228.3333" y="488.6111" width="73.3333" height="42.7778">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp52" element="reel_lamp_layer_2" state="0">
+ <bounds x="231.6667" y="490.5555" width="66.6667" height="38.8889">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp52" element="reel_lamp_layer_3" state="0">
+ <bounds x="235.0000" y="492.5000" width="60.0000" height="35.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp52" element="reel_lamp_layer_4" state="0">
+ <bounds x="238.3333" y="494.4444" width="53.3333" height="31.1111">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp52" element="reel_lamp_layer_5" state="0">
+ <bounds x="241.6667" y="496.3889" width="46.6667" height="27.2222">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp53" element="reel_lamp_layer_0" state="0">
+ <bounds x="225.0000" y="533.3333" width="80.0000" height="46.6667">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp53" element="reel_lamp_layer_1" state="0">
+ <bounds x="228.3333" y="535.2778" width="73.3333" height="42.7778">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp53" element="reel_lamp_layer_2" state="0">
+ <bounds x="231.6667" y="537.2222" width="66.6667" height="38.8889">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp53" element="reel_lamp_layer_3" state="0">
+ <bounds x="235.0000" y="539.1666" width="60.0000" height="35.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp53" element="reel_lamp_layer_4" state="0">
+ <bounds x="238.3333" y="541.1111" width="53.3333" height="31.1111">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp53" element="reel_lamp_layer_5" state="0">
+ <bounds x="241.6667" y="543.0555" width="46.6667" height="27.2222">
+ </bounds>
+ </backdrop>
+ <backdrop name="sreel2" element="reel1" state="0">
+ <bounds x="225" y="440" width="80" height="140">
+ </bounds>
+ </backdrop>
+ <backdrop element="reel_background">
+ <bounds x="325" y="440" width="80" height="140">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp64" element="reel_lamp_layer_0" state="0">
+ <bounds x="325.0000" y="440.0000" width="80.0000" height="46.6667">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp64" element="reel_lamp_layer_1" state="0">
+ <bounds x="328.3333" y="441.9445" width="73.3333" height="42.7778">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp64" element="reel_lamp_layer_2" state="0">
+ <bounds x="331.6667" y="443.8889" width="66.6667" height="38.8889">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp64" element="reel_lamp_layer_3" state="0">
+ <bounds x="335.0000" y="445.8333" width="60.0000" height="35.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp64" element="reel_lamp_layer_4" state="0">
+ <bounds x="338.3333" y="447.7778" width="53.3333" height="31.1111">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp64" element="reel_lamp_layer_5" state="0">
+ <bounds x="341.6667" y="449.7222" width="46.6667" height="27.2222">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp65" element="reel_lamp_layer_0" state="0">
+ <bounds x="325.0000" y="486.6667" width="80.0000" height="46.6667">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp65" element="reel_lamp_layer_1" state="0">
+ <bounds x="328.3333" y="488.6111" width="73.3333" height="42.7778">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp65" element="reel_lamp_layer_2" state="0">
+ <bounds x="331.6667" y="490.5555" width="66.6667" height="38.8889">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp65" element="reel_lamp_layer_3" state="0">
+ <bounds x="335.0000" y="492.5000" width="60.0000" height="35.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp65" element="reel_lamp_layer_4" state="0">
+ <bounds x="338.3333" y="494.4444" width="53.3333" height="31.1111">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp65" element="reel_lamp_layer_5" state="0">
+ <bounds x="341.6667" y="496.3889" width="46.6667" height="27.2222">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp66" element="reel_lamp_layer_0" state="0">
+ <bounds x="325.0000" y="533.3333" width="80.0000" height="46.6667">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp66" element="reel_lamp_layer_1" state="0">
+ <bounds x="328.3333" y="535.2778" width="73.3333" height="42.7778">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp66" element="reel_lamp_layer_2" state="0">
+ <bounds x="331.6667" y="537.2222" width="66.6667" height="38.8889">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp66" element="reel_lamp_layer_3" state="0">
+ <bounds x="335.0000" y="539.1666" width="60.0000" height="35.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp66" element="reel_lamp_layer_4" state="0">
+ <bounds x="338.3333" y="541.1111" width="53.3333" height="31.1111">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp66" element="reel_lamp_layer_5" state="0">
+ <bounds x="341.6667" y="543.0555" width="46.6667" height="27.2222">
+ </bounds>
+ </backdrop>
+ <backdrop name="sreel3" element="reel2" state="0">
+ <bounds x="325" y="440" width="80" height="140">
+ </bounds>
+ </backdrop>
+ <backdrop element="reel_background">
+ <bounds x="44" y="214" width="70" height="60">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp68" element="reel_lamp_layer_0" state="0">
+ <bounds x="44.0000" y="214.0000" width="70.0000" height="60.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp68" element="reel_lamp_layer_1" state="0">
+ <bounds x="46.9167" y="216.5000" width="64.1667" height="55.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp68" element="reel_lamp_layer_2" state="0">
+ <bounds x="49.8333" y="219.0000" width="58.3333" height="50.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp68" element="reel_lamp_layer_3" state="0">
+ <bounds x="52.7500" y="221.5000" width="52.5000" height="45.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp68" element="reel_lamp_layer_4" state="0">
+ <bounds x="55.6667" y="224.0000" width="46.6667" height="40.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp68" element="reel_lamp_layer_5" state="0">
+ <bounds x="58.5833" y="226.5000" width="40.8333" height="35.0000">
+ </bounds>
+ </backdrop>
+ <backdrop name="sreel4" element="reel3" state="0">
+ <bounds x="44" y="214" width="70" height="60">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp98" element="lamp_98_1_border" state="0">
+ <bounds x="810" y="1" width="19" height="19">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp98" element="lamp_98_1" state="0">
+ <bounds x="812" y="3" width="15" height="15">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp54" element="lamp_54_1_border" state="0">
+ <bounds x="52" y="439" width="52" height="52">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp54" element="lamp_54_1" state="0">
+ <bounds x="54" y="441" width="48" height="48">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp76" element="lamp_76_1_border" state="0">
+ <bounds x="69" y="193" width="19" height="19">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp76" element="lamp_76_1" state="0">
+ <bounds x="71" y="195" width="15" height="15">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp88" element="lamp_88_1_border" state="0">
+ <bounds x="69" y="276" width="19" height="19">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp88" element="lamp_88_1" state="0">
+ <bounds x="71" y="278" width="15" height="15">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp251" element="lamp_251_1_border" state="0">
+ <bounds x="144" y="177" width="16" height="57">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp251" element="lamp_251_1" state="0">
+ <bounds x="146" y="179" width="12" height="53">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp70" element="lamp_70_1_border" state="0">
+ <bounds x="13" y="7" width="62" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp70" element="lamp_70_1" state="0">
+ <bounds x="15" y="9" width="58" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp71" element="lamp_71_1_border" state="0">
+ <bounds x="72" y="7" width="77" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp71" element="lamp_71_1" state="0">
+ <bounds x="74" y="9" width="73" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp72" element="lamp_72_1_border" state="0">
+ <bounds x="2" y="50" width="77" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp72" element="lamp_72_1" state="0">
+ <bounds x="4" y="52" width="73" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp73" element="lamp_73_1_border" state="0">
+ <bounds x="76" y="50" width="82" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp73" element="lamp_73_1" state="0">
+ <bounds x="78" y="52" width="78" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp74" element="lamp_74_1_border" state="0">
+ <bounds x="48" y="93" width="62" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp74" element="lamp_74_1" state="0">
+ <bounds x="50" y="95" width="58" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp75" element="lamp_75_1_border" state="0">
+ <bounds x="14" y="136" width="132" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp75" element="lamp_75_1" state="0">
+ <bounds x="16" y="138" width="128" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp208" element="lamp_208_1_border" state="0">
+ <bounds x="249" y="83" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp208" element="lamp_208_1" state="0">
+ <bounds x="251" y="85" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp209" element="lamp_209_1_border" state="0">
+ <bounds x="304" y="83" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp209" element="lamp_209_1" state="0">
+ <bounds x="306" y="85" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp210" element="lamp_210_1_border" state="0">
+ <bounds x="360" y="83" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp210" element="lamp_210_1" state="0">
+ <bounds x="362" y="85" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp211" element="lamp_211_1_border" state="0">
+ <bounds x="414" y="83" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp211" element="lamp_211_1" state="0">
+ <bounds x="416" y="85" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp212" element="lamp_212_1_border" state="0">
+ <bounds x="469" y="83" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp212" element="lamp_212_1" state="0">
+ <bounds x="471" y="85" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp213" element="lamp_213_1_border" state="0">
+ <bounds x="523" y="83" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp213" element="lamp_213_1" state="0">
+ <bounds x="525" y="85" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp214" element="lamp_214_1_border" state="0">
+ <bounds x="578" y="83" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp214" element="lamp_214_1" state="0">
+ <bounds x="580" y="85" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp215" element="lamp_215_1_border" state="0">
+ <bounds x="633" y="83" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp215" element="lamp_215_1" state="0">
+ <bounds x="635" y="85" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp216" element="lamp_216_1_border" state="0">
+ <bounds x="686" y="83" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp216" element="lamp_216_1" state="0">
+ <bounds x="688" y="85" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp217" element="lamp_217_1_border" state="0">
+ <bounds x="739" y="83" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp217" element="lamp_217_1" state="0">
+ <bounds x="741" y="85" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp201" element="lamp_201_1_border" state="0">
+ <bounds x="738" y="128" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp201" element="lamp_201_1" state="0">
+ <bounds x="740" y="130" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp200" element="lamp_200_1_border" state="0">
+ <bounds x="686" y="128" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp200" element="lamp_200_1" state="0">
+ <bounds x="688" y="130" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp199" element="lamp_199_1_border" state="0">
+ <bounds x="633" y="128" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp199" element="lamp_199_1" state="0">
+ <bounds x="635" y="130" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp198" element="lamp_198_1_border" state="0">
+ <bounds x="578" y="128" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp198" element="lamp_198_1" state="0">
+ <bounds x="580" y="130" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp197" element="lamp_197_1_border" state="0">
+ <bounds x="522" y="128" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp197" element="lamp_197_1" state="0">
+ <bounds x="524" y="130" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp196" element="lamp_196_1_border" state="0">
+ <bounds x="469" y="128" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp196" element="lamp_196_1" state="0">
+ <bounds x="471" y="130" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp195" element="lamp_195_1_border" state="0">
+ <bounds x="414" y="128" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp195" element="lamp_195_1" state="0">
+ <bounds x="416" y="130" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp194" element="lamp_194_1_border" state="0">
+ <bounds x="361" y="128" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp194" element="lamp_194_1" state="0">
+ <bounds x="363" y="130" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp193" element="lamp_193_1_border" state="0">
+ <bounds x="305" y="128" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp193" element="lamp_193_1" state="0">
+ <bounds x="307" y="130" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp192" element="lamp_192_1_border" state="0">
+ <bounds x="249" y="128" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp192" element="lamp_192_1" state="0">
+ <bounds x="251" y="130" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp176" element="lamp_176_1_border" state="0">
+ <bounds x="249" y="172" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp176" element="lamp_176_1" state="0">
+ <bounds x="251" y="174" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp177" element="lamp_177_1_border" state="0">
+ <bounds x="305" y="172" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp177" element="lamp_177_1" state="0">
+ <bounds x="307" y="174" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp178" element="lamp_178_1_border" state="0">
+ <bounds x="361" y="172" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp178" element="lamp_178_1" state="0">
+ <bounds x="363" y="174" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp179" element="lamp_179_1_border" state="0">
+ <bounds x="414" y="172" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp179" element="lamp_179_1" state="0">
+ <bounds x="416" y="174" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp180" element="lamp_180_1_border" state="0">
+ <bounds x="468" y="172" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp180" element="lamp_180_1" state="0">
+ <bounds x="470" y="174" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp181" element="lamp_181_1_border" state="0">
+ <bounds x="522" y="172" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp181" element="lamp_181_1" state="0">
+ <bounds x="524" y="174" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp182" element="lamp_182_1_border" state="0">
+ <bounds x="578" y="172" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp182" element="lamp_182_1" state="0">
+ <bounds x="580" y="174" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp183" element="lamp_183_1_border" state="0">
+ <bounds x="633" y="172" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp183" element="lamp_183_1" state="0">
+ <bounds x="635" y="174" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp184" element="lamp_184_1_border" state="0">
+ <bounds x="686" y="172" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp184" element="lamp_184_1" state="0">
+ <bounds x="688" y="174" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp185" element="lamp_185_1_border" state="0">
+ <bounds x="738" y="172" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp185" element="lamp_185_1" state="0">
+ <bounds x="740" y="174" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp160" element="lamp_160_1_border" state="0">
+ <bounds x="249" y="216" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp160" element="lamp_160_1" state="0">
+ <bounds x="251" y="218" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp161" element="lamp_161_1_border" state="0">
+ <bounds x="305" y="216" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp161" element="lamp_161_1" state="0">
+ <bounds x="307" y="218" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp162" element="lamp_162_1_border" state="0">
+ <bounds x="360" y="216" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp162" element="lamp_162_1" state="0">
+ <bounds x="362" y="218" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp163" element="lamp_163_1_border" state="0">
+ <bounds x="414" y="216" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp163" element="lamp_163_1" state="0">
+ <bounds x="416" y="218" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp164" element="lamp_164_1_border" state="0">
+ <bounds x="468" y="216" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp164" element="lamp_164_1" state="0">
+ <bounds x="470" y="218" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp165" element="lamp_165_1_border" state="0">
+ <bounds x="522" y="216" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp165" element="lamp_165_1" state="0">
+ <bounds x="524" y="218" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp166" element="lamp_166_1_border" state="0">
+ <bounds x="578" y="216" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp166" element="lamp_166_1" state="0">
+ <bounds x="580" y="218" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp167" element="lamp_167_1_border" state="0">
+ <bounds x="633" y="216" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp167" element="lamp_167_1" state="0">
+ <bounds x="635" y="218" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp168" element="lamp_168_1_border" state="0">
+ <bounds x="686" y="216" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp168" element="lamp_168_1" state="0">
+ <bounds x="688" y="218" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp169" element="lamp_169_1_border" state="0">
+ <bounds x="738" y="216" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp169" element="lamp_169_1" state="0">
+ <bounds x="740" y="218" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp107" element="lamp_107_1_border" state="0">
+ <bounds x="160" y="170" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp107" element="lamp_107_1" state="0">
+ <bounds x="162" y="172" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp106" element="lamp_106_1_border" state="0">
+ <bounds x="160" y="125" width="43" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp106" element="lamp_106_1" state="0">
+ <bounds x="162" y="127" width="39" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp105" element="lamp_105_1_border" state="0">
+ <bounds x="160" y="80" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp105" element="lamp_105_1" state="0">
+ <bounds x="162" y="82" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp104" element="lamp_104_1_border" state="0">
+ <bounds x="160" y="35" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp104" element="lamp_104_1" state="0">
+ <bounds x="162" y="37" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp103" element="lamp_103_1_border" state="0">
+ <bounds x="210" y="35" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp103" element="lamp_103_1" state="0">
+ <bounds x="212" y="37" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp225" element="lamp_225_1_border" state="0">
+ <bounds x="327" y="260" width="43" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp225" element="lamp_225_1" state="0">
+ <bounds x="329" y="262" width="39" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp224" element="lamp_224_1_border" state="0">
+ <bounds x="267" y="260" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp224" element="lamp_224_1" state="0">
+ <bounds x="269" y="262" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp220" element="lamp_220_1_border" state="0">
+ <bounds x="447" y="260" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp220" element="lamp_220_1" state="0">
+ <bounds x="449" y="262" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp219" element="lamp_219_1_border" state="0">
+ <bounds x="387" y="260" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp219" element="lamp_219_1" state="0">
+ <bounds x="389" y="262" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp204" element="lamp_204_1_border" state="0">
+ <bounds x="567" y="260" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp204" element="lamp_204_1" state="0">
+ <bounds x="569" y="262" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp203" element="lamp_203_1_border" state="0">
+ <bounds x="507" y="260" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp203" element="lamp_203_1" state="0">
+ <bounds x="509" y="262" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp188" element="lamp_188_1_border" state="0">
+ <bounds x="687" y="260" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp188" element="lamp_188_1" state="0">
+ <bounds x="689" y="262" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp187" element="lamp_187_1_border" state="0">
+ <bounds x="627" y="260" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp187" element="lamp_187_1" state="0">
+ <bounds x="629" y="262" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp172" element="lamp_172_1_border" state="0">
+ <bounds x="800" y="260" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp172" element="lamp_172_1" state="0">
+ <bounds x="802" y="262" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp171" element="lamp_171_1_border" state="0">
+ <bounds x="744" y="260" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp171" element="lamp_171_1" state="0">
+ <bounds x="746" y="262" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp90" element="lamp_90_1_border" state="0">
+ <bounds x="210" y="260" width="44" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp90" element="lamp_90_1" state="0">
+ <bounds x="212" y="262" width="40" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp89" element="lamp_89_1_border" state="0">
+ <bounds x="160" y="260" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp89" element="lamp_89_1" state="0">
+ <bounds x="162" y="262" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp108" element="lamp_108_1_border" state="0">
+ <bounds x="160" y="215" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp108" element="lamp_108_1" state="0">
+ <bounds x="162" y="217" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp97" element="lamp_97_1_border" state="0">
+ <bounds x="507" y="35" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp97" element="lamp_97_1" state="0">
+ <bounds x="509" y="37" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp96" element="lamp_96_1_border" state="0">
+ <bounds x="567" y="35" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp96" element="lamp_96_1" state="0">
+ <bounds x="569" y="37" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp99" element="lamp_99_1_border" state="0">
+ <bounds x="447" y="35" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp99" element="lamp_99_1" state="0">
+ <bounds x="449" y="37" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp100" element="lamp_100_1_border" state="0">
+ <bounds x="387" y="35" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp100" element="lamp_100_1" state="0">
+ <bounds x="389" y="37" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp101" element="lamp_101_1_border" state="0">
+ <bounds x="327" y="35" width="43" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp101" element="lamp_101_1" state="0">
+ <bounds x="329" y="37" width="39" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp102" element="lamp_102_1_border" state="0">
+ <bounds x="267" y="35" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp102" element="lamp_102_1" state="0">
+ <bounds x="269" y="37" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp144" element="lamp_144_1_border" state="0">
+ <bounds x="627" y="35" width="44" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp144" element="lamp_144_1" state="0">
+ <bounds x="629" y="37" width="40" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp151" element="lamp_151_1_border" state="0">
+ <bounds x="800" y="216" width="43" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp151" element="lamp_151_1" state="0">
+ <bounds x="802" y="218" width="39" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp150" element="lamp_150_1_border" state="0">
+ <bounds x="800" y="172" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp150" element="lamp_150_1" state="0">
+ <bounds x="802" y="174" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp149" element="lamp_149_1_border" state="0">
+ <bounds x="800" y="126" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp149" element="lamp_149_1" state="0">
+ <bounds x="802" y="128" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp148" element="lamp_148_1_border" state="0">
+ <bounds x="800" y="82" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp148" element="lamp_148_1" state="0">
+ <bounds x="802" y="84" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp147" element="lamp_147_1_border" state="0">
+ <bounds x="800" y="35" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp147" element="lamp_147_1" state="0">
+ <bounds x="802" y="37" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp146" element="lamp_146_1_border" state="0">
+ <bounds x="744" y="35" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp146" element="lamp_146_1" state="0">
+ <bounds x="746" y="37" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp145" element="lamp_145_1_border" state="0">
+ <bounds x="687" y="35" width="42" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp145" element="lamp_145_1" state="0">
+ <bounds x="689" y="37" width="38" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp226" element="lamp_226_1_border" state="0">
+ <bounds x="43" y="380" width="62" height="22">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp226" element="lamp_226_1" state="0">
+ <bounds x="45" y="382" width="58" height="18">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp250" element="lamp_250_1_border" state="0">
+ <bounds x="827" y="369" width="47" height="47">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp250" element="lamp_250_1" state="0">
+ <bounds x="829" y="371" width="43" height="43">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp249" element="lamp_249_1_border" state="0">
+ <bounds x="727" y="369" width="47" height="47">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp249" element="lamp_249_1" state="0">
+ <bounds x="729" y="371" width="43" height="43">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp248" element="lamp_248_1_border" state="0">
+ <bounds x="627" y="369" width="47" height="47">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp248" element="lamp_248_1" state="0">
+ <bounds x="629" y="371" width="43" height="43">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp247" element="lamp_247_1_border" state="0">
+ <bounds x="527" y="369" width="47" height="47">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp247" element="lamp_247_1" state="0">
+ <bounds x="529" y="371" width="43" height="43">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp245" element="lamp_245_1_border" state="0">
+ <bounds x="327" y="369" width="47" height="47">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp245" element="lamp_245_1" state="0">
+ <bounds x="329" y="371" width="43" height="43">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp246" element="lamp_246_1_border" state="0">
+ <bounds x="427" y="369" width="47" height="47">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp246" element="lamp_246_1" state="0">
+ <bounds x="429" y="371" width="43" height="43">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp244" element="lamp_244_1_border" state="0">
+ <bounds x="227" y="369" width="47" height="47">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp244" element="lamp_244_1" state="0">
+ <bounds x="229" y="371" width="43" height="43">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp243" element="lamp_243_1_border" state="0">
+ <bounds x="127" y="369" width="47" height="47">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp243" element="lamp_243_1" state="0">
+ <bounds x="129" y="371" width="43" height="43">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp60" element="lamp_60_1_border" state="0">
+ <bounds x="449" y="570" width="67" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp60" element="lamp_60_1" state="0">
+ <bounds x="451" y="572" width="63" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp38" element="lamp_38_1_border" state="0">
+ <bounds x="449" y="539" width="67" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp38" element="lamp_38_1" state="0">
+ <bounds x="451" y="541" width="63" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp59" element="lamp_59_1_border" state="0">
+ <bounds x="431" y="542" width="17" height="57">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp59" element="lamp_59_1" state="0">
+ <bounds x="433" y="544" width="13" height="53">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp34" element="lamp_34_1_border" state="0">
+ <bounds x="449" y="415" width="67" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp34" element="lamp_34_1" state="0">
+ <bounds x="451" y="417" width="63" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp35" element="lamp_35_1_border" state="0">
+ <bounds x="449" y="446" width="67" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp35" element="lamp_35_1" state="0">
+ <bounds x="451" y="448" width="63" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp36" element="lamp_36_1_border" state="0">
+ <bounds x="449" y="477" width="67" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp36" element="lamp_36_1" state="0">
+ <bounds x="451" y="479" width="63" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp37" element="lamp_37_1_border" state="0">
+ <bounds x="449" y="508" width="67" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp37" element="lamp_37_1" state="0">
+ <bounds x="451" y="510" width="63" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp9" element="lamp_9_1_border" state="0">
+ <bounds x="766" y="428" width="47" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp9" element="lamp_9_1" state="0">
+ <bounds x="768" y="430" width="43" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp10" element="lamp_10_1_border" state="0">
+ <bounds x="766" y="469" width="47" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp10" element="lamp_10_1" state="0">
+ <bounds x="768" y="471" width="43" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp11" element="lamp_11_1_border" state="0">
+ <bounds x="766" y="510" width="47" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp11" element="lamp_11_1" state="0">
+ <bounds x="768" y="512" width="43" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp12" element="lamp_12_1_border" state="0">
+ <bounds x="766" y="551" width="47" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp12" element="lamp_12_1" state="0">
+ <bounds x="768" y="553" width="43" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp55" element="lamp_55_1_border" state="0">
+ <bounds x="529" y="443" width="62" height="62">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp55" element="lamp_55_1" state="0">
+ <bounds x="531" y="445" width="58" height="58">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp8" element="lamp_8_1_border" state="0">
+ <bounds x="533" y="520" width="57" height="52">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp8" element="lamp_8_1" state="0">
+ <bounds x="535" y="522" width="53" height="48">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp236" element="lamp_236_1_border" state="0">
+ <bounds x="845" y="24" width="67" height="57">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp236" element="lamp_236_1" state="0">
+ <bounds x="847" y="26" width="63" height="53">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp152" element="lamp_152_1_border" state="0">
+ <bounds x="851" y="80" width="57" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp152" element="lamp_152_1" state="0">
+ <bounds x="853" y="82" width="53" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp153" element="lamp_153_1_border" state="0">
+ <bounds x="851" y="121" width="57" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp153" element="lamp_153_1" state="0">
+ <bounds x="853" y="123" width="53" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp154" element="lamp_154_1_border" state="0">
+ <bounds x="851" y="162" width="57" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp154" element="lamp_154_1" state="0">
+ <bounds x="853" y="164" width="53" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp155" element="lamp_155_1_border" state="0">
+ <bounds x="851" y="203" width="57" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp155" element="lamp_155_1" state="0">
+ <bounds x="853" y="205" width="53" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp156" element="lamp_156_1_border" state="0">
+ <bounds x="851" y="244" width="57" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp156" element="lamp_156_1" state="0">
+ <bounds x="853" y="246" width="53" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp92" element="lamp_92_1_border" state="0">
+ <bounds x="199" y="313" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp92" element="lamp_92_1" state="0">
+ <bounds x="201" y="315" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp91" element="lamp_91_1_border" state="0">
+ <bounds x="147" y="313" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp91" element="lamp_91_1" state="0">
+ <bounds x="149" y="315" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp228" element="lamp_228_1_border" state="0">
+ <bounds x="251" y="313" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp228" element="lamp_228_1" state="0">
+ <bounds x="253" y="315" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp229" element="lamp_229_1_border" state="0">
+ <bounds x="303" y="313" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp229" element="lamp_229_1" state="0">
+ <bounds x="305" y="315" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp230" element="lamp_230_1_border" state="0">
+ <bounds x="355" y="313" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp230" element="lamp_230_1" state="0">
+ <bounds x="357" y="315" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp231" element="lamp_231_1_border" state="0">
+ <bounds x="408" y="313" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp231" element="lamp_231_1" state="0">
+ <bounds x="410" y="315" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp232" element="lamp_232_1_border" state="0">
+ <bounds x="461" y="313" width="61" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp232" element="lamp_232_1" state="0">
+ <bounds x="463" y="315" width="57" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp233" element="lamp_233_1_border" state="0">
+ <bounds x="523" y="313" width="55" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp233" element="lamp_233_1" state="0">
+ <bounds x="525" y="315" width="51" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp234" element="lamp_234_1_border" state="0">
+ <bounds x="578" y="313" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp234" element="lamp_234_1" state="0">
+ <bounds x="580" y="315" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp235" element="lamp_235_1_border" state="0">
+ <bounds x="630" y="313" width="52" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp235" element="lamp_235_1" state="0">
+ <bounds x="632" y="315" width="48" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp227" element="lamp_227_1_border" state="0">
+ <bounds x="86" y="307" width="62" height="52">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp227" element="lamp_227_1" state="0">
+ <bounds x="88" y="309" width="58" height="48">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp129" element="lamp_129_1_border" state="0">
+ <bounds x="914" y="50" width="22" height="22">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp129" element="lamp_129_1" state="0">
+ <bounds x="916" y="52" width="18" height="18">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp130" element="lamp_130_1_border" state="0">
+ <bounds x="914" y="81" width="22" height="22">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp130" element="lamp_130_1" state="0">
+ <bounds x="916" y="83" width="18" height="18">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp131" element="lamp_131_1_border" state="0">
+ <bounds x="914" y="111" width="22" height="22">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp131" element="lamp_131_1" state="0">
+ <bounds x="916" y="113" width="18" height="18">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp132" element="lamp_132_1_border" state="0">
+ <bounds x="914" y="143" width="22" height="22">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp132" element="lamp_132_1" state="0">
+ <bounds x="916" y="145" width="18" height="18">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp133" element="lamp_133_1_border" state="0">
+ <bounds x="914" y="174" width="22" height="22">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp133" element="lamp_133_1" state="0">
+ <bounds x="916" y="176" width="18" height="18">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp134" element="lamp_134_1_border" state="0">
+ <bounds x="914" y="204" width="22" height="22">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp134" element="lamp_134_1" state="0">
+ <bounds x="916" y="206" width="18" height="18">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp135" element="lamp_135_1_border" state="0">
+ <bounds x="914" y="236" width="22" height="22">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp135" element="lamp_135_1" state="0">
+ <bounds x="916" y="238" width="18" height="18">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp136" element="lamp_136_1_border" state="0">
+ <bounds x="914" y="267" width="22" height="22">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp136" element="lamp_136_1" state="0">
+ <bounds x="916" y="269" width="18" height="18">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp137" element="lamp_137_1_border" state="0">
+ <bounds x="914" y="299" width="22" height="22">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp137" element="lamp_137_1" state="0">
+ <bounds x="916" y="301" width="18" height="18">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp138" element="lamp_138_1_border" state="0">
+ <bounds x="914" y="329" width="22" height="22">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp138" element="lamp_138_1" state="0">
+ <bounds x="916" y="331" width="18" height="18">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp139" element="lamp_139_1_border" state="0">
+ <bounds x="914" y="361" width="22" height="22">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp139" element="lamp_139_1" state="0">
+ <bounds x="916" y="363" width="18" height="18">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp140" element="lamp_140_1_border" state="0">
+ <bounds x="914" y="391" width="22" height="22">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp140" element="lamp_140_1" state="0">
+ <bounds x="916" y="393" width="18" height="18">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp124" element="lamp_124_1_border" state="0">
+ <bounds x="934" y="386" width="57" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp124" element="lamp_124_1" state="0">
+ <bounds x="936" y="388" width="53" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp123" element="lamp_123_1_border" state="0">
+ <bounds x="934" y="355" width="57" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp123" element="lamp_123_1" state="0">
+ <bounds x="936" y="357" width="53" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp122" element="lamp_122_1_border" state="0">
+ <bounds x="934" y="324" width="57" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp122" element="lamp_122_1" state="0">
+ <bounds x="936" y="326" width="53" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp121" element="lamp_121_1_border" state="0">
+ <bounds x="934" y="293" width="57" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp121" element="lamp_121_1" state="0">
+ <bounds x="936" y="295" width="53" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp120" element="lamp_120_1_border" state="0">
+ <bounds x="934" y="262" width="57" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp120" element="lamp_120_1" state="0">
+ <bounds x="936" y="264" width="53" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp119" element="lamp_119_1_border" state="0">
+ <bounds x="934" y="231" width="57" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp119" element="lamp_119_1" state="0">
+ <bounds x="936" y="233" width="53" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp118" element="lamp_118_1_border" state="0">
+ <bounds x="934" y="200" width="57" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp118" element="lamp_118_1" state="0">
+ <bounds x="936" y="202" width="53" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp117" element="lamp_117_1_border" state="0">
+ <bounds x="934" y="169" width="57" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp117" element="lamp_117_1" state="0">
+ <bounds x="936" y="171" width="53" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp113" element="lamp_113_1_border" state="0">
+ <bounds x="934" y="45" width="57" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp113" element="lamp_113_1" state="0">
+ <bounds x="936" y="47" width="53" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp114" element="lamp_114_1_border" state="0">
+ <bounds x="934" y="76" width="57" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp114" element="lamp_114_1" state="0">
+ <bounds x="936" y="78" width="53" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp115" element="lamp_115_1_border" state="0">
+ <bounds x="934" y="107" width="57" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp115" element="lamp_115_1" state="0">
+ <bounds x="936" y="109" width="53" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp116" element="lamp_116_1_border" state="0">
+ <bounds x="934" y="138" width="57" height="32">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp116" element="lamp_116_1" state="0">
+ <bounds x="936" y="140" width="53" height="28">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp112" element="lamp_112_1_border" state="0">
+ <bounds x="927" y="3" width="72" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp112" element="lamp_112_1" state="0">
+ <bounds x="929" y="5" width="68" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp0" element="colour_button_169_border" state="0" inputtag="IN-1" inputmask="0x01">
+ <bounds x="10" y="606" width="82" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp0" element="colour_button_169" state="0" inputtag="IN-1" inputmask="0x01">
+ <bounds x="12" y="608" width="78" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp1" element="colour_button_170_border" state="0" inputtag="IN-1" inputmask="0x02">
+ <bounds x="124" y="606" width="82" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp1" element="colour_button_170" state="0" inputtag="IN-1" inputmask="0x02">
+ <bounds x="126" y="608" width="78" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp2" element="colour_button_171_border" state="0" inputtag="IN-1" inputmask="0x04">
+ <bounds x="224" y="605" width="82" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp2" element="colour_button_171" state="0" inputtag="IN-1" inputmask="0x04">
+ <bounds x="226" y="607" width="78" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp3" element="colour_button_172_border" state="0" inputtag="IN-1" inputmask="0x08">
+ <bounds x="324" y="606" width="82" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp3" element="colour_button_172" state="0" inputtag="IN-1" inputmask="0x08">
+ <bounds x="326" y="608" width="78" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp4" element="colour_button_173_border" state="0" inputtag="IN-1" inputmask="0x10">
+ <bounds x="580" y="606" width="82" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp4" element="colour_button_173" state="0" inputtag="IN-1" inputmask="0x10">
+ <bounds x="582" y="608" width="78" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp5" element="colour_button_174_border" state="0" inputtag="IN-2" inputmask="0x01">
+ <bounds x="443" y="606" width="82" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp5" element="colour_button_174" state="0" inputtag="IN-2" inputmask="0x01">
+ <bounds x="445" y="608" width="78" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp6" element="colour_button_175_border" state="0" inputtag="IN-2" inputmask="0x02">
+ <bounds x="747" y="606" width="82" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp6" element="colour_button_175" state="0" inputtag="IN-2" inputmask="0x02">
+ <bounds x="749" y="608" width="78" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp7" element="colour_button_176_border" state="0" inputtag="IN-2" inputmask="0x04">
+ <bounds x="913" y="606" width="82" height="42">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp7" element="colour_button_176" state="0" inputtag="IN-2" inputmask="0x04">
+ <bounds x="915" y="608" width="78" height="38">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp32" element="colour_button_177_border" state="0" inputtag="IN-1" inputmask="0x80">
+ <bounds x="782" y="1" width="27" height="27">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp32" element="colour_button_177" state="0" inputtag="IN-1" inputmask="0x80">
+ <bounds x="784" y="3" width="23" height="23">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp218" element="colour_button_179_border" state="0" inputtag="IN-8" inputmask="0x08">
+ <bounds x="204" y="82" width="44" height="44">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp218" element="colour_button_179" state="0" inputtag="IN-8" inputmask="0x08">
+ <bounds x="206" y="84" width="40" height="40">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp170" element="colour_button_180_border" state="0" inputtag="IN-8" inputmask="0x01">
+ <bounds x="204" y="215" width="44" height="44">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp170" element="colour_button_180" state="0" inputtag="IN-8" inputmask="0x01">
+ <bounds x="206" y="217" width="40" height="40">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp186" element="colour_button_181_border" state="0" inputtag="IN-8" inputmask="0x02">
+ <bounds x="204" y="171" width="44" height="44">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp186" element="colour_button_181" state="0" inputtag="IN-8" inputmask="0x02">
+ <bounds x="206" y="173" width="40" height="40">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp202" element="colour_button_182_border" state="0" inputtag="IN-8" inputmask="0x04">
+ <bounds x="204" y="127" width="44" height="44">
+ </bounds>
+ </backdrop>
+ <backdrop name="lamp202" element="colour_button_182" state="0" inputtag="IN-8" inputmask="0x04">
+ <bounds x="206" y="129" width="40" height="40">
+ </bounds>
+ </backdrop>
+ <backdrop element="vfd0_background">
+ <bounds x="134" y="417" width="227" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd0" element="vfd0" state="0">
+ <bounds x="134" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd1" element="vfd0" state="0">
+ <bounds x="148" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd2" element="vfd0" state="0">
+ <bounds x="162" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd3" element="vfd0" state="0">
+ <bounds x="176" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd4" element="vfd0" state="0">
+ <bounds x="190" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd5" element="vfd0" state="0">
+ <bounds x="204" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd6" element="vfd0" state="0">
+ <bounds x="218" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd7" element="vfd0" state="0">
+ <bounds x="232" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd8" element="vfd0" state="0">
+ <bounds x="246" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd9" element="vfd0" state="0">
+ <bounds x="260" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd10" element="vfd0" state="0">
+ <bounds x="274" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd11" element="vfd0" state="0">
+ <bounds x="288" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd12" element="vfd0" state="0">
+ <bounds x="302" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd13" element="vfd0" state="0">
+ <bounds x="316" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd14" element="vfd0" state="0">
+ <bounds x="330" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ <backdrop name="vfd15" element="vfd0" state="0">
+ <bounds x="344" y="417" width="14" height="20">
+ </bounds>
+ </backdrop>
+ </view>
+</mamelayout> \ No newline at end of file
diff --git a/src/mame/layout/supercon.lay b/src/mame/layout/supercon.lay
new file mode 100644
index 00000000000..831c63d673f
--- /dev/null
+++ b/src/mame/layout/supercon.lay
@@ -0,0 +1,447 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
+ <element name="static_gray"><rect><color red="0.51" green="0.5" blue="0.49" /></rect></element>
+ <element name="static_red"><rect><color red="0.7" green="0.13" blue="0.12" /></rect></element>
+
+ <element name="ledr" defstate="0">
+ <rect state="1"><color red="1.0" green="0.1" blue="0.15" /></rect>
+ <rect state="0"><color red="0.17" green="0.015" blue="0.02" /></rect>
+ </element>
+ <element name="ledg" defstate="0">
+ <rect state="1"><color red="0.1" green="0.95" blue="0.05" /></rect>
+ <rect state="0"><color red="0.015" green="0.16" blue="0.01" /></rect>
+ </element>
+
+ <element name="hl" defstate="0">
+ <text string=" ">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ <disk state="1">
+ <bounds x="0.12" y="0.12" width="0.76" height="0.76" />
+ <color red="1.0" green="1.0" blue="1.0" />
+ </disk>
+ </element>
+ <element name="hlb" defstate="0">
+ <text string=" ">
+ <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ <disk state="1">
+ <bounds x="0.2466" y="0.12" width="0.5066" height="0.76" />
+ <color red="1.0" green="1.0" blue="1.0" />
+ </disk>
+ </element>
+
+ <element name="black"><rect><color red="0.17" green="0.15" blue="0.15" /></rect></element>
+ <element name="white"><rect><color red="0.81" green="0.8" blue="0.79" /></rect></element>
+
+ <element name="text_1"><text string="1"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_2"><text string="2"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_3"><text string="3"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_4"><text string="4"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_5"><text string="5"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_6"><text string="6"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_7"><text string="7"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_8"><text string="8"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+
+ <element name="text_a"><text string="A"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_b"><text string="B"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_c"><text string="C"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_d"><text string="D"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_e"><text string="E"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_f"><text string="F"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_g"><text string="G"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_h"><text string="H"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+
+ <element name="text_depth"><text string="Depth Search"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_mate"><text string="Mate Announcement"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+
+ <element name="text_l1">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="1"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_l2">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="2"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_l4">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="4"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_l8">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="8"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+
+ <element name="text_rg0"><text string="Error"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_rg1"><text string="Verify"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_rg2"><text string="Set Up"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_rg3"><text string="Check"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_rg4"><text string="Mate"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_rg5"><text string="Draw"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_rg6"><text string="Black"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_rg7"><text string="White"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+
+ <element name="text_king1"><text string="K"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_queen1"><text string="Q"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_rook1"><text string="R"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_bishop1"><text string="B"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_knight1"><text string="N"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_pion1"><text string="P"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+
+ <element name="text_king2">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="K"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_queen2">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="Q"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_rook2">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="R"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_bishop2">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="B"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_knight2">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="N"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+ <element name="text_pion2">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="P"><color red="0.1" green="0.1" blue="0.1" /></text>
+ </element>
+
+ <element name="text_rb00"><text string="Multi Move"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb01"><text string="Player/Player"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb02"><text string="Best Move"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb03"><text string="Random"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb04"><text string="Training"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb05"><text string="Level"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb06"><text string="Sound"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb07"><text string="Depth Search"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb08"><text string="Solve Mate"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb09"><text string="Print Board"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb0a"><text string="Print List"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb0b"><text string="Acc. Time"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb0c"><text string="Set Level"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb0d"><text string="Take Back"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+
+ <element name="text_rb10"><text string="New Game"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb11"><text string="Verify"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb12"><text string="Set Up"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb13"><text string="Change Color"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb14"><text string="Clear Board"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb15"><text string="Print Moves"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb16"><text string="Form Size"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb17"><text string="Hint"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb18"><text string="Show Moves"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_rb19"><text string="Go"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+
+ <element name="text_setup">
+ <rect><color red="0.0" green="0.0" blue="0.0" /></rect>
+ <text string="SET UP"><color red="0.51" green="0.5" blue="0.49" /></text>
+ </element>
+ <element name="text_printer">
+ <rect><color red="0.0" green="0.0" blue="0.0" /></rect>
+ <text string="PRINTER"><color red="0.51" green="0.5" blue="0.49" /></text>
+ </element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="-8" right="118" top="-2" bottom="90" />
+
+ <!-- left side labels -->
+
+ <bezel element="white"><bounds x="-6" y="9.833" width="2.2" height="30.333" /></bezel>
+ <bezel element="static_black"><bounds x="-5.666" y="10.166" width="2.2" height="29.666" /></bezel>
+ <bezel element="text_depth"><bounds x="-5" y="9.833" width="2" height="30.333" /><orientation rotate="90" /></bezel>
+
+ <bezel element="white"><bounds x="-6" y="47.833" width="4" height="30.333" /></bezel>
+ <bezel element="static_black"><bounds x="-5.666" y="48.166" width="4" height="29.666" /></bezel>
+ <bezel element="text_mate"><bounds x="-5" y="47.833" width="2" height="30.333" /><orientation rotate="90" /></bezel>
+
+ <!-- chessboard coords -->
+
+ <bezel element="text_8"><bounds x="-0.8" y="9" width="2" height="2" /></bezel>
+ <bezel element="text_7"><bounds x="-0.8" y="19" width="2" height="2" /></bezel>
+ <bezel element="text_6"><bounds x="-0.8" y="29" width="2" height="2" /></bezel>
+ <bezel element="text_5"><bounds x="-0.8" y="39" width="2" height="2" /></bezel>
+ <bezel element="text_4"><bounds x="-0.8" y="49" width="2" height="2" /></bezel>
+ <bezel element="text_3"><bounds x="-0.8" y="59" width="2" height="2" /></bezel>
+ <bezel element="text_2"><bounds x="-0.8" y="69" width="2" height="2" /></bezel>
+ <bezel element="text_1"><bounds x="-0.8" y="79" width="2" height="2" /></bezel>
+
+ <bezel element="text_l1"><bounds x="-2.8" y="9" width="2" height="2" /></bezel>
+ <bezel element="text_l2"><bounds x="-2.8" y="19" width="2" height="2" /></bezel>
+ <bezel element="text_l4"><bounds x="-2.8" y="29" width="2" height="2" /></bezel>
+ <bezel element="text_l8"><bounds x="-2.8" y="39" width="2" height="2" /></bezel>
+
+ <bezel element="text_a"><bounds x="5" y="85.5" width="2" height="2" /></bezel>
+ <bezel element="text_b"><bounds x="15" y="85.5" width="2" height="2" /></bezel>
+ <bezel element="text_c"><bounds x="25" y="85.5" width="2" height="2" /></bezel>
+ <bezel element="text_d"><bounds x="35" y="85.5" width="2" height="2" /></bezel>
+ <bezel element="text_e"><bounds x="45" y="85.5" width="2" height="2" /></bezel>
+ <bezel element="text_f"><bounds x="55" y="85.5" width="2" height="2" /></bezel>
+ <bezel element="text_g"><bounds x="65" y="85.5" width="2" height="2" /></bezel>
+ <bezel element="text_h"><bounds x="75" y="85.5" width="2" height="2" /></bezel>
+
+ <!-- chessboard leds -->
+
+ <bezel name="1.0" element="ledr"><bounds x="-1" y="7.5" width="2" height="1" /></bezel>
+ <bezel name="1.1" element="ledr"><bounds x="-1" y="17.5" width="2" height="1" /></bezel>
+ <bezel name="1.2" element="ledr"><bounds x="-1" y="27.5" width="2" height="1" /></bezel>
+ <bezel name="1.3" element="ledr"><bounds x="-1" y="37.5" width="2" height="1" /></bezel>
+ <bezel name="1.4" element="ledr"><bounds x="-1" y="47.5" width="2" height="1" /></bezel>
+ <bezel name="1.5" element="ledr"><bounds x="-1" y="57.5" width="2" height="1" /></bezel>
+ <bezel name="1.6" element="ledr"><bounds x="-1" y="67.5" width="2" height="1" /></bezel>
+ <bezel name="1.7" element="ledr"><bounds x="-1" y="77.5" width="2" height="1" /></bezel>
+
+ <bezel name="2.0" element="ledr"><bounds x="7.5" y="85" width="1" height="2" /></bezel>
+ <bezel name="2.1" element="ledr"><bounds x="17.5" y="85" width="1" height="2" /></bezel>
+ <bezel name="2.2" element="ledr"><bounds x="27.5" y="85" width="1" height="2" /></bezel>
+ <bezel name="2.3" element="ledr"><bounds x="37.5" y="85" width="1" height="2" /></bezel>
+ <bezel name="2.4" element="ledr"><bounds x="47.5" y="85" width="1" height="2" /></bezel>
+ <bezel name="2.5" element="ledr"><bounds x="57.5" y="85" width="1" height="2" /></bezel>
+ <bezel name="2.6" element="ledr"><bounds x="67.5" y="85" width="1" height="2" /></bezel>
+ <bezel name="2.7" element="ledr"><bounds x="77.5" y="85" width="1" height="2" /></bezel>
+
+ <!-- chessboard bezel -->
+
+ <bezel element="black"><bounds x="2" y="2" width="82" height="82" /></bezel>
+ <bezel element="white"><bounds x="3" y="3" width="80" height="80" /></bezel>
+
+ <bezel element="black"><bounds x="13" y="2.5" width="10" height="10.5" /></bezel>
+ <bezel element="black"><bounds x="33" y="2.5" width="10" height="10.5" /></bezel>
+ <bezel element="black"><bounds x="53" y="2.5" width="10" height="10.5" /></bezel>
+ <bezel element="black"><bounds x="73" y="2.5" width="10.5" height="10.5" /></bezel>
+
+ <bezel element="black"><bounds x="2.5" y="13" width="10.5" height="10" /></bezel>
+ <bezel element="black"><bounds x="23" y="13" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="43" y="13" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="63" y="13" width="10" height="10" /></bezel>
+
+ <bezel element="black"><bounds x="13" y="23" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="33" y="23" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="53" y="23" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="73" y="23" width="10.5" height="10" /></bezel>
+
+ <bezel element="black"><bounds x="2.5" y="33" width="10.5" height="10" /></bezel>
+ <bezel element="black"><bounds x="23" y="33" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="43" y="33" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="63" y="33" width="10" height="10" /></bezel>
+
+ <bezel element="black"><bounds x="13" y="43" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="33" y="43" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="53" y="43" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="73" y="43" width="10.5" height="10" /></bezel>
+
+ <bezel element="black"><bounds x="2.5" y="53" width="10.5" height="10" /></bezel>
+ <bezel element="black"><bounds x="23" y="53" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="43" y="53" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="63" y="53" width="10" height="10" /></bezel>
+
+ <bezel element="black"><bounds x="13" y="63" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="33" y="63" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="53" y="63" width="10" height="10" /></bezel>
+ <bezel element="black"><bounds x="73" y="63" width="10.5" height="10" /></bezel>
+
+ <bezel element="black"><bounds x="2.5" y="73" width="10.5" height="10.5" /></bezel>
+ <bezel element="black"><bounds x="23" y="73" width="10" height="10.5" /></bezel>
+ <bezel element="black"><bounds x="43" y="73" width="10" height="10.5" /></bezel>
+ <bezel element="black"><bounds x="63" y="73" width="10" height="10.5" /></bezel>
+
+ <!-- chessboard sensors -->
+
+ <bezel element="hl" inputtag="IN.0" inputmask="0x80"><bounds x="3" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x40"><bounds x="13" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x20"><bounds x="23" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x10"><bounds x="33" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="43" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="53" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="63" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="73" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
+
+ <bezel element="hl" inputtag="IN.1" inputmask="0x80"><bounds x="3" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x40"><bounds x="13" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x20"><bounds x="23" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x10"><bounds x="33" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="43" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="53" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="63" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="73" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
+
+ <bezel element="hl" inputtag="IN.2" inputmask="0x80"><bounds x="3" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x40"><bounds x="13" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x20"><bounds x="23" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x10"><bounds x="33" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="43" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="53" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="63" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="73" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
+
+ <bezel element="hl" inputtag="IN.3" inputmask="0x80"><bounds x="3" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x40"><bounds x="13" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x20"><bounds x="23" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x10"><bounds x="33" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="43" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="53" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="63" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="73" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
+
+ <bezel element="hl" inputtag="IN.4" inputmask="0x80"><bounds x="3" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x40"><bounds x="13" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x20"><bounds x="23" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x10"><bounds x="33" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x08"><bounds x="43" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x04"><bounds x="53" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x02"><bounds x="63" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.4" inputmask="0x01"><bounds x="73" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
+
+ <bezel element="hl" inputtag="IN.5" inputmask="0x80"><bounds x="3" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x40"><bounds x="13" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x20"><bounds x="23" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x10"><bounds x="33" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x08"><bounds x="43" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x04"><bounds x="53" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x02"><bounds x="63" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.5" inputmask="0x01"><bounds x="73" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
+
+ <bezel element="hl" inputtag="IN.6" inputmask="0x80"><bounds x="3" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x40"><bounds x="13" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x20"><bounds x="23" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x10"><bounds x="33" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x08"><bounds x="43" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x04"><bounds x="53" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x02"><bounds x="63" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.6" inputmask="0x01"><bounds x="73" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
+
+ <bezel element="hl" inputtag="IN.7" inputmask="0x80"><bounds x="3" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x40"><bounds x="13" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x20"><bounds x="23" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x10"><bounds x="33" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x08"><bounds x="43" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x04"><bounds x="53" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x02"><bounds x="63" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
+ <bezel element="hl" inputtag="IN.7" inputmask="0x01"><bounds x="73" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
+
+ <!-- right side buttons -->
+
+ <bezel element="static_gray"><bounds x="95.333" y="12.5" width="9.333" height="29" /></bezel>
+ <bezel element="static_black"><bounds x="95.533" y="12.7" width="8.933" height="28.6" /></bezel>
+ <bezel element="text_setup"><bounds x="96.5" y="11.8" width="7" height="1.5" /></bezel>
+
+ <bezel element="static_gray"><bounds x="86.333" y="42.5" width="18.333" height="30.5" /></bezel>
+ <bezel element="static_black"><bounds x="86.533" y="42.7" width="17.933" height="30.1" /></bezel>
+ <bezel element="text_printer"><bounds x="87.5" y="41.8" width="7" height="1.5" /></bezel>
+
+ <bezel element="text_rb00"><bounds x="84" y="4.2" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb01"><bounds x="84" y="10.3" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb02"><bounds x="84" y="12.7" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb03"><bounds x="84" y="14.2" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb04"><bounds x="84" y="20.3" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb05"><bounds x="84" y="21.8" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb06"><bounds x="84" y="24.2" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb07"><bounds x="84" y="30.3" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb08"><bounds x="84" y="34.2" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb09"><bounds x="84" y="44.2" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb0a"><bounds x="84" y="54.2" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb0b"><bounds x="84" y="60.3" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb0c"><bounds x="84" y="64.2" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb0d"><bounds x="84" y="74.2" width="14" height="1.5" /></bezel>
+
+ <bezel element="text_rb10"><bounds x="93" y="4.2" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb11"><bounds x="93" y="14.2" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb12"><bounds x="93" y="20.3" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb13"><bounds x="93" y="24.2" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb14"><bounds x="93" y="34.2" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb15"><bounds x="93" y="44.2" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb16"><bounds x="93" y="54.2" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb17"><bounds x="93" y="64.2" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb18"><bounds x="93" y="70.3" width="14" height="1.5" /></bezel>
+ <bezel element="text_rb19"><bounds x="93" y="74.2" width="14" height="1.5" /></bezel>
+
+ <bezel element="white"><bounds x="88" y="6" width="6" height="4" /></bezel>
+ <bezel element="white"><bounds x="88" y="16" width="6" height="4" /></bezel>
+ <bezel element="white"><bounds x="88" y="26" width="6" height="4" /></bezel>
+ <bezel element="white"><bounds x="88" y="36" width="6" height="4" /></bezel>
+ <bezel element="white"><bounds x="88" y="46" width="6" height="4" /></bezel>
+ <bezel element="white"><bounds x="88" y="56" width="6" height="4" /></bezel>
+ <bezel element="white"><bounds x="88" y="66" width="6" height="4" /></bezel>
+ <bezel element="white"><bounds x="88" y="76" width="6" height="4" /></bezel>
+
+ <bezel element="text_king2"><bounds x="88" y="6.4" width="6" height="3" /></bezel>
+ <bezel element="text_queen2"><bounds x="88" y="16.4" width="6" height="3" /></bezel>
+ <bezel element="text_bishop2"><bounds x="88" y="26.4" width="6" height="3" /></bezel>
+ <bezel element="text_knight2"><bounds x="88" y="36.4" width="6" height="3" /></bezel>
+ <bezel element="text_rook2"><bounds x="88" y="46.4" width="6" height="3" /></bezel>
+ <bezel element="text_pion2"><bounds x="88" y="56.4" width="6" height="3" /></bezel>
+
+ <bezel element="hlb" inputtag="IN.0" inputmask="0x200"><bounds x="88" y="6" width="6" height="4" /><color alpha="0.4" /></bezel>
+ <bezel element="hlb" inputtag="IN.1" inputmask="0x200"><bounds x="88" y="16" width="6" height="4" /><color alpha="0.4" /></bezel>
+ <bezel element="hlb" inputtag="IN.2" inputmask="0x200"><bounds x="88" y="26" width="6" height="4" /><color alpha="0.4" /></bezel>
+ <bezel element="hlb" inputtag="IN.3" inputmask="0x200"><bounds x="88" y="36" width="6" height="4" /><color alpha="0.4" /></bezel>
+ <bezel element="hlb" inputtag="IN.4" inputmask="0x200"><bounds x="88" y="46" width="6" height="4" /><color alpha="0.4" /></bezel>
+ <bezel element="hlb" inputtag="IN.5" inputmask="0x200"><bounds x="88" y="56" width="6" height="4" /><color alpha="0.4" /></bezel>
+ <bezel element="hlb" inputtag="IN.6" inputmask="0x200"><bounds x="88" y="66" width="6" height="4" /><color alpha="0.4" /></bezel>
+ <bezel element="hlb" inputtag="IN.7" inputmask="0x200"><bounds x="88" y="76" width="6" height="4" /><color alpha="0.4" /></bezel>
+
+ <bezel element="static_red"><bounds x="97" y="6" width="6" height="4" /></bezel>
+ <bezel element="white"><bounds x="97" y="16" width="6" height="4" /></bezel>
+ <bezel element="white"><bounds x="97" y="26" width="6" height="4" /></bezel>
+ <bezel element="white"><bounds x="97" y="36" width="6" height="4" /></bezel>
+ <bezel element="white"><bounds x="97" y="46" width="6" height="4" /></bezel>
+ <bezel element="white"><bounds x="97" y="56" width="6" height="4" /></bezel>
+ <bezel element="white"><bounds x="97" y="66" width="6" height="4" /></bezel>
+ <bezel element="static_red"><bounds x="97" y="76" width="6" height="4" /></bezel>
+
+ <bezel element="hlb" inputtag="IN.0" inputmask="0x100"><bounds x="97" y="6" width="6" height="4" /><color alpha="0.25" /></bezel>
+ <bezel element="hlb" inputtag="IN.1" inputmask="0x100"><bounds x="97" y="16" width="6" height="4" /><color alpha="0.4" /></bezel>
+ <bezel element="hlb" inputtag="IN.2" inputmask="0x100"><bounds x="97" y="26" width="6" height="4" /><color alpha="0.4" /></bezel>
+ <bezel element="hlb" inputtag="IN.3" inputmask="0x100"><bounds x="97" y="36" width="6" height="4" /><color alpha="0.4" /></bezel>
+ <bezel element="hlb" inputtag="IN.4" inputmask="0x100"><bounds x="97" y="46" width="6" height="4" /><color alpha="0.4" /></bezel>
+ <bezel element="hlb" inputtag="IN.5" inputmask="0x100"><bounds x="97" y="56" width="6" height="4" /><color alpha="0.4" /></bezel>
+ <bezel element="hlb" inputtag="IN.6" inputmask="0x100"><bounds x="97" y="66" width="6" height="4" /><color alpha="0.4" /></bezel>
+ <bezel element="hlb" inputtag="IN.7" inputmask="0x100"><bounds x="97" y="76" width="6" height="4" /><color alpha="0.25" /></bezel>
+
+ <!-- right side leds -->
+
+ <bezel element="black"><bounds x="107" y="2" width="1" height="82" /></bezel>
+
+ <bezel name="0.0" element="ledg"><bounds x="112" y="7.5" width="2" height="1" /></bezel>
+ <bezel name="0.1" element="ledg"><bounds x="112" y="17.5" width="2" height="1" /></bezel>
+ <bezel name="0.2" element="ledg"><bounds x="112" y="27.5" width="2" height="1" /></bezel>
+ <bezel name="0.3" element="ledg"><bounds x="112" y="37.5" width="2" height="1" /></bezel>
+ <bezel name="0.4" element="ledg"><bounds x="112" y="47.5" width="2" height="1" /></bezel>
+ <bezel name="0.5" element="ledg"><bounds x="112" y="57.5" width="2" height="1" /></bezel>
+ <bezel name="0.6" element="ledg"><bounds x="112" y="67.5" width="2" height="1" /></bezel>
+ <bezel name="0.7" element="ledg"><bounds x="112" y="77.5" width="2" height="1" /></bezel>
+
+ <bezel element="text_rg0"><bounds x="108" y="5.7" width="10" height="1.5" /></bezel>
+ <bezel element="text_rg1"><bounds x="108" y="15.7" width="10" height="1.5" /></bezel>
+ <bezel element="text_rg2"><bounds x="108" y="25.7" width="10" height="1.5" /></bezel>
+ <bezel element="text_rg3"><bounds x="108" y="35.7" width="10" height="1.5" /></bezel>
+ <bezel element="text_rg4"><bounds x="108" y="45.7" width="10" height="1.5" /></bezel>
+ <bezel element="text_rg5"><bounds x="108" y="55.7" width="10" height="1.5" /></bezel>
+ <bezel element="text_rg6"><bounds x="108" y="65.7" width="10" height="1.5" /></bezel>
+ <bezel element="text_rg7"><bounds x="108" y="75.7" width="10" height="1.5" /></bezel>
+
+ <bezel element="text_king1"><bounds x="108" y="8.8" width="10" height="1.5" /></bezel>
+ <bezel element="text_queen1"><bounds x="108" y="18.8" width="10" height="1.5" /></bezel>
+ <bezel element="text_bishop1"><bounds x="108" y="28.8" width="10" height="1.5" /></bezel>
+ <bezel element="text_knight1"><bounds x="108" y="38.8" width="10" height="1.5" /></bezel>
+ <bezel element="text_rook1"><bounds x="108" y="48.8" width="10" height="1.5" /></bezel>
+ <bezel element="text_pion1"><bounds x="108" y="58.8" width="10" height="1.5" /></bezel>
+
+
+ </view>
+</mamelayout>
diff --git a/src/mame/machine/apollo_kbd.cpp b/src/mame/machine/apollo_kbd.cpp
index fbfbe18b94a..a88204a3071 100644
--- a/src/mame/machine/apollo_kbd.cpp
+++ b/src/mame/machine/apollo_kbd.cpp
@@ -174,7 +174,7 @@ void apollo_kbd_device::beeper::start(apollo_kbd_device *device)
m_device = device;
LOG2(("start apollo_kbd::beeper"));
m_beeper = m_device->machine().device<beep_device>("beep");
- m_timer = m_device->machine().scheduler().timer_alloc(FUNC(static_beeper_callback), this);
+ m_timer = m_device->machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(apollo_kbd_device::beeper::beeper_callback), this));
}
void apollo_kbd_device::beeper::reset()
@@ -202,16 +202,11 @@ int apollo_kbd_device::beeper::keyboard_has_beeper()
return true; // driver has no facility to return false here, so go with it
}
-void apollo_kbd_device::beeper::beeper_callback()
+TIMER_CALLBACK_MEMBER(apollo_kbd_device::beeper::beeper_callback)
{
off();
}
-TIMER_CALLBACK( apollo_kbd_device::beeper::static_beeper_callback )
-{
- reinterpret_cast<beeper*>(ptr)->beeper_callback();
-}
-
//**************************************************************************
// Mouse
//**************************************************************************
diff --git a/src/mame/machine/apollo_kbd.h b/src/mame/machine/apollo_kbd.h
index 4b5cc91a9af..c593af06c85 100644
--- a/src/mame/machine/apollo_kbd.h
+++ b/src/mame/machine/apollo_kbd.h
@@ -93,8 +93,7 @@ private:
void on();
private:
int keyboard_has_beeper();
- void beeper_callback();
- static TIMER_CALLBACK( static_beeper_callback );
+ TIMER_CALLBACK_MEMBER(beeper_callback);
apollo_kbd_device *m_device; // pointer back to our device
beep_device *m_beeper; // the keyboard beeper device
diff --git a/src/mame/machine/dc.cpp b/src/mame/machine/dc.cpp
index 324a1a1dfe6..59141504bdb 100644
--- a/src/mame/machine/dc.cpp
+++ b/src/mame/machine/dc.cpp
@@ -374,7 +374,7 @@ READ64_MEMBER(dc_state::dc_sysctrl_r )
#if DEBUG_SYSCTRL
if ((reg != 0x40) && (reg != 0x41) && (reg != 0x42) && (reg != 0x23) && (reg > 2)) // filter out IRQ status reads
{
- osd_printf_verbose("SYSCTRL: [%08x] read %x @ %x (reg %x: %s), mask %" I64FMT "x (PC=%x)\n", 0x5f6800+reg*4, dc_sysctrl_regs[reg], offset, reg, sysctrl_names[reg], mem_mask, space.device().safe_pc());
+ osd_printf_verbose("%s",string_format("SYSCTRL: [%08x] read %x @ %x (reg %x: %s), mask %I64x (PC=%x)\n", 0x5f6800+reg*4, dc_sysctrl_regs[reg], offset, reg, sysctrl_names[reg], mem_mask, space.device().safe_pc()).c_str());
}
#endif
@@ -472,7 +472,7 @@ WRITE64_MEMBER(dc_state::dc_sysctrl_w )
#if DEBUG_SYSCTRL
if ((reg != 0x40) && (reg != 0x42) && (reg > 2)) // filter out IRQ acks and ch2 dma
{
- osd_printf_verbose("SYSCTRL: write %" I64FMT "x to %x (reg %x), mask %" I64FMT "x\n", data>>shift, offset, reg, /*sysctrl_names[reg],*/ mem_mask);
+ osd_printf_verbose("%s",string_format("SYSCTRL: write %I64x to %x (reg %x), mask %I64x\n", data>>shift, offset, reg, /*sysctrl_names[reg],*/ mem_mask).c_str());
}
#endif
}
@@ -513,7 +513,7 @@ WRITE64_MEMBER(dc_state::dc_gdrom_w )
off=offset << 1;
}
- osd_printf_verbose("GDROM: [%08x=%x]write %" I64FMT "x to %x, mask %" I64FMT "x\n", 0x5f7000+off*4, dat, data, offset, mem_mask);
+ osd_printf_verbose("%s",string_format("GDROM: [%08x=%x]write %I64x to %x, mask %I64x\n", 0x5f7000+off*4, dat, data, offset, mem_mask).c_str());
}
READ64_MEMBER(dc_state::dc_g2_ctrl_r )
@@ -632,7 +632,7 @@ WRITE64_MEMBER(dc_state::dc_modem_w )
reg = decode_reg32_64(offset, mem_mask, &shift);
dat = (UINT32)(data >> shift);
- osd_printf_verbose("MODEM: [%08x=%x] write %" I64FMT "x to %x, mask %" I64FMT "x\n", 0x600000+reg*4, dat, data, offset, mem_mask);
+ osd_printf_verbose("%s",string_format("MODEM: [%08x=%x] write %I64x to %x, mask %I64x\n", 0x600000+reg*4, dat, data, offset, mem_mask).c_str());
}
#define SAVE_G2DMA(x) \
@@ -674,7 +674,7 @@ void dc_state::machine_reset()
READ32_MEMBER(dc_state::dc_aica_reg_r)
{
-// osd_printf_verbose("AICA REG: [%08x] read %" I64FMT "x, mask %" I64FMT "x\n", 0x700000+reg*4, (UINT64)offset, mem_mask);
+// osd_printf_verbose("%s",string_format("AICA REG: [%08x] read %I64x, mask %I64x\n", 0x700000+reg*4, (UINT64)offset, mem_mask).c_str());
if(offset == 0x2c00/4)
return m_armrst;
@@ -705,7 +705,7 @@ WRITE32_MEMBER(dc_state::dc_aica_reg_w)
m_aica->write(space, offset*2, data, 0xffff);
-// osd_printf_verbose("AICA REG: [%08x=%x] write %x to %x, mask %" I64FMT "x\n", 0x700000+reg*4, data, offset, mem_mask);
+// osd_printf_verbose("%s",string_format("AICA REG: [%08x=%x] write %x to %x, mask %I64x\n", 0x700000+reg*4, data, offset, mem_mask).c_str());
}
READ32_MEMBER(dc_state::dc_arm_aica_r)
diff --git a/src/mame/machine/dccons.cpp b/src/mame/machine/dccons.cpp
index 48f4bd372a6..2f1b553e9fb 100644
--- a/src/mame/machine/dccons.cpp
+++ b/src/mame/machine/dccons.cpp
@@ -136,7 +136,7 @@ READ32_MEMBER(dc_cons_state::dc_mess_g1_ctrl_r )
WRITE32_MEMBER(dc_cons_state::dc_mess_g1_ctrl_w )
{
g1bus_regs[offset] = data; // 5f7400+reg*4=dat
-// osd_printf_verbose("G1CTRL: [%08x=%x] write %" I64FMT "x to %x, mask %" I64FMT "x\n", 0x5f7400+reg*4, dat, data, offset, mem_mask);
+// osd_printf_verbose("%s",string_format("G1CTRL: [%08x=%x] write %I64x to %x, mask %I64x\n", 0x5f7400+reg*4, dat, data, offset, mem_mask).c_str());
switch (offset)
{
case SB_GDST:
diff --git a/src/mame/machine/kay_kbd.cpp b/src/mame/machine/kay_kbd.cpp
index 736d39d5fd8..617d7636365 100644
--- a/src/mame/machine/kay_kbd.cpp
+++ b/src/mame/machine/kay_kbd.cpp
@@ -181,8 +181,6 @@ INPUT_PORTS_START( kay_kbd )
PORT_BIT(0xf0, 0x00, IPT_UNUSED)
INPUT_PORTS_END
-static void kay_kbd_in( running_machine &machine, UINT8 data );
-
static const UINT8 keyboard[8][10][8] = {
{ /* normal */
{ 27,'1','2','3','4','5','6','7'},
@@ -376,11 +374,11 @@ INTERRUPT_GEN_MEMBER(kaypro_state::kay_kbd_interrupt)
if( kbd->key ) /* normal key */
{
kbd->repeater = 30;
- kay_kbd_in(machine(), kbd->key);
+ kay_kbd_in(kbd->key);
}
else
if( (row == 0) && (chg == 0x04) ) /* Ctrl-@ (NUL) */
- kay_kbd_in(machine(), 0);
+ kay_kbd_in(0);
keyrows[row] |= newval;
}
else
@@ -391,7 +389,7 @@ INTERRUPT_GEN_MEMBER(kaypro_state::kay_kbd_interrupt)
}
else if ( kbd->key && (keyrows[kbd->lastrow] & kbd->mask) && kbd->repeat == 0 )
{
- kay_kbd_in(machine(), kbd->key);
+ kay_kbd_in(kbd->key);
}
}
@@ -415,10 +413,9 @@ static WRITE8_HANDLER ( kaypro2_const_w )
* releases CPU if it was waiting for a key
* sounds bell if buffer would overflow
******************************************************/
-static void kay_kbd_in( running_machine &machine, UINT8 data )
+void kaypro_state::kay_kbd_in(UINT8 data )
{
- kaypro_state *state = machine.driver_data<kaypro_state>();
- kay_kbd_t *kbd = state->m_kbd;
+ kay_kbd_t *kbd = m_kbd;
UINT8 kbd_head_old;
kbd_head_old = kbd->head;
@@ -428,21 +425,20 @@ static void kay_kbd_in( running_machine &machine, UINT8 data )
if (kbd->head == kbd->tail)
{
kbd->head = kbd_head_old;
- kay_kbd_d_w(machine, 4);
+ kay_kbd_d_w(4);
}
else
- kay_kbd_d_w(machine, 1);
+ kay_kbd_d_w(1);
}
-UINT8 kay_kbd_c_r( running_machine &machine )
+UINT8 kaypro_state::kay_kbd_c_r()
{
/* d4 transmit buffer empty - 1=ok to send
d2 appears to be receive buffer empty - 1=ok to receive
d0 keyboard buffer empty - 1=key waiting to be used */
- kaypro_state *state = machine.driver_data<kaypro_state>();
- kay_kbd_t *kbd = state->m_kbd;
+ kay_kbd_t *kbd = m_kbd;
UINT8 data = kbd->control_status;
if( kbd->head != kbd->tail )
@@ -451,12 +447,11 @@ UINT8 kay_kbd_c_r( running_machine &machine )
return data;
}
-UINT8 kay_kbd_d_r( running_machine &machine )
+UINT8 kaypro_state::kay_kbd_d_r()
{
/* return next key in buffer */
- kaypro_state *state = machine.driver_data<kaypro_state>();
- kay_kbd_t *kbd = state->m_kbd;
+ kay_kbd_t *kbd = m_kbd;
UINT8 data = 0;
if (kbd->tail != kbd->head)
@@ -468,15 +463,14 @@ UINT8 kay_kbd_d_r( running_machine &machine )
return data;
}
-static TIMER_CALLBACK( kay_kbd_beepoff )
+TIMER_CALLBACK_MEMBER( kaypro_state::kay_kbd_beepoff )
{
- kaypro_state *state = machine.driver_data<kaypro_state>();
- kay_kbd_t *kbd = state->m_kbd;
+ kay_kbd_t *kbd = m_kbd;
kbd->beeper->set_state(0);
kbd->control_status |= 4;
}
-void kay_kbd_d_w( running_machine &machine, UINT8 data )
+void kaypro_state::kay_kbd_d_w( UINT8 data )
{
/* Beeper control - lengths need verifying
01 - keyclick
@@ -485,8 +479,7 @@ void kay_kbd_d_w( running_machine &machine, UINT8 data )
08 - mute
16 - unmute */
- kaypro_state *state = machine.driver_data<kaypro_state>();
- kay_kbd_t *kbd = state->m_kbd;
+ kay_kbd_t *kbd = m_kbd;
UINT16 length = 0;
if (data & 0x10)
@@ -509,7 +502,7 @@ void kay_kbd_d_w( running_machine &machine, UINT8 data )
if (length)
{
kbd->control_status &= 0xfb;
- machine.scheduler().timer_set(attotime::from_msec(length), FUNC(kay_kbd_beepoff));
+ machine().scheduler().timer_set(attotime::from_msec(length), timer_expired_delegate(FUNC(kaypro_state::kay_kbd_beepoff),this));
kbd->beeper->set_state(1);
}
}
diff --git a/src/mame/machine/kaypro.cpp b/src/mame/machine/kaypro.cpp
index 2339e770307..8c914d01750 100644
--- a/src/mame/machine/kaypro.cpp
+++ b/src/mame/machine/kaypro.cpp
@@ -165,10 +165,10 @@ WRITE8_MEMBER( kaypro_state::kaypro2x_system_port_w )
READ8_MEMBER(kaypro_state::kaypro_sio_r)
{
if (offset == 1)
- return kay_kbd_d_r(machine());
+ return kay_kbd_d_r();
else
if (offset == 3)
- return kay_kbd_c_r(machine());
+ return kay_kbd_c_r();
else
return m_sio->cd_ba_r(space, offset);
}
@@ -176,7 +176,7 @@ READ8_MEMBER(kaypro_state::kaypro_sio_r)
WRITE8_MEMBER(kaypro_state::kaypro_sio_w)
{
if (offset == 1)
- kay_kbd_d_w(machine(), data);
+ kay_kbd_d_w(data);
else
m_sio->cd_ba_w(space, offset, data);
}
diff --git a/src/mame/machine/mac.cpp b/src/mame/machine/mac.cpp
index e62ecd96cc9..bbc0ded1b14 100644
--- a/src/mame/machine/mac.cpp
+++ b/src/mame/machine/mac.cpp
@@ -118,9 +118,6 @@
#define LOG_MEMORY 0
#endif
-extern TIMER_CALLBACK(mac_adb_tick); // macadb.c
-extern TIMER_CALLBACK(mac_pmu_tick); // macadb.c
-
static offs_t mac_dasm_override(device_t &device, char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, int options);
// returns non-zero if this Mac has ADB
@@ -1837,13 +1834,13 @@ void mac_state::machine_start()
{
if (has_adb())
{
- this->m_adb_timer = machine().scheduler().timer_alloc(FUNC(mac_adb_tick));
+ this->m_adb_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mac_state::mac_adb_tick),this));
this->m_adb_timer->adjust(attotime::never);
// also allocate PMU timer
if (ADB_IS_PM_CLASS)
{
- m_pmu_send_timer = machine().scheduler().timer_alloc(FUNC(mac_pmu_tick));
+ m_pmu_send_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mac_state::mac_pmu_tick),this));
this->m_adb_timer->adjust(attotime::never);
m_pmu_int_status = 0;
}
diff --git a/src/mame/machine/macadb.cpp b/src/mame/machine/macadb.cpp
index 76a8a010b57..22f0acabf27 100644
--- a/src/mame/machine/macadb.cpp
+++ b/src/mame/machine/macadb.cpp
@@ -528,35 +528,33 @@ void mac_state::adb_talk()
}
}
-TIMER_CALLBACK(mac_adb_tick)
+TIMER_CALLBACK_MEMBER(mac_state::mac_adb_tick)
{
- mac_state *mac = machine.driver_data<mac_state>();
-
- if ((ADB_IS_EGRET_NONCLASS) || (ADB_IS_CUDA_NONCLASS))
+ if ((ADB_IS_EGRET) || (ADB_IS_CUDA))
{
- switch (mac->m_adb_linestate)
+ switch (m_adb_linestate)
{
case LST_SRQNODATA:
- mac->set_adb_line(ASSERT_LINE);
- mac->m_adb_linestate = LST_IDLE;
+ set_adb_line(ASSERT_LINE);
+ m_adb_linestate = LST_IDLE;
break;
case LST_TSTOPSTART:
- mac->set_adb_line(ASSERT_LINE);
- mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
- mac->m_adb_linestate++;
+ set_adb_line(ASSERT_LINE);
+ m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
+ m_adb_linestate++;
break;
case LST_TSTOPSTARTa:
- mac->set_adb_line(CLEAR_LINE);
- mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
- mac->m_adb_linestate++;
+ set_adb_line(CLEAR_LINE);
+ m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
+ m_adb_linestate++;
break;
case LST_STARTBIT:
- mac->set_adb_line(ASSERT_LINE);
- mac->m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
- mac->m_adb_linestate++;
+ set_adb_line(ASSERT_LINE);
+ m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
+ m_adb_linestate++;
break;
case LST_SENDBIT0:
@@ -567,18 +565,18 @@ TIMER_CALLBACK(mac_adb_tick)
case LST_SENDBIT5:
case LST_SENDBIT6:
case LST_SENDBIT7:
- mac->set_adb_line(CLEAR_LINE);
- if (mac->m_adb_buffer[mac->m_adb_stream_ptr] & 0x80)
+ set_adb_line(CLEAR_LINE);
+ if (m_adb_buffer[m_adb_stream_ptr] & 0x80)
{
// printf("1 ");
- mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
+ m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
}
else
{
// printf("0 ");
- mac->m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
+ m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
}
- mac->m_adb_linestate++;
+ m_adb_linestate++;
break;
case LST_SENDBIT0a:
@@ -588,92 +586,92 @@ TIMER_CALLBACK(mac_adb_tick)
case LST_SENDBIT4a:
case LST_SENDBIT5a:
case LST_SENDBIT6a:
- mac->set_adb_line(ASSERT_LINE);
- if (mac->m_adb_buffer[mac->m_adb_stream_ptr] & 0x80)
+ set_adb_line(ASSERT_LINE);
+ if (m_adb_buffer[m_adb_stream_ptr] & 0x80)
{
- mac->m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
+ m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
}
else
{
- mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
+ m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
}
- mac->m_adb_buffer[mac->m_adb_stream_ptr] <<= 1;
- mac->m_adb_linestate++;
+ m_adb_buffer[m_adb_stream_ptr] <<= 1;
+ m_adb_linestate++;
break;
case LST_SENDBIT7a:
- mac->set_adb_line(ASSERT_LINE);
- if (mac->m_adb_buffer[mac->m_adb_stream_ptr] & 0x80)
+ set_adb_line(ASSERT_LINE);
+ if (m_adb_buffer[m_adb_stream_ptr] & 0x80)
{
// printf(" ");
- mac->m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
+ m_adb_timer->adjust(attotime::from_ticks(105, 1000000));
}
else
{
// printf(" ");
- mac->m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
+ m_adb_timer->adjust(attotime::from_ticks(57, 1000000));
}
- mac->m_adb_stream_ptr++;
- if (mac->m_adb_stream_ptr == mac->m_adb_datasize)
+ m_adb_stream_ptr++;
+ if (m_adb_stream_ptr == m_adb_datasize)
{
- mac->m_adb_linestate++;
+ m_adb_linestate++;
}
else
{
- mac->m_adb_linestate = LST_SENDBIT0;
+ m_adb_linestate = LST_SENDBIT0;
}
break;
case LST_SENDSTOP:
- mac->set_adb_line(CLEAR_LINE);
- mac->m_adb_timer->adjust(attotime::from_ticks((57*2), 1000000));
- mac->m_adb_linestate++;
+ set_adb_line(CLEAR_LINE);
+ m_adb_timer->adjust(attotime::from_ticks((57*2), 1000000));
+ m_adb_linestate++;
break;
case LST_SENDSTOPa:
- mac->set_adb_line(ASSERT_LINE);
- mac->m_adb_timer->adjust(attotime::never);
- mac->m_adb_linestate = LST_IDLE;
+ set_adb_line(ASSERT_LINE);
+ m_adb_timer->adjust(attotime::never);
+ m_adb_linestate = LST_IDLE;
break;
}
}
else
{
// do one clock transition on CB1 to advance the VIA shifter
- mac->m_adb_extclock ^= 1;
- mac->m_via1->write_cb1(mac->m_adb_extclock);
+ m_adb_extclock ^= 1;
+ m_via1->write_cb1(m_adb_extclock);
- if (mac->m_adb_direction)
+ if (m_adb_direction)
{
- mac->m_adb_command <<= 1;
+ m_adb_command <<= 1;
}
else
{
- mac->m_via1->write_cb2((mac->m_adb_send & 0x80)>>7);
- mac->m_adb_send <<= 1;
+ m_via1->write_cb2((m_adb_send & 0x80)>>7);
+ m_adb_send <<= 1;
}
- mac->m_adb_extclock ^= 1;
- mac->m_via1->write_cb1(mac->m_adb_extclock);
+ m_adb_extclock ^= 1;
+ m_via1->write_cb1(m_adb_extclock);
- mac->m_adb_timer_ticks--;
- if (!mac->m_adb_timer_ticks)
+ m_adb_timer_ticks--;
+ if (!m_adb_timer_ticks)
{
- mac->m_adb_timer->adjust(attotime::never);
+ m_adb_timer->adjust(attotime::never);
- if ((mac->m_adb_direction) && (ADB_IS_BITBANG))
+ if ((m_adb_direction) && (ADB_IS_BITBANG_CLASS))
{
- mac->adb_talk();
- if((mac->m_adb_last_talk == 2) && mac->m_adb_datasize) {
- mac->m_adb_timer_ticks = 8;
- mac->m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(100)));
+ adb_talk();
+ if((m_adb_last_talk == 2) && m_adb_datasize) {
+ m_adb_timer_ticks = 8;
+ m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(100)));
}
}
}
else
{
- mac->m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(200)));
+ m_adb_timer->adjust(attotime(0, ATTOSECONDS_IN_USEC(200)));
}
}
}
@@ -736,30 +734,28 @@ void mac_state::mac_adb_newaction(int state)
}
}
-TIMER_CALLBACK(mac_pmu_tick)
+TIMER_CALLBACK_MEMBER(mac_state::mac_pmu_tick)
{
- mac_state *mac = machine.driver_data<mac_state>();
-
// state 10 means this is in response to an ADB command
- if (mac->m_pm_state == 10)
+ if (m_pm_state == 10)
{
#if LOG_ADB
printf("PM: was state 10, chunk-chunking CB1\n");
#endif
- mac->m_pm_state = 0;
+ m_pm_state = 0;
// tick CB1, which should cause a PMU interrupt on PMU machines
- mac->m_adb_extclock ^= 1;
- mac->m_via1->write_cb1(mac->m_adb_extclock);
- mac->m_adb_extclock ^= 1;
- mac->m_via1->write_cb1(mac->m_adb_extclock);
+ m_adb_extclock ^= 1;
+ m_via1->write_cb1(m_adb_extclock);
+ m_adb_extclock ^= 1;
+ m_via1->write_cb1(m_adb_extclock);
}
else
{
#if LOG_ADB
printf("PM: timer tick, lowering ACK\n");
#endif
- mac->m_pm_ack &= ~2; // lower ACK to handshake next step
+ m_pm_ack &= ~2; // lower ACK to handshake next step
}
}
diff --git a/src/mame/machine/mboard.cpp b/src/mame/machine/mboard.cpp
deleted file mode 100644
index 255391d5bb8..00000000000
--- a/src/mame/machine/mboard.cpp
+++ /dev/null
@@ -1,568 +0,0 @@
-// license:???
-// copyright-holders:Ralf Schaefer, Cowering
-/**********************************************************************
-
- Mephisto Chess Computers
-
-**********************************************************************/
-#include "emu.h"
-#include "includes/mboard.h"
-/***************************************************************************
- TYPE DEFINITIONS
-***************************************************************************/
-
-#define IsPiece(x) ((m_board[x] >=1) && (m_board[x] <=12))
-
-const int mboard_state::start_board[64] =
-{
- BR, BN, BB, BQ, BK, BB, BN, BR,
- BP, BP, BP, BP, BP, BP, BP, BP,
- EM, EM, EM, EM, EM, EM, EM, EM,
- EM, EM, EM, EM, EM, EM, EM, EM,
- EM, EM, EM, EM, EM, EM, EM, EM,
- EM, EM, EM, EM, EM, EM, EM, EM,
- WP, WP, WP, WP, WP, WP, WP, WP,
- WR, WN, WB, WQ, WK, WB, WN, WR
-};
-
-UINT8 mboard_state::border_pieces[12] = {WK,WQ,WR,WB,WN,WP,BK,BQ,BR,BB,BN,BP,};
-
-
-int mboard_state::get_first_bit(UINT8 data)
-{
- int i;
-
- for (i = 0; i < 8; i++)
- if (BIT(data, i))
- return i;
-
- return NOT_VALID;
-}
-
-
-inline UINT8 mboard_state::pos_to_num(UINT8 val)
-{
- switch (val)
- {
- case 0xfe: return 7;
- case 0xfd: return 6;
- case 0xfb: return 5;
- case 0xf7: return 4;
- case 0xef: return 3;
- case 0xdf: return 2;
- case 0xbf: return 1;
- case 0x7f: return 0;
- default: return 0xff;
- }
-}
-
-int mboard_state::get_first_cleared_bit(UINT8 data)
-{
- int i;
-
- for (i=0;i<8;i++)
- if (!BIT(data, i))
- return i;
-
- return NOT_VALID;
-}
-
-UINT8 mboard_state::read_board()
-{
- UINT8 i_18, i_AH;
- UINT8 data;
-
- data = 0xff;
-
-/*
-
-Example board scan:
-Starting postion and pawn on E2 is lifted
-
-
-mask: 7f 0111 1111 Line 8
-data: 0 0000 0000 all fields occupied
-mask: bf 1011 1111 Line 7
-data: 0 0000 0000 all fields occupied
-mask: df 1101 1111 Line 6
-data: ff 1111 1111 all fields empty
-mask: ef 1110 1111 Line 5
-data: ff 1111 1111 all fields empty
-mask: f7 1111 0111 Line 4
-data: ff 1111 1111 all fields empty
-mask: fb 1111 1011 Line 3
-data: ff 1111 1111 all fields empty
-mask: fd 1111 1101 Line 2
-data: 10 0001 0000 E2 is empty rest is occupied
-mask: fe 1111 1110 Line 1
-data: 0 0000 0000 all fields occupied
-
-
-*/
-
-/* looking for cleared bit in mask Line18_REED => current line */
-
- if (data && Line18_REED)
- {
- i_18 = get_first_cleared_bit(Line18_REED);
-
- if (i_18 == NOT_VALID)
- printf("No cleared bit in mask Line18_REED!\n");
- else
- {
- /* looking for a piece in this line and clear bit in data if found */
-
- for (i_AH = 0; i_AH < 8; i_AH = i_AH + 1)
- if (IsPiece(64 - (i_18 * 8 + 8 - i_AH)))
- data &= ~(1 << i_AH); // clear bit
-
- read_board_flag = TRUE;
- }
- }
-
- return data;
-}
-
-
-void mboard_state::write_board(UINT8 data)
-{
- Line18_REED=data;
-
- if (read_board_flag && !strcmp(machine().system().name,"glasgow") ) //HACK
- Line18_LED = 0;
- else
- Line18_LED = data;
-
- read_board_flag = FALSE;
-
- if (data == 0xff)
- mboard_key_selector = 0;
-}
-
-
-
-void mboard_state::write_LED(UINT8 data)
-{
- int i;
- UINT8 i_AH, i_18;
- UINT8 LED;
-
- mboard_lcd_invert = 1;
-/*
-
-Example: turn led E2 on
-
-mask: fd 1111 1101 Line 2
-data: 10 0001 0000 Line E
-
-*/
-
- for (i=0; i < 64; i++) /* all LED's off */
- output().set_led_value(i, 0);
-
- if (Line18_LED)
- {
- for (i_AH = 0; i_AH < 8; i_AH++) /* turn LED on depending on bit masks */
- {
- if (BIT(data,i_AH))
- {
- for (i_18 = 0; i_18 < 8; i_18++)
- {
- LED = (i_18*8 + 8-i_AH-1);
- if (!(Line18_LED & (1 << i_18))) /* cleared bit */
- output().set_led_value(LED, 1);
- //else
- // output().set_led_value(LED, 0);
- }
- }
- }
- }
-
-}
-
-
-
-READ8_MEMBER(mboard_state::mboard_read_board_8)
-{
- UINT8 data;
-
- data=read_board();
- logerror("Read Board Port Data = %d\n ",data);
- return data;
-}
-
-READ16_MEMBER(mboard_state::mboard_read_board_16)
-{
- UINT8 data;
-
- data=read_board();
- return data << 8;
-}
-
-READ32_MEMBER(mboard_state::mboard_read_board_32)
-{
- UINT8 data;
-
- data=read_board();
- return data<<24;
-}
-
-WRITE8_MEMBER(mboard_state::mboard_write_board_8)
-{
- write_board(data);
- logerror("Write Board Port Data = %02x\n",data);
-}
-
-WRITE16_MEMBER(mboard_state::mboard_write_board_16)
-{
- if (data & 0xff) write_board(data);
- logerror("write board 16 %08x\n",data);
- write_board(data>>8);
-}
-
-WRITE32_MEMBER(mboard_state::mboard_write_board_32)
-{
-// data |= data << 24;
-//printf("write board %08x %08x\n",offset,data);
- logerror("write board 32 o: %08x d: %08x\n",offset,data);
- if (offset) write_board(data);
- else write_board(data>>24);
-}
-
-WRITE8_MEMBER(mboard_state::mboard_write_LED_8)
-{
- write_LED(data);
- space.device().execute().spin_until_time(attotime::from_usec(7));
-}
-
-WRITE16_MEMBER(mboard_state::mboard_write_LED_16)
-{
- write_LED(data >> 8);
- space.device().execute().spin_until_time(attotime::from_usec(9));
-}
-
-WRITE32_MEMBER(mboard_state::mboard_write_LED_32)
-{
-// data = data | data << 24;
-//printf("write LED %08x %08x\n",offset,data);
- if (offset) write_LED(data);
- else write_LED(data >> 24);
- logerror("write LED 32 o: %08x d: %08x\n",offset,data);
-// space.device().execute().spin_until_time(ATTOTIME_IN_USEC(20));
-}
-
-
-/* save states callback */
-
-void mboard_state::board_presave()
-{
- int i;
- for (i=0;i<64;i++)
- save_board[i]=m_board[i];
-}
-
-void mboard_state::board_postload()
-{
- int i;
- for (i=0;i<64;i++)
- m_board[i]=save_board[i];
-
-}
-
-void mboard_state::mboard_savestate_register()
-{
- save_item(NAME(save_board));
- machine().save().register_postload(save_prepost_delegate(FUNC(mboard_state::board_postload),this));
- machine().save().register_presave(save_prepost_delegate(FUNC(mboard_state::board_presave),this));
-}
-
-void mboard_state::mboard_set_board()
-{
- read_board_flag = TRUE;
- int i;
- for (i=0;i<64;i++)
- m_board[i]=start_board[i];
-}
-
-void mboard_state::clear_board()
-{
- int i;
- for (i=0;i<64;i++)
- m_board[i]=EM;
-}
-
-void mboard_state::set_artwork()
-{
- int i;
- for (i=0;i<64;i++)
- output().set_indexed_value("P", i, m_board[i]);
-}
-
-void mboard_state::mboard_set_border_pieces()
-{
- int i;
- for (i=0;i<12;i++)
- output().set_indexed_value("Q", i, border_pieces[i]);
-}
-
-TIMER_DEVICE_CALLBACK_MEMBER(mboard_state::mboard_update_artwork )
-{
- check_board_buttons();
- set_artwork();
- mboard_set_border_pieces();
-}
-
-void mboard_state::check_board_buttons()
-{
- int field;
- int i;
- UINT8 port_input=0;
- UINT8 data = 0xff;
- static UINT8 board_row = 0;
- static UINT16 mouse_down = 0;
- UINT8 pos2num_res = 0;
- board_row++;
- board_row &= 7;
- int click_on_border_piece=FALSE;
-
-
-/* check click on border pieces */
- i=0;
- port_input = m_b_black->read();
- if (port_input)
- {
- i=get_first_bit(port_input)+6;
- click_on_border_piece=TRUE;
- }
-
- port_input = m_b_white->read();
- if (port_input)
- {
- i=get_first_bit(port_input);
- click_on_border_piece=TRUE;
- }
-
- if (click_on_border_piece)
- {
- if (!mouse_down)
- {
- if (border_pieces[i] > 12 ) /* second click on selected border piece */
- {
- mouse_hold_border_piece=FALSE;
- border_pieces[i]=border_pieces[i]-12;
- mouse_hold_from=0;
- mouse_hold_piece=0;
- }
- else if (!mouse_hold_piece) /*select border piece */
- {
- if (mouse_hold_border_piece)
- border_pieces[mouse_hold_from]=border_pieces[mouse_hold_from]-12;
-
- mouse_hold_from=i;
- mouse_hold_piece=border_pieces[i];
- border_pieces[i]=border_pieces[i]+12;
- mouse_hold_border_piece=TRUE;
- }
-
- mouse_down = board_row + 1;
-
- }
- return;
- }
-
-
-/* check click on board */
- data = m_line[board_row]->read();
-
- if ((data != 0xff) && (!mouse_down) )
- {
- pos2num_res = pos_to_num(data);
- field=64-(board_row*8+8-pos2num_res);
-
-
- if (!(pos2num_res < 8))
- logerror("Position out of bound!");
-
- else if ((mouse_hold_piece) && (!IsPiece(field)))
- {
- /* Moving a piece onto a blank */
- m_board[field] = mouse_hold_piece;
-
- if (mouse_hold_border_piece)
- {
- border_pieces[mouse_hold_from]=border_pieces[mouse_hold_from]-12;
- }else if ( field != mouse_hold_from ) /* Put a selected piece back to the source field */
- m_board[mouse_hold_from] = 0;
-
-
- mouse_hold_from = 0;
- mouse_hold_piece = 0;
- mouse_hold_border_piece=FALSE;
- }
- else if ((!mouse_hold_piece) )
- {
- /* Picking up a piece */
-
- if (IsPiece(field))
- {
- mouse_hold_from = field;
- mouse_hold_piece = m_board[field];
- m_board[field] = m_board[field]+12;
- }
-
- }
-
- mouse_down = board_row + 1;
- }
- else if ((data == 0xff) && (mouse_down == (board_row + 1))) /* Wait for mouse to be released */
- mouse_down = 0;
-
-/* check click on border - remove selected piece*/
- if (m_line10->read())
- {
- if (mouse_hold_piece)
- {
- if (mouse_hold_border_piece)
- border_pieces[mouse_hold_from]=border_pieces[mouse_hold_from]-12;
- else
- m_board[mouse_hold_from] = 0;
-
- mouse_hold_from = 0;
- mouse_hold_piece = 0;
- mouse_hold_border_piece = FALSE;
- }
-
- return;
- }
-
-/* check additional buttons */
- if (data == 0xff)
- {
- port_input = m_b_buttons->read();
- if (port_input==0x01)
- {
- clear_board();
- return;
- }else if (port_input==0x02)
- {
- mboard_set_board();
- return;
- }
-
-
- }
-
-}
-
-extern INPUT_PORTS_START( chessboard )
-
- PORT_START("LINE.0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_START("LINE.1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_START("LINE.2")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_START("LINE.3")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_START("LINE.4")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_START("LINE.5")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_START("LINE.6")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_START("LINE.7")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD)
-
- PORT_START("LINE10")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD)
-
- PORT_START("B_WHITE")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD)
-
- PORT_START("B_BLACK")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD)
-
- PORT_START("B_BUTTONS")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD)
-
- PORT_START("MOUSE_X")
- PORT_BIT( 0xffff, 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(100)
-
- PORT_START("MOUSE_Y")
- PORT_BIT( 0xffff, 0x00, IPT_MOUSE_Y ) PORT_SENSITIVITY(100)
-
- PORT_START("BUTTON_L")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_CODE(MOUSECODE_BUTTON1) PORT_NAME("left button")
-
- PORT_START("BUTTON_R")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_CODE(MOUSECODE_BUTTON2) PORT_NAME("right button")
-
-
-INPUT_PORTS_END
diff --git a/src/mame/machine/mega32x.cpp b/src/mame/machine/mega32x.cpp
index 864e3d00b0b..d4658b3a662 100644
--- a/src/mame/machine/mega32x.cpp
+++ b/src/mame/machine/mega32x.cpp
@@ -235,9 +235,6 @@ void sega_32x_device::static_set_palette_tag(device_t &device, const char *tag)
downcast<sega_32x_device &>(device).m_palette.set_tag(tag);
}
-TIMER_CALLBACK( _32x_pwm_callback );
-
-
READ16_MEMBER( sega_32x_device::_32x_68k_palette_r )
{
@@ -817,7 +814,7 @@ void sega_32x_device::calculate_pwm_timer()
}
-void sega_32x_device::handle_pwm_callback()
+TIMER_CALLBACK_MEMBER(sega_32x_device::handle_pwm_callback)
{
if(m_lch_index_r < PWM_FIFO_SIZE)
{
@@ -861,12 +858,6 @@ void sega_32x_device::handle_pwm_callback()
m_32x_pwm_timer->adjust(attotime::from_hz((PWM_CLOCK) / (m_pwm_cycle - 1)));
}
-TIMER_CALLBACK( _32x_pwm_callback )
-{
- sega_32x_device* _32xdev = (sega_32x_device*)ptr;
- _32xdev->handle_pwm_callback();
-}
-
READ16_MEMBER( sega_32x_device::_32x_pwm_r )
{
switch(offset)
@@ -1832,7 +1823,7 @@ machine_config_constructor sega_32x_pal_device::device_mconfig_additions() const
void sega_32x_device::device_start()
{
- m_32x_pwm_timer = machine().scheduler().timer_alloc(FUNC(_32x_pwm_callback), (void*)this);
+ m_32x_pwm_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sega_32x_device::handle_pwm_callback), this));
m_32x_pwm_timer->adjust(attotime::never);
m_32x_dram0 = std::make_unique<UINT16[]>(0x40000/2);
diff --git a/src/mame/machine/mega32x.h b/src/mame/machine/mega32x.h
index f076b0f7a71..80940755726 100644
--- a/src/mame/machine/mega32x.h
+++ b/src/mame/machine/mega32x.h
@@ -133,7 +133,7 @@ public:
int m_32x_240mode;
UINT16 m_32x_a1518a_reg;
- void handle_pwm_callback();
+ TIMER_CALLBACK_MEMBER(handle_pwm_callback);
void calculate_pwm_timer();
UINT16 m_pwm_ctrl, m_pwm_cycle, m_pwm_tm_reg;
UINT16 m_cur_lch[0x10],m_cur_rch[0x10];
diff --git a/src/mame/machine/ns10crypt.cpp b/src/mame/machine/ns10crypt.cpp
index e639108166c..5683b35bc82 100644
--- a/src/mame/machine/ns10crypt.cpp
+++ b/src/mame/machine/ns10crypt.cpp
@@ -1,4 +1,4 @@
-// license:BSD-3
+// license:BSD-3-Clause
// copyright-holders:Andreas Naive
/****************************************************************************
Namco System 10 decryption emulation
diff --git a/src/mame/machine/ns10crypt.h b/src/mame/machine/ns10crypt.h
index 163a4ac21c7..d6d40174c81 100644
--- a/src/mame/machine/ns10crypt.h
+++ b/src/mame/machine/ns10crypt.h
@@ -1,4 +1,4 @@
-// license:BSD-3
+// license:BSD-3-Clause
// copyright-holders:Andreas Naive
#ifndef _NS10CRYPT_H_
diff --git a/src/mame/machine/pcshare.cpp b/src/mame/machine/pcshare.cpp
index e6d3451c5c4..a6701fb9ac4 100644
--- a/src/mame/machine/pcshare.cpp
+++ b/src/mame/machine/pcshare.cpp
@@ -14,27 +14,13 @@
***************************************************************************/
#include "emu.h"
-#include "cpu/i386/i386.h"
#include "machine/pcshare.h"
-#include "machine/pckeybrd.h"
-#include "machine/mc146818.h"
-#include "machine/idectrl.h"
-
+#include "cpu/i86/i286.h"
/******************
DMA8237 Controller
******************/
-READ8_MEMBER(pcat_base_state::at_dma8237_2_r)
-{
- return m_dma8237_2->read(space, offset / 2);
-}
-
-WRITE8_MEMBER(pcat_base_state::at_dma8237_2_w)
-{
- m_dma8237_2->write(space, offset / 2, data);
-}
-
WRITE_LINE_MEMBER( pcat_base_state::pc_dma_hrq_changed )
{
m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE);
@@ -138,7 +124,7 @@ WRITE_LINE_MEMBER( pcat_base_state::at_pit8254_out2_changed )
}
- ADDRESS_MAP_START( pcat32_io_common, AS_IO, 32, pcat_base_state )
+ADDRESS_MAP_START( pcat32_io_common, AS_IO, 32, pcat_base_state )
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", am9517a_device, read, write, 0xffffffff)
AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_1", pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8254_device, read, write, 0xffffffff)
@@ -146,7 +132,7 @@ WRITE_LINE_MEMBER( pcat_base_state::at_pit8254_out2_changed )
AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff)
AM_RANGE(0x0080, 0x009f) AM_READWRITE8(dma_page_select_r,dma_page_select_w, 0xffffffff)//TODO
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("pic8259_2", pic8259_device, read, write, 0xffffffff)
- AM_RANGE(0x00c0, 0x00df) AM_READWRITE8(at_dma8237_2_r, at_dma8237_2_w, 0xffffffff)
+ AM_RANGE(0x00c0, 0x00df) AM_DEVREADWRITE8("dma8237_2", am9517a_device, read, write, 0x00ff00ff)
ADDRESS_MAP_END
MACHINE_CONFIG_FRAGMENT(pcat_common)
diff --git a/src/mame/machine/pcshare.h b/src/mame/machine/pcshare.h
index 81d423ad1d0..b413d2bc42c 100644
--- a/src/mame/machine/pcshare.h
+++ b/src/mame/machine/pcshare.h
@@ -31,8 +31,6 @@ public:
optional_device<mc146818_device> m_mc146818;
required_device<kbdc8042_device> m_kbdc;
- DECLARE_READ8_MEMBER(at_dma8237_2_r);
- DECLARE_WRITE8_MEMBER(at_dma8237_2_w);
DECLARE_WRITE_LINE_MEMBER(pc_dma_hrq_changed);
DECLARE_READ8_MEMBER(pc_dma_read_byte);
DECLARE_WRITE8_MEMBER(pc_dma_write_byte);
diff --git a/src/mame/machine/rx01.cpp b/src/mame/machine/rx01.cpp
index b4cb85869ea..75b4edb0eab 100644
--- a/src/mame/machine/rx01.cpp
+++ b/src/mame/machine/rx01.cpp
@@ -163,7 +163,7 @@ void rx01_device::command_write(UINT16 data)
break;
}
}
- machine().scheduler().timer_set(attotime::from_msec(100), FUNC(command_execution_callback), 0, this);
+ machine().scheduler().timer_set(attotime::from_msec(100), timer_expired_delegate(FUNC(rx01_device::service_command),this));
}
UINT16 rx01_device::status_read()
@@ -177,7 +177,7 @@ void rx01_device::data_write(UINT16 data)
// printf("data_write %04x\n",data);
// data can be written only if TR is set
if (BIT(m_rxcs,7)) m_rxdb = data;
- machine().scheduler().timer_set(attotime::from_msec(100), FUNC(command_execution_callback), 0, this);
+ machine().scheduler().timer_set(attotime::from_msec(100), timer_expired_delegate(FUNC(rx01_device::service_command),this));
}
UINT16 rx01_device::data_read()
@@ -187,7 +187,7 @@ UINT16 rx01_device::data_read()
return m_rxdb;
}
-void rx01_device::service_command()
+TIMER_CALLBACK_MEMBER(rx01_device::service_command)
{
printf("service_command %d\n",m_state);
m_rxes |= m_image[m_unit]->floppy_drive_get_flag_state(FLOPPY_DRIVE_READY) << 7;
diff --git a/src/mame/machine/rx01.h b/src/mame/machine/rx01.h
index ad55511be41..386a7d983fd 100644
--- a/src/mame/machine/rx01.h
+++ b/src/mame/machine/rx01.h
@@ -48,8 +48,7 @@ protected:
void data_write(UINT16 data);
UINT16 data_read();
- void service_command();
- static TIMER_CALLBACK( command_execution_callback ) { reinterpret_cast<rx01_device *>(ptr)->service_command(); }
+ TIMER_CALLBACK_MEMBER(service_command);
void position_head();
void read_sector();
diff --git a/src/mame/machine/svi318.cpp b/src/mame/machine/svi318.cpp
deleted file mode 100644
index 098e5576b4d..00000000000
--- a/src/mame/machine/svi318.cpp
+++ /dev/null
@@ -1,767 +0,0 @@
-// license:???
-// copyright-holders:Sean Young,Tomas Karlsson
-/*
-** Spectravideo SVI-318 and SVI-328
-**
-** Sean Young, Tomas Karlsson
-**
-*/
-
-#include "emu.h"
-#include "video/mc6845.h"
-#include "includes/svi318.h"
-#include "cpu/z80/z80.h"
-#include "video/tms9928a.h"
-#include "imagedev/flopdrv.h"
-#include "formats/svi_cas.h"
-#include "sound/ay8910.h"
-
-enum {
- SVI_INTERNAL = 0,
- SVI_CART = 1,
- SVI_EXPRAM2 = 2,
- SVI_EXPRAM3 = 3
-};
-
-
-/* Serial ports */
-
-WRITE_LINE_MEMBER(svi318_state::ins8250_interrupt)
-{
- if (m_bank_low != SVI_CART)
- m_maincpu->set_input_line(0, (state ? HOLD_LINE : CLEAR_LINE));
-}
-
-#if 0
-static INS8250_REFRESH_CONNECT( svi318_com_refresh_connected )
-{
- /* Motorola MC14412 modem */
- ins8250_handshake_in(device, UART8250_HANDSHAKE_IN_CTS|UART8250_HANDSHAKE_IN_DSR|UART8250_INPUTS_RING_INDICATOR|UART8250_INPUTS_DATA_CARRIER_DETECT);
-}
-#endif
-
-/* Cartridge */
-
-bool svi318_state::cart_verify(UINT8 *ROM)
-{
- if (ROM[0] != 0xf3 || ROM[1] != 0x31)
- return false;
-
- return true;
-}
-
-DEVICE_IMAGE_LOAD_MEMBER( svi318_state, svi318_cart )
-{
- UINT32 size = m_cart->common_get_size("rom");
-
- if (size > 0x8000)
- {
- logerror("Cart image %s larger than expected. Please report the issue.\n", image.filename());
- return IMAGE_INIT_FAIL;
- }
-
- m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
- m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
-
- if (image.software_entry() == nullptr && !cart_verify(m_cart->get_rom_base()))
- return IMAGE_INIT_FAIL;
-
- return IMAGE_INIT_PASS;
-}
-
-
-
-/* PPI */
-
-/*
- PPI Port A Input (address 98H)
- Bit Name Description
- 1 TA Joystick 1, /SENSE
- 2 TB Joystick 1, EOC
- 3 TC Joystick 2, /SENSE
- 4 TD Joystick 2, EOC
- 5 TRIGGER1 Joystick 1, Trigger
- 6 TRIGGER2 Joystick 2, Trigger
- 7 /READY Cassette, Ready
- 8 CASR Cassette, Read data
-*/
-
-READ8_MEMBER(svi318_state::ppi_port_a_r)
-{
- int data = 0x0f;
-
- if (m_cassette->input() > 0.0038)
- data |= 0x80;
- if (!m_cassette->exists())
- data |= 0x40;
-
- data |= m_buttons->read() & 0x30;
-
- return data;
-}
-
-/*
- PPI Port B Input (address 99H)
- Bit Name Description
- 1 IN0 Keyboard, Column status of selected line
- 2 IN1 Keyboard, Column status of selected line
- 3 IN2 Keyboard, Column status of selected line
- 4 IN3 Keyboard, Column status of selected line
- 5 IN4 Keyboard, Column status of selected line
- 6 IN5 Keyboard, Column status of selected line
- 7 IN6 Keyboard, Column status of selected line
- 8 IN7 Keyboard, Column status of selected line
-*/
-
-READ8_MEMBER(svi318_state::ppi_port_b_r)
-{
- if (m_keyboard_row <= 10)
- return m_line[m_keyboard_row]->read();
- else
- return 0xff;
-}
-
-/*
- PPI Port C Output (address 97H)
- Bit Name Description
- 1 KB0 Keyboard, Line select 0
- 2 KB1 Keyboard, Line select 1
- 3 KB2 Keyboard, Line select 2
- 4 KB3 Keyboard, Line select 3
- 5 CASON Cassette, Motor relay control (0=on, 1=off)
- 6 CASW Cassette, Write data
- 7 CASAUD Cassette, Audio out (pulse)
- 8 SOUND Keyboard, Click sound bit (pulse)
-*/
-
-WRITE8_MEMBER(svi318_state::ppi_port_c_w)
-{
- int val;
-
- /* key click */
- val = (data & 0x80) ? 0x3e : 0;
- val += (data & 0x40) ? 0x3e : 0;
- m_dac->write_signed8(val);
-
- /* cassette motor on/off */
- if (m_cassette->exists())
- {
- m_cassette->change_state(
- (data & 0x10) ? CASSETTE_MOTOR_DISABLED : CASSETTE_MOTOR_ENABLED,
- CASSETTE_MOTOR_DISABLED);
- }
-
- /* cassette signal write */
- m_cassette->output((data & 0x20) ? -1.0 : +1.0);
-
- m_keyboard_row = data & 0x0f;
-}
-
-WRITE8_MEMBER(svi318_state::ppi_w)
-{
- m_ppi->write(space, offset + 2, data);
-}
-
-
-/* PSG */
-
-/*
- PSG Port A Input
- Bit Name Description
- 1 FWD1 Joystick 1, Forward
- 2 BACK1 Joystick 1, Back
- 3 LEFT1 Joystick 1, Left
- 4 RIGHT1 Joystick 1, Right
- 5 FWD2 Joystick 2, Forward
- 6 BACK2 Joystick 2, Back
- 7 LEFT2 Joystick 2, Left
- 8 RIGHT2 Joystick 2, Right
-*/
-
-READ8_MEMBER(svi318_state::psg_port_a_r)
-{
- return m_joysticks->read();
-}
-
-/*
- PSG Port B Output
- Bit Name Description
- 1 /CART Memory bank 11, ROM 0000-7FFF (Cartridge /CCS1, /CCS2)
- 2 /BK21 Memory bank 21, RAM 0000-7FFF
- 3 /BK22 Memory bank 22, RAM 8000-FFFF
- 4 /BK31 Memory bank 31, RAM 0000-7FFF
- 5 /BK32 Memory bank 32, RAM 8000-7FFF
- 6 CAPS Caps-Lock diod
- 7 /ROMEN0 Memory bank 12, ROM 8000-BFFF* (Cartridge /CCS3)
- 8 /ROMEN1 Memory bank 12, ROM C000-FFFF* (Cartridge /CCS4)
-
- * The /CART signal must be active for any effect and all banks
- with RAM are disabled.
-*/
-
-WRITE8_MEMBER(svi318_state::psg_port_b_w)
-{
- if ((m_bank_switch ^ data) & 0x20)
- output().set_led_value(0, !(data & 0x20));
-
- m_bank_switch = data;
- set_banks();
-}
-
-/* Disk drives */
-
-WRITE_LINE_MEMBER(svi318_state::fdc_intrq_w)
-{
- m_irq = state;
-}
-
-WRITE_LINE_MEMBER(svi318_state::fdc_drq_w)
-{
- m_drq = state;
-}
-
-WRITE8_MEMBER(svi318_state::fdc_drive_motor_w)
-{
- m_floppy = nullptr;
-
- if (BIT(data, 0)) m_floppy = m_floppy0->get_device();
- if (BIT(data, 1)) m_floppy = m_floppy1->get_device();
-
- m_fd1793->set_floppy(m_floppy);
-
- if (m_floppy0->get_device())
- m_floppy0->get_device()->mon_w(!BIT(data, 2));
-
- if (m_floppy1->get_device())
- m_floppy1->get_device()->mon_w(!BIT(data, 3));
-}
-
-WRITE8_MEMBER(svi318_state::fdc_density_side_w)
-{
- m_fd1793->dden_w(BIT(data, 0));
-
- if (m_floppy)
- m_floppy->ss_w(BIT(data, 1));
-}
-
-READ8_MEMBER(svi318_state::fdc_irqdrq_r)
-{
- UINT8 result = 0;
-
- result |= m_drq << 6;
- result |= m_irq << 7;
-
- return result;
-}
-
-MC6845_UPDATE_ROW( svi318_state::crtc_update_row )
-{
- const rgb_t *palette = m_palette->palette()->entry_list_raw();
-
- for (int i = 0; i < x_count; i++)
- {
- UINT8 data = m_svi806_gfx[m_svi806_ram[(ma + i) & 0x7ff] * 16 + ra];
-
- if (i == cursor_x)
- {
- data = 0xff;
- }
-
- for (int j = 0; j < 8; j++)
- {
- bitmap.pix32(y, i * 8 + j) = palette[TMS9928A_PALETTE_SIZE + BIT(data, 7)];
- data = data << 1;
- }
- }
-}
-
-
-WRITE8_MEMBER(svi318_state::svi806_ram_enable_w)
-{
- m_svi806_ram_enabled = (data & 0x01);
- set_banks();
-}
-
-
-/* Init functions */
-
-static const UINT8 cc_op[0x100] = {
- 4+1,10+1, 7+1, 6+1, 4+1, 4+1, 7+1, 4+1, 4+1,11+1, 7+1, 6+1, 4+1, 4+1, 7+1, 4+1,
- 8+1,10+1, 7+1, 6+1, 4+1, 4+1, 7+1, 4+1,12+1,11+1, 7+1, 6+1, 4+1, 4+1, 7+1, 4+1,
- 7+1,10+1,16+1, 6+1, 4+1, 4+1, 7+1, 4+1, 7+1,11+1,16+1, 6+1, 4+1, 4+1, 7+1, 4+1,
- 7+1,10+1,13+1, 6+1,11+1,11+1,10+1, 4+1, 7+1,11+1,13+1, 6+1, 4+1, 4+1, 7+1, 4+1,
- 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1,
- 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1,
- 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1,
- 7+1, 7+1, 7+1, 7+1, 7+1, 7+1, 4+1, 7+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1,
- 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1,
- 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1,
- 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1,
- 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 4+1, 7+1, 4+1,
- 5+1,10+1,10+1,10+1,10+1,11+1, 7+1,11+1, 5+1,10+1,10+1, 0+1,10+1,17+1, 7+1,11+1,
- 5+1,10+1,10+1,11+1,10+1,11+1, 7+1,11+1, 5+1, 4+1,10+1,11+1,10+1, 0+1, 7+1,11+1,
- 5+1,10+1,10+1,19+1,10+1,11+1, 7+1,11+1, 5+1, 4+1,10+1, 4+1,10+1, 0+1, 7+1,11+1,
- 5+1,10+1,10+1, 4+1,10+1,11+1, 7+1,11+1, 5+1, 6+1,10+1, 4+1,10+1, 0+1, 7+1,11+1
-};
-
-static const UINT8 cc_cb[0x100] = {
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,12+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,12+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,12+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,12+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,12+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,12+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,12+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,12+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,15+2, 8+2
-};
-
-static const UINT8 cc_ed[0x100] = {
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,
-12+2,12+2,15+2,20+2, 8+2,14+2, 8+2, 9+2,12+2,12+2,15+2,20+2, 8+2,14+2, 8+2, 9+2,
-12+2,12+2,15+2,20+2, 8+2,14+2, 8+2, 9+2,12+2,12+2,15+2,20+2, 8+2,14+2, 8+2, 9+2,
-12+2,12+2,15+2,20+2, 8+2,14+2, 8+2,18+2,12+2,12+2,15+2,20+2, 8+2,14+2, 8+2,18+2,
-12+2,12+2,15+2,20+2, 8+2,14+2, 8+2, 8+2,12+2,12+2,15+2,20+2, 8+2,14+2, 8+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,
-16+2,16+2,16+2,16+2, 8+2, 8+2, 8+2, 8+2,16+2,16+2,16+2,16+2, 8+2, 8+2, 8+2, 8+2,
-16+2,16+2,16+2,16+2, 8+2, 8+2, 8+2, 8+2,16+2,16+2,16+2,16+2, 8+2, 8+2, 8+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2,
- 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2, 8+2
-};
-
-static const UINT8 cc_xy[0x100] = {
- 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2,15+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2,
- 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2,15+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2,
- 4+2,14+2,20+2,10+2, 9+2, 9+2, 9+2, 4+2, 4+2,15+2,20+2,10+2, 9+2, 9+2, 9+2, 4+2,
- 4+2, 4+2, 4+2, 4+2,23+2,23+2,19+2, 4+2, 4+2,15+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2,
- 4+2, 4+2, 4+2, 4+2, 9+2, 9+2,19+2, 4+2, 4+2, 4+2, 4+2, 4+2, 9+2, 9+2,19+2, 4+2,
- 4+2, 4+2, 4+2, 4+2, 9+2, 9+2,19+2, 4+2, 4+2, 4+2, 4+2, 4+2, 9+2, 9+2,19+2, 4+2,
- 9+2, 9+2, 9+2, 9+2, 9+2, 9+2,19+2, 9+2, 9+2, 9+2, 9+2, 9+2, 9+2, 9+2,19+2, 9+2,
-19+2,19+2,19+2,19+2,19+2,19+2, 4+2,19+2, 4+2, 4+2, 4+2, 4+2, 9+2, 9+2,19+2, 4+2,
- 4+2, 4+2, 4+2, 4+2, 9+2, 9+2,19+2, 4+2, 4+2, 4+2, 4+2, 4+2, 9+2, 9+2,19+2, 4+2,
- 4+2, 4+2, 4+2, 4+2, 9+2, 9+2,19+2, 4+2, 4+2, 4+2, 4+2, 4+2, 9+2, 9+2,19+2, 4+2,
- 4+2, 4+2, 4+2, 4+2, 9+2, 9+2,19+2, 4+2, 4+2, 4+2, 4+2, 4+2, 9+2, 9+2,19+2, 4+2,
- 4+2, 4+2, 4+2, 4+2, 9+2, 9+2,19+2, 4+2, 4+2, 4+2, 4+2, 4+2, 9+2, 9+2,19+2, 4+2,
- 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 0+2, 4+2, 4+2, 4+2, 4+2,
- 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2,
- 4+2,14+2, 4+2,23+2, 4+2,15+2, 4+2, 4+2, 4+2, 8+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2,
- 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2,10+2, 4+2, 4+2, 4+2, 4+2, 4+2, 4+2
-};
-
-static const UINT8 cc_xycb[0x100] = {
-23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,
-23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,
-23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,
-23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,
-20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,
-20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,
-20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,
-20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,20+2,
-23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,
-23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,
-23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,
-23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,
-23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,
-23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,
-23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,
-23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2,23+2
-};
-
-/* extra cycles if jr/jp/call taken and 'interrupt latency' on rst 0-7 */
-static const UINT8 cc_ex[0x100] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* DJNZ */
- 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, /* JR NZ/JR Z */
- 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, /* JR NC/JR C */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0+1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 5, 5, 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, /* LDIR/CPIR/INIR/OTIR LDDR/CPDR/INDR/OTDR */
- 6, 0, 0, 0, 7, 0, 0, 2, 6, 0, 0, 0, 7, 0, 0, 2,
- 6, 0, 0, 0, 7, 0, 0, 2, 6, 0, 0, 0, 7, 0, 0, 2,
- 6, 0, 0, 0, 7, 0, 0, 2, 6, 0, 0, 0, 7, 0, 0, 2,
- 6, 0, 0, 0, 7, 0, 0, 2, 6, 0, 0, 0, 7, 0, 0, 2+1
-};
-
-
-DRIVER_INIT_MEMBER(svi318_state, svi318)
-{
- /* z80 stuff */
- m_maincpu->z80_set_cycle_tables(cc_op, cc_cb, cc_ed, cc_xy, cc_xycb, cc_ex);
-
- m_maincpu->set_input_line_vector(0, 0xff);
-
- /* memory */
- m_empty_bank = std::make_unique<UINT8[]>(0x8000);
- memset(m_empty_bank.get(), 0xff, 0x8000);
-
- m_bank_low_ptr = m_empty_bank.get();
- m_bank_high1_ptr = m_empty_bank.get();
- m_bank_high2_ptr = m_empty_bank.get();
-}
-
-DRIVER_INIT_MEMBER(svi318_state, svi328_806)
-{
- DRIVER_INIT_CALL(svi318);
- m_svi806_present = 1;
-}
-
-void svi318_state::machine_start()
-{
- std::string region_tag;
- m_cart_rom = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
- m_bios_rom = memregion("maincpu");
-
- // 80 column card start
- if (m_svi806_present)
- {
- // 2K RAM, but allocating 4KB to make banking easier
- // The upper 2KB will be set to FFs and will never be written to
- m_svi806_ram.resize(0x1000);
- save_item(NAME(m_svi806_ram));
- memset(&m_svi806_ram[0], 0x00, 0x800);
- memset(&m_svi806_ram[0x800], 0xff, 0x800);
-
- m_svi806_gfx = memregion("gfx1")->base();
-
- // Set SVI-806 80 column card palette
- m_palette->set_pen_color(TMS9928A_PALETTE_SIZE, 0, 0, 0); /* Monochrome black */
- m_palette->set_pen_color(TMS9928A_PALETTE_SIZE+1, 0, 224, 0); /* Monochrome green */
- }
-
- // register for savestates
- save_item(NAME(m_drq));
- save_item(NAME(m_irq));
-
- save_item(NAME(m_bank_switch));
- save_item(NAME(m_bank_low));
- save_item(NAME(m_bank_high));
- save_item(NAME(m_bank_low_read_only));
- save_item(NAME(m_bank_high1_read_only));
- save_item(NAME(m_bank_high2_read_only));
- save_item(NAME(m_keyboard_row));
- save_item(NAME(m_centronics_busy));
-
- save_item(NAME(m_svi806_present));
- save_item(NAME(m_svi806_ram_enabled));
-
- machine().save().register_postload(save_prepost_delegate(FUNC(svi318_state::postload), this));
-}
-
-void svi318_state::machine_reset()
-{
- m_keyboard_row = 0;
- m_centronics_busy = 0;
- m_svi806_present = 0;
- m_svi806_ram_enabled = 0;
- m_drq = 0;
- m_irq = 0;
-
- m_bank_low = 0;
- m_bank_high = 0;
- m_bank_low_read_only = 0;
- m_bank_high1_read_only = 0;
- m_bank_high2_read_only = 0;
-
- m_bank_switch = 0xff;
- set_banks();
-}
-
-/* Memory */
-
-WRITE8_MEMBER(svi318_state::writemem1)
-{
- if (m_bank_low_read_only)
- return;
-
- m_bank_low_ptr[offset] = data;
-}
-
-WRITE8_MEMBER(svi318_state::writemem2)
-{
- if (m_bank_high1_read_only)
- return;
-
- m_bank_high1_ptr[offset] = data;
-}
-
-WRITE8_MEMBER(svi318_state::writemem3)
-{
- if (m_bank_high2_read_only)
- return;
-
- m_bank_high2_ptr[offset] = data;
-}
-
-WRITE8_MEMBER(svi318_state::writemem4)
-{
- if (m_svi806_ram_enabled)
- {
- if (offset < 0x800)
- m_svi806_ram[offset] = data;
- }
- else
- {
- if (m_bank_high2_read_only)
- return;
-
- m_bank_high2_ptr[0x3000 + offset] = data;
- }
-}
-
-void svi318_state::set_banks()
-{
- const UINT8 v = m_bank_switch;
- UINT8 *ram = m_ram->pointer();
- UINT32 ram_size = m_ram->size();
-
- m_bank_low = (v & 1) ? ((v & 2) ? ((v & 8) ? SVI_INTERNAL : SVI_EXPRAM3) : SVI_EXPRAM2) : SVI_CART;
- m_bank_high = (v & 4) ? ((v & 16) ? SVI_INTERNAL : SVI_EXPRAM3) : SVI_EXPRAM2;
-
- m_bank_low_ptr = m_empty_bank.get();
- m_bank_low_read_only = 1;
-
- switch (m_bank_low)
- {
- case SVI_INTERNAL:
- m_bank_low_ptr = m_bios_rom->base();
- break;
- case SVI_CART:
- if (m_cart_rom)
- m_bank_low_ptr = m_cart_rom->base();
- break;
- case SVI_EXPRAM2:
- if (ram_size >= 64 * 1024)
- {
- m_bank_low_ptr = ram + ram_size - 64 * 1024;
- m_bank_low_read_only = 0;
- }
- break;
- case SVI_EXPRAM3:
- if (ram_size > 128 * 1024)
- {
- m_bank_low_ptr = ram + ram_size - 128 * 1024;
- m_bank_low_read_only = 0;
- }
- break;
- }
-
- m_bank_high1_ptr = m_empty_bank.get();
- m_bank_high1_read_only = 1;
- m_bank_high2_ptr = m_empty_bank.get();
- m_bank_high2_read_only = 1;
-
- switch (m_bank_high)
- {
- case SVI_INTERNAL:
- if (ram_size == 16 * 1024)
- {
- m_bank_high2_ptr = ram;
- m_bank_high2_read_only = 0;
- }
- else
- {
- m_bank_high1_ptr = ram;
- m_bank_high1_read_only = 0;
- m_bank_high2_ptr = ram + 0x4000;
- m_bank_high2_read_only = 0;
- }
- break;
- case SVI_EXPRAM2:
- if (ram_size > 64 * 1024)
- {
- m_bank_high1_ptr = ram + ram_size - 64 * 1024 + 32 * 1024;
- m_bank_high1_read_only = 0;
- m_bank_high2_ptr = ram + ram_size - 64 * 1024 + 48 * 1024;
- m_bank_high2_read_only = 0;
- }
- break;
- case SVI_EXPRAM3:
- if (ram_size > 128 * 1024)
- {
- m_bank_high1_ptr = ram + ram_size - 128 * 1024 + 32 * 1024;
- m_bank_high1_read_only = 0;
- m_bank_high2_ptr = ram + ram_size - 128 * 1024 + 48 * 1024;
- m_bank_high2_read_only = 0;
- }
- break;
- }
-
- /* Check for special CART based banking */
- if (m_bank_low == SVI_CART && (v & 0xc0 ) != 0xc0)
- {
- m_bank_high1_ptr = m_empty_bank.get();
- m_bank_high1_read_only = 1;
- m_bank_high2_ptr = m_empty_bank.get();
- m_bank_high2_read_only = 1;
-
- if (m_cart_rom && !(v & 0x80))
- m_bank_high2_ptr = m_cart_rom->base() + 0x4000;
- if (m_cart_rom && !(v & 0x40))
- m_bank_high1_ptr = m_cart_rom->base();
- }
-
- m_bank1->set_base(m_bank_low_ptr);
- m_bank2->set_base(m_bank_high1_ptr);
- m_bank3->set_base(m_bank_high2_ptr);
-
- /* SVI-806 80 column card specific banking */
- if (m_svi806_present)
- {
- if (m_svi806_ram_enabled)
- m_bank4->set_base(&m_svi806_ram[0]);
- else
- m_bank4->set_base(m_bank_high2_ptr + 0x3000);
- }
-}
-
-void svi318_state::postload()
-{
- set_banks();
-}
-
-
-/* External I/O */
-
-WRITE_LINE_MEMBER(svi318_state::write_centronics_busy)
-{
- m_centronics_busy = state;
-}
-
-READ8_MEMBER(svi318_state::io_ext_r)
-{
- if (m_bank_low == SVI_CART)
- return 0xff;
-
- switch (offset)
- {
- case 0x12:
- return 0xfe | m_centronics_busy;
-
- case 0x20:
- case 0x21:
- case 0x22:
- case 0x23:
- case 0x24:
- case 0x25:
- case 0x26:
- case 0x27:
- return m_ins8250_0->ins8250_r(space, offset & 7);
-
- case 0x28:
- case 0x29:
- case 0x2a:
- case 0x2b:
- case 0x2c:
- case 0x2d:
- case 0x2e:
- case 0x2f:
- return m_ins8250_1->ins8250_r(space, offset & 7);
-
- case 0x30:
- return m_fd1793->status_r(space, 0);
-
- case 0x31:
- return m_fd1793->track_r(space, 0);
-
- case 0x32:
- return m_fd1793->sector_r(space, 0);
-
- case 0x33:
- return m_fd1793->data_r(space, 0);
-
- case 0x34:
- return fdc_irqdrq_r(space, 0);
-
- case 0x51:
- return m_crtc->register_r(space, offset);
- }
-
- return 0xff;
-}
-
-WRITE8_MEMBER(svi318_state::io_ext_w)
-{
- if (m_bank_low == SVI_CART)
- return;
-
- switch (offset)
- {
- case 0x10:
- m_cent_data_out->write(space, 0, data);
- break;
-
- case 0x11:
- m_centronics->write_strobe(BIT(data, 0));
- break;
-
- case 0x20:
- case 0x21:
- case 0x22:
- case 0x23:
- case 0x24:
- case 0x25:
- case 0x26:
- case 0x27:
- m_ins8250_0->ins8250_w(space, offset & 7, data);
- break;
-
- case 0x28:
- case 0x29:
- case 0x2A:
- case 0x2B:
- case 0x2C:
- case 0x2D:
- case 0x2E:
- case 0x2F:
- m_ins8250_1->ins8250_w(space, offset & 7, data);
- break;
-
- case 0x30:
- m_fd1793->cmd_w(space, 0, data);
- break;
- case 0x31:
- m_fd1793->track_w(space, 0, data);
- break;
- case 0x32:
- m_fd1793->sector_w(space, 0, data);
- break;
- case 0x33:
- m_fd1793->data_w(space, 0, data);
- break;
- case 0x34:
- fdc_drive_motor_w(space, 0, data);
- break;
- case 0x38:
- fdc_density_side_w(space, 0, data);
- break;
-
- case 0x50:
- m_crtc->address_w(space, offset, data);
- break;
- case 0x51:
- m_crtc->register_w(space, offset, data);
- break;
-
- case 0x58:
- svi806_ram_enable_w(space, 0, data);
- break;
- }
-}
diff --git a/src/mame/machine/xbox.cpp b/src/mame/machine/xbox.cpp
index b006c9d83b5..2f8de78b4b4 100644
--- a/src/mame/machine/xbox.cpp
+++ b/src/mame/machine/xbox.cpp
@@ -185,7 +185,7 @@ static void dump_timer_command(running_machine &machine, int ref, int params, co
debug_console_printf(machine, "Header.Inserted %d byte\n", space.read_byte(address + 3));
debug_console_printf(machine, "Header.SignalState %08X dword\n", space.read_dword_unaligned(address + 4));
debug_console_printf(machine, "Header.WaitListEntry {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 8), space.read_dword_unaligned(address + 12));
- debug_console_printf(machine, "DueTime %" I64FMT "x qword\n", (INT64)space.read_qword_unaligned(address + 16));
+ debug_console_printf(machine, "%s", string_format("DueTime %I64x qword\n", (INT64)space.read_qword_unaligned(address + 16)).c_str());
debug_console_printf(machine, "TimerListEntry {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 24), space.read_dword_unaligned(address + 28));
debug_console_printf(machine, "Dpc %08X dword\n", space.read_dword_unaligned(address + 32));
debug_console_printf(machine, "Period %d dword\n", space.read_dword_unaligned(address + 36));
@@ -846,13 +846,19 @@ ohci_function_device::ohci_function_device(running_machine &machine)
descriptors_pos = 0;
address = 0;
newaddress = 0;
- controldirection = 0;
- controltype = 0;
- controlrecipient = 0;
- configurationvalue = 0;
- remain = 0;
- position = nullptr;
+ for (int e = 0; e < 256;e++) {
+ endpoints[e].type = -1;
+ endpoints[e].controldirection = 0;
+ endpoints[e].controltype = 0;
+ endpoints[e].controlrecipient = 0;
+ endpoints[e].remain = 0;
+ endpoints[e].position = nullptr;
+ }
+ endpoints[0].type = ControlEndpoint;
settingaddress = false;
+ configurationvalue = 0;
+ latest_configuration = nullptr;
+ latest_alternate = nullptr;
add_device_descriptor(devdesc);
add_configuration_descriptor(condesc);
add_interface_descriptor(intdesc);
@@ -862,26 +868,175 @@ ohci_function_device::ohci_function_device(running_machine &machine)
void ohci_function_device::add_device_descriptor(USBStandardDeviceDescriptor &descriptor)
{
- memcpy(descriptors + descriptors_pos, &descriptor, sizeof(descriptor));
+ UINT8 *p = descriptors + descriptors_pos;
+
+ p[0] = descriptor.bLength;
+ p[1] = descriptor.bDescriptorType;
+ p[2] = descriptor.bcdUSB & 255;
+ p[3] = descriptor.bcdUSB >> 8;
+ p[4] = descriptor.bDeviceClass;
+ p[5] = descriptor.bDeviceSubClass;
+ p[6] = descriptor.bDeviceProtocol;
+ p[7] = descriptor.bMaxPacketSize0;
+ p[8] = descriptor.idVendor & 255;
+ p[9] = descriptor.idVendor >> 8;
+ p[10] = descriptor.idProduct & 255;
+ p[11] = descriptor.idProduct >> 8;
+ p[12] = descriptor.bcdDevice & 255;
+ p[13] = descriptor.bcdDevice >> 8;
+ p[14] = descriptor.iManufacturer;
+ p[15] = descriptor.iProduct;
+ p[16] = descriptor.iSerialNumber;
+ p[17] = descriptor.bNumConfigurations;
descriptors_pos += descriptor.bLength;
+ memcpy(&device_descriptor, &descriptor, sizeof(USBStandardDeviceDescriptor));
}
void ohci_function_device::add_configuration_descriptor(USBStandardConfigurationDescriptor &descriptor)
{
- memcpy(descriptors + descriptors_pos, &descriptor, sizeof(descriptor));
+ usb_device_configuration *c = new usb_device_configuration;
+ UINT8 *p = descriptors + descriptors_pos;
+
+ p[0] = descriptor.bLength;
+ p[1] = descriptor.bDescriptorType;
+ p[2] = descriptor.wTotalLength & 255;
+ p[3] = descriptor.wTotalLength >> 8;
+ p[4] = descriptor.bNumInterfaces;
+ p[5] = descriptor.bConfigurationValue;
+ p[6] = descriptor.iConfiguration;
+ p[7] = descriptor.bmAttributes;
+ p[8] = descriptor.MaxPower;
descriptors_pos += descriptor.bLength;
+ memcpy(&c->configuration_descriptor, &descriptor, sizeof(USBStandardConfigurationDescriptor));
+ configurations.push_front(*c);
+ latest_configuration = c;
+ latest_alternate = nullptr;
}
void ohci_function_device::add_interface_descriptor(USBStandardInterfaceDescriptor &descriptor)
{
- memcpy(descriptors + descriptors_pos, &descriptor, sizeof(descriptor));
+ usb_device_interface *ii;
+ usb_device_interface_alternate *aa;
+ UINT8 *p = descriptors + descriptors_pos;
+
+ if (latest_configuration == nullptr)
+ return;
+ p[0] = descriptor.bLength;
+ p[1] = descriptor.bDescriptorType;
+ p[2] = descriptor.bInterfaceNumber;
+ p[3] = descriptor.bAlternateSetting;
+ p[4] = descriptor.bNumEndpoints;
+ p[5] = descriptor.bInterfaceClass;
+ p[6] = descriptor.bInterfaceSubClass;
+ p[7] = descriptor.bInterfaceProtocol;
+ p[8] = descriptor.iInterface;
descriptors_pos += descriptor.bLength;
+ for (auto i = latest_configuration->interfaces.begin(); i != latest_configuration->interfaces.end(); ++i)
+ {
+ if (i->alternate_settings.front().interface_descriptor.bInterfaceNumber == descriptor.bInterfaceNumber)
+ {
+ aa = new usb_device_interface_alternate;
+ memcpy(&aa->interface_descriptor, &descriptor, sizeof(USBStandardInterfaceDescriptor));
+ i->alternate_settings.push_front(*aa);
+ latest_alternate = aa;
+ return;
+ }
+ }
+ ii = new usb_device_interface;
+ aa = new usb_device_interface_alternate;
+ memcpy(&aa->interface_descriptor, &descriptor, sizeof(USBStandardInterfaceDescriptor));
+ ii->selected_alternate = -1;
+ ii->alternate_settings.push_front(*aa);
+ latest_alternate = aa;
+ latest_configuration->interfaces.push_front(*ii);
}
void ohci_function_device::add_endpoint_descriptor(USBStandardEndpointDescriptor &descriptor)
{
- memcpy(descriptors + descriptors_pos, &descriptor, sizeof(descriptor));
+ UINT8 *p = descriptors + descriptors_pos;
+
+ if (latest_alternate == nullptr)
+ return;
+ p[0] = descriptor.bLength;
+ p[1] = descriptor.bDescriptorType;
+ p[2] = descriptor.bEndpointAddress;
+ p[3] = descriptor.bmAttributes;
+ p[4] = descriptor.wMaxPacketSize & 255;
+ p[5] = descriptor.wMaxPacketSize >> 8;
+ p[6] = descriptor.bInterval;
descriptors_pos += descriptor.bLength;
+ latest_alternate->endpoint_descriptors.push_front(descriptor);
+}
+
+void ohci_function_device::select_configuration(int index)
+{
+ configurationvalue = index;
+ for (auto c = configurations.begin(); c != configurations.end(); ++c)
+ {
+ if (c->configuration_descriptor.bConfigurationValue == index)
+ {
+ selected_configuration = &(*c);
+ for (auto i = c->interfaces.begin(); i != c->interfaces.end(); ++i)
+ {
+ i->selected_alternate = 0;
+ for (auto a = i->alternate_settings.begin(); a != i->alternate_settings.end(); ++a)
+ {
+ if (a->interface_descriptor.bAlternateSetting == 0)
+ {
+ for (auto e = a->endpoint_descriptors.begin(); e != a->endpoint_descriptors.end(); ++e)
+ {
+ endpoints[e->bEndpointAddress].type = e->bmAttributes & 3;
+ endpoints[e->bEndpointAddress].remain = 0;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+void ohci_function_device::select_alternate(int interfacei, int index)
+{
+ for (auto i = selected_configuration->interfaces.begin(); i != selected_configuration->interfaces.end(); ++i)
+ {
+ for (auto a = i->alternate_settings.begin(); a != i->alternate_settings.end(); ++a)
+ {
+ if ((a->interface_descriptor.bInterfaceNumber == interfacei) && (a->interface_descriptor.bAlternateSetting == i->selected_alternate))
+ {
+ for (auto e = a->endpoint_descriptors.begin(); e != a->endpoint_descriptors.end(); ++e)
+ {
+ endpoints[e->bEndpointAddress].type = -1;
+ }
+ }
+ }
+ for (auto a = i->alternate_settings.begin(); a != i->alternate_settings.end(); ++a)
+ {
+ if ((a->interface_descriptor.bInterfaceNumber == interfacei) && (a->interface_descriptor.bAlternateSetting == index))
+ {
+ i->selected_alternate = index;
+ for (auto e = a->endpoint_descriptors.begin(); e != a->endpoint_descriptors.end(); ++e)
+ {
+ endpoints[e->bEndpointAddress].type = e->bmAttributes & 3;
+ endpoints[e->bEndpointAddress].remain = 0;
+ }
+ }
+ }
+ }
+}
+
+int ohci_function_device::find_alternate(int interfacei)
+{
+ for (auto i = selected_configuration->interfaces.begin(); i != selected_configuration->interfaces.end(); ++i)
+ {
+ for (auto a = i->alternate_settings.begin(); a != i->alternate_settings.end(); ++a)
+ {
+ if (a->interface_descriptor.bInterfaceNumber == interfacei)
+ {
+ return i->selected_alternate;
+ }
+ }
+ }
+ return 0;
}
void ohci_function_device::execute_reset()
@@ -894,25 +1049,30 @@ int ohci_function_device::execute_transfer(int address, int endpoint, int pid, U
{
int descriptortype;// descriptorindex;
- if (endpoint == 0) {
- if (pid == SetupPid) {
- USBSetupPacket *p=(USBSetupPacket *)buffer;
- // define direction 0:host->device 1:device->host
- controldirection = (p->bmRequestType & 128) >> 7;
- // case ==1, IN data stage and OUT status stage
- // case ==0, OUT data stage and IN status stage
- // data stage is optional, IN status stage
- controltype = (p->bmRequestType & 0x60) >> 5;
- controlrecipient = p->bmRequestType & 0x1f;
- position = nullptr;
+ if (pid == SetupPid) {
+ USBSetupPacket *p=(USBSetupPacket *)buffer;
+ // define direction 0:host->device 1:device->host
+ // case == 1, IN data stage and OUT status stage
+ // case == 0, OUT data stage and IN status stage
+ // data stage is optional, IN status stage
+ endpoints[endpoint].controldirection = (p->bmRequestType & 128) >> 7;
+ endpoints[endpoint].controltype = (p->bmRequestType & 0x60) >> 5;
+ endpoints[endpoint].controlrecipient = p->bmRequestType & 0x1f;
+ if (endpoint == 0) {
+ endpoints[endpoint].position = nullptr;
// number of byte to transfer in data stage (0 no data stage)
- remain = p->wLength;
+ endpoints[endpoint].remain = p->wLength;
// if standard device request
- if ((controltype == StandardType) && (controlrecipient == DeviceRecipient)) {
+ if ((endpoints[endpoint].controltype == StandardType) && (endpoints[endpoint].controlrecipient == DeviceRecipient)) {
switch (p->bRequest) {
case GET_STATUS:
+ return handle_get_status_request(endpoint, p);
+ break;
case CLEAR_FEATURE:
+ return handle_clear_feature_request(endpoint, p);
+ break;
case SET_FEATURE:
+ return handle_set_feature_request(endpoint, p);
break;
case SET_ADDRESS:
newaddress = p->wValue;
@@ -922,52 +1082,74 @@ int ohci_function_device::execute_transfer(int address, int endpoint, int pid, U
descriptortype = p->wValue >> 8;
//descriptorindex = p->wValue & 255;
if (descriptortype == DEVICE) { // device descriptor
- position = descriptors;
- remain = descriptors[0];
+ endpoints[endpoint].position = descriptors;
+ endpoints[endpoint].remain = descriptors[0];
}
else if (descriptortype == CONFIGURATION) { // configuration descriptor
- position = descriptors + 18;
- remain = descriptors[18+2];
+ endpoints[endpoint].position = descriptors + 18;
+ endpoints[endpoint].remain = descriptors[18 + 2];
}
else if (descriptortype == INTERFACE) { // interface descriptor
- position = descriptors + 18 + 9;
- remain = descriptors[18 + 9];
+ endpoints[endpoint].position = descriptors + 18 + 9;
+ endpoints[endpoint].remain = descriptors[18 + 9];
}
else if (descriptortype == ENDPOINT) { // endpoint descriptor
- position = descriptors + 18 + 9 + 9;
- remain = descriptors[18 + 9 + 9];
+ endpoints[endpoint].position = descriptors + 18 + 9 + 9;
+ endpoints[endpoint].remain = descriptors[18 + 9 + 9];
}
else
- remain = 0;
- if (remain > p->wLength)
- remain = p->wLength;
+ endpoints[endpoint].remain = 0;
+ if (endpoints[endpoint].remain > p->wLength)
+ endpoints[endpoint].remain = p->wLength;
break;
case SET_CONFIGURATION:
if (p->wValue == 0)
state = AddressState;
else {
- configurationvalue = p->wValue;
+ select_configuration(p->wValue);
state = ConfiguredState;
}
break;
+ case SET_INTERFACE:
+ select_alternate(p->wIndex, p->wValue);
+ break;
case SET_DESCRIPTOR:
+ return handle_set_descriptor_request(endpoint, p);
+ break;
case GET_CONFIGURATION:
+ endpoints[endpoint].buffer[0] = (UINT8)configurationvalue;
+ endpoints[endpoint].position = endpoints[endpoint].buffer;
+ endpoints[endpoint].remain = 1;
+ if (p->wLength == 0)
+ endpoints[endpoint].remain = 0;
+ break;
case GET_INTERFACE:
- case SET_INTERFACE:
+ endpoints[endpoint].buffer[0] = (UINT8)find_alternate(p->wIndex);
+ endpoints[endpoint].position = endpoints[endpoint].buffer;
+ endpoints[endpoint].remain = 1;
+ if (p->wLength == 0)
+ endpoints[endpoint].remain = 0;
+ break;
case SYNCH_FRAME:
+ return handle_synch_frame_request(endpoint, p);
default:
+ return handle_nonstandard_request(endpoint, p);
break;
}
}
else
- return handle_nonstandard_request(p);
+ return handle_nonstandard_request(endpoint, p);
size = 0;
}
- else if (pid == InPid) {
+ else
+ return handle_nonstandard_request(endpoint, p);
+ }
+ else if (pid == InPid) {
+ if (endpoint == 0) {
// if no data has been transferred (except for the setup stage)
// and the lenght of this IN transaction is 0
// assume this is the status stage
- if ((size == 0) && (remain == 0)) {
+ if ((size == 0) && (endpoints[endpoint].remain == 0)) {
if (settingaddress == true)
{
// set of address is active at end of status stage
@@ -980,53 +1162,58 @@ int ohci_function_device::execute_transfer(int address, int endpoint, int pid, U
// case ==1, give data
// case ==0, nothing
// if device->host
- if (controldirection == 1) {
+ if (endpoints[endpoint].controldirection == DeviceToHost) {
// data stage
- if (size > remain)
- size = remain;
- if (position != nullptr)
- memcpy(buffer, position, size);
- position = position + size;
- remain = remain - size;
+ if (size > endpoints[endpoint].remain)
+ size = endpoints[endpoint].remain;
+ if (endpoints[endpoint].position != nullptr)
+ memcpy(buffer, endpoints[endpoint].position, size);
+ endpoints[endpoint].position = endpoints[endpoint].position + size;
+ endpoints[endpoint].remain = endpoints[endpoint].remain - size;
}
}
- else if (pid == OutPid) {
+ else
+ return -1;
+ }
+ else if (pid == OutPid) {
+ if (endpoint == 0) {
// case ==1, nothing
// case ==0, give data
// if host->device
- if (controldirection == 0) {
+ if (endpoints[endpoint].controldirection == HostToDevice) {
// data stage
- if (size > remain)
- size = remain;
- if (position != nullptr)
- memcpy(position, buffer, size);
- position = position + size;
- remain = remain - size;
+ if (size > endpoints[endpoint].remain)
+ size = endpoints[endpoint].remain;
+ if (endpoints[endpoint].position != nullptr)
+ memcpy(endpoints[endpoint].position, buffer, size);
+ endpoints[endpoint].position = endpoints[endpoint].position + size;
+ endpoints[endpoint].remain = endpoints[endpoint].remain - size;
}
}
+ else
+ return -1;
}
- else
- return -1;
return size;
}
-int ohci_function_device::handle_nonstandard_request(USBSetupPacket *setup)
+int ohci_function_device::handle_nonstandard_request(int endpoint, USBSetupPacket *setup)
{
// >=8 ==42 !=0 !=0 1,3 2<20 <=20
static UINT8 mytestdata[16] = { 0x10,0x42 ,0x32,0x43,1 ,0x65,0x18,0x20,0x98,0xa9,0xba,0xcb,0xdc,0xed,0xfe };
- if ((controltype == VendorType) && (controlrecipient == InterfaceRecipient))
+ if ((endpoints[endpoint].controltype == VendorType) && (endpoints[endpoint].controlrecipient == InterfaceRecipient))
{
if (setup->bRequest == GET_DESCRIPTOR)
{
if (setup->wValue == 0x4200)
{
- position = mytestdata;
- remain = 16;
+ endpoints[endpoint].position = mytestdata;
+ endpoints[endpoint].remain = 16;
+ return 0;
}
}
}
- return 0;
+ return -1;
}
void xbox_base_state::usb_ohci_interrupts()
@@ -1232,8 +1419,8 @@ WRITE32_MEMBER(xbox_base_state::audio_apu_w)
return;
}
if (offset == 0x2037c / 4) { // value related to sample rate
- INT16 v = (INT16)(data >> 16); // upper 16 bits as a signed 16 bit value
- float vv = ((float)v) / 4096.0f; // divide by 4096
+ INT16 v0 = (INT16)(data >> 16); // upper 16 bits as a signed 16 bit value
+ float vv = ((float)v0) / 4096.0f; // divide by 4096
float vvv = powf(2, vv); // two to the vv
int f = vvv*48000.0f; // sample rate
apust.voices_frequency[apust.voice_number] = f;
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 92d4cb3884f..2b8672f6d9a 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -10,7 +10,7 @@
******************************************************************************/
-//@source:1942.cpp
+@source:1942.cpp
1942 // 12/1984 (c) 1984
1942a // 12/1984 (c) 1984
1942abl // bootleg
@@ -19,7 +19,7 @@
1942p // prototype
1942w // 12/1984 (c) 1984 + Williams Electronics license (c) 1985
-//@source:1943.cpp
+@source:1943.cpp
1943 // 6/1987 (c) 1987 (Euro)
1943b // bootleg
1943bj // bootleg
@@ -29,11 +29,11 @@
1943u // 6/1987 (c) 1987 (US) Rev C
1943ua // 6/1987 (c) 1987 (US)
-//@source:1945kiii.cpp
+@source:1945kiii.cpp
1945kiii // (c) 2000 Oriental
flagrall // ?
-//@source:20pacgal.cpp
+@source:20pacgal.cpp
20pacgal // (c) 2000 Ver 1.08
20pacgalr0 // (c) 2000 Ver 1.00
20pacgalr1 // (c) 2000 Ver 1.01
@@ -43,16 +43,16 @@ flagrall // ?
25pacman // (c) 2006 Ver 3.0
25pacmano // (c) 2005 Ver 2.0 - Same hardware as 20pacgal
-//@source:24cdjuke.cpp
+@source:24cdjuke.cpp
24cdjuke // (c) 1988 Midcoin
-//@source:2mindril.cpp
+@source:2mindril.cpp
2mindril // (c) 1993 Taito
-//@source:30test.cpp
+@source:30test.cpp
30test // (c) 1997
-//@source:39in1.cpp
+@source:39in1.cpp
19in1 // MAME based bootleg
39in1 // MAME based bootleg
48in1 // MAME based bootleg
@@ -62,50 +62,50 @@ flagrall // ?
4in1b // MAME based bootleg
60in1 // MAME based bootleg
-//@source:3do.cpp
+@source:3do.cpp
3do // 3DO consoles
3do_pal //
3dobios //
orbatak //
-//@source:3x3puzzl.cpp
+@source:3x3puzzl.cpp
3x3puzzl // (c) 199? Ace
3x3puzzla // (c) 199? Ace
casanova //
-//@source:4004clk.cpp
+@source:4004clk.cpp
4004clk //
-//@source:40love.cpp
+@source:40love.cpp
40love // A30 (c) 1984 Taito
fieldday // A23 (c) 1984 Taito
undoukai // A17 (c) 1984 Taito
-//@source:4dpi.cpp
+@source:4dpi.cpp
sgi_ip6 // IP6: 4D/PI, R2000, 20MHz
-//@source:4enlinea.cpp
+@source:4enlinea.cpp
4enlinea // (c) 1991 System Compumatic
-//@source:4enraya.cpp
+@source:4enraya.cpp
4enraya // (c) 1990 IDSA
4enrayaa //
unkpacg // (c) 19?? ???
-//@source:4roses.cpp
+@source:4roses.cpp
4roses // (c) 1999 Unknown
4rosesa // (c) 1999 Unknown
rugby // (c) 1999 C.M.C.
-//@source:5clown.cpp
+@source:5clown.cpp
5clown // (c) IGS 1993
5clowna // (c) IGS 1993
5clownsp // (c) IGS 1993
-//@source:68ksbc.cpp
+@source:68ksbc.cpp
68ksbc //
-//@source:8080bw.cpp
+@source:8080bw.cpp
alieninv // Margamatics
alieninvp2 // bootleg
astropal // (c) 19?? Sidam
@@ -217,69 +217,69 @@ vortex // 852 [1980] Zilec Electronics Ltd.
yosakdon // (c) 1979 Yosaku To Donbei
yosakdona // (c) 1979 Yosaku To Donbei
-//@source:88games.cpp
+@source:88games.cpp
88games // GX861 (c) 1988
hypsptsp // GX861 (c) 1988 (Japan)
konami88 // GX861 (c) 1988
-//@source:a1supply.cpp
+@source:a1supply.cpp
tv21 // (c) 197? A-1 Supply
tv21_3 // (c) 197? A-1 Supply
tvpoker // (c) 197? A-1 Supply
-//@source:a2600.cpp
+@source:a2600.cpp
a2600 // Atari 2600
a2600p // Atari 2600 PAL
-//@source:a310.cpp
+@source:a310.cpp
a3010 // 1988 Acorn Archimedes 3010
a3020 // 1988 Acorn Archimedes 3020
a310 // 1988 Acorn Archimedes 310
-//@source:a5105.cpp
+@source:a5105.cpp
a5105 //
-//@source:a51xx.cpp
+@source:a51xx.cpp
a5120 //
a5130 //
-//@source:a6809.cpp
+@source:a6809.cpp
a6809 //
-//@source:a7150.cpp
+@source:a7150.cpp
a7150 //
-//@source:a7800.cpp
+@source:a7800.cpp
a7800 // Atari 7800 NTSC
a7800p // Atari 7800 PAL
-//@source:abc1600.cpp
+@source:abc1600.cpp
abc1600 //
-//@source:abc80.cpp
+@source:abc80.cpp
abc80 //
-//@source:abc80x.cpp
+@source:abc80x.cpp
abc800c //
abc800m //
abc802 //
abc806 //
-//@source:ac1.cpp
+@source:ac1.cpp
ac1 // 1984 Amateurcomputer AC1
ac1_32 // 1984 Amateurcomputer AC1 (32 lines)
ac1scch // 1984 Amateurcomputer AC1 SCCH
-//@source:ace.cpp
+@source:ace.cpp
ace // [1976 Allied Leisure]
-//@source:acefruit.cpp
+@source:acefruit.cpp
acefruit // (c) 1982? ACE
sidewndr // (c) 1981? ACE
spellbnd // (c) 1981? ACE
starspnr // (c) 1982? ACE
-//@source:aces1.cpp
+@source:aces1.cpp
ac1bbclb // Big Break Club (Ace)
ac1bbclba //
ac1bluec // Blue Chip (Pcp)
@@ -328,7 +328,7 @@ ac1taklv // Take It Or Leave It (Ace)
ac1totb // Top Of The Bill (Ace)
ac1xpres // Xpress (Pcp)
-//@source:acesp.cpp
+@source:acesp.cpp
sp_atw // Around the World (Crystal)
sp_beau // Beau Peep (Ace)
sp_beau2 // Further Adventures Of Beau Peep (Ace)
@@ -825,23 +825,23 @@ sp_zigzgk //
sp_zigzgl //
sp_zigzgm //
-//@source:acommand.cpp
+@source:acommand.cpp
acommand // (c) 1990
-//@source:acrnsys1.cpp
+@source:acrnsys1.cpp
acrnsys1 // 1979 Acorn System 1 (Microcomputer Kit)
-//@source:actfancr.cpp
+@source:actfancr.cpp
actfancr // (c) 1989 Data East Corporation (World)
actfancr1 // (c) 1989 Data East Corporation (World)
actfancrj // (c) 1989 Data East Corporation (Japan)
triothep // (c) 1989 Data East Corporation (World)
triothepj // (c) 1989 Data East Corporation (Japan)
-//@source:adam.cpp
+@source:adam.cpp
adam // Coleco Adam
-//@source:adp.cpp
+@source:adp.cpp
backgamn // (c) 1990
fashiong // (c) 1997
fashiong2 // (c) 1997
@@ -851,14 +851,14 @@ quickjac // (c) 1993
skattv // (c) 1994
skattva // (c) 1995
-//@source:advision.cpp
+@source:advision.cpp
advision // Entex
-//@source:aeroboto.cpp
+@source:aeroboto.cpp
aeroboto // (c) 1984 Williams
formatz // (c) 1984 Jaleco
-//@source:aerofgt.cpp
+@source:aerofgt.cpp
aerfboo2 // bootleg
aerfboot // bootleg
aerofgt // (c) 1992 Video System Co.
@@ -885,32 +885,32 @@ svolly91 // (c) 1991 Video System Co. (Japan)
turbofrc // (c) 1991 Video System Co.
wbbc97 // (c) 1997 Comad
-//@source:age_candy.cpp
+@source:age_candy.cpp
age_cand // AGE Candy Crane
-//@source:aim65.cpp
+@source:aim65.cpp
aim65 // Rockwell AIM65
-//@source:aim65_40.cpp
+@source:aim65_40.cpp
aim65_40 // Rockwell AIM65/40
-//@source:airbustr.cpp
+@source:airbustr.cpp
airbustr // (c) 1990 Kaneko + Namco
airbustrb // bootleg
airbustrj // (c) 1990 Kaneko + Namco (Japan)
-//@source:ajax.cpp
+@source:ajax.cpp
ajax // GX770 (c) 1987
ajaxj // GX770 (c) 1987 (Japan)
typhoon // GX770 (c) 1987
-//@source:albazc.cpp
+@source:albazc.cpp
hanaroku // (c) 1988 Alba
-//@source:albazg.cpp
+@source:albazg.cpp
yumefuda // (c) 198? Alba
-//@source:aleck64.cpp
+@source:aleck64.cpp
11beat // (c) 1998 Hudson
aleck64 // (c) 1998 Nintendo/Seta
doncdoon // (c) 2003 Aruze (Arcade TV Game List - P.90, Right, 8 from bottom)
@@ -923,16 +923,16 @@ starsldr // (c) 1998 Hudson/Seta
twrshaft // (c) 2003 Aruze
vivdolls // (c) 1998 Visco
-//@source:aleisttl.cpp
+@source:aleisttl.cpp
sburners // (c) 1975 Allied Leisure
-//@source:alesis.cpp
+@source:alesis.cpp
hr16 //
hr16b //
mmt8 //
sr16 //
-//@source:alg.cpp
+@source:alg.cpp
alg_bios //
aplatoon // (c) 199? Nova?
crimep2 // (c) 1993
@@ -959,10 +959,10 @@ wsjr // (c) 1991
wsjr_15 // (c) 1991
zortonbr // (c) 1993 Web Picmatic
-//@source:alien.cpp
+@source:alien.cpp
alien // (c) 2005
-//@source:aliens.cpp
+@source:aliens.cpp
aliens // GX875 (c) 1990 (World)
aliens2 // GX875 (c) 1990 (World)
aliens3 // GX875 (c) 1990 (World)
@@ -971,10 +971,10 @@ aliensj // GX875 (c) 1990 (Japan)
aliensj2 // GX875 (c) 1990 (Japan)
aliensu // GX875 (c) 1990 (US)
-//@source:alinvade.cpp
+@source:alinvade.cpp
alinvade //
-//@source:allied.cpp
+@source:allied.cpp
allied //
circa33 //
disco79 //
@@ -988,7 +988,7 @@ suprpick //
takefive //
thndbolt //
-//@source:alpha68k.cpp
+@source:alpha68k.cpp
btlfield // Alpha-68K96II 'BT' (c) 1987
btlfieldb // bootleg
gangwars // Alpha-68K96V (c) 1989 Alpha Denshi Co.
@@ -1016,23 +1016,23 @@ tnextspc // A8003 'NS' (c) 1989 - MASKROM
tnextspc2 // A8003 'NS' (c) 1989 - EPROMs
tnextspcj // A8003 'NS' (c) 1989 - Japan
-//@source:alphasma.cpp
+@source:alphasma.cpp
asma2k //
asmapro //
-//@source:alphatro.cpp
+@source:alphatro.cpp
alphatro //
-//@source:altair.cpp
+@source:altair.cpp
al8800bt //
-//@source:alto2.cpp
+@source:alto2.cpp
alto2 //
-//@source:altos5.cpp
+@source:altos5.cpp
altos5 //
-//@source:alvg.cpp
+@source:alvg.cpp
agsoccer //
dinoeggs //
mystcast //
@@ -1043,7 +1043,7 @@ usafootb //
wrldtour //
wrldtour2 //
-//@source:amaticmg.cpp
+@source:amaticmg.cpp
am_mg24 // (c) 2000 Amatic
am_mg3 // (c) 2000 Amatic
am_mg31i // (c) Amatic
@@ -1053,22 +1053,22 @@ am_mg35i // (c) Amatic
am_mg3a // (c) 2000 Amatic
suprstar // (c) 1996 Amatic
-//@source:amazonlf.cpp
+@source:amazonlf.cpp
crospuzl //
-//@source:ambush.cpp
+@source:ambush.cpp
ambush // (c) 1983
ambushh // (c) 1983
ambushj // (c) 1983 Nippon Amuse license
ambushv // (c) 1983 Volt Electronics license
-//@source:amerihok.cpp
+@source:amerihok.cpp
amerihok //
-//@source:amico2k.cpp
+@source:amico2k.cpp
amico2k //
-//@source:amiga.cpp
+@source:amiga.cpp
a1000 // Commodore Amiga 1000
a1000n //
a1200 // Commodore Amiga 1200
@@ -1094,7 +1094,7 @@ cd32n //
cdtv // Commodore CDTV
cdtvn //
-//@source:ampoker2.cpp
+@source:ampoker2.cpp
ampkr228 // 1990 bootleg
ampkr2b1 // 1990 bootleg
ampkr2b2 // 1990 bootleg
@@ -1109,14 +1109,14 @@ sigma2k // (c) 2000 Sigma
sigmapkr // (c) 1995 Sigma
videomat // 1990 bootleg
-//@source:ampro.cpp
+@source:ampro.cpp
ampro //
-//@source:amspdwy.cpp
+@source:amspdwy.cpp
amspdwy // no copyright notice, but (c) 1987 Enerdyne Technologies, Inc.
amspdwya // no copyright notice, but (c) 1987 Enerdyne Technologies, Inc.
-//@source:amstr_pc.cpp
+@source:amstr_pc.cpp
pc20 // 1988 Amstrad PC20
pc200 // 1988 Sinclair PC200
pc2086 //
@@ -1124,7 +1124,7 @@ pc3086 //
ppc512 // 1987 Amstrad PPC512
ppc640 // 1987 Amstrad PPC640
-//@source:amstrad.cpp
+@source:amstrad.cpp
al520ex // Patisonic Aleste 520EX (1993)
cpc464 // Amstrad (Schneider in Germany) 1984
cpc464p // Amstrad CPC464 Plus - 1990
@@ -1136,30 +1136,30 @@ cpc664 // Amstrad (Schneider in Germany) 1985
gx4000 // Amstrad GX4000 - 1990
kccomp // VEB KC compact
-//@source:amusco.cpp
+@source:amusco.cpp
amusco // 1987, Amusco.
-//@source:amust.cpp
+@source:amust.cpp
amust //
-//@source:angelkds.cpp
+@source:angelkds.cpp
angelkds // 833-6599 (c) 1988 Sega / Nasco?
spcpostn // (c) 1986 Sega / Nasco"
-//@source:apc.cpp
+@source:apc.cpp
apc //
-//@source:apexc.cpp
+@source:apexc.cpp
apexc // 1955(?) APEXC: All-Purpose Electronic X-ray Computer
-//@source:apf.cpp
+@source:apf.cpp
apfimag //
apfm1000 //
-//@source:apogee.cpp
+@source:apogee.cpp
apogee //
-//@source:apollo.cpp
+@source:apollo.cpp
dn3000 // Apollo Workstation DN3000 15" Color (1988)
dn3000_19i // Apollo Workstation DN3000 19" Monochrome (1987)
dn3500 // Apollo Workstation DN3500 15" Color (1989)
@@ -1170,10 +1170,10 @@ dsp3000 // Apollo Server DSP3000 (1987)
dsp3500 // Apollo Server DSP3500 (1989)
dsp5500 // Apollo Server DSP5500 (1991)
-//@source:apple1.cpp
+@source:apple1.cpp
apple1 // Jul 1976 Apple 1
-//@source:apple2.cpp
+@source:apple2.cpp
ace100 // ??? 1982 Franklin Ace 100
agat7 // Agat-7
agat9 // Agat-9
@@ -1192,7 +1192,7 @@ uniap2en // 1982 Unitron AP II (in English)
uniap2pt // 1982 Unitron AP II (in Brazilian Portuguese)
uniap2ti // 1982 Unitron AP II+ (Teclado Inteligente)
-//@source:apple2e.cpp
+@source:apple2e.cpp
apple2c // Apr 1984 Apple //c
apple2c0 // ??? 1985 Apple //c (3.5 ROM)
apple2c3 // Sep 1986 Apple //c (Original Mem. Exp.)
@@ -1210,7 +1210,7 @@ mprof3 // Microprofessor III
prav8c // Pravetz 8C
tk3000 // Microdigital TK3000
-//@source:apple2gs.cpp
+@source:apple2gs.cpp
apple2gs // Aug 1989 Apple IIgs ROM03
apple2gsr0 // Sep 1986 Apple IIgs ROM00
apple2gsr0p // June 19, 1986 Apple IIgs ROM00 prototype
@@ -1219,49 +1219,49 @@ apple2gsr1 // Sep 1987 Apple IIgs ROM01
apple2gsr3lp // ??? 1989 Apple IIgs ROM03 late? prototype
apple2gsr3p // ??? 198? Apple IIgs ROM03 prototype
-//@source:apple3.cpp
+@source:apple3.cpp
apple3 // May 1980 Apple ///
-//@source:applix.cpp
+@source:applix.cpp
applix //
-//@source:appoooh.cpp
+@source:appoooh.cpp
appoooh // (c) 1984 Sega, made by Sanritsu
robowres // (c) 1986 Sega
robowresb // bootleg
-//@source:apricot.cpp
+@source:apricot.cpp
apricot // 1983 ACT
apricotxi // 1984 ACT
-//@source:apricotf.cpp
+@source:apricotf.cpp
f1 //
f10 //
f1e //
f2 //
-//@source:apricotp.cpp
+@source:apricotp.cpp
fp //
-//@source:aquarium.cpp
+@source:aquarium.cpp
aquarium // (c) 1996 Excellent System
aquariumj // (c) 1996 Excellent System
-//@source:aquarius.cpp
+@source:aquarius.cpp
aquarius // 1983 Aquarius
-//@source:arabian.cpp
+@source:arabian.cpp
arabian // TVG13 (c) 1983 Sun Electronics
arabiana // 136019 (c) 1983 Atari
-//@source:arachnid.cpp
+@source:arachnid.cpp
arac6000 //
-//@source:arcadecl.cpp
+@source:arcadecl.cpp
arcadecl // (proto) (c) 1992
sparkz // (proto) (c) 1992
-//@source:arcadia.cpp
+@source:arcadia.cpp
advsnha // Advision Home Arcade
arcadia // Emerson Arcadia 2001
bndarc // Bandai Arcadia
@@ -1295,19 +1295,19 @@ tunixha // Tunix Home Arcade
tvg2000 // Schmid TVG 2000
vdmaster // Video Master
-//@source:argo.cpp
+@source:argo.cpp
argo //
-//@source:argox.cpp
+@source:argox.cpp
os214 //
-//@source:argus.cpp
+@source:argus.cpp
argus // (c) 1986 Jaleco
butasan // (c) 1987 Jaleco - english subtitled
butasanj // (c) 1987 Jaleco
valtric // (c) 1986 Jaleco
-//@source:aristmk4.cpp
+@source:aristmk4.cpp
3bagflnz // (c) 1994
3bagflvt // (c) 1994
86lions // (c) 1985?
@@ -1337,7 +1337,7 @@ topgear // (c) 1996
wildone // (c) 1997
wtigernz // (c) 1996
-//@source:aristmk5.cpp
+@source:aristmk5.cpp
adonis // (c) 1998
adonisa // (c) 1998
adonise // (c) 2001
@@ -1378,7 +1378,7 @@ trpdlght // (c) 1997
wldcougr // (c) 1997
wtiger // (c) 1999
-//@source:aristmk6.cpp
+@source:aristmk6.cpp
50lions // (c) 2002
50lionsa // (c) 2003
antcleo // (c) 2004
@@ -1391,7 +1391,7 @@ whalecsh // (c) 2002
wheregld // (c) 2004
wildways // (c) 2003
-//@source:arkanoid.cpp
+@source:arkanoid.cpp
ark1ball // bootleg
arkangc // bootleg
arkangc2 // bootleg
@@ -1418,7 +1418,7 @@ hexaa //
paddle2 // bootleg
tetrsark // ??? (c) D.R.Korea
-//@source:armedf.cpp
+@source:armedf.cpp
armedf // (c) 1988
armedff // (c) 1988 Fillmore license
bigfghtr // (c) 1989
@@ -1435,7 +1435,7 @@ terrafj // (c) 1987 Nichibutsu Japan
terrafjb // (c) 1987
terrafu // (c) 1987 Nichibutsu USA
-//@source:arsystems.cpp
+@source:arsystems.cpp
ar_airh // (c) 1988
ar_airh2 // (c) 1988
ar_argh //
@@ -1461,7 +1461,7 @@ ar_spot // (c) 1990
ar_sprg // (c) 1987
ar_xeon // (c) 1988
-//@source:artmagic.cpp
+@source:artmagic.cpp
cheesech // (c) 1994
shtstar // (c) 1994 Nova
stonebal // (c) 1994
@@ -1469,21 +1469,21 @@ stonebal2 // (c) 1994
ultennis // (c) 1993
ultennisj // (c) 1993
-//@source:ashnojoe.cpp
+@source:ashnojoe.cpp
ashnojoe // ??? (c) 1990 Wave / Taito
scessjoe // ??? (c) 1990 Wave / Taito
-//@source:asst128.cpp
+@source:asst128.cpp
asst128 //
-//@source:asterix.cpp
+@source:asterix.cpp
asterix // GX068 (c) 1992 (World)
asterixaad // GX068 (c) 1992 (Asia)
asterixeaa // GX068 (c) 1992 (World)
asterixeac // GX068 (c) 1992 (World)
asterixj // GX068 (c) 1992 (Japan)
-//@source:asteroid.cpp
+@source:asteroid.cpp
aerolitos // Rodmar Elec. bootleg
astdelux // 0351xx (c) 1980
astdelux1 // 0351xx (c) 1980
@@ -1502,7 +1502,7 @@ meteorho // Hoei? bootleg (c) 1980
meteorts // VCC bootleg (c) 1979
spcrocks // J.Estevez (c) 1981
-//@source:astinvad.cpp
+@source:astinvad.cpp
astinvad // (c) 1980 Stern
kamikaze // (c) 1979 Leijac Corporation
kosmokil // bootleg
@@ -1510,7 +1510,7 @@ spaceint // [1980] Shoei
spaceintj // [1980] Shoei
spcking2 // (c) 1979 Konami
-//@source:astrafr.cpp
+@source:astrafr.cpp
as_acp // unknown ACP (Astra)
as_bbr // Bullion Bars (Astra)
as_bbra //
@@ -1685,7 +1685,7 @@ as_wwc //
as_wwd //
as_wwe //
-//@source:astrcorp.cpp
+@source:astrcorp.cpp
astoneag // (c) 2004? Astro Corp.
dinodino // (c) 2003? Astro Corp.
hacher // (c) 2005? bootleg (Gametron)
@@ -1698,7 +1698,7 @@ winbingo // (c) 2005? Astro Corp.
winbingoa // (c) 2005? Astro Corp.
zoo // (c) 2005? Astro Corp.
-//@source:astrocde.cpp
+@source:astrocde.cpp
demndrgn // (c) 1982 Bally Midway
ebases // (c) 1980
gorf // (c) 1981
@@ -1712,7 +1712,7 @@ tenpindx // (c) 1983 Bally Midway
wow // (c) 1980
wowg // (c) 1980
-//@source:astrof.cpp
+@source:astrof.cpp
abattle // Sidam
abattle2 // Sidam
acombat // bootleg
@@ -1728,12 +1728,12 @@ sstarbtl // bootleg
tomahawk // (c) 1980 Data East, Inc.
tomahawk1 // (c) 1980 Data East, Inc.
-//@source:astrohome.cpp
+@source:astrohome.cpp
astrocde // Bally Professional Arcade / Astrocade
astrocdl // Bally Home Library Computer
astrocdw // Bally Computer System (white case)
-//@source:astropc.cpp
+@source:astropc.cpp
blackbd //
blackbda //
blackbdb //
@@ -1743,7 +1743,7 @@ hawaii //
oligam //
rasce //
-//@source:asuka.cpp
+@source:asuka.cpp
asuka // B68 (c) 1988 Taito Corporation (World)
asukaj // B68 (c) 1988 Taito Corporation (Japan)
bonzeadv // B41 (c) 1988 Taito Corporation Japan (World)
@@ -1766,7 +1766,7 @@ galmedes // (c) 1992 Visco (Japan)
jigkmgri // B41 (c) 1988 Taito Corporation (Japan)
mofflott // C17 (c) 1989 Taito Corporation (Japan)
-//@source:at.cpp
+@source:at.cpp
aplannb // 1990 Apricot LANstation (Novell Remote Boot)
aplanst // 1990 Apricot LANstation (Krypton Motherboard)
aplsbon // 1992 Apricot LS Pro (Bonsai Motherboard)
@@ -1809,20 +1809,20 @@ xb42663 // 1988 Apricot Qi 300 (Rev D,E & F Motherboard)
xb42664 // 1989 Apricot XEN-S (Venus I Motherboard 386) (Bios:3.10.17i)
xb42664a // 1990 Apricot XEN-S (Venus II Motherboard 386) (Bios:1.02.17)
-//@source:atari_s1.cpp
+@source:atari_s1.cpp
aavenger //
atarians //
midearth //
spcrider //
time2000 //
-//@source:atari_s2.cpp
+@source:atari_s2.cpp
fourx4 //
hercules //
roadrunr //
supermap //
-//@source:atari400.cpp
+@source:atari400.cpp
a1200xl // 1982 Atari 1200 XL
a130xe // 1986 Atari 130 XE
a400 // 1979 Atari 400
@@ -1838,7 +1838,7 @@ a800xl // 1983 Atari 800 XL
a800xlp // 1983 Atari 800 XL (PAL)
xegs // 1987 Atari XE Game System
-//@source:atarifb.cpp
+@source:atarifb.cpp
abaseb // 034711-034738 1979/06 [6502]
abaseb2 // 034711-034738 1979/06 [6502]
atarifb // 033xxx 1978/10 [6502]
@@ -1847,7 +1847,7 @@ atarifb2 // 035330-035350 ??? [6502]
atarifb4 // 034754 1979/04 [6502]
soccer // 035222-035260 1980/04 [6502]
-//@source:atarig1.cpp
+@source:atarig1.cpp
hydra // 136079 (c) 1990
hydrap // (proto) (c) 1990
hydrap2 // (proto) (c) 1990
@@ -1860,12 +1860,12 @@ pitfight7 // 136081 (c) 1990
pitfightb // bootleg
pitfightj // Japan
-//@source:atarig42.cpp
+@source:atarig42.cpp
guardian // 136092 (c) 1992
roadriot // 136089 (c) 1991
roadrioto // 136089 (c) 1991
-//@source:atarigt.cpp
+@source:atarigt.cpp
primrage // 136102 (c) 1994
primrage20 // 136102 (c) 1994
tmek // 136100 (c) 1994
@@ -1874,7 +1874,7 @@ tmek44 // 136100 (c) 1994
tmek45 // 136100 (c) 1994
tmek51p // 136100 (c) 1994
-//@source:atarigx2.cpp
+@source:atarigx2.cpp
motofren // 136094 (c) 1992
motofrenft // 136094 (c) 1992
motofrenmd // 136094 (c) 1992
@@ -1887,7 +1887,7 @@ spclordsa // 136095 (c) 1992
spclordsb // 136095 (c) 1992
spclordsg // 136095 (c) 1992
-//@source:atarist.cpp
+@source:atarist.cpp
falcon30 // Atari Falcon030
falcon40 // Atari Falcon040 (prototype)
megast // Atari Mega ST
@@ -1925,7 +1925,7 @@ tt030_fr //
tt030_pl //
tt030_uk //
-//@source:atarisy1.cpp
+@source:atarisy1.cpp
atarisy1 // 136033 (c) 1984
indytemp // 136036 (c) 1985
indytemp2 // 136036 (c) 1985
@@ -1954,7 +1954,7 @@ roadrunn // 136040 (c) 1985
roadrunn1 // 136040 (c) 1985
roadrunn2 // 136040 (c) 1985
-//@source:atarisy2.cpp
+@source:atarisy2.cpp
720 // 136047 (c) 1986
720g // 136047 (c) 1986
720gr1 // 136047 (c) 1986
@@ -1989,11 +1989,11 @@ ssprintg // 136042 (c) 1986
ssprintg1 // 136042 (c) 1986
ssprints // 136042 (c) 1986
-//@source:atarisy4.cpp
+@source:atarisy4.cpp
airrace // (proto) (c) 1985
laststar // (proto) (c) 1984
-//@source:atarittl.cpp
+@source:atarittl.cpp
antiairc // (c) 1975 Atari
crashnsc // (c) 1975 Atari
indy4 // (c) 1976 Atari / Kee
@@ -2007,7 +2007,7 @@ stuntcyc // (c) 1976 Atari
tank // (c) 1974 Atari / Kee
tankii // (c) 1975 Atari / Kee
-//@source:ataxx.cpp
+@source:ataxx.cpp
asylum // (c) 1991 Leland
ataxx // (c) 1990 Leland
ataxxa // (c) 1990 Leland
@@ -2017,7 +2017,7 @@ brutforc // (c) 1991 Leland
indyheat // (c) 1991 Leland
wsf // (c) 1990 Leland
-//@source:atetris.cpp
+@source:atetris.cpp
atetris // 136066 (c) 1988
atetrisa // 136066 (c) 1988
atetrisb // (bootleg)
@@ -2026,26 +2026,26 @@ atetrisb3 // (bootleg)
atetrisc // 136066 (c) 1989
atetrisc2 // 136066 (c) 1989
-//@source:atlantis.cpp
+@source:atlantis.cpp
mwskins // (c) 2000 Midway
mwskinsa // (c) 2000 Midway
mwskinso // (c) 2000 Midway
-//@source:atm.cpp
+@source:atm.cpp
atm //
atmtb2 //
-//@source:atom.cpp
+@source:atom.cpp
atom // 1979 Acorn Atom
atombb // 1979 Acorn Atom
atomeb // 1979 Acorn Atom
-//@source:atpci.cpp
+@source:atpci.cpp
at586 // 19?? AT 586
at586x3 // 19?? AT 586
ficvt503 // 1997 FIC VT-503
-//@source:atronic.cpp
+@source:atronic.cpp
3wishrd // Three Wishes Red
abigchs // Big Cheese
aclown // Clown
@@ -2076,64 +2076,64 @@ shpinxii // Sphinx II
splmastr // Spell Master
tajmah // Tajmahal
-//@source:attache.cpp
+@source:attache.cpp
attache //
-//@source:attckufo.cpp
+@source:attckufo.cpp
attckufo // (c) 1980 Ryoto Electric Co.
-//@source:atvtrack.cpp
+@source:atvtrack.cpp
atvtrack // (c) 2002 - Ref 020419
atvtracka // (c) 2002 - Ref 020419
smashdrv // (c) 2000
-//@source:aussiebyte.cpp
+@source:aussiebyte.cpp
aussieby //
-//@source:avalnche.cpp
+@source:avalnche.cpp
avalnche // 030574 1978/04 [6502]
cascade // bootleg
catchp // 008837 prototype 1977/?? [6502]
-//@source:avigo.cpp
+@source:avigo.cpp
avigo // 1997 Avigo
avigo_de // 1997 Avigo (German)
avigo_es // 1997 Avigo (Spanish)
avigo_fr // 1997 Avigo (French)
avigo_it // 1997 Avigo (Italian)
-//@source:avt.cpp
+@source:avt.cpp
avtbingo // (c) 1985 AVT
avtnfl // (c) 1989 AVT
avtsym14 // (c) 1985 AVT
avtsym25 // (c) 1985 AVT
-//@source:ax20.cpp
+@source:ax20.cpp
ax20 //
-//@source:aztarac.cpp
+@source:aztarac.cpp
aztarac // (c) 1983 Centuri (vector game)
-//@source:b16.cpp
+@source:b16.cpp
b16 //
-//@source:b2m.cpp
+@source:b2m.cpp
b2m //
b2mrom //
-//@source:babbage.cpp
+@source:babbage.cpp
babbage //
-//@source:backfire.cpp
+@source:backfire.cpp
backfire // MBZ (c) 1995
backfirea // MBZ (c) 1995
-//@source:badlands.cpp
+@source:badlands.cpp
badlands // 136074 (c) 1989
badlandsb // bootleg
badlandsb2 // bootleg set 2
-//@source:bagman.cpp
+@source:bagman.cpp
bagman // (c) 1982
bagmans // (c) 1982 + Stern license
bagmans2 // (c) 1982 + Stern license
@@ -2147,11 +2147,11 @@ sbagman // (c) 1984
sbagmans // (c) 1984 + Stern license
squaitsa // (c) 1985
-//@source:bailey.cpp
+@source:bailey.cpp
fun4 // (c) 1976 Bailey
fun4a // (c) 1976 Bailey
-//@source:balsente.cpp
+@source:balsente.cpp
cshift // (c) 1984
gghost // (c) 1984
gimeabrk // (c) 1985
@@ -2186,46 +2186,46 @@ triviag2 // (c) 1984
triviasp // (c) 1984
triviayp // (c) 1984
-//@source:banctec.cpp
+@source:banctec.cpp
banctec // BancTec ESeries panel
-//@source:bankp.cpp
+@source:bankp.cpp
bankp // (c) 1984 Sega, made by Sanritsu
combh // (c) 1987 Sega, made by Sanritsu
-//@source:baraduke.cpp
+@source:baraduke.cpp
aliensec // (c) 1985
baraduke // (c) 1985
metrocrs // (c) 1985
metrocrsa // (c) 1985
-//@source:barata.cpp
+@source:barata.cpp
barata //
-//@source:bartop52.cpp
+@source:bartop52.cpp
barbball // (proto) (c) 1983
-//@source:basic52.cpp
+@source:basic52.cpp
basic31 //
basic52 //
-//@source:batman.cpp
+@source:batman.cpp
batman // 136085 (c) 1991
-//@source:battlane.cpp
+@source:battlane.cpp
battlane // -0215, -0216 (Data East part number) (c) 1986 + Taito license
battlane2 // -0215, -0216 (Data East part number) (c) 1986 + Taito license
battlane3 // -0215, -0216 (Data East part number) (c) 1986 + Taito license
-//@source:battlera.cpp
+@source:battlera.cpp
battlera // (c) 1988 Data East Corporation (World)
bldwolf // (c) 1988 Data East USA (US)
bldwolfj // (c) 1988 Data East Corporation (Japan)
-//@source:battlex.cpp
+@source:battlex.cpp
battlex // (c) 1982 Omori E. Co., Ltd.
-//@source:battlnts.cpp
+@source:battlnts.cpp
battlnts // GX777 (c) 1987
battlntsa // GX777 (c) 1987
battlntsj // GX777 (c) 1987 (Japan)
@@ -2233,7 +2233,7 @@ rackemup // GX765 (c) 1987
thehustl // GX765 (c) 1987 (Japan)
thehustlj // GX765 (c) 1987 (Japan)
-//@source:bbc.cpp
+@source:bbc.cpp
abc110 // 1985 ABC 110
abc310 // 1985 ABC 310
acw443 // 1985 ABC 210/Cambridge Workstation
@@ -2258,10 +2258,10 @@ torchf // 1982 Torch CF240
torchh10 // 1982 Torch CH240/10
torchh21 // 1982 Torch CH240/21
-//@source:bbcbc.cpp
+@source:bbcbc.cpp
bbcbc // 1985 BBC Bridge Companion
-//@source:bbusters.cpp
+@source:bbusters.cpp
bbusters // A9003 'BB' (c) 1989
bbustersu // A9003 'BB' (c) 1989
bbustersua // A9003 'BB' (c) 1989
@@ -2270,32 +2270,32 @@ mechattj // A8002 'MA' (c) 1989
mechattu // A8002 'MA' (c) 1989
mechattu1 // A8002 'MA' (c) 1989
-//@source:bcs3.cpp
+@source:bcs3.cpp
bcs3 //
bcs3a //
bcs3b //
bcs3c //
bcs3d //
-//@source:beaminv.cpp
+@source:beaminv.cpp
beaminv // (c) 1979 Tekunon Kougyou (Arcade TV Game List - P.95, Left, 9 from top)
pacominv // (c) 1979 Pacom Corporation
-//@source:beathead.cpp
+@source:beathead.cpp
beathead // (proto) (c) 1993
-//@source:bebox.cpp
+@source:bebox.cpp
bebox // BeBox Dual603-66
bebox2 // BeBox Dual603-133
-//@source:beehive.cpp
+@source:beehive.cpp
beehive //
-//@source:beezer.cpp
+@source:beezer.cpp
beezer // (c) 1982
beezer1 // (c) 1982
-//@source:belatra.cpp
+@source:belatra.cpp
fairyl2 //
fairyl2a //
fairyl2b //
@@ -2304,7 +2304,7 @@ ldrink //
ldrinka //
merryjn //
-//@source:berzerk.cpp
+@source:berzerk.cpp
berzerk // (c) 1980
berzerk1 // (c) 1980
berzerkf // (c) 1980 (French speech)
@@ -2313,17 +2313,17 @@ berzerks // (c) 1980 Sonic license(Spanish speech)
frenzy // (c) 1982
moonwarp // (c) 1982 - prototype
-//@source:besta.cpp
+@source:besta.cpp
besta88 //
-//@source:bestleag.cpp
+@source:bestleag.cpp
bestleag // bootleg, by Playmark?
bestleaw // bootleg
-//@source:beta.cpp
+@source:beta.cpp
beta //
-//@source:bfcobra.cpp
+@source:bfcobra.cpp
beeline // 1991 BFM
escounts // 1990 BFM
inquiztr // 1989 BFM
@@ -2333,7 +2333,7 @@ qosb // 1992 BFM
quizvadr // 1991 BFM
trebltop // 1991 BFM
-//@source:bfm_ad5sw.cpp
+@source:bfm_ad5sw.cpp
ad5bpfpm // Bullseye Pounds For Points (Mazooma)
ad5bpfpma //
ad5bpfpmb //
@@ -2582,7 +2582,7 @@ ad5vpaa //
ad5vpab //
ad5vpac //
-//@source:bfm_sc1.cpp
+@source:bfm_sc1.cpp
m_tppokr // (c) 1996 BFM/ELAM,Game Card 95-750-899, uses Adder board for feature gfx
sc1actv8 //
sc1armad //
@@ -2795,7 +2795,7 @@ sc1wthn // Wild Thing (Eurocoin)
sc1wud // What's Up Dr
sc1zep // Zeppelin (Bellfruit)
-//@source:bfm_sc2.cpp
+@source:bfm_sc2.cpp
gldncrwn // 1997
paradice // 1995
pokio // 1994
@@ -3288,7 +3288,7 @@ sltblgp1 // 1996
sltblgpo // 1996
sltblgtk // 1996
-//@source:bfm_sc4.cpp
+@source:bfm_sc4.cpp
ad4ctl //
ad4ctla //
ad4film //
@@ -6409,7 +6409,7 @@ sc4ziggye //
sc4ziggyf //
sc4ziggyg //
-//@source:bfm_sc5sw.cpp
+@source:bfm_sc5sw.cpp
sc5_3414 //
sc5_3434 //
sc5_3435 //
@@ -8085,17 +8085,17 @@ sc5woka //
sc5wotw // War Of The Wads (Mazooma)
sc5wotwa //
-//@source:bfm_swp.cpp
+@source:bfm_swp.cpp
c3_ppays // The Phrase That Pays
c3_rtime // Radio Times
c3_telly // Telly Addicts
c3_totp // Top of the Pops
-//@source:bfmsys83.cpp
+@source:bfmsys83.cpp
b83catms //
b83cops //
-//@source:bfmsys85.cpp
+@source:bfmsys85.cpp
b85bdclb //
b85bdclba //
b85bdclbb //
@@ -8131,31 +8131,31 @@ b85royal //
b85scard // (c) 198? BFM
b85sngam //
-//@source:bgt.cpp
+@source:bgt.cpp
bg_barmy //
bg_ddb //
bg_max //
bg_maxa //
-//@source:big10.cpp
+@source:big10.cpp
big10 // (c) 198? Unknown
-//@source:bigbord2.cpp
+@source:bigbord2.cpp
bigbord2 //
-//@source:bigevglf.cpp
+@source:bigevglf.cpp
bigevglf // A67 (c) 1986 Taito America Corporation (US)
bigevglfj // A67 (c) 1986 Taito Corporation (Japan)
-//@source:bigstrkb.cpp
+@source:bigstrkb.cpp
bigstrkb // bootleg on different hardware
bigstrkba // alt set of 'bigstrkb' with Italian teams
-//@source:binbug.cpp
+@source:binbug.cpp
binbug //
dg680 //
-//@source:bingo.cpp
+@source:bingo.cpp
brooklyn //
brooklyna //
cntine31 //
@@ -8181,60 +8181,60 @@ topgame //
topgamet //
tripjok //
-//@source:bingoc.cpp
+@source:bingoc.cpp
bingoc // (c) 1989 Sega
-//@source:bingoman.cpp
+@source:bingoman.cpp
bingoman //
bingomana //
-//@source:bingor.cpp
+@source:bingor.cpp
bingor1 // (c) 2002 Unknown
bingor2 // (c) 2002 Unknown
bingor3 // (c) 2002 Unknown
bingor4 // (c) 2002 Unknown
bingor5 // (c) 2002 Unknown
-//@source:bionicc.cpp
+@source:bionicc.cpp
bionicc // 3/1987 (c) 1987 (Euro)
bionicc1 // 3/1987 (c) 1987 (US)
bionicc2 // 3/1987 (c) 1987 (US)
bioniccbl // bootleg
topsecrt // 3/1987 (c) 1987 (Japan)
-//@source:bishi.cpp
+@source:bishi.cpp
bishi // GX575 (c) 1996 (Japan)
sbishi // GX675 (c) 1998 (Japan)
sbishik // GX675 (c) 1998 (Korea)
-//@source:bitgraph.cpp
+@source:bitgraph.cpp
bitgrpha //
bitgrphb //
-//@source:bk.cpp
+@source:bk.cpp
bk0010 //
bk001001 //
bk0010fd //
bk0011m //
-//@source:bking.cpp
+@source:bking.cpp
bking // DM (c) 1982 Taito Corporation
bking2 // AD6 (c) 1983 Taito Corporation
bking3 // A24 (c) 1984 Taito Corporation
-//@source:blackt96.cpp
+@source:blackt96.cpp
blackt96 // (c) 1996 D.G.R.M. of Korea
-//@source:bladestl.cpp
+@source:bladestl.cpp
bladestl // GX797 (c) 1987
bladestle // GX797 (c) 1987
bladestll // GX797 (c) 1987
-//@source:blitz.cpp
+@source:blitz.cpp
megadpkr // (c) 1990 Blitz System Inc
megadpkrb // (c) 1990 Blitz System Inc
-//@source:blitz68k.cpp
+@source:blitz68k.cpp
bankrob // (c) 1993 Entertainment Technology Corp.
bankroba // (c) 1993 Entertainment Technology Corp.
cj3play // (c) 1998 Cadillac Jack
@@ -8249,7 +8249,7 @@ megadblj // (c) 1990 Blitz Systems Inc.
poker52 // (c) 1993 Blitz Systems Inc. ?
steaser // (c) 1993 unknown
-//@source:blktiger.cpp
+@source:blktiger.cpp
blkdrgon // 8/1987 (c) 1987 (Japan)
blkdrgonb // bootleg, hacked to say Black Tiger
blktiger // 8/1987 (c) 1987 (US)
@@ -8258,12 +8258,12 @@ blktigerb1 // bootleg
blktigerb2 // bootleg
blktigerb3 // bootleg?
-//@source:blmbycar.cpp
+@source:blmbycar.cpp
blmbycar // (c) 1994 ABM & Gecas - uses same gfx chip as powerins?
blmbycaru // (c) 1994 ABM & Gecas - uses same gfx chip as powerins?
watrball // (c) 1996 ABM
-//@source:blockade.cpp
+@source:blockade.cpp
blasto // [1978 Gremlin]
blockade // 1-4 [1977 Gremlin]
comotion // 5-7 [1977 Gremlin]
@@ -8271,100 +8271,100 @@ hustle // 16-21 [1977 Gremlin]
mineswpr // [1977 Amutech]
mineswpr4 // [1977 Amutech]
-//@source:blockhl.cpp
+@source:blockhl.cpp
blockhl // GX973 (c) 1989
quarth // GX973 (c) 1989 (Japan)
-//@source:blockout.cpp
+@source:blockout.cpp
agress // TA-0029 (c) 1991 Palco
agressb // TA-0029 (c) 1991 Palco
blockout // TA-0029 (c) 1989 + California Dreams
blockout2 // TA-0029 (c) 1989 + California Dreams
blockoutj // TA-0029 (c) 1989 + California Dreams (Japan)
-//@source:bloodbro.cpp
+@source:bloodbro.cpp
bloodbro // (c) 1990 Tad
bloodbroa // (c) 1990 Tad
bloodbrob // (c) 1990 Tad
skysmash // (c) 1990 Nihon System Inc.
weststry // bootleg
-//@source:blstroid.cpp
+@source:blstroid.cpp
blstroid // 136057 (c) 1987
blstroid2 // 136057 (c) 1987
blstroid3 // 136057 (c) 1987
blstroidg // 136057 (c) 1987
blstroidh // (proto) (c) 1987
-//@source:blueprnt.cpp
+@source:blueprnt.cpp
blueprnt // (c) 1982 Bally Midway (Zilec in ROM 3U, and the programmer names)
blueprntj // (c) 1982 Jaleco (Zilec in ROM 3U, and the programmer names)
grasspin // (c) 1983 Jaleco (Zilec / Ashby programmer names in sound rom)
saturnzi // (c) 1983 Jaleco (Zilec in ROM R6, and the programmer names)
-//@source:bmcbowl.cpp
+@source:bmcbowl.cpp
bmcbowl // (c) 1994 BMC
-//@source:bmcpokr.cpp
+@source:bmcpokr.cpp
bmcpokr // (c) 1999 BMC
mjmaglmp // (c) 2000 BMC
-//@source:bmjr.cpp
+@source:bmjr.cpp
bmjr //
-//@source:bml3.cpp
+@source:bml3.cpp
bml3 //
bml3mk2 //
bml3mk5 //
-//@source:bnstars.cpp
+@source:bnstars.cpp
bnstars1 // (c) 1997
-//@source:bntyhunt.cpp
+@source:bntyhunt.cpp
bntyhunt // (c) 200? GCTech Co., LTD
-//@source:bob85.cpp
+@source:bob85.cpp
bob85 //
-//@source:bogeyman.cpp
+@source:bogeyman.cpp
bogeyman // -0204-0 (Data East part number) (c) 1985 (Arcade TV Game List - P.96, Right, 8 from top)
-//@source:bombjack.cpp
+@source:bombjack.cpp
bombjack // (c) 1984 Tehkan
bombjack2 // (c) 1984 Tehkan
bombjackt // (c) 1984 Tehkan + Tecfri license
-//@source:boogwing.cpp
+@source:boogwing.cpp
boogwing // MBD (c) 1992 (Euro, v1.5)
boogwinga // MBD (c) 1992 (Asia, v1.5)
boogwingu // MBD (c) 1992 (USA, v1.7)
ragtime // MBD (c) 1992 (Japan, v1.5)
ragtimea // MBD (c) 1992 (Japan, v1.3)
-//@source:bottom9.cpp
+@source:bottom9.cpp
bottom9 // GX891 (c) 1989
bottom9n // GX891 (c) 1989
mstadium // GX891 (c) 1989 (Japan)
-//@source:bowltry.cpp
+@source:bowltry.cpp
bowltry // (c) 200? Atlus
-//@source:boxer.cpp
+@source:boxer.cpp
boxer // ?????? prototype 1978 [6502]
-//@source:br8641.cpp
+@source:br8641.cpp
br8641 //
-//@source:brkthru.cpp
+@source:brkthru.cpp
brkthru // (c) 1986 Data East USA (US)
brkthruj // (c) 1986 Data East Corporation (Japan)
darwin // (c) 1986 Data East Corporation (Japan)
forcebrk // (c) 1986 Data East Corporation (Japan)
-//@source:bsktball.cpp
+@source:bsktball.cpp
bsktball // 034756-034766 1979/05 [6502]
-//@source:btime.cpp
+@source:btime.cpp
bnj // (c) 1982
bnjm // (c) 1982 + Midway
brubber // (c) 1982
@@ -8385,10 +8385,10 @@ tisland // (c) 1982
wtennis // bootleg 1982
zoar // (c) 1982
-//@source:btoads.cpp
+@source:btoads.cpp
btoads // (c) 1994 Rare
-//@source:bublbobl.cpp
+@source:bublbobl.cpp
bbredux // bootleg / hack
boblbobl // bootleg
boblcave // hack
@@ -8412,28 +8412,28 @@ tokiob // bootleg
tokioo // A71 1986
tokiou // A71 1986
-//@source:buggychl.cpp
+@source:buggychl.cpp
buggychl // A22 (c) 1984 Taito Corporation
buggychlt // A22 (c) 1984 Taito Corporation + Tefri license
-//@source:bullet.cpp
+@source:bullet.cpp
wmbullet //
wmbulletf //
-//@source:busicom.cpp
+@source:busicom.cpp
busicom //
-//@source:buster.cpp
+@source:buster.cpp
buster // (c) 1987 Marian Electronics Ltd.
-//@source:bw12.cpp
+@source:bw12.cpp
bw12 //
bw14 //
-//@source:bw2.cpp
+@source:bw2.cpp
bw2 //
-//@source:bwidow.cpp
+@source:bwidow.cpp
bwidow // 136017 (c) 1982
bwidowp // (proto) (c) 1982
gravitar // 136010 (c) 1982
@@ -8445,14 +8445,14 @@ spacduel // 136006 (c) 1980
spacduel0 // 136006 (c) 1980
spacduel1 // 136006 (c) 1980
-//@source:bwing.cpp
+@source:bwing.cpp
bwings // (c) 1984
bwingsa // (c) 1984
bwingso // (c) 1984
zaviga // (c)
zavigaj // (c)
-//@source:by17.cpp
+@source:by17.cpp
blackjck //
bowarrow //
eightbll //
@@ -8464,7 +8464,7 @@ nightrdr //
pwerplay //
stk_sprs //
-//@source:by35.cpp
+@source:by35.cpp
bbbowlin //
blakpyra //
blbeauty //
@@ -8537,7 +8537,7 @@ xenon //
xenonf //
xsandos //
-//@source:by6803.cpp
+@source:by6803.cpp
atlantip //
beatclck //
black100 //
@@ -8562,7 +8562,7 @@ strngsci //
trucksp2 //
trucksp3 //
-//@source:by68701.cpp
+@source:by68701.cpp
eballdlxp1 //
eballdlxp2 //
eballdlxp3 //
@@ -8570,12 +8570,12 @@ eballdlxp4 //
flashgdnp1 //
flashgdnp2 //
-//@source:byvid.cpp
+@source:byvid.cpp
babypac //
babypac2 //
granny //
-//@source:bzone.cpp
+@source:bzone.cpp
bradley // ?? (c) 1980
bzone // 0364xx (c) 1980
bzonea // 0364xx (c) 1980
@@ -8583,10 +8583,10 @@ bzonec // 0364xx (c) 1980
redbaron // 036995-037007 (c) 1980
redbarona // 036995-037007 (c) 1980
-//@source:c10.cpp
+@source:c10.cpp
c10 //
-//@source:c128.cpp
+@source:c128.cpp
c128 //
c128_de //
c128_se //
@@ -8600,7 +8600,7 @@ c128dcrp //
c128dp //
c128p //
-//@source:c64.cpp
+@source:c64.cpp
c64 //
c64_jp // Commodore 64 (Japan)
c64_se // Commodore 64 (Sweden)
@@ -8619,20 +8619,20 @@ sx64p //
tesa6240 //
vip64 // Commodore VIP64 (SX64, PAL, Swedish)
-//@source:c64dtv.cpp
+@source:c64dtv.cpp
c64dtv // Commodore 64 Direct-to-TV
-//@source:c65.cpp
+@source:c65.cpp
c64dx // 1991 C65 / C64DX (Prototype, German PAL)
c65 // 1991 C65 / C64DX (Prototype, NTSC)
-//@source:c80.cpp
+@source:c80.cpp
c80 //
-//@source:c900.cpp
+@source:c900.cpp
c900 //
-//@source:cabal.cpp
+@source:cabal.cpp
cabal // (c) 1988 Tad + Fabtek license
cabala // (c) 1988 Tad + Fabtek license
cabalbl // bootleg
@@ -8641,15 +8641,15 @@ cabalus // (c) 1988 Tad + Fabtek license
cabalus2 // (c) 1988 Tad + Fabtek license
cabaluk //
-//@source:cabaret.cpp
+@source:cabaret.cpp
cabaret // (c) 1992 AMT
-//@source:calchase.cpp
+@source:calchase.cpp
calchase // (c) 1999 The Game Room
eggsplc // (c) 2002 The Game Room
hostinv // (c) 1998 The Game Room
-//@source:calomega.cpp
+@source:calomega.cpp
comg074 // (c) 1981 Cal Omega Inc.
comg076 // (c) 1981 Cal Omega Inc.
comg079 // (c) 1981 Cal Omega Inc.
@@ -8694,23 +8694,23 @@ ssipkr24 // (c) 1988 SSI
ssipkr30 // (c) 1988 SSI
ssipkr40 // (c) 1990 SSI
-//@source:calorie.cpp
+@source:calorie.cpp
calorie // (c) 1986 Sega
calorieb // (c) 1986 Sega (but bootleg)
-//@source:camplynx.cpp
+@source:camplynx.cpp
lynx128k //
lynx48k //
lynx96k //
-//@source:canon_s80.cpp
+@source:canon_s80.cpp
canons80 //
-//@source:canyon.cpp
+@source:canyon.cpp
canyon // 009493-009504 1977/10 [6502]
canyonp // 009493-009504 1977/10 [6502]
-//@source:capbowl.cpp
+@source:capbowl.cpp
bowlrama // (c) 1991 P & P Marketing
capbowl // (c) 1988 Incredible Technologies
capbowl2 // (c) 1988 Incredible Technologies
@@ -8718,7 +8718,7 @@ capbowl3 // (c) 1988 Incredible Technologies
capbowl4 // (c) 1989 Incredible Technologies
clbowl // (c) 1989 Incredible Technologies
-//@source:capcom.cpp
+@source:capcom.cpp
abv106 //
abv106r //
bbb108 //
@@ -8734,41 +8734,41 @@ kpv106 //
pmv112 //
pmv112r //
-//@source:capr1.cpp
+@source:capr1.cpp
cspin2 //
-//@source:caprcyc.cpp
+@source:caprcyc.cpp
caprcyc //
-//@source:cardline.cpp
+@source:cardline.cpp
cardline // (c) 199? Veltmeijer
-//@source:carjmbre.cpp
+@source:carjmbre.cpp
carjmbre // (c) 1983 Omori Electric Co., Ltd.
-//@source:carpolo.cpp
+@source:carpolo.cpp
carpolo // (c) 1977
-//@source:carrera.cpp
+@source:carrera.cpp
carrera // (c) 19?? BS Electronics
-//@source:casloopy.cpp
+@source:casloopy.cpp
casloopy //
-//@source:castle.cpp
+@source:castle.cpp
castfpt // Fortune Pot
castrev // Revolution
-//@source:caswin.cpp
+@source:caswin.cpp
caswin // (c) 1985
rcasino // (c) 1984 Dyna Electronics (D-2608208A1-2)
rcasino1 // (c) 1984 Dyna Electronics (D-2608208A1-1, Larger Board)
rcasinoo // (c) 1984 Dyna Electronics (D-2608208A1-1, Smaller Board)
-//@source:cat.cpp
+@source:cat.cpp
cat //
-//@source:cave.cpp
+@source:cave.cpp
agallet // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
agalleth // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
agalletj // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
@@ -8820,20 +8820,20 @@ tjumpman // (c) 1999 Namco
uopoko // (c) 1998 Cave + Jaleco license
uopokoj // (c) 1998 Cave + Jaleco license
-//@source:cavepc.cpp
+@source:cavepc.cpp
deathsm2 //
-//@source:cb2001.cpp
+@source:cb2001.cpp
cb2001 // (c) 2001 Dyna Electronics
scherrym // (c) 2001? Dyna Electronics
-//@source:cball.cpp
+@source:cball.cpp
cball // ?????? prototype 1976/?? [6800]
-//@source:cbasebal.cpp
+@source:cbasebal.cpp
cbasebal // 10/1989 (c) 1989 Capcom (Japan) (different hardware)
-//@source:cbm2.cpp
+@source:cbm2.cpp
b128 // Commodore B128
b128hp // Commodore B128HP
b256 // Commodore B256
@@ -8851,17 +8851,17 @@ cbm730 //
p500 // Commodore P500 (proto, a.k.a. C128-40, PET-II)
p500p //
-//@source:cbuster.cpp
+@source:cbuster.cpp
cbuster // MAB (c) 1990 Data East Corporation (World)
cbusterj // MAB (c) 1990 Data East Corporation (Japan)
cbusterw // MAB (c) 1990 Data East Corporation (World)
twocrude // MAB (c) 1990 Data East USA (US)
twocrudea // MAB (c) 1990 Data East USA (US)
-//@source:cc40.cpp
+@source:cc40.cpp
cc40 // 1983 TI CC-40
-//@source:ccastles.cpp
+@source:ccastles.cpp
ccastles // 136022 (c) 1983
ccastles1 // 136022 (c) 1983
ccastles2 // 136022 (c) 1983
@@ -8871,14 +8871,14 @@ ccastlesg // 136022 (c) 1983
ccastlesj // 136022 (c) 1983
ccastlesp // 136022 (c) 1983
-//@source:cchance.cpp
+@source:cchance.cpp
cchance // (c)1987 Taito?
-//@source:cchasm.cpp
+@source:cchasm.cpp
cchasm //
cchasm1 // (c) 1983 Cinematronics / GCE
-//@source:cclimber.cpp
+@source:cclimber.cpp
bagmanf // bootleg on Falcon FCK-00 (Falcon Crazy Kong) PCB
bigkong // bootleg
cannonb // (c) 1985 Soft
@@ -8913,20 +8913,20 @@ toprollr // (c) 1983 Jaleco
yamato // (c) 1983 Sega
yamato2 // (c) 1983 Sega
-//@source:ccs2810.cpp
+@source:ccs2810.cpp
ccs2422 //
ccs2810 //
-//@source:ccs300.cpp
+@source:ccs300.cpp
ccs300 //
-//@source:cd2650.cpp
+@source:cd2650.cpp
cd2650 //
-//@source:cdc721.cpp
+@source:cdc721.cpp
cdc721 //
-//@source:cdi.cpp
+@source:cdi.cpp
cdi490a //
cdi910 //
cdibios // Base unit
@@ -8944,7 +8944,7 @@ quizard4 // (c) TAB Austria 1998
quizard4_40 // (c) TAB Austria 1997
quizard4_41 // (c) TAB Austria 1998
-//@source:centiped.cpp
+@source:centiped.cpp
bullsdrt // (c) 1985 Shinkai
caterplr // (bootleg)
centipdb // (bootleg)
@@ -8962,28 +8962,28 @@ millpac // Valadon
multiped // hack
warlords // 037153-037159 (c) 1980
-//@source:cesclass.cpp
+@source:cesclass.cpp
ccclass //
hrclass //
tsclass //
-//@source:cfx9850.cpp
+@source:cfx9850.cpp
cfx9850 // Casio CFX-9850
-//@source:cgc7900.cpp
+@source:cgc7900.cpp
cgc7900 //
-//@source:cgenie.cpp
+@source:cgenie.cpp
cgenie // Colour Genie EG2000
cgenienz // Colour Genie EG2000 (New Zealand)
-//@source:chaknpop.cpp
+@source:chaknpop.cpp
chaknpop // AO4 (c) 1983 Taito Corporation
-//@source:cham24.cpp
+@source:cham24.cpp
cham24 // 2002
-//@source:champbas.cpp
+@source:champbas.cpp
champbas // (c) 1983 Sega
champbasj // (c) 1983 Alpha Denshi Co.
champbasja // (c) 1983 Alpha Denshi Co.
@@ -8999,20 +8999,20 @@ exctsccrjo // (c) 1983 Alpha Denshi Co.
exctsccru // (c) 1983 Alpha Denshi Co.
talbot // Volt Electronics
-//@source:champbwl.cpp
+@source:champbwl.cpp
champbwl // (c)1989 Romstar. not Taito, but the same Seta video chips
doraemon // Sunsoft / Epoch / Fujiko - Shogakukan - TV Asahi (prototype)
-//@source:chanbara.cpp
+@source:chanbara.cpp
chanbara // (c) 1985 Data East
-//@source:chance32.cpp
+@source:chance32.cpp
chance32 // (c) 19?? PAL Company
-//@source:changela.cpp
+@source:changela.cpp
changela // ??? (c) 1983 Taito Corporation
-//@source:channelf.cpp
+@source:channelf.cpp
channelf // Fairchild Channel F VES - 1976
channlf2 // Fairchild Channel F II - 1978
ingtelma // Ingelen Tele-Match Processor (PAL)
@@ -9022,27 +9022,27 @@ luxorves // Luxor Video Entertainment System (PAL)
sabavdpl // SABA Videoplay - 1977 (PAL)
sabavpl2 // SABA Videoplay 2 (PAL)
-//@source:chaos.cpp
+@source:chaos.cpp
chaos //
-//@source:cheekyms.cpp
+@source:cheekyms.cpp
cheekyms // 8004 (c) [1980?]
-//@source:chessmst.cpp
+@source:chessmst.cpp
chessmst //
-//@source:chesstrv.cpp
+@source:chesstrv.cpp
borisdpl //
chesstrv //
-//@source:chexx.cpp
+@source:chexx.cpp
chexx83 // 1983 ICE
faceoffh // 1983 SoftLogic / Entertainment Enterprises
-//@source:chicago.cpp
+@source:chicago.cpp
dmodrbcc // (c) 1976 Chicago Coin
-//@source:chihiro.cpp
+@source:chihiro.cpp
ccfboxa // 2009.03.31 Firmware Update For Compact Flash Box (Rev A)
chihiro // 2002.?? Chihiro BIOS
crtaxihr // 2003.02.24 Crazy Taxi High Roller (Rev B)
@@ -9065,31 +9065,31 @@ wangmd2b // 2005.10 Wangan Midnight Maximum Tune 2 (Expor
wangmid // 2004.07 Wangan Midnight Maximum Tune (export) (Rev B)
wangmid2 // 2005.04 Wangan Midnight Maximum Tune 2 (Japan)
-//@source:chinagat.cpp
+@source:chinagat.cpp
chinagat // TA-0023 (c) 1988 Taito + Romstar license (US)
saiyugou // TA-0023 (c) 1988 (Japan)
saiyugoub1 // bootleg
saiyugoub2 // bootleg
-//@source:chinsan.cpp
+@source:chinsan.cpp
chinsan // (c) 1987 Sanritsu
-//@source:chqflag.cpp
+@source:chqflag.cpp
chqflag // GX717 (c) 1988
chqflagj // GX717 (c) 1988 (Japan)
-//@source:chsuper.cpp
+@source:chsuper.cpp
chmpnum // unknown
chsuper2 // unknown
chsuper3 // unknown
-//@source:cidelsa.cpp
+@source:cidelsa.cpp
altair // (c) 1981 Cidelsa
destryer // (c) 1981 Cidelsa
destryera // (c) 1981 Cidelsa
draco // (c) 1981 Cidelsa
-//@source:cinemat.cpp
+@source:cinemat.cpp
armora // (c) 1980
armorap // (c) 1980
armorar // (c) 1980 Cinematronics (Rock-ola license)
@@ -9115,7 +9115,7 @@ warrior // (c) 1979 Vectorbeam
wotw // (c) 1981
wotwc // (c) 1981
-//@source:circus.cpp
+@source:circus.cpp
circus // no copyright notice [1977?]
crash // Exidy [1979?]
ripcord // Exidy [1977?]
@@ -9123,7 +9123,7 @@ robotbwl // no copyright notice
smash // bootleg
springbd // Sub-Electro bootleg of Circus
-//@source:circusc.cpp
+@source:circusc.cpp
circusc // GX380 (c) 1984
circusc2 // GX380 (c) 1984
circusc3 // GX380 (c) 1984
@@ -9131,7 +9131,7 @@ circusc4 // GX380 (c) 1984
circuscc // GX380 (c) 1984 + Centuri license
circusce // GX380 (c) 1984 + Centuri license
-//@source:cischeat.cpp
+@source:cischeat.cpp
armchmp2 // (c) 1992 Jaleco
armchmp2o // (c) 1992 Jaleco
bigrun // (c) 1989 Jaleco
@@ -9142,24 +9142,24 @@ f1gpstr2 // (c) 1993 Jaleco
scudhamm // (c) 1994 Jaleco
wildplt // (c) 1992 Jaleco
-//@source:citycon.cpp
+@source:citycon.cpp
citycon // (c) 1985 Jaleco
citycona // (c) 1985 Jaleco
cruisin // (c) 1985 Jaleco/Kitkorp
-//@source:clayshoo.cpp
+@source:clayshoo.cpp
clayshoo // [1979 Allied Leisure]
-//@source:clcd.cpp
+@source:clcd.cpp
clcd // Commodore LCD
-//@source:cliffhgr.cpp
+@source:cliffhgr.cpp
cliffhgr // (c) 1983
cliffhgra // (c) 1983
cliffhgra2 // (c) 1983
goaltogo // (c) 1983
-//@source:cloak.cpp
+@source:cloak.cpp
agentx1 // 136023 (c) 1983
agentx2 // 136023 (c) 1983
agentx3 // 136023 (c) 1983
@@ -9169,26 +9169,26 @@ cloakfr // 136023 (c) 1983
cloakgr // 136023 (c) 1983
cloaksp // 136023 (c) 1983
-//@source:cloud9.cpp
+@source:cloud9.cpp
cloud9 // (proto) (c) 1983
firebeas // (proto) (c) 1983
-//@source:clowndwn.cpp
+@source:clowndwn.cpp
clowndwn // Elwood Clown Roll Down
-//@source:clshroad.cpp
+@source:clshroad.cpp
clshroad // (c) 1986 Wood Place Inc.
clshroadd // (c) 1986 Wood Place Inc. (Data East license)
clshroads // (c) 1986 Wood Place Inc. (Status Games license)
firebatl // (c) 1984 Taito
-//@source:cm1800.cpp
+@source:cm1800.cpp
cm1800 //
-//@source:cmmb.cpp
+@source:cmmb.cpp
cmmb162 //
-//@source:cninja.cpp
+@source:cninja.cpp
cninja // MAG (c) 1991 Data East Corporation (World)
cninja1 // MAG (c) 1991 Data East Corporation (World)
cninjabl // bootleg
@@ -9210,17 +9210,17 @@ robocop2u // MAH (c) 1991 Data East Corporation (US)
robocop2ua // MAH (c) 1991 Data East Corporation (US)
stoneage // bootleg
-//@source:cntsteer.cpp
+@source:cntsteer.cpp
cntsteer // (c) 1985 Data East Corporation
gekitsui // (c) 1985 Data East Corporation (Japan)
zerotrgt // (c) 1985 Data East Corporation
zerotrgta // (c) 1985 Data East Corporation
-//@source:cobra.cpp
+@source:cobra.cpp
bujutsu // G?645 (c)1997
racjamdx // G?676 (c)1997 Japan JAA
-//@source:coco12.cpp
+@source:coco12.cpp
coco // Color Computer
coco2 // Color Computer 2
coco2b // Color Computer 2B (uses M6847T1 video chip)
@@ -9229,19 +9229,19 @@ cp400 // Prologica CP400
lzcolor64 // Digiponto LZ Color64
mx1600 // Dynacom MX-1600
-//@source:coco3.cpp
+@source:coco3.cpp
coco3 // Color Computer 3 (NTSC)
coco3dw1 // Coco 3 with HDB-DOS
coco3h // Hacked Color Computer 3 (6309)
coco3p // Color Computer 3 (PAL)
-//@source:cocoloco.cpp
+@source:cocoloco.cpp
cocoloco // 198?, Petaco S.A.
-//@source:codata.cpp
+@source:codata.cpp
codata //
-//@source:coinmstr.cpp
+@source:coinmstr.cpp
jpcoin // (c) 19?? Coinmaster
jpcoin2 // (c) 19?? Coinmaster
pokeroul // (c) 1990 Coinmaster
@@ -9249,14 +9249,14 @@ quizmstr // (c) 1985 Coinmaster
supnudg2 // (c) 1989 Coinmaster
trailblz // (c) 1987 Coinmaster
-//@source:coinmvga.cpp
+@source:coinmvga.cpp
cmkenosp // (c) 2000 Coinmaster-Gaming, Ltd.
cmkenospa // (c) 2000 Coinmaster-Gaming, Ltd.
cmrltv75 // (c) 2001 Coinmaster-Gaming, Ltd.
colorama // (c) 2000 Coinmaster-Gaming, Ltd.
coloramas // (c) 2000 Coinmaster-Gaming, Ltd.
-//@source:coleco.cpp
+@source:coleco.cpp
coleco // ColecoVision (Original BIOS)
colecop // Colecovision PAL (Italy)
czz50 // Bit Corporation Chuang Zao Zhe 50
@@ -9265,7 +9265,7 @@ onyx // Microdigital ONYX (Brazilian Coleco clone / u
prsarcde // Telegames Personal Arcade
svi603 // Spectravideo SVI-603 Coleco Game Adapter
-//@source:combatsc.cpp
+@source:combatsc.cpp
bootcamp // GX611 (c) 1987
bootcampa // GX611 (c) 1987
combatsc // GX611 (c) 1988
@@ -9273,10 +9273,10 @@ combatscb // bootleg
combatscj // GX611 (c) 1987 (Japan)
combatsct // GX611 (c) 1987
-//@source:comebaby.cpp
+@source:comebaby.cpp
comebaby // (c) 2000 ExPotato
-//@source:commando.cpp
+@source:commando.cpp
commando // 5/1985 (c) 1985 (World)
commandob // bootleg
commandob2 // bootleg 2
@@ -9286,28 +9286,28 @@ commandou2 // 5/1985 (c) 1985 + Data East license (US)
sinvasn // Europe original?
sinvasnb // bootleg
-//@source:compgolf.cpp
+@source:compgolf.cpp
compgolf // (c) 1985 Data East Corporation (Japan)
compgolfo // (c) 1985 Data East Corporation (Japan)
-//@source:compis.cpp
+@source:compis.cpp
compis // 1985 Telenova Compis
compis2 // 1985 Telenova Compis
-//@source:compucolor.cpp
+@source:compucolor.cpp
compclr2 //
-//@source:comquest.cpp
+@source:comquest.cpp
comquest // Comquest Plus German
-//@source:comx35.cpp
+@source:comx35.cpp
comx35n //
comx35p //
-//@source:concept.cpp
+@source:concept.cpp
concept // 1982 Corvus Concept
-//@source:contra.cpp
+@source:contra.cpp
contra // GX633 (c) 1987
contra1 // GX633 (c) 1987
contrab // bootleg
@@ -9319,7 +9319,7 @@ contraj1 // GX633 (c) 1987 (Japan)
gryzor // GX633 (c) 1987
gryzor1 // GX633 (c) 1987
-//@source:coolpool.cpp
+@source:coolpool.cpp
9ballsht // (c) 1993 E-Scape EnterMedia + "marketed by Bundra Games"
9ballsht2 // (c) 1993 E-Scape EnterMedia + "marketed by Bundra Games"
9ballsht3 // (c) 1993 E-Scape EnterMedia + "marketed by Bundra Games"
@@ -9329,24 +9329,24 @@ amerdart2 // (c) 1989 Ameri Corporation
amerdart3 // (c) 1989 Ameri Corporation
coolpool // (c) 1992 Catalina Games
-//@source:coolridr.cpp
+@source:coolridr.cpp
aquastge //
coolridr // 1995.04 Cool Riders
-//@source:cop01.cpp
+@source:cop01.cpp
cop01 // (c) 1985
cop01a // (c) 1985
mightguy // (c) 1986
-//@source:cops.cpp
+@source:cops.cpp
cops // (c) 1994
copsuk // (c) 1994 (Nova/Deith Leisure)
revlatns // (c) 199?
-//@source:copsnrob.cpp
+@source:copsnrob.cpp
copsnrob // 005625 1976/07 [6502]
-//@source:corona.cpp
+@source:corona.cpp
luckyrlt // (c) 1990 unknown
rcirulet // (c) 199? Entretenimientos GEMINIS
re800ea // (c) 1991 Entretenimientos GEMINIS
@@ -9356,10 +9356,10 @@ winner81 // (c) 1981 Corona Co, Ltd.
winner81b // (c) 1981 Corona Co, Ltd.
winner82 // (c) 1982 Corona Co, Ltd.
-//@source:cortex.cpp
+@source:cortex.cpp
cortex //
-//@source:cosmic.cpp
+@source:cosmic.cpp
cosmica // 7910-AII (c) [1979]
cosmica1 // 7910-A (c) [1979]
cosmica2 // 7910 (c) 1979
@@ -9377,13 +9377,13 @@ panic3 // 8015 (c) 1980
panicger // 8015 (c) 1980
panich // 8015 (c) 1980
-//@source:cosmicos.cpp
+@source:cosmicos.cpp
cosmicos //
-//@source:cp1.cpp
+@source:cp1.cpp
cp1 //
-//@source:cps1.cpp
+@source:cps1.cpp
1941 // 27/02/1990 (c) 1990 (World)
1941j // 2/1990 (c) 1990 (Japan)
1941r1 // 2/1990 (c) 1990 (World)
@@ -9573,7 +9573,7 @@ wofr1 // 02/10/1992 (c) 1992 (World) (CPS1 + QSound)
wofu // 31/10/1992 (c) 1992 (USA) (CPS1 + QSound)
wonder3 // 20/05/1991 (c) 1991 (Japan)
-//@source:cps2.cpp
+@source:cps2.cpp
1944 // 20/06/2000 (c) 2000 Eighting/Raizing (USA)
1944d //
1944j // 20/06/2000 (c) 2000 Eighting/Raizing (Japan)
@@ -9872,7 +9872,7 @@ xmvsfu1d //
xmvsfur1 // 04/10/1996 (c) 1996 (USA)
xmvsfur2 // 10/09/1996 (c) 1996 (USA)
-//@source:cps3.cpp
+@source:cps3.cpp
cps3boot // bootleg
cps3boota // bootleg
cps3bootao // bootleg
@@ -9917,14 +9917,14 @@ sfiiiu // 04/02/1997 (c) 1997 (USA)
warzard // 21/11/1996 (c) 1996 (Japan)
warzardr1 // 23/10/1996 (c) 1996 (Japan)
-//@source:craft.cpp
+@source:craft.cpp
craft // Craft, by [lft]
-//@source:crbaloon.cpp
+@source:crbaloon.cpp
crbaloon // CL (c) 1980 Taito Corporation
crbaloon2 // CL (c) 1980 Taito Corporation
-//@source:crgolf.cpp
+@source:crgolf.cpp
crgolf // (c) 1984 Nasco Japan
crgolfa // (c) 1984 Nasco Japan
crgolfb // (c) 1984 Nasco Japan
@@ -9932,21 +9932,21 @@ crgolfbt // bootleg
crgolfc // (c) 1984 Nasco Japan
crgolfhi // (c) 1984 Nasco Japan
-//@source:crimfght.cpp
+@source:crimfght.cpp
crimfght // GX821 (c) 1989 (US)
crimfght2 // GX821 (c) 1989 (World)
crimfghtj // GX821 (c) 1989 (Japan)
-//@source:crospang.cpp
+@source:crospang.cpp
bestri // (c) F2 System
crospang // (c) 1998 F2 System
heuksun // (c) 1998 Oksan / F2 System
-//@source:crshrace.cpp
+@source:crshrace.cpp
crshrace // (c) 1993 Video System Co.
crshrace2 // (c) 1993 Video System Co.
-//@source:crvision.cpp
+@source:crvision.cpp
crvisio2 //
crvisioj //
crvision // 1981 creatiVision
@@ -9956,7 +9956,7 @@ rameses //
vz2000 //
wizzard //
-//@source:crystal.cpp
+@source:crystal.cpp
crysbios //
crysking // 2001 Brezzasoft. Crystal of the kings
ddz // (c) 200?
@@ -9967,11 +9967,11 @@ psattack // 2004 Uniana
topbladv // 2002 Sonokong. Top Blade V
trivrus // 2009 AGT. Trivia R Us
-//@source:cshooter.cpp
+@source:cshooter.cpp
airraid // (c) 1987 Seibu Kaihatsu
cshootere // (c) 1987 JKH (bootleg)
-//@source:csplayh5.cpp
+@source:csplayh5.cpp
bikiniko // (c) 1999
csplayh1 // (c) 1995
csplayh5 // (c) 1998
@@ -9982,17 +9982,17 @@ junai2 // (c) 1998
mjmania // (c) 1999
thenanpa // (c) 1999
-//@source:cswat.cpp
+@source:cswat.cpp
cswat // (c) 1984
-//@source:ct486.cpp
+@source:ct486.cpp
ct486 // 1993? 486 with CS4031
-//@source:cubeqst.cpp
+@source:cubeqst.cpp
cubeqst // (c) 1983 Simutrek Inc.
cubeqsta // (c) 1983 Simutrek Inc.
-//@source:cubo.cpp
+@source:cubo.cpp
cndypuzl // (c) 1995
cubo // Base unit
haremchl // (c) 1995
@@ -10003,10 +10003,10 @@ mgnumber // (c) 1995
mgprem11 // (c) 1995
odeontw2 // (c) 1999
-//@source:cultures.cpp
+@source:cultures.cpp
cultures // (c) 1994 Face
-//@source:cupidon.cpp
+@source:cupidon.cpp
cashtrn //
funnyfm //
funnyfma //
@@ -10015,7 +10015,7 @@ gangrose //
tsarevna //
tsarevnaa //
-//@source:cv1k.cpp
+@source:cv1k.cpp
ddpdfk // (c) 2008 Cave (AMI license) - 2008/06/23 MASTER VER 1.5
ddpdfk10 // (c) 2008 Cave (AMI license) - 2008/05/16 MASTER VER
deathsml // (c) 2007 Cave (AMI license) - 2007/10/09 MASTER VER
@@ -10042,10 +10042,10 @@ pinkswtsa // (c) 2006 Cave (AMI license) - 2006/04/06 MAST
pinkswtsb // (c) 2006 Cave (AMI license) - 2006/04/06 MASTER VER.
pinkswtsx // (c) 2006 Cave (AMI license) - 2006/xx/xx MASTER VER.
-//@source:cvicny.cpp
+@source:cvicny.cpp
cvicny //
-//@source:cvs.cpp
+@source:cvs.cpp
8ball // (c) 1982 Century
8ball1 // (c) 1982 Century
cosmos // (c) 1981 Century
@@ -10069,10 +10069,10 @@ spacefrt // (c) 1981 Century
superbik // (c) 1983 Century
wallst // (c) 1982 Century
-//@source:cxhumax.cpp
+@source:cxhumax.cpp
hxhdci2k //
-//@source:cyberbal.cpp
+@source:cyberbal.cpp
cyberbal // 136064 (c) 1989
cyberbal2 // 136064 (c) 1989
cyberbal2p // 136071 (c) 1989
@@ -10083,67 +10083,67 @@ cyberbalp // 136064 (c) 1989
cyberbalt // 136073 (c) 1989
cyberbalt1 // 136073 (c) 1989
-//@source:cybertnk.cpp
+@source:cybertnk.cpp
cybertnk // (c) 1990 Coreland
-//@source:cybiko.cpp
+@source:cybiko.cpp
cybikov1 // Cybiko Wireless Intertainment System - Classic V1
cybikov2 // Cybiko Wireless Intertainment System - Classic V2
cybikoxt // Cybiko Wireless Intertainment System - Xtreme
-//@source:cyclemb.cpp
+@source:cyclemb.cpp
cyclemb // P0 (c) 1984 Taito Corporation [+ Seta]
skydest // PD0 (c) 1985 Taito Corporation
-//@source:czk80.cpp
+@source:czk80.cpp
czk80 //
-//@source:d6800.cpp
+@source:d6800.cpp
d6800 // Dream 6800
-//@source:d6809.cpp
+@source:d6809.cpp
d6809 //
-//@source:d9final.cpp
+@source:d9final.cpp
d9final // (c) 1992 Excellent System
-//@source:dacholer.cpp
+@source:dacholer.cpp
dacholer // (c) 1983
itaten // (c) 1984 + Alice
kickboy // (c) 1983
-//@source:dai.cpp
+@source:dai.cpp
dai // DAI
-//@source:dai3wksi.cpp
+@source:dai3wksi.cpp
dai3wksi // 1979.09 Dai San Wakusei (The Third Planet)
-//@source:dambustr.cpp
+@source:dambustr.cpp
dambustr // (c) 1981 South West Research
dambustra // (c) 1981 South West Research
dambustruk // (c) 1981 South West Research
-//@source:darius.cpp
+@source:darius.cpp
darius // A96 (c) 1986 Taito Corporation Japan (World)
dariuse // A96 (c) 1986 Taito Corporation (Japan)
dariusj // A96 (c) 1986 Taito Corporation (Japan)
dariuso // A96 (c) 1986 Taito Corporation (Japan)
dariusu // A96 (c) 1986 Taito America Corporation (US)
-//@source:darkmist.cpp
+@source:darkmist.cpp
darkmist // (c) 1986 Taito
-//@source:darkseal.cpp
+@source:darkseal.cpp
darkseal // MAC (c) 1990 Data East Corporation (World)
darkseal1 // MAC (c) 1990 Data East Corporation (World)
darksealj // MAC (c) 1990 Data East Corporation (Japan)
gatedoom // MAC (c) 1990 Data East Corporation (US)
gatedoom1 // MAC (c) 1990 Data East Corporation (US)
-//@source:daruma.cpp
+@source:daruma.cpp
ds348 // Sigtron Daruma
-//@source:dassault.cpp
+@source:dassault.cpp
dassault // MAJ (c) 1991 Data East Corporation (US)
dassault4 // MAJ (c) 1991 Data East Corporation (US) - 4 Player only
thndzone // MAJ (c) 1991 Data East Corporation (World) - Rev 1
@@ -10151,24 +10151,24 @@ thndzone4 // MAJ (c) 1991 Data East Corporation (World) -
thndzonea // MAJ (c) 1991 Data East Corporation (World)
thndzonej // MAJ (c) 1991 Data East Corporation (Japan) - Some MASK ROMS stamped MAL
-//@source:dblcrown.cpp
+@source:dblcrown.cpp
dblcrown // (c) 1994 Excellent System
-//@source:dblewing.cpp
+@source:dblewing.cpp
dblewing // MBE (c) 1993 Mitchell
-//@source:dbz.cpp
+@source:dbz.cpp
dbz // (c) 1993 Banpresto
dbz2 // (c) 1994 Banpresto
dbza // (c) 1993 Banpresto
-//@source:dccons.cpp
+@source:dccons.cpp
dc // 1999 Sega Dreamcast (USA)
dcdev // 1998 Sega HKT-0120 Sega Dreamcast Development Box
dceu // 1999 Sega Dreamcast (Europe)
dcjp // 1998 Sega Dreamcast (Japan)
-//@source:dcheese.cpp
+@source:dcheese.cpp
cecmatch // (c) 1993 Coastal Amusements
dcheese // (c) 1993 HAR
fredmem // (c) 1994 Coastal Amusements
@@ -10179,25 +10179,25 @@ fredmemus // (c) 1994 Coastal Amusements
fredmesp // (c) 1994 Coastal Amusements
lottof2 // (c) 1993 HAR
-//@source:dcon.cpp
+@source:dcon.cpp
dcon // (c) 1992 Success.
sdgndmps // (c) Banpresto / Bandai (Japan)
-//@source:dct11em.cpp
+@source:dct11em.cpp
dct11em //
-//@source:dday.cpp
+@source:dday.cpp
dday // (c) 1982 Olympia
ddayc // (c) 1982 Olympia + Centuri license
-//@source:ddayjlc.cpp
+@source:ddayjlc.cpp
ddayjlc // (c) 1984 Jaleco
ddayjlca // (c) 1984 Jaleco
-//@source:ddealer.cpp
+@source:ddealer.cpp
ddealer // (c) 1991 NMK
-//@source:ddenlovr.cpp
+@source:ddenlovr.cpp
akamaru // "501" (c) 1996 Dynax
animaljr // "75" (c) 1993 Nakanihon/Taito (USA)
animaljrj // "75" (c) 1993 Nakanihon/Taito (Japan)
@@ -10247,7 +10247,7 @@ sryudens // "502" (c) 1996 Dynax / Face
ultrchmp // "104" (c) 1995 Nakanihon
ultrchmph // "114" (c) 1995 Nakanihon
-//@source:ddragon.cpp
+@source:ddragon.cpp
darktowr // Game Room
ddragon // TA-0021 (c) 1987
ddragon2 // TA-0026 (c) 1988 (World)
@@ -10272,7 +10272,7 @@ toffy // (c) 1993 Midas
tstrike // East Coast Coin Company (Melbourne)
tstrikea // Game Room
-//@source:ddragon3.cpp
+@source:ddragon3.cpp
ctribe // TA-0028 (c) 1990 (US)
ctribe1 // TA-0028 (c) 1990 (US)
ctribeb // bootleg
@@ -10289,11 +10289,11 @@ wwfwfestb // bootleg
wwfwfestj // TA-0031 (c) 1991 (Japan)
wwfwfestk // TA-0031 (c) 1991 (Korea)
-//@source:ddribble.cpp
+@source:ddribble.cpp
ddribble // GX690 (c) 1986
ddribblep // GX690 (c) 1986
-//@source:de_2.cpp
+@source:de_2.cpp
bttf_a20 //
bttf_a21 //
bttf_a27 //
@@ -10312,7 +10312,7 @@ tmac_a18 //
tmac_a24 //
torp_e21 //
-//@source:de_3.cpp
+@source:de_3.cpp
aar_101 //
btmn_101 //
btmn_103 //
@@ -10360,7 +10360,7 @@ trek_201 //
wwfr_103 //
wwfr_106 //
-//@source:de_3b.cpp
+@source:de_3b.cpp
batmanf //
batmanf3 //
bay_e400 //
@@ -10388,13 +10388,13 @@ mav_400 //
mav_401 //
mav_402 //
-//@source:deadang.cpp
+@source:deadang.cpp
deadang // (c) 1988 Seibu Kaihatsu
ghunter // (c) 1988 Seibu Kaihatsu
ghunters // (c) 1988 Seibu Kaihatsu + Segasa/Sonic license
leadang // (c) 1988 Seibu Kaihatsu
-//@source:dec0.cpp
+@source:dec0.cpp
automat // bootleg
baddudes // EI (c) 1988 Data East USA (US)
birdtry // (c) 1988 Data East Corporation (Japan)
@@ -10427,7 +10427,7 @@ slyspy // (c) 1989 Data East USA (US)
slyspy2 // (c) 1989 Data East USA (US)
slyspy3 // (c) 1989 Data East USA (US)
-//@source:dec8.cpp
+@source:dec8.cpp
breywood // (c) 1986 Data East Corporation (Japan)
cobracom // (c) 1988 Data East Corporation (World)
cobracomj // (c) 1988 Data East Corporation (Japan)
@@ -10452,14 +10452,14 @@ shackled // (c) 1986 Data East USA (US)
srdarwin // (c) 1987 Data East Corporation (World)
srdarwinj // (c) 1987 Data East Corporation (Japan)
-//@source:deco_ld.cpp
+@source:deco_ld.cpp
begas // (c) 1983
begas1 // (c) 1983
cobra // (c) 1984
cobraa //
rblaster // (c) 1985
-//@source:deco_mlc.cpp
+@source:deco_mlc.cpp
avengrgs // MCG (c) 1995 Data East Corporation (World)
avengrgsj // MCG (c) 1995 Data East Corporation (Japan)
ddream95 // MCE (c) 1996 Data East Corporation
@@ -10471,14 +10471,14 @@ stadhr96 // MCM (c) 1996 Data East Corporation (World)
stadhr96j // MCM (c) 1996 Data East Corporation (Japan)
stadhr96u // MCM (c) 1996 Data East Corporation (USA)
-//@source:deco156.cpp
+@source:deco156.cpp
hvysmsh // MBG (c) 1993 Data East Corporation (World)
hvysmsha // MBG (c) 1993 Data East Corporation (Asia)
hvysmshj // MBG (c) 1993 Data East Corporation (Japan)
wcvol95 // MBX (c) 1993 Data East
wcvol95x // ?
-//@source:deco32.cpp
+@source:deco32.cpp
captaven // MAN (c) 1991 Data East Corporation (Asia)
captavena // MAN (c) 1991 Data East Corporation (Asia)
captavene // MAN (c) 1991 Data East Corporation (UK)
@@ -10508,7 +10508,7 @@ nslasheru // MBH (c) 1993 Data East Corporation (US)
tattass // prototype (c) 1994 Data East Pinball (US)
tattassa // prototype (c) 1994 Data East Pinball (Asia)
-//@source:decocass.cpp
+@source:decocass.cpp
cadanglr // 25 1982.10 Angler Dangler
castfant // 07 1981.02 Astro Fantasia
cbdash // 44 1985.08 Boulder Dash
@@ -10559,32 +10559,32 @@ ctsttape // ?
czeroize // 37 1983.10 Zeroize
decocass //
-//@source:dectalk.cpp
+@source:dectalk.cpp
dectalk // 1983 Digital Equipment Corporation
-//@source:decwritr.cpp
+@source:decwritr.cpp
la120 // 1978 Digital Equipment Corporation
-//@source:deniam.cpp
+@source:deniam.cpp
croquis // (c) 1996 Deniam (Germany)
karianx // (c) 1996 Deniam
logicpr2 // (c) 1997 Deniam (Japan)
logicpro // (c) 1996 Deniam
-//@source:deshoros.cpp
+@source:deshoros.cpp
destiny // (c) 1983
-//@source:destroyr.cpp
+@source:destroyr.cpp
destroyr // 030131-030136 1977/10 [6800]
destroyr1 // 030131-030136 1977/10 [6800]
-//@source:dfruit.cpp
+@source:dfruit.cpp
dfruit //
-//@source:dgn_beta.cpp
+@source:dgn_beta.cpp
dgnbeta // Dragon Beta
-//@source:dgpix.cpp
+@source:dgpix.cpp
elfin // (c) 1999 dgPIX Entertainment Inc
fmaniac3 // (c) 2002 Saero Entertainment
jumpjump // (c) 1999 dgPIX Entertainment Inc
@@ -10592,36 +10592,36 @@ kdynastg // (c) 1999 EZ Graphics
xfiles // (c) 1999 dgPIX Entertainment Inc
xfilesk // (c) 1999 dgPIX Entertainment Inc (censored for the Korean market)
-//@source:didact.cpp
+@source:didact.cpp
md6802 //
mp68a //
-//@source:dietgo.cpp
+@source:dietgo.cpp
dietgo // MAY (c) 1993
dietgoe // MAY (c) 1993
dietgoj // MAY (c) 1993
dietgou // MAY (c) 1993
-//@source:digel804.cpp
+@source:digel804.cpp
digel804 //
ep804 //
-//@source:dim68k.cpp
+@source:dim68k.cpp
dim68k //
-//@source:discoboy.cpp
+@source:discoboy.cpp
discoboy // (c) 1993 Soft Art Co.
discoboyp // (c) 1993 Soft Art Co. (Promat license?)
-//@source:diverboy.cpp
+@source:diverboy.cpp
diverboy // (c) 1992 Electronic Devices
-//@source:djboy.cpp
+@source:djboy.cpp
djboy // (c) 1989 Kaneko
djboya // (c) 1989 Kaneko
djboyj // (c) 1989 Kaneko
-//@source:djmain.cpp
+@source:djmain.cpp
bm1stmix // GQ753 (c) 1997 (Japan)
bm2ndmix // GX853 (c) 1998 (Japan)
bm2ndmxa // GX853 (c) 1998 (Japan)
@@ -10642,7 +10642,7 @@ popn1 // GX803 (c) 1998 (Asia)
popn2 // GX831 (c) 1998 (Japan)
popn3 // GX980 (c) 1999 (Japan)
-//@source:dkong.cpp
+@source:dkong.cpp
8ballact // (c) 1984 Seatongrove Ltd (Magic Eletronics USA license)
8ballact2 // (c) 1984 Seatongrove Ltd (Magic Eletronics USA license)
dkingjr // bootleg
@@ -10681,7 +10681,7 @@ spcfrcii // (c) 1985 Senko Industries (Magic Eletronics I
spclforc // (c) 1985 Senko Industries (Magic Eletronics Inc. license)
strtheat // (c) 1985 Epos Corporation
-//@source:dlair.cpp
+@source:dlair.cpp
dlair // (c) 1983 Cinematronics
dlair_1 // (c) 1983 Cinematronics
dlair_2 // (c) 1983 Cinematronics
@@ -10699,7 +10699,7 @@ spaceacea // (c) 1983 Cinematronics
spaceacea2 // (c) 1983 Cinematronics
spaceaceeuro // (c) 1983 Atari
-//@source:dlair2.cpp
+@source:dlair2.cpp
dlair2 // (c) 1991 Leland
dlair2_200 // (c) 1991 Leland
dlair2_211 // (c) 1991 Leland
@@ -10716,25 +10716,25 @@ dlair2_319s // (c) 1991 Leland
spacea91 // (c) 1991 Leland
spacea91_13e // (c) 1991 Leland
-//@source:dm7000.cpp
+@source:dm7000.cpp
dm500 //
dm5620 //
dm7000 //
-//@source:dmndrby.cpp
+@source:dmndrby.cpp
dmndrby // G4001 'DD' (c) 1986
dmndrbya // G4001 'DD' (c) 1986
-//@source:dms5000.cpp
+@source:dms5000.cpp
dms5000 //
-//@source:dms86.cpp
+@source:dms86.cpp
dms86 //
-//@source:dmv.cpp
+@source:dmv.cpp
dmv //
-//@source:docastle.cpp
+@source:docastle.cpp
asoccer // 8461 (c) 1987
docastle // 8302 (c) 1983
docastle2 // 8302 (c) 1983
@@ -10751,19 +10751,19 @@ jjack // ???? (c) 1984
kickridr // ???? (c) 1984
spiero // ???? (c) 1987
-//@source:dogfgt.cpp
+@source:dogfgt.cpp
dogfgt // TA-0011 (c) 1984
dogfgtj // TA-0011 (c) 1984
dogfgtu // TA-0011 (c) 1985 Data East USA, Inc.
-//@source:dolphunk.cpp
+@source:dolphunk.cpp
dauphin //
-//@source:dominob.cpp
+@source:dominob.cpp
dominob // (c) 1996 Wonwoo Systems
dominobv2 // (c) 1996 Wonwoo Systems
-//@source:dooyong.cpp
+@source:dooyong.cpp
bluehawk // (c) 1993 Dooyong
bluehawkn // (c) 1993 NTC
ddaydoo // (c) 1990 Dooyong
@@ -10787,17 +10787,17 @@ sadari // (c) 1993 NTC
superx // (c) 1994 NTC
superxm // (c) 1994 Mitchell
-//@source:dorachan.cpp
+@source:dorachan.cpp
dorachan // (c) 1980 Craul Denshi
-//@source:dotrikun.cpp
+@source:dotrikun.cpp
dotrikun // cabinet test board
dotrikun2 // cabinet test board
-//@source:dps1.cpp
+@source:dps1.cpp
dps1 //
-//@source:dragon.cpp
+@source:dragon.cpp
d64plus // Dragon 64 + Compusense Plus addon
dgnalpha // Dragon Alpha
dragon200 // Dragon 200
@@ -10806,13 +10806,13 @@ dragon32 // Dragon 32
dragon64 // Dragon 64
tanodr64 // Tano Dragon 64 (NTSC)
-//@source:dragrace.cpp
+@source:dragrace.cpp
dragrace // 008505-008521 1977/06 [6800]
-//@source:dreambal.cpp
+@source:dreambal.cpp
dreambal // MM
-//@source:dreamwld.cpp
+@source:dreamwld.cpp
baryon // (c) 1997 SemiCom
baryona // (c) 1997 SemiCom
cutefght // (c) 1998 SemiCom
@@ -10820,41 +10820,41 @@ dreamwld // (c) 2000 SemiCom
gaialast // (c) 1999 SemiCom
rolcrush // (c) 1999 Trust
-//@source:drgnmst.cpp
+@source:drgnmst.cpp
drgnmst // (c) 1994
-//@source:dribling.cpp
+@source:dribling.cpp
dribling // (c) 1983 Model Racing
driblingbr // bootleg
driblingo // (c) 1983 Olympia
-//@source:drmicro.cpp
+@source:drmicro.cpp
drmicro // (c) 1983 Sanritsu
-//@source:drtomy.cpp
+@source:drtomy.cpp
drtomy // (c) 1993 no copyright message (1993 on pcb), some code taken from 'Big Karnak'
-//@source:drw80pkr.cpp
+@source:drw80pkr.cpp
drw80pk2 // (c) 1983 IGT
drw80pkr // (c) 1982 IGT
-//@source:dsb46.cpp
+@source:dsb46.cpp
dsb46 //
-//@source:dual68.cpp
+@source:dual68.cpp
dual68 //
-//@source:dunhuang.cpp
+@source:dunhuang.cpp
dunhuang // (c) 1995
-//@source:dvk_kcgd.cpp
+@source:dvk_kcgd.cpp
dvk_kcgd //
-//@source:dvk_ksm.cpp
+@source:dvk_ksm.cpp
dvk_ksm //
dvk_ksm01 //
-//@source:dwarfd.cpp
+@source:dwarfd.cpp
dwarfd // (c) 198? Electro-Sports
dwarfda // (c) 198? Electro-Sports
qc // (c) 1995 ArJay Exports/Prestige Games
@@ -10862,10 +10862,10 @@ quarterh // (c) 1983 Electro-Sports
quarterha // (c) 1983 Electro-Sports
quarterhb // (c) 1983 Electro-Sports
-//@source:dynadice.cpp
+@source:dynadice.cpp
dynadice // ?
-//@source:dynax.cpp
+@source:dynax.cpp
7jigen // "37" 7jigen no Youseitachi 1990 Dynax
blktouch // (c) Yang Gi Co Ltd.
cdracula // (c) 1994 Y.S.E.
@@ -10912,7 +10912,7 @@ tenkaicb // (c) 1991 bootleg
tenkaie // (c) 1991 Dynax
yarunara // "55" Mahjong Yarunara 1991 Dynax
-//@source:dynduke.cpp
+@source:dynduke.cpp
dbldynj // (c) 1989 Seibu Kaihatsu
dbldynu // (c) 1989 Seibu Kaihatsu + Fabtek license
dynduke // (c) 1989 Seibu Kaihatsu
@@ -10920,20 +10920,20 @@ dyndukea // (c) 1989 Seibu Kaihatsu
dyndukej // (c) 1989 Seibu Kaihatsu
dyndukeu // (c) 1989 Seibu Kaihatsu + Fabtek license
-//@source:eacc.cpp
+@source:eacc.cpp
eacc //
-//@source:ec184x.cpp
+@source:ec184x.cpp
ec1840 //
ec1841 //
ec1845 //
ec1847 //
-//@source:ec65.cpp
+@source:ec65.cpp
ec65 //
ec65k //
-//@source:ecoinf1.cpp
+@source:ecoinf1.cpp
ec_bar5 // Bar 5 (older PCB) (Electrocoin)
ec_barxo // Bar X (older PCB) (Electrocoin)
ec_barxoa //
@@ -10944,7 +10944,7 @@ ec_barxoe //
ec_casbxo // Casino Bar X (older PCB) (Electrocoin)
ec_casbxoa //
-//@source:ecoinf2.cpp
+@source:ecoinf2.cpp
ec_oxocg // Oxo Classic Gold (Electrocoin)
ec_oxocl // Oxo Club (Electrocoin)
ec_oxogb // Oxo Golden Bars (Electrocoin)
@@ -10955,7 +10955,7 @@ ec_sumnc // Casino Super Multi Nudger (Concept/Electrocoi
ec_sumnd // Super Multi Nudger (Concept/Electrocoin)
ec_suprl // Super Reels (Electrocoin)
-//@source:ecoinf3.cpp
+@source:ecoinf3.cpp
ec_laby // Labyrinth (Electrocoin)
ec_labya //
ec_penni // Pennies From Heaven (Electrocoin)
@@ -10969,7 +10969,7 @@ ec_sphinb //
ec_stair // Stairway to Heaven
ec_staira //
-//@source:ecoinfr.cpp
+@source:ecoinfr.cpp
ec_bar7 // Bar 7 (Concept)
ec_barx // Bar X (Electrocoin)
ec_barx__0 //
@@ -11410,44 +11410,44 @@ ec_unk5__b //
ec_unk5__c //
ec_unkt // Unknown 'T' (MAB PCB) (Concept - Electrocoin)
-//@source:egghunt.cpp
+@source:egghunt.cpp
egghunt // (c) 1995 Invi Image
-//@source:einstein.cpp
+@source:einstein.cpp
einst256 //
einstei2 //
einstein //
-//@source:elecbowl.cpp
+@source:elecbowl.cpp
elecbowl // Marx
-//@source:electra.cpp
+@source:electra.cpp
avenger // (c) 1975 Electra
-//@source:electron.cpp
+@source:electron.cpp
electron // 1983 Acorn Electron
-//@source:elekscmp.cpp
+@source:elekscmp.cpp
elekscmp //
-//@source:elf.cpp
+@source:elf.cpp
elf2 //
-//@source:elwro800.cpp
+@source:elwro800.cpp
elwro800 //
-//@source:embargo.cpp
+@source:embargo.cpp
embargo //
-//@source:enigma2.cpp
+@source:enigma2.cpp
enigma2 // (c) 1981 Game Plan (Zilec Electronics license)
enigma2a // (c) 1984 Zilec Electronics (bootleg?)
enigma2b // (c) 1981 Zilec Electronics
-//@source:enmirage.cpp
+@source:enmirage.cpp
enmirage // 1985 Mirage Digital Multi-Sampler
-//@source:eolith.cpp
+@source:eolith.cpp
candy // (c) 1999 Eolith
fort2b // (c) 2001 Eolith
fort2ba // (c) 2001 Eolith
@@ -11468,15 +11468,15 @@ puzzlekg // (c) 1998 Eolith
raccoon // (c) 1999 Eolith
stealsee // (c) 2000 Moov Generation / Eolith
-//@source:eolith16.cpp
+@source:eolith16.cpp
klondkp // (c) 1999 Eolith
-//@source:ep64.cpp
+@source:ep64.cpp
ep128 // Enterprise 128
ep64 // Enterprise 64
phc64 // Hegener & Glaser Mephisto PHC 64
-//@source:epos.cpp
+@source:epos.cpp
catapult // (c) 1982
dealer // (c) 198?
igmo // (c) 1984
@@ -11487,14 +11487,14 @@ theglob // (c) 1983
theglob2 // (c) 1983
theglob3 // (c) 1983
-//@source:eprom.cpp
+@source:eprom.cpp
eprom // 136069 (c) 1989
eprom2 // 136069 (c) 1989
guts // prototype
klaxp1 // prototype
klaxp2 // prototype
-//@source:equites.cpp
+@source:equites.cpp
bullfgtr // (c) 1984 Alpha Denshi Co.
bullfgtrs // (c) 1984 Alpha Denshi Co./Sega
equites // (c) 1984 Alpha Denshi Co.
@@ -11504,13 +11504,13 @@ hvoltage // (c) 1985 Alpha Denshi Co.
kouyakyu // (c) 1985 Alpha Denshi Co.
splndrbt // (c) 1985 Alpha Denshi Co.
-//@source:ertictac.cpp
+@source:ertictac.cpp
ertictac // (c) 1992 Sisteme
ertictaca // (c) 1992 Sisteme
ertictacb // (c) 1992 Sisteme
poizone // (c) 1990 Sisteme
-//@source:esd16.cpp
+@source:esd16.cpp
deluxe5 // (c) 2000 ESD
deluxe5a // (c) 2000 ESD
deluxe5b // (c) 2000 ESD
@@ -11528,22 +11528,22 @@ multchmpk // (c) 1998 (Korea)
swatpolc // (c) 2001 ESD
tangtang // (c) 2000 ESD
-//@source:esh.cpp
+@source:esh.cpp
esh // (c) 1984 Funai / Gakken
esha // (c) 1984 Funai / Gakken
eshb // (c) 1984 Funai / Gakken
-//@source:espial.cpp
+@source:espial.cpp
espial // (c) 1983 Thunderbolt, Orca logo is hidden in title screen
espialu // (c) 1983 Thunderbolt, Orca logo is hidden in title screen
netwars // (c) 1983 Orca + Esco Trading Co license
-//@source:esq1.cpp
+@source:esq1.cpp
esq1 // 1986 ESQ-1 Digital Wave Synthesizer
esqm // 1986 ESQ-M rack-mount ESQ-1
sq80 // 1988 SQ-80 Digital Wave Synthesizer
-//@source:esq5505.cpp
+@source:esq5505.cpp
eps // 1988 EPS
eps16p // 1990 EPS 16 Plus
sd1 // 1990 SD-1
@@ -11553,58 +11553,58 @@ sqrack // 1990 SQ-Rack
vfx // 1989 VFX
vfxsd // 1989 VFX-SD
-//@source:esqasr.cpp
+@source:esqasr.cpp
asr10 // 1992 ASR-10
asrx // 1997 ASR-X
-//@source:esqkt.cpp
+@source:esqkt.cpp
kt76 // 1996 KT-76
-//@source:esqmr.cpp
+@source:esqmr.cpp
mr61 // 1996 MR-61
mrrack // 1996 MR-Rack
-//@source:esripsys.cpp
+@source:esripsys.cpp
turbosub // (c) 1985 Entertainment Sciences
turbosub6 // (c) 1985 Entertainment Sciences
turbosub7 // (c) 1985 Entertainment Sciences
-//@source:et3400.cpp
+@source:et3400.cpp
et3400 //
-//@source:eti660.cpp
+@source:eti660.cpp
eti660 //
-//@source:ettrivia.cpp
+@source:ettrivia.cpp
promutrv // (c) 1985 Enerdyne Technologies Inc
promutrva // (c) 1985 Enerdyne Technologies Inc
promutrvb // (c) 1985 Enerdyne Technologies Inc
promutrvc // (c) 1985 Enerdyne Technologies Inc
strvmstr // (c) 1986 Enerdyne Technologies Inc
-//@source:europc.cpp
+@source:europc.cpp
europc // 1988 Schneider Euro PC (CGA or Hercules)
-//@source:evmbug.cpp
+@source:evmbug.cpp
evmbug //
-//@source:excali64.cpp
+@source:excali64.cpp
excali64 //
-//@source:exedexes.cpp
+@source:exedexes.cpp
exedexes // 2/1985 (c) 1985
savgbees // 2/1985 (c) 1985 + Memetron license
-//@source:exelv.cpp
+@source:exelv.cpp
exeltel //
exl100 //
-//@source:exerion.cpp
+@source:exerion.cpp
exerion // (c) 1983 Jaleco
exerionb // bootleg
exeriont // (c) 1983 Jaleco + Taito America license
-//@source:exidy.cpp
+@source:exidy.cpp
fax // (c) 1983
fax2 // (c) 1983
hardhat // (c) 1982
@@ -11629,7 +11629,7 @@ venture // (c) 1981
venture2 // (c) 1981
venture4 // (c) 1981
-//@source:exidy440.cpp
+@source:exidy440.cpp
catch22 // (c) 1985
cheyenne // (c) 1984
chiller // (c) 1986
@@ -11646,15 +11646,15 @@ whodunit8 // (c) 1988
yukon // (c) 1989
yukon1 // (c) 1989
-//@source:exidyttl.cpp
+@source:exidyttl.cpp
attckexd // (c) 1977 Exidy
attckexd2 // (c) 1977 Exidy
deathrac // (c) 1976 Exidy
-//@source:exp85.cpp
+@source:exp85.cpp
exp85 //
-//@source:expro02.cpp
+@source:expro02.cpp
fantasia // (c) 1994 Comad & New Japan System
fantasiaa // (c) 1994 Comad & New Japan System
fantasiab // (c) 1994 Comad & New Japan System
@@ -11682,7 +11682,7 @@ supmodel // (c) 1994 Comad & New Japan System
wownfant // (c) 2002 Comad
zipzap // (c) 1995 Barko Corp
-//@source:exprraid.cpp
+@source:exprraid.cpp
exprraid // (c) 1986 Data East Corporation
exprraidi // (c) 1986 Data East Corporation PCB manufactured by Gecas under license
exprraidu // (c) 1986 Data East USA (US)
@@ -11691,10 +11691,10 @@ wexpressb1 // bootleg
wexpressb2 // bootleg
wexpressb3 // bootleg
-//@source:exterm.cpp
+@source:exterm.cpp
exterm // (c) 1989 Premier Technology - a Gottlieb game
-//@source:extrema.cpp
+@source:extrema.cpp
adults // Adults Only (Russia)
bloto // Blits Loto (Russia)
blpearl // Black Pearl (Russia)
@@ -11706,38 +11706,38 @@ luckshel // Lucky Shell (Russia)
maski // Maski Show (Russia)
strlink // Strong Link (Russia)
-//@source:exzisus.cpp
+@source:exzisus.cpp
exzisus // B12 (c) 1987 Taito Corporation (Japan)
exzisusa // B23 (c) 1987 Taito Corporation (Japan)
exzisust // B23 (c) 1987 TAD Corp (based on Japan Conversion)
-//@source:f1gp.cpp
+@source:f1gp.cpp
f1gp // (c) 1991 Video System Co.
f1gp2 // (c) 1992 Video System Co.
f1gpb // bootleg
-//@source:f-32.cpp
+@source:f-32.cpp
mosaicf2 // (c) 1999 F2 System
royalpk2 //
-//@source:famibox.cpp
+@source:famibox.cpp
famibox // 1986
-//@source:fantland.cpp
+@source:fantland.cpp
borntofi // (c) International Games?
fantland // (c) 198? Electronic Devices Italy
fantlanda // (c) 198? Electronic Devices Italy
galaxygn // (c) 1989 Electronic Devices Italy
wheelrun // (c) 1988? International Games
-//@source:fanucs15.cpp
+@source:fanucs15.cpp
fanucs15 // 1990
-//@source:fanucspmg.cpp
+@source:fanucspmg.cpp
fanucspg // 1983
fanucspgm // 1983
-//@source:fastfred.cpp
+@source:fastfred.cpp
boggy84 // (c) 1984 Kaneko
boggy84b // bootleg
fastfred // 136009 (c) 1982 Atari
@@ -11749,23 +11749,23 @@ jumpcoas // (c) 1983 Kaneko
jumpcoast // (c) 1983 Taito
redrobin // (c) 1986 Elettronolo
-//@source:fastinvaders.cpp
+@source:fastinvaders.cpp
fi6845 //
fi8275 //
-//@source:fastlane.cpp
+@source:fastlane.cpp
fastlane // GX752 (c) 1987
-//@source:fb01.cpp
+@source:fb01.cpp
fb01 // 1986 FB-01
-//@source:fc100.cpp
+@source:fc100.cpp
fc100 //
-//@source:fcombat.cpp
+@source:fcombat.cpp
fcombat // (c) 1985 Jaleco
-//@source:fcrash.cpp
+@source:fcrash.cpp
cawingb2 // bootleg
cawingbl // bootleg
dinopic // bootleg
@@ -11787,14 +11787,14 @@ sf2mdtb // bootleg
sgyxz // bootleg (All-In Electronics)
slampic // bootleg
-//@source:feversoc.cpp
+@source:feversoc.cpp
feversoc // (c) 2004
-//@source:fgoal.cpp
+@source:fgoal.cpp
fgoal // TF (c) 1979 Taito Corporation
fgoala // MF (c) 1979 Taito Corporation
-//@source:fidel6502.cpp
+@source:fidel6502.cpp
csc // CSC: Champion Sensory Chess Challenger (English)
cscfr // * French
cscg // * German
@@ -11803,13 +11803,13 @@ fexcel //
fexcelv //
fscc12 //
-//@source:fidel68k.cpp
+@source:fidel68k.cpp
feagv10 //
feagv11 //
feagv2 //
feagv7 //
-//@source:fidelz80.cpp
+@source:fidelz80.cpp
bridgec3 //
cc10 //
cc7 //
@@ -11827,14 +11827,14 @@ vscfr // * French
vscg // * German
vscsp // * Spanish
-//@source:finalizr.cpp
+@source:finalizr.cpp
finalizr // GX523 (c) 1985
finalizrb // bootleg
-//@source:fireball.cpp
+@source:fireball.cpp
fireball //
-//@source:firebeat.cpp
+@source:firebeat.cpp
bm36th // GCA21 (c) 2001 (Japan)
bm37th // GCB07 (c) 2002 (Japan JCA)
bm3core // GCA05 (c) 2000 (Japan)
@@ -11853,46 +11853,46 @@ ppp // GQ977 (c) 2000 (Japan)
ppp11 // GQ977 (c) 2000 (Japan)
ppp1mp // GQA11 (c) 2000 (Japan)
-//@source:firefox.cpp
+@source:firefox.cpp
firefox // 136026 (c) 1984
firefoxa // 136026 (c) 1984
-//@source:firetrap.cpp
+@source:firetrap.cpp
firetrap // (c) 1986 Data East USA (US)
firetrapa // (c) 1986 Data East USA (US)
firetrapbl // bootleg
firetrapj // (c) 1986 Wood Place Inc. (Japan)
-//@source:firetrk.cpp
+@source:firetrk.cpp
firetrk // 030926 1978/06 [6808]
montecar // 035763-035780 1980/04 [6502]
superbug // 009115-009467 1977/09 [6800]
-//@source:fitfight.cpp
+@source:fitfight.cpp
bbprot // unfinished prototype
fitfight // bootleg of Art of Fighting
histryma // bootleg of Fighter's History
hotmindff // (c) Playmark
-//@source:fk1.cpp
+@source:fk1.cpp
fk1 //
-//@source:flicker.cpp
+@source:flicker.cpp
flicker //
-//@source:flipjack.cpp
+@source:flipjack.cpp
flipjack // 1983? Jackson Co., Ltd.
-//@source:flkatck.cpp
+@source:flkatck.cpp
flkatck // GX669 (c) 1987 (Japan)
flkatcka // GX669 (c) 1987 (Japan)
mx5000 // GX669 (c) 1987
-//@source:flower.cpp
+@source:flower.cpp
flower // (c) 1986 Komax license
flowerj // 834-5998 (c) 1986 Sega / Alpha license?
-//@source:flstory.cpp
+@source:flstory.cpp
flstory // A45 (c) 1985 Taito Corporation
flstoryj // A45 (c) 1985 Taito Corporation (Japan)
onna34ro // A52 (c) 1985 Taito Corporation (Japan)
@@ -11900,11 +11900,11 @@ onna34roa // A52 (c) 1985 Taito Corporation (Japan)
rumba // A23 (c) 1985 Taito Corporation (Japan)
victnine // A16 (c) 1985 Taito Corporation (Japan)
-//@source:flyball.cpp
+@source:flyball.cpp
flyball // 005629 1976/07 [6502]
flyball1 // 005629 1976/07 [6502]
-//@source:fm7.cpp
+@source:fm7.cpp
fm11 // 1982 FM-11 EX
fm16beta // 1983 FM-16 Beta
fm7 //
@@ -11913,7 +11913,7 @@ fm77av //
fm8 // 1981
fmnew7 //
-//@source:fmtowns.cpp
+@source:fmtowns.cpp
carmarty // Fujitsu FM-Towns Car Marty
fmtmarty // 1993 Fujitsu FM-Towns Marty
fmtmarty2 // 1993 Fujitsu FM-Towns Marty 2
@@ -11925,32 +11925,32 @@ fmtownsmx // FM-Towns II MX
fmtownssj // FM-Towns II SJ
fmtownsux // 1991.11 FM-Towns II UX
-//@source:foodf.cpp
+@source:foodf.cpp
foodf // 136020 (c) 1982 // made by Gencomp
foodf1 // 136020 (c) 1982 // made by Gencomp
foodf2 // 136020 (c) 1982 // made by Gencomp
foodfc // 136020 (c) 1982 // made by Gencomp
-//@source:force68k.cpp
+@source:force68k.cpp
fccpu1 //
-//@source:forte2.cpp
+@source:forte2.cpp
pesadelo // (c) 1989 Forte II Games
-//@source:fortecar.cpp
+@source:fortecar.cpp
fortecar //
fortecrd //
-//@source:fp1100.cpp
+@source:fp1100.cpp
fp1100 //
-//@source:fp200.cpp
+@source:fp200.cpp
fp200 //
-//@source:fp6000.cpp
+@source:fp6000.cpp
fp6000 //
-//@source:freekick.cpp
+@source:freekick.cpp
countrun // (c) 1988 Nihon System (+ optional Sega) NS6201-A 1988.3
countrunb // (c) 1988 bootleg
countrunb2 // (c) 1988 bootleg
@@ -11967,15 +11967,15 @@ pbillrd // (c) 1987 Nihon System
pbillrds // (c) 1987 Nihon System (Sega license?)
pbillrdsa // (c) 1987 Nihon System (Sega license?)
-//@source:fresh.cpp
+@source:fresh.cpp
fresh // (c) Chain Leisure
-//@source:fromanc2.cpp
+@source:fromanc2.cpp
fromanc2 // (c) 1995 Video System Co. (Japan)
fromanc4 // (c) 1998 Video System Co. (Japan)
fromancr // (c) 1995 Video System Co. (Japan)
-//@source:fromance.cpp
+@source:fromance.cpp
daiyogen // [1990] Video System Co. (Japan)
fromance // (c) 1991 Video System Co. (Japan)
idolmj // [1988] (c) System Service (Japan)
@@ -11985,33 +11985,33 @@ natsuiro // [1989] Video System presents (Japan)
nekkyoku // [1988] Video System Co. (Japan)
nmsengen // (c) 1991 Video System (Japan)
-//@source:fruitpc.cpp
+@source:fruitpc.cpp
fruitpc // ???
gogostrk //
-//@source:ft68m.cpp
+@source:ft68m.cpp
ft68m //
-//@source:fungames.cpp
+@source:fungames.cpp
biplane4 // (c) 1976 Fun Games
take5 // (c) 1975 Fun Games
-//@source:funkball.cpp
+@source:funkball.cpp
funkball // (c) 1998 dgPIX Entertainment Inc
-//@source:funkybee.cpp
+@source:funkybee.cpp
funkybee // (c) 1982 Orca
funkybeeb // (c) 1982 Orca
skylancr // (c) 1983 Orca
skylancre // (c) 1983 Orca + Esco Trading Co license
-//@source:funkyjet.cpp
+@source:funkyjet.cpp
funkyjet // MAT (c) 1992 Data East (Mitchell license) (World, Rev 1)
funkyjeta // MAT (c) 1992 Data East (Mitchell license) (World) - Rev unverified
funkyjetj // MAT (c) 1992 Data East (Mitchell license) (Japan, Rev 2)
sotsugyo // (c) 1995 Mitchell (Atlus license)
-//@source:funworld.cpp
+@source:funworld.cpp
bigdeal // (c) 1986 Fun World
bigdealb // (c) 1986 Fun World
bonuscrd // (c) 1986 Fun World
@@ -12090,26 +12090,26 @@ vegasmil // (c) 1993 Mile
vegasslw // (c) 1993 Fun World
witchryl // (c) 199? Video Klein
-//@source:funybubl.cpp
+@source:funybubl.cpp
funybubl // (c) 1999 In Chang Electronic Co
funybublc // (c) 1999 Comad Industries
-//@source:fuukifg2.cpp
+@source:fuukifg2.cpp
gogomile // (c) 1995
gogomileo // (c) 1995 (Japan)
pbancho // (c) 1996 (Japan)
-//@source:fuukifg3.cpp
+@source:fuukifg3.cpp
asurabld // (c) 1998 (Japan)
asurabus // (c) 2000 (Japan)
asurabusa // review build
-//@source:g627.cpp
+@source:g627.cpp
rota_101 //
rota_115 //
rotation //
-//@source:gaelco.cpp
+@source:gaelco.cpp
bigkarnk // (c) 1991 - Ref 901112-1
biomtoy // (c) 1995 - Ref 922804/2 - (unprotected)
biomtoya // (c) 1995 - Ref 922804/2 - (unprotected)
@@ -12117,7 +12117,7 @@ maniacsp // (c) 1996 - Ref 922804/2 - (prototype)
squash // (c) 1992 - Ref 922804/2
thoop // (c) 1992 - Ref 922804/1
-//@source:gaelco2.cpp
+@source:gaelco2.cpp
aligator // (c) 1994 - Ref 940411
aligatorun // (c) 1994 - Ref 940411 (unprotected)
bang // (c) 1998 - Ref ???
@@ -12133,7 +12133,7 @@ touchgoe // (c) 1995 - Ref 950510-1
touchgon // (c) 1995 - Ref 950906
wrally2 // (c) 1995 - Ref 950510
-//@source:gaelco3d.cpp
+@source:gaelco3d.cpp
radikalb // (c) 1998 - Ref ???
radikalba // (c) 1998 - Ref ???
speedup // (c) 1996 - Ref ???
@@ -12141,7 +12141,7 @@ speedup10 // (c) 1996 - Ref ???
surfplnt // (c) 1997 - Ref 971223
surfplnt40 // (c) 1997 - Ref 970514
-//@source:gaiden.cpp
+@source:gaiden.cpp
drgnbowl // (c) 1992 Nics
drgnbowla // (c) 1992 Nics
gaiden // 6215 - (c) 1988 Tecmo (US)
@@ -12156,10 +12156,10 @@ tknight // (c) 1989 Tecmo
wildfang // (c) 1989 Tecmo
wildfangs // (c) 1989 Tecmo
-//@source:gal3.cpp
+@source:gal3.cpp
gal3 // (c) 1992 (Arcade TV Game List - P.73, Right, 6 from top)
-//@source:galaga.cpp
+@source:galaga.cpp
battles // bootleg
bosco // (c) 1981
boscomd // (c) 1981 Midway
@@ -12187,22 +12187,22 @@ xeviousa // 136018 (c) 1982 + Atari license
xeviousb // 136018 (c) 1982 + Atari license
xeviousc // 136018 (c) 1982 + Atari license
-//@source:galastrm.cpp
+@source:galastrm.cpp
galastrm // C99 (c) 1992 Taito Corporation
-//@source:galaxi.cpp
+@source:galaxi.cpp
galaxi // (c) 2000 BRL S.R.L. Bologna
lastfour // (c) 2001 BRL S.R.L. Bologna
magjoker // (c) 2000 BRL S.R.L. Bologna
-//@source:galaxia.cpp
+@source:galaxia.cpp
astrowar // (c) 1980
galaxia // (c) 1979
galaxiaa // (c) 1979
galaxiab // (c) 1979
galaxiac // (c) 1979
-//@source:galaxian.cpp
+@source:galaxian.cpp
600 // GX353 (c) 1981 Konami
amidar // GX337 (c) 1982 Konami
amidar1 // GX337 (c) 1981 Konami
@@ -12385,7 +12385,7 @@ zerotimed // hack
zigzagb // (c) 1982 LAX (bootleg)
zigzagb2 // (c) 1982 LAX (bootleg)
-//@source:galaxold.cpp
+@source:galaxold.cpp
4in1 // (c) 1981 Armenia / Food and Fun
bagmanm2 // (c) 1984 Valadon Automation / GIB
bagmanmc // bootleg
@@ -12420,17 +12420,17 @@ tazzmang2 // bootleg
trvchlng // [1985] Joyland (Senko license)
vpool // bootleg
-//@source:galaxy.cpp
+@source:galaxy.cpp
galaxy //
galaxyp //
-//@source:galeb.cpp
+@source:galeb.cpp
galeb //
-//@source:galgame.cpp
+@source:galgame.cpp
galgame // (c) 1971 Computer Recreations, Inc
-//@source:galivan.cpp
+@source:galivan.cpp
dangar // (c) 1986
dangar2 // (c) 1986
dangarb // bootleg
@@ -12443,7 +12443,7 @@ youma2 // (c) 1986 (Japan)
youmab // bootleg
youmab2 // bootleg
-//@source:galpani2.cpp
+@source:galpani2.cpp
galpani2 // (c) 1993 Kaneko
galpani2e // (c) 1993 Kaneko
galpani2e2 // (c) 1993 Kaneko
@@ -12455,40 +12455,40 @@ galpani2t // (c) 1993 Kaneko
gp2quiz // (c) 1993 Kaneko
gp2se // (c) 1994 Kaneko
-//@source:galpani3.cpp
+@source:galpani3.cpp
galpani3 // (c) 1995 Kaneko (World)
galpani3hk // (c) 1995 Kaneko (Hong Kong)
galpani3j // (c) 1995 Kaneko (Japan)
galpani3k // (c) 1995 Kaneko (Korea)
-//@source:galpanic.cpp
+@source:galpanic.cpp
galpanic // (c) 1990 Kaneko
galpanica // (c) 1990 Kaneko
-//@source:galspnbl.cpp
+@source:galspnbl.cpp
galspnbl // (c) 1996 Comad
hotpinbl // (c) 1995 Comad & New Japan System
-//@source:gamate.cpp
+@source:gamate.cpp
gamate // Bit Corp Gamate
-//@source:gambl186.cpp
+@source:gambl186.cpp
gambl186 // unknown
gambl186a // unknown
gambl186b // unknown
-//@source:gamecom.cpp
+@source:gamecom.cpp
gamecom // Tiger Game.com
-//@source:gamecstl.cpp
+@source:gamecstl.cpp
gamecst2 // MAME based bootleg, version 2.613
gamecstl // MAME based bootleg
-//@source:gameking.cpp
+@source:gameking.cpp
gamekin3 //
gameking //
-//@source:gameplan.cpp
+@source:gameplan.cpp
challeng // (c) 1981 Centuri
kaos // (c) 1981
killcom // (c) 1980 Centuri
@@ -12498,14 +12498,14 @@ megatack // (c) 1980 Centuri
piratetr // (c) 1982
potogold // (c) 1982
-//@source:gamepock.cpp
+@source:gamepock.cpp
gamepock // Epoch Game Pocket Computer
-//@source:gammagic.cpp
+@source:gammagic.cpp
99bottles // (c) 1999 Bally Gaming Co.
gammagic // (c) 1999 Bally Gaming Co.
-//@source:gamtor.cpp
+@source:gamtor.cpp
ancienta //
ancientaa //
ancientab //
@@ -12687,7 +12687,7 @@ llcharm //
llcharma //
megakat //
-//@source:gaplus.cpp
+@source:gaplus.cpp
galaga3 // (c) 1984
galaga3a // (c) 1984
galaga3b // (c) 1984
@@ -12698,12 +12698,12 @@ gaplusa // (c) 1984
gaplusd // (c) 1984
gaplust // (c) 1984
-//@source:gatron.cpp
+@source:gatron.cpp
bingo // Game-A-Tron?
poker41 // (c) 1983 Game-A-Tron
pulltabs // (c) 1983 Game-A-Tron
-//@source:gauntlet.cpp
+@source:gauntlet.cpp
gaunt2 // 136043 (c) 1986
gaunt22p // 136043 (c) 1986
gaunt22p1 // 136043 (c) 1986
@@ -12733,7 +12733,7 @@ vindctr2 // 136059 (c) 1988
vindctr2r1 // 136059 (c) 1988
vindctr2r2 // 136059 (c) 1988
-//@source:gb.cpp
+@source:gb.cpp
gameboy // Nintendo Game Boy Handheld
gbcolor // Nintendo Game Boy Color Handheld
gbpocket // Nintendo Game Boy Pocket Handheld
@@ -12741,19 +12741,19 @@ megaduck // Megaduck
supergb // Nintendo Super Game Boy SNES Cartridge
supergb2 //
-//@source:gba.cpp
+@source:gba.cpp
gba // Nintendo Game Boy Advance Handheld
-//@source:gberet.cpp
+@source:gberet.cpp
gberet // GX577 (c) 1985
gberetb // bootleg on different hardware
mrgoemon // GX621 (c) 1986 (Japan)
rushatck // GX577 (c) 1985
-//@source:gcpinbal.cpp
+@source:gcpinbal.cpp
gcpinbal // (c) 1994 Excellent System
-//@source:gei.cpp
+@source:gei.cpp
amuse // (c) 1982 Greyhound Electronics
amuse1 // (c) 1982 Greyhound Electronics
amuse1a // (c) 1983 Greyhound Electronics
@@ -12804,10 +12804,10 @@ suprpokr // (c) 1986 Grayhound Electronics
suprpokra // (c) 1986 Grayhound Electronics
suprpokrb // (c) 1986 Grayhound Electronics
-//@source:geneve.cpp
+@source:geneve.cpp
geneve // 1987? Myarc Geneve 9640
-//@source:geniusiq.cpp
+@source:geniusiq.cpp
bs9009cx // 1999 BrainStation 9009 CXL (Germany)
gl8008cx // 1999 Genius Leader 8008 CX (Germany)
glmmc // 199? Genius Master Mega Color
@@ -12817,38 +12817,38 @@ iqtv512 // IQ TV512 (Germany)
iqunlim // 199? IQ Unlimited (680x0)
itunlim // 199? IT Unlimited
-//@source:genpc.cpp
+@source:genpc.cpp
pc // 1987 PC with CGA
pcega // 1987 PC with EGA
pcherc // 1987 PC with Hercules (for testing hercules)
pcmda // 1987 PC with MDA
xtvga // 198? PC-XT (VGA, MF2 Keyboard)
-//@source:ggconnie.cpp
+@source:ggconnie.cpp
ggconnie // (c) ???? Capcom
-//@source:ghosteo.cpp
+@source:ghosteo.cpp
bballoon // (c) 2003 Eolith
hapytour // (c) 2005 GAV Company (on Eolith's Ghost hardware)
touryuu // (c) 200? Yuki Enterprise
-//@source:gijoe.cpp
+@source:gijoe.cpp
gijoe // GX069 (c) 1991 (World)
gijoea // GX069 (c) 1991 (World)
gijoej // GX069 (c) 1991 (Japan)
gijoeu // GX069 (c) 1991 (US)
-//@source:gimix.cpp
+@source:gimix.cpp
gimix //
-//@source:ginganin.cpp
+@source:ginganin.cpp
ginganin // (c) 1987 Jaleco
ginganina // (c) 1987 Jaleco
-//@source:gizmondo.cpp
+@source:gizmondo.cpp
gizmondo //
-//@source:gkigt.cpp
+@source:gkigt.cpp
gkigt4 //
gkigt43 //
gkigt43n //
@@ -12859,14 +12859,14 @@ gkkey //
igtsc //
ms72c //
-//@source:gladiatr.cpp
+@source:gladiatr.cpp
gcastle // QB (c) 1986 Taito Corporation (prototype?)
gladiatr // QB (c) 1986 Taito America Corporation (US)
greatgur // QB (c) 1986 Taito Corporation (Japan?)
ogonsiro // QB (c) 1986 Taito Corporation (Japan)
ppking // QO (c) 1985 Taito America Corporation (US)
-//@source:glasgow.cpp
+@source:glasgow.cpp
amsterd // Amsterdam
dallas // Dallas
dallas16 // Dallas
@@ -12875,13 +12875,13 @@ glasgow // Glasgow
roma // Roma
roma32 // Roma
-//@source:glass.cpp
+@source:glass.cpp
glass // (c) 1993 - Ref 931021
glass10 // (c) 1993 - Ref 931021
glass10a // (c) 1993 - Ref 931021 shows "Break Edition" on a real PCB
glasskr // (c) 1994 - Ref 931021 shows 1994 version, Anime girls, unprotected
-//@source:globalfr.cpp
+@source:globalfr.cpp
gl_coc // Carry On Clubbin' (Global)
gl_coc29 //
gl_coc29p //
@@ -12905,7 +12905,7 @@ gl_wywh24 //
gl_wywh24p //
gl_wywhp //
-//@source:globalvr.cpp
+@source:globalvr.cpp
bhead2k // Beach Head 2000 Install - 05/27/03
bhead2k2 // Beach Head 2002 Install - 05/27/03
bhead2k3 // Beach Head 2003 Desert War Install - 05/27/03
@@ -12916,13 +12916,13 @@ hyperv2 // Hyper V2 (Global VR) Install - 06/12/02
hyperv2a // Hyper V2 (Global VR) Install - 09/30/01
nfsug // Need For Speed: Underground Install (2 Discs) (v1.1)
-//@source:gluck2.cpp
+@source:gluck2.cpp
gluck2 // 1992 Yung Yu / CYE
-//@source:gmaster.cpp
+@source:gmaster.cpp
gmaster // Hartung Gamemaster
-//@source:gng.cpp
+@source:gng.cpp
diamond // (c) 1989 KH Video (NOT A CAPCOM GAME but runs on GnG hardware)
gng // 9/1985 (c) 1985
gnga // 9/1985 (c) 1985
@@ -12935,23 +12935,23 @@ makaimur // 9/1985 (c) 1985
makaimurc // 9/1985 (c) 1985
makaimurg // 9/1985 (c) 1985
-//@source:go2000.cpp
+@source:go2000.cpp
go2000 // (c) 2000 SA
-//@source:goal92.cpp
+@source:goal92.cpp
goal92 // bootleg
-//@source:goindol.cpp
+@source:goindol.cpp
goindol // (c) 1987 Sun a Electronics
goindolk // (c) 1987 Sun a Electronics
goindolu // (c) 1987 Sun a Electronics
homo // bootleg
-//@source:goldngam.cpp
+@source:goldngam.cpp
moviecrd // (c) 1998 Golden Games
swisspkr // (c) 1990 Golden Games
-//@source:goldnpkr.cpp
+@source:goldnpkr.cpp
animpkr // 198?, Unknown
animpkra // 198?, Unknown
bchancep // 198?, Unknown
@@ -13077,7 +13077,7 @@ wupndownb // (c) 1998, Video Klein
wupndownc // (c) 1998, Video Klein
wupndownd // (c) 1998, Video Klein
-//@source:goldstar.cpp
+@source:goldstar.cpp
bingowng // (c) 1993 Wing Co. Ltd
bingownga // (c) 1993 Wing Co. Ltd
bonusch // (c) 1990 Wing Co. Ltd
@@ -13186,22 +13186,22 @@ unkch4 // bootleg
wcat3 //
wcherry // bootleg
-//@source:gomoku.cpp
+@source:gomoku.cpp
gomoku // (c) 1981
-//@source:good.cpp
+@source:good.cpp
good // (c) 1998
-//@source:goodejan.cpp
+@source:goodejan.cpp
goodejan // (c) 1991 Seibu/Tecmo
goodejana // (c) 1991 Seibu/Tecmo
totmejan // (c) 1991 Seibu/Tecmo
-//@source:gotcha.cpp
+@source:gotcha.cpp
gotcha // (c) 1997 Dongsung + "presented by Para"
ppchamp // (c) 1997 Dongsung + "presented by Para"
-//@source:gottlieb.cpp
+@source:gottlieb.cpp
3stooges // GV-113 (c) 1984 Mylstar
3stoogesa // GV-113 (c) 1984 Mylstar
argusg // GV-??? (c) 1982 Gottlieb - never released
@@ -13228,14 +13228,14 @@ usvsthem // GV-??? (c) 198? Mylstar
vidvince // GV-??? (c) 1984 Mylstar - never released
wizwarz // GV-??? (c) 1984 Mylstar - never released
-//@source:gotya.cpp
+@source:gotya.cpp
gotya // (c) 1981 Game-A-Tron
thehand // (c) 1981 T.I.C.
-//@source:goupil.cpp
+@source:goupil.cpp
goupilg1 //
-//@source:gp_1.cpp
+@source:gp_1.cpp
blvelvet //
camlight //
chucklck //
@@ -13247,7 +13247,7 @@ rio //
startrip //
vegasgp //
-//@source:gp_2.cpp
+@source:gp_2.cpp
agent777 //
andromep //
andromepa //
@@ -13264,39 +13264,39 @@ sshootep //
sshootr2 //
suprnova //
-//@source:gp2x.cpp
+@source:gp2x.cpp
gp2x // GP2X 2005
-//@source:gp32.cpp
+@source:gp32.cpp
gp32 // GP32 2001
-//@source:gpworld.cpp
+@source:gpworld.cpp
gpworld // (c) 1984
-//@source:gradius3.cpp
+@source:gradius3.cpp
gradius3 // GX945 (c) 1989 (World)
gradius3a // GX945 (c) 1989 (Asia)
gradius3j // GX945 (c) 1989 (Japan)
gradius3js // GX945 (c) 1989 (Japan, split)
-//@source:grchamp.cpp
+@source:grchamp.cpp
grchamp // GM (c) 1981 Taito Corporation
-//@source:grfd2301.cpp
+@source:grfd2301.cpp
grfd2301 //
-//@source:gridlee.cpp
+@source:gridlee.cpp
gridlee // [1983 Videa] prototype - no copyright notice
-//@source:groundfx.cpp
+@source:groundfx.cpp
groundfx // D51 (c) 1992 Taito Corporation
-//@source:gstream.cpp
+@source:gstream.cpp
gstream // (c) 2002, Oriental Soft Japan
x2222 // (c) 2000, Oriental Soft
x2222o // (c) 2000, Oriental Soft
-//@source:gstriker.cpp
+@source:gstriker.cpp
gstriker // (c) [1993] Human
gstrikera // (c) [1993] Human
gstrikerj // (c) [1993] Human
@@ -13305,12 +13305,12 @@ twrldc94a // (c) 1994 Tecmo
vgoalsca // (c) 199? Temco
vgoalsoc // (c) 199? Temco
-//@source:gsword.cpp
+@source:gsword.cpp
gsword // AC (c) 1984 Taito Corporation
gsword2 // AC (c) 1984 Taito Corporation
josvolly // AA (c) 1983 Taito Corporation
-//@source:gticlub.cpp
+@source:gticlub.cpp
gticlub // GX688 (c)1996 Euro EAA
gticluba // GX688 (c)1996 Asia AAA
gticlubj // GX688 (c)1996 Japan JAA
@@ -13321,7 +13321,7 @@ slrasslt // GX792 (c)1996 USA UAA
thunderh // GX680 (c)1996 Euro EAA
thunderhu // GX680 (c)1996 USA UAA
-//@source:gts1.cpp
+@source:gts1.cpp
astannie //
buckrgrs //
charlies //
@@ -13344,7 +13344,7 @@ sys1test //
torch //
totem //
-//@source:gts3.cpp
+@source:gts3.cpp
bellring //
cactjack //
carhop //
@@ -13362,7 +13362,7 @@ tfight //
tt_game //
vegas //
-//@source:gts3a.cpp
+@source:gts3a.cpp
andretti //
andretti4 //
barbwire //
@@ -13399,7 +13399,7 @@ wcsoccer //
wcsoccerd2 //
wipeout //
-//@source:gts80.cpp
+@source:gts80.cpp
blckhole //
blckhole2 //
blckhols //
@@ -13422,7 +13422,7 @@ vlcno_1a //
vlcno_1b //
vlcno_ax //
-//@source:gts80a.cpp
+@source:gts80a.cpp
alienstr //
amazonh //
caveman //
@@ -13446,7 +13446,7 @@ striker //
thegames //
touchdn //
-//@source:gts80b.cpp
+@source:gts80b.cpp
arena //
badgirls //
bighouse //
@@ -13473,12 +13473,12 @@ triplay //
txsector //
victoryp //
-//@source:guab.cpp
+@source:guab.cpp
crisscrs // (c) 1986
guab // (c) 1986
tenup // (c) 1988
-//@source:gumbo.cpp
+@source:gumbo.cpp
dblpoint // (c) 1995 Min Corp.
dblpointd // (c) 1995 Dong Bang Electron
gumbo // (c) 1994 Min Corp.
@@ -13487,12 +13487,12 @@ mspuzzle // (c) 1994 Min Corp.
mspuzzleg // (c) 1994 Min Corp.
mspuzzlen // (c) 1994 Min Corp.
-//@source:gunbustr.cpp
+@source:gunbustr.cpp
gunbustr // D27 (c) 1992 Taito Corporation Japan (World)
gunbustrj // D27 (c) 1992 Taito Corporation (Japan)
gunbustru // D27 (c) 1992 Taito America Corporation (US)
-//@source:gundealr.cpp
+@source:gundealr.cpp
gundealr // (c) 1990 Dooyong
gundealra // (c) 1990 Dooyong
gundealrbl // bootleg
@@ -13501,10 +13501,10 @@ wiseguy // (c) 1990 Dooyong
yamyam // (c) 1990 Dooyong
yamyamk // (c) 1990 Dooyong
-//@source:gunpey.cpp
+@source:gunpey.cpp
gunpey // (c) 2000 Banpresto
-//@source:gunsmoke.cpp
+@source:gunsmoke.cpp
gunsmoke // 11/1985 (c) 1985 (World)
gunsmokeb //
gunsmokej // 11/1985 (c) 1985 (Japan)
@@ -13512,39 +13512,39 @@ gunsmokeu // 11/1985 (c) 1985 + Romstar (US)
gunsmokeua // 11/1985 (c) 1985 (US)
gunsmokeub // 11/1985 (c) 1985 (US)
-//@source:gyruss.cpp
+@source:gyruss.cpp
gyruss // GX347 (c) 1983
gyrussb // bootleg or actual Taito NZ license?
gyrussce // GX347 (c) 1983 + Centuri license
venus // bootleg
-//@source:h19.cpp
+@source:h19.cpp
h19 //
-//@source:h8.cpp
+@source:h8.cpp
h8 //
-//@source:h89.cpp
+@source:h89.cpp
h89 //
-//@source:halleys.cpp
+@source:halleys.cpp
benberob // A26
halley87 // A62 (c) 1986 Taito Corporation (Japan)
halleycj // A62 (c) 1986 Taito Corporation (Japan)
halleys // A62 (c) 1986 Taito America Corporation + Coin It (US)
halleysc // A62 (c) 1986 Taito Corporation (Japan)
-//@source:hanaawas.cpp
+@source:hanaawas.cpp
hanaawas // (c) SetaKikaku
-//@source:hankin.cpp
+@source:hankin.cpp
empsback //
fjholden //
howzat //
orbit1 //
shark //
-//@source:harddriv.cpp
+@source:harddriv.cpp
harddriv // 136052 (c) 1988
harddriv1 // 136052 (c) 1988
harddriv2 // 136052 (c) 1988
@@ -13599,23 +13599,23 @@ stunrune // 136070 (c) 1989
stunrunj // 136070 (c) 1989
stunrunp // (proto) (c) 1989
-//@source:harriet.cpp
+@source:harriet.cpp
harriet // 1990
-//@source:hazelgr.cpp
+@source:hazelgr.cpp
hg_frd // Fruit Deuce
-//@source:hcastle.cpp
+@source:hcastle.cpp
akumajou // GX768 (c) 1988 (Japan)
akumajoun // GX768 (c) 1988 (Japan)
hcastle // GX768 (c) 1988
hcastlee // GX768 (c) 1988
hcastlek // GX768 (c) 1988
-//@source:headonb.cpp
+@source:headonb.cpp
headonb // bootleg, headonb.cpp
-//@source:hec2hrp.cpp
+@source:hec2hrp.cpp
hec2hr //
hec2hrp //
hec2hrx //
@@ -13624,11 +13624,11 @@ hec2mx40 //
hec2mx80 //
victor //
-//@source:hexion.cpp
+@source:hexion.cpp
hexion // GX122 (c) 1992
hexionb // bootleg
-//@source:hh_cop400.cpp
+@source:hh_cop400.cpp
ctstein // Castle Toy
einvaderc // Entex
funjacks // Mattel
@@ -13637,7 +13637,7 @@ h2hbaskb // Coleco
lightfgt // Milton Bradley
plus1 // Milton Bradley
-//@source:hh_hmcs40.cpp
+@source:hh_hmcs40.cpp
alnattck // Coleco
bambball // Bambino
bbtime // Bandai
@@ -13670,23 +13670,24 @@ tmtron // Tomy
vinvader // VTech
zackman // Bandai
-//@source:hh_melps4.cpp
+@source:hh_melps4.cpp
cfrogger // Coleco
gjungler // Gakken
-//@source:hh_pic16.cpp
+@source:hh_pic16.cpp
maniac // Ideal
-//@source:hh_sm510.cpp
+@source:hh_sm510.cpp
gnwmndon // Nintendo
ktmnt // Konami
ktopgun // Konami
-//@source:hh_tms1k.cpp
+@source:hh_tms1k.cpp
amaztron // Coleco
astro // Kosmos
bankshot // Parker Bros
bigtrak // Milton Bradley
+cnfball // Conic
cnfball2 // Conic
cnsector // Parker Bros
comp4 // Milton Bradley
@@ -13698,6 +13699,7 @@ ebball3 // Entex
efootb4 // Entex
einvader // Entex
elecdet // Ideal
+fxmcr165 // Gakken
gjackpot // Gakken
gpoker // Gakken
h2hbaseb // Coleco
@@ -13721,7 +13723,7 @@ tbreakup // Tomy
tc4 // Coleco
zodiac // Coleco
-//@source:hh_ucom4.cpp
+@source:hh_ucom4.cpp
alnchase // Tomy
astrocmd // Epoch
bcclimbr // Bandai
@@ -13743,13 +13745,13 @@ tmscramb // Tomy
tmtennis // Tomy
ufombs // Bambino
-//@source:hideseek.cpp
+@source:hideseek.cpp
hideseek //
-//@source:higemaru.cpp
+@source:higemaru.cpp
higemaru // 9/1984 (c) 1984
-//@source:highvdeo.cpp
+@source:highvdeo.cpp
brasil // (c) 2000 unknown
cfever1k // (c) 2000 High Video
cfever40 // (c) 2000 High Video
@@ -13768,7 +13770,7 @@ record // (c) 2000 High Video
tour4000 // (c) 2000 High Video
tour4010 // (c) 2000 High Video
-//@source:hikaru.cpp
+@source:hikaru.cpp
airtrix // 2001.02 Air Trix
braveff // 1999.06 Syouboushi Brave Fire Fighters
hikaru // 2000.?? Hikaru BIOS
@@ -13776,10 +13778,10 @@ pharrier // 2000.12 Planet Harriers
podrace // 2000.06 Star Wars: Racer Arcade
sgnascar // 2000.09 Nascar Arcade
-//@source:himesiki.cpp
+@source:himesiki.cpp
himesiki // (c) 1989 Hi-Soft
-//@source:hitme.cpp
+@source:hitme.cpp
barricad // (c) 1976 Ramtek
brickyrd // (c) 1976 Ramtek
hitme // (c) 05/1976 Ramtek
@@ -13787,18 +13789,18 @@ hitme1 // (c) 05/1976 Ramtek
m21 // (c) 08/1976 Mirco
super21 // (c) 1978 Mirco
-//@source:hitpoker.cpp
+@source:hitpoker.cpp
hitpoker // (c) 1997
-//@source:hk68v10.cpp
+@source:hk68v10.cpp
hk68v10 //
-//@source:hnayayoi.cpp
+@source:hnayayoi.cpp
hnayayoi // "02" (c) 1987 Dyna Electronics
hnfubuki // "06" (c) 1987 Dynax
untoucha // "08" (c) 1987 Dynax
-//@source:hng64.cpp
+@source:hng64.cpp
bbust2 // 004 1998/09/11 Beast Busters: Second Nightmare
buriki // 007 1999/05/21 Buriki One
fatfurwa // 006 1999/01/28 Fatal Fury: Wild Ambition / Garou Densetsu: Wild Ambition
@@ -13808,13 +13810,13 @@ sams64 // 002 1997/12/19 Samurai Shodown 64 / Samurai S
sams64_2 // 005 1998/10/16 Samurai Shodown: Warrior's Rage / Samurai Spirits: Asura Zanmaden
xrally // 003 1998/05/13 Xtreme Rally / Off Beat Racer!
-//@source:holeland.cpp
+@source:holeland.cpp
crzrally // (c) 1985
crzrallya // (c) 1985
crzrallyg // (c) 1985
holeland // (c) 1984
-//@source:homedata.cpp
+@source:homedata.cpp
battlcry // (c) 1991 Home Data
hourouki // (c) 1987 Home Data
jogakuen // (c) 1992 Windom corporation
@@ -13832,26 +13834,26 @@ mrokumei // (c) 1988 Home Data
reikaids // (c) 1988 Home Data
vitaminc // (c) 1989 Home Data
-//@source:homelab.cpp
+@source:homelab.cpp
brailab4 //
braiplus //
homelab2 //
homelab3 //
homelab4 //
-//@source:homerun.cpp
+@source:homerun.cpp
dynashot // (c) 1988 Jaleco
ganjaja // (c) 1990 Jaleco
homerun // (c) 1988 Jaleco
-//@source:homez80.cpp
+@source:homez80.cpp
homez80 //
-//@source:horizon.cpp
+@source:horizon.cpp
nshrz //
vector1 //
-//@source:hornet.cpp
+@source:hornet.cpp
gradius4 // GX837 (c)1999
nbapbp // GX778 (c)1998
sscope // GX830 (c)1999
@@ -13862,22 +13864,22 @@ sscopec // GX830 (c)1999
terabrst // GX715 (c)1998 USA UEL 1998/07/17
terabrsta // GX715 (c)1998 Asia AAA 1998/02/25
-//@source:hotblock.cpp
+@source:hotblock.cpp
hotblock // (c) 1993 Nics? / Nix?
-//@source:hotstuff.cpp
+@source:hotstuff.cpp
hotstuff //
-//@source:hp_ipc.cpp
+@source:hp_ipc.cpp
hp_ipc //
-//@source:hp16500.cpp
+@source:hp16500.cpp
hp16500b //
hp1650b //
hp1651b //
hp165ka0 //
-//@source:hp48.cpp
+@source:hp48.cpp
hp38g //
hp39g //
hp48g // HP 48G
@@ -13887,13 +13889,13 @@ hp48s // HP 48S
hp48sx // HP 48SX
hp49g //
-//@source:hp49gp.cpp
+@source:hp49gp.cpp
hp49gp // HP 49G+
-//@source:hp64k.cpp
+@source:hp64k.cpp
hp64k //
-//@source:hp9845.cpp
+@source:hp9845.cpp
hp9835a //
hp9835b //
hp9845a //
@@ -13902,10 +13904,10 @@ hp9845c //
hp9845s //
hp9845t //
-//@source:hp9k.cpp
+@source:hp9k.cpp
hp9816 //
-//@source:hp9k_3xx.cpp
+@source:hp9k_3xx.cpp
hp9k310 //
hp9k320 //
hp9k330 //
@@ -13914,97 +13916,97 @@ hp9k370 //
hp9k380 //
hp9k382 //
-//@source:hprot1.cpp
+@source:hprot1.cpp
hprot1 //
hprot2r6 //
hprotr8a //
-//@source:hpz80unk.cpp
+@source:hpz80unk.cpp
hpz80unk //
-//@source:hshavoc.cpp
+@source:hshavoc.cpp
hshavoc // (c) 1993 Data East
-//@source:ht68k.cpp
+@source:ht68k.cpp
ht68k //
-//@source:huebler.cpp
+@source:huebler.cpp
amu880 //
-//@source:hunter2.cpp
+@source:hunter2.cpp
hunter2 //
-//@source:hvyunit.cpp
+@source:hvyunit.cpp
hvyunit // (c) 1988 Kaneko
hvyunitj // (c) 1988 Kaneko
hvyunitjo // (c) 1988 Kaneko
hvyunitu // (c) 1988 Kaneko
-//@source:hx20.cpp
+@source:hx20.cpp
ehx20 //
ehx20e //
-//@source:hyhoo.cpp
+@source:hyhoo.cpp
hyhoo // (c) 1987
hyhoo2 // (c) 1987
-//@source:hyperscan.cpp
+@source:hyperscan.cpp
hs //
-//@source:hyperspt.cpp
+@source:hyperspt.cpp
hpolym84 // GX330 (c) 1984
hyperspt // GX330 (c) 1984 + Centuri
hypersptb // bootleg
roadf // GX461 (c) 1984
roadf2 // GX461 (c) 1984
-//@source:hyprduel.cpp
+@source:hyprduel.cpp
hyprduel // (c) 1993 Technosoft (Japan)
hyprduel2 // (c) 1993 Technosoft (Japan)
magerror // (c) 1994 Technosoft (Japan) (Arcade TV Game List - P.100, Left, 13 from Bottom)
-//@source:i7000.cpp
+@source:i7000.cpp
i7000 //
-//@source:ibm6580.cpp
+@source:ibm6580.cpp
ibm6580 //
-//@source:ibmpc.cpp
+@source:ibmpc.cpp
ibm5140 // 1985 IBM 5140
ibm5150 // 1981 IBM 5150
ibm5155 // 1982 IBM 5155
ibm5160 // 1982 IBM XT 5160
-//@source:ibmpcjr.cpp
+@source:ibmpcjr.cpp
ibmpcjr // 1984 IBM PC Jr
ibmpcjx // 1985 IBM PC JX
-//@source:icatel.cpp
+@source:icatel.cpp
icatel //
-//@source:ice_bozopail.cpp
+@source:ice_bozopail.cpp
ice_bozo // ICE - Bozo Pail Toss
-//@source:ice_tbd.cpp
+@source:ice_tbd.cpp
ice_tbd // ICE - Turbo Drive
-//@source:icecold.cpp
+@source:icecold.cpp
icecold //
zekepeak //
-//@source:ichiban.cpp
+@source:ichiban.cpp
ichiban // (c) 199? Excel
-//@source:ie15.cpp
+@source:ie15.cpp
ie15 //
-//@source:if800.cpp
+@source:if800.cpp
if800 //
-//@source:igs_fear.cpp
+@source:igs_fear.cpp
fearless // (c) 2006
-//@source:igs_m027.cpp
+@source:igs_m027.cpp
amazoni2 // (c) 2002
amazonia // (c) 1999
chessc2 // (c) 200?
@@ -14020,7 +14022,7 @@ sdwx // (c) 2002
slqz3 // (c) 1999
zhongguo // (c) 2000
-//@source:igs_m036.cpp
+@source:igs_m036.cpp
cjddzsp // (c) 200?
cjdh2 // (c) 200?
cjdh2a // (c) 200?
@@ -14028,7 +14030,7 @@ cjdh2b // (c) 200?
cjdh2c // (c) 200?
igsm312 // (c) 200?
-//@source:igs009.cpp
+@source:igs009.cpp
gp98 // (c) 1998
jingbell // (c) 1997
jingbella // (c) 1997
@@ -14036,7 +14038,7 @@ jingbellb // (c) 1997
jingbellc // (c) 1995
jingbelli // (c) 1995?
-//@source:igs011.cpp
+@source:igs011.cpp
dbc // (c) 199?
drgnwrld // (c) 1997
drgnwrldv10c // (c) 1995
@@ -14056,7 +14058,7 @@ vbowlj // (c) 1996
wlcc // (c) 1996
xymg // (c) 1996
-//@source:igs017.cpp
+@source:igs017.cpp
iqblocka // (c) 1996
iqblockf // (c) 1996
lhzb2 // (c) 1998
@@ -14072,11 +14074,11 @@ tarzan // (c) 1999?
tarzana // (c) 1999?
tjsb // (c) 1997
-//@source:igspc.cpp
+@source:igspc.cpp
eztouch // (c) 200?
speeddrv // (c) 2004
-//@source:igspoker.cpp
+@source:igspoker.cpp
chleague // (c) 199? IGS
chleagul // (c) 199? IGS
citalcup // (c) SGS (bootleg of IGS v220it)
@@ -14095,24 +14097,24 @@ numbr10l // (c) IGS (Board labeled Playmark Srl)
pktet346 // (c) 199? IGS
stellecu // (c) 1998
-//@source:ikki.cpp
+@source:ikki.cpp
farmer // TVG17 (c) 1985 Sun Electronics
ikki // TVG17 (c) 1985 Sun Electronics (Japan)
-//@source:imds.cpp
+@source:imds.cpp
imds // intel
-//@source:imds2.cpp
+@source:imds2.cpp
imds2 // Intellec MDS series-II
-//@source:imolagp.cpp
+@source:imolagp.cpp
imolagp // (c) 198? RB Bologna
imolagpo // (c) 198? RB Bologna
-//@source:imsai.cpp
+@source:imsai.cpp
imsai //
-//@source:inder.cpp
+@source:inder.cpp
atleta //
brvteam //
canasta //
@@ -14124,29 +14126,29 @@ mundial //
pinclown //
pinmoonl //
-//@source:indiana.cpp
+@source:indiana.cpp
indiana //
-//@source:indigo.cpp
+@source:indigo.cpp
indigo3k // IP12: Indigo 1, R3000, 33MHz
indigo4k // IP20: Indigo 1, R4400, 150MHz
-//@source:indy_indigo2.cpp
+@source:indy_indigo2.cpp
ip224613 // IP22: Indy, R4600, 133MHz
ip225015 // IP22: Indy, R5000, 150MHz
ip244415 // IP24: Indigo 2, R4400, 150MHz
-//@source:instruct.cpp
+@source:instruct.cpp
instruct //
-//@source:interact.cpp
+@source:interact.cpp
hector1 //
interact //
-//@source:intrscti.cpp
+@source:intrscti.cpp
intrscti // ????
-//@source:intv.cpp
+@source:intv.cpp
intv // Mattel Intellivision - 1979 AKA INTV
intv2 // Mattel Intellivision II- 1982?
intvecs // 1983 - Mattel Intellivision w/ECS and IntelliVoice expansions
@@ -14154,55 +14156,55 @@ intvkbd // 1981 - Mattel Intellivision Keyboard Componen
intvoice // Mattel Intellivision + IntelliVoice expansion - 1982
intvsrs // Intellivision (Sears License) - 19??
-//@source:inufuku.cpp
+@source:inufuku.cpp
3on3dunk // (c) 1996 Video System Co. (Japan)
inufuku // (c) 1998 Video System Co. (Japan)
-//@source:invqix.cpp
+@source:invqix.cpp
invqix // F34 (c) 2003 Taito Corporation
-//@source:ipc.cpp
+@source:ipc.cpp
ipb // intel
ipc // intel
-//@source:ipds.cpp
+@source:ipds.cpp
ipds // intel
-//@source:iq151.cpp
+@source:iq151.cpp
iq151 //
-//@source:iqblock.cpp
+@source:iqblock.cpp
grndtour // (c) 1993
iqblock // (c) 1993
-//@source:iris3130.cpp
+@source:iris3130.cpp
sgi_ip2 // IP2: IRIS 3xx0, 68020, 16MHz
-//@source:irisha.cpp
+@source:irisha.cpp
irisha //
-//@source:irobot.cpp
+@source:irobot.cpp
irobot // 136029 (c) 1983
-//@source:ironhors.cpp
+@source:ironhors.cpp
dairesya // GX560 (c) 1986 (Japan)
farwest // bootleg
ironhors // GX560 (c) 1986
-//@source:isbc.cpp
+@source:isbc.cpp
isbc286 //
isbc2861 //
isbc86 //
rpc86 //
-//@source:iskr103x.cpp
+@source:iskr103x.cpp
iskr1030m //
iskr1031 //
-//@source:istellar.cpp
+@source:istellar.cpp
istellar // (c) 1983 Funai / Gakken
-//@source:iteagle.cpp
+@source:iteagle.cpp
bbhcotw //
bbhsc //
carnking //
@@ -14220,7 +14222,7 @@ gtfore06 //
iteagle // (c) 2000 Incredible Technologies
virtpool //
-//@source:itech32.cpp
+@source:itech32.cpp
bloodstm // (c) 1994 Strata/Incredible Technologies
bloodstm10 // (c) 1994 Strata/Incredible Technologies
bloodstm11 // (c) 1994 Strata/Incredible Technologies
@@ -14293,7 +14295,7 @@ wcbowl161 // (c) 1995 Incredible Technologies
wcbowl165 // (c) 1995 Incredible Technologies
wcbowldx // (c) 1999 Incredible Technologies
-//@source:itech8.cpp
+@source:itech8.cpp
arlingtn // (c) 1991 Strata/Incredible Technologies
dynobop // (c) 1990 Grand Products/Incredible Technologies
gpgolf // (c) 1992 Strata/Incredible Technologies
@@ -14325,7 +14327,7 @@ stratabs // (c) 1990 Strata/Incredible Technologies
wfortune // (c) 1989 GameTek
wfortunea // (c) 1989 GameTek
-//@source:itgambl2.cpp
+@source:itgambl2.cpp
cmagica // (c) 200? unknown
elvis // (c) 200? unknown
europass // (c) 200? unknown
@@ -14344,7 +14346,7 @@ trstar2k // (c) 1999 A.M.
unkh8gam // (c) 200? unknown
wizard // (c) 1999 A.A.
-//@source:itgambl3.cpp
+@source:itgambl3.cpp
ejollyx5 // (c) 200? Solar Games
ejollyx9 //
grandprx // (c) 200? 4fun
@@ -14352,7 +14354,7 @@ queenotg //
supjolly // (c) 200? unknown
x5jokers // (c) 200? Electronic Projects
-//@source:itgamble.cpp
+@source:itgamble.cpp
abacus // (c) 200? unknown
bookthr // (c) 200? unknown
capcor // (c) 2001 Nazionale Elettronica
@@ -14364,10 +14366,10 @@ laperla // (c) 2002 Nazionale Elettronica
laperlag // (c) 2001 Nazionale Elettronica
mnumber // (c) 200? M.M. - B.R.L.
-//@source:itt3030.cpp
+@source:itt3030.cpp
itt3030 //
-//@source:jack.cpp
+@source:jack.cpp
brix // (c) 1982 Cinematronics + Advanced Microcomputer Systems
freeze // Cinematronics
jack // (c) 1982 Cinematronics
@@ -14384,23 +14386,23 @@ unclepoo // (c) 1983 Diatec
zzyzzyxx // (c) 1982 Cinematronics + Advanced Microcomputer Systems
zzyzzyxx2 // (c) 1982 Cinematronics + Advanced Microcomputer Systems
-//@source:jackal.cpp
+@source:jackal.cpp
jackal // GX631 (c) 1986 (World)
jackalj // GX631 (c) 1986 (Japan)
jackalr // GX631 (c) 1986 (World)
topgunbl // bootleg
topgunr // GX631 (c) 1986 (US)
-//@source:jackie.cpp
+@source:jackie.cpp
jackie // (c) 1993 IGS
-//@source:jackpool.cpp
+@source:jackpool.cpp
jackpool // (c) 1997 Electronic Projects
-//@source:jade.cpp
+@source:jade.cpp
jade //
-//@source:jaguar.cpp
+@source:jaguar.cpp
a51mxr3k // ?? (c) 1998
area51 // 136105 (c) 1995
area51a // 136105 (c) 1995
@@ -14422,12 +14424,12 @@ maxf_ng // ?? (c) 1996
maxforce // ?? (c) 1996
vcircle // (proto) (c) 1996
-//@source:jailbrek.cpp
+@source:jailbrek.cpp
jailbrek // GX507 (c) 1986
jailbrekb // bootleg
manhatan // GX507 (c) 1986 (Japan)
-//@source:jalmah.cpp
+@source:jalmah.cpp
daireika // (c) 1989 Jaleco/NMK
kakumei // (c) 1990
kakumei2 // (c) 1992
@@ -14435,7 +14437,7 @@ mjzoomin // (c) 1990
suchipi // (c) 1993
urashima // UPL-89052
-//@source:jangou.cpp
+@source:jangou.cpp
cntrygrl // (c) 1984 Royal Denshi
cntrygrla // (c) 1984
fruitbun // (c) 1984
@@ -14445,46 +14447,46 @@ luckygrl // (c) 1984 Wing?
macha // (c) 1983 Logitec
roylcrdn // (c) 1985
-//@source:jankenmn.cpp
+@source:jankenmn.cpp
jankenmn // (c) 1985 Sunwise
-//@source:jantotsu.cpp
+@source:jantotsu.cpp
jantotsu // (c) 1983 Sanritsu
-//@source:jchan.cpp
+@source:jchan.cpp
jchan // (c) 1995 Kaneko
jchan2 // (c) 1995 Kaneko
-//@source:jclub2.cpp
+@source:jclub2.cpp
darkhors // bootleg of Jockey Club II
jclub2 // (c) 199? Seta
jclub2o // (c) 199? Seta
jclub2ob // (c) 199? Seta
-//@source:jedi.cpp
+@source:jedi.cpp
jedi // 136030 (c) 1984
-//@source:jeutel.cpp
+@source:jeutel.cpp
leking //
olympic //
-//@source:jokrwild.cpp
+@source:jokrwild.cpp
jokrwild // (c) 1988 Sigma
-//@source:jollyjgr.cpp
+@source:jollyjgr.cpp
fspiderb // bootleg
jollyjgr // KD (c) 1982 Taito Corporation
-//@source:jongkyo.cpp
+@source:jongkyo.cpp
jongkyo // (c) 1985 Kiwako
-//@source:jonos.cpp
+@source:jonos.cpp
jonos //
-//@source:joystand.cpp
+@source:joystand.cpp
joystand // 1997 Yuvo
-//@source:jp.cpp
+@source:jp.cpp
america //
aqualand //
faeton //
@@ -14496,7 +14498,7 @@ petaco //
petaco2 //
pimbal //
-//@source:jpmimpct.cpp
+@source:jpmimpct.cpp
buzzundr // Buzzundrum (Ace)
cluedo // (c) 1995
cluedo2 // (c) 1995
@@ -14515,7 +14517,7 @@ trivialp // (c) 1996
trivialpd // (c) 1996
trivialpo // (c) 1996
-//@source:jpmimpctsw.cpp
+@source:jpmimpctsw.cpp
j6aceclb // Ace Of Clubs (Crystal)
j6aceclba //
j6acehi // Aces High (Ace)
@@ -15489,7 +15491,7 @@ j6wthing // Wild Thing (Empire)
j6wthinga //
j6wthingb //
-//@source:jpmmps.cpp
+@source:jpmmps.cpp
j2008 // zzz_unk 008 (Unk)
j2adnote // Add A Note (JPM)
j2adnotea //
@@ -15683,7 +15685,7 @@ j2westrn // Western (JPM)
j2wrb // Wild Reel Bingo (JPM)
j2xxx // Triple X (Bwb)
-//@source:jpms80.cpp
+@source:jpms80.cpp
j80alad // Aladdin's Cave (PCP)
j80bac // Bank A Coin (JPM)
j80blbnk // Blankity Bank (PCP)
@@ -15708,7 +15710,7 @@ j80wsprt // Winsprint (JPM)
j80wsprt2 // Winsprint (JPM)
j80wsprt3 // Winsprint (JPM)
-//@source:jpmsru.cpp
+@source:jpmsru.cpp
j_ewnd20 //
j_ewnda //
j_ewnud // Each Way Nudger
@@ -15722,14 +15724,14 @@ j_plus2 // Plus 2
j_super2 // Super 2
j_unk //
-//@source:jpmsys5.cpp
+@source:jpmsys5.cpp
cashcade // Cashcade (JPM)
monoplcl // Monopoly Classic (JPM)
monopldx // Monopoly Deluxe (JPM)
monopoly // Monopoly (JPM)
monopolya // Monopoly (JPM)
-//@source:jpmsys5sw.cpp
+@source:jpmsys5sw.cpp
j5ar80 // Around The World In Eighty Days (JPM)
j5ar80a //
j5ar80b //
@@ -15893,7 +15895,7 @@ j5ujb //
j5wsc // Wall Street Club (JPM)
j5wsca //
-//@source:jpmsys7.cpp
+@source:jpmsys7.cpp
j7bmagic // Black Magic (JPM)
j7bullio // Bullionaire (Ace)
j7cexprs // Cash Xpress (JPM)
@@ -15907,58 +15909,58 @@ j7razzmaa //
j7tubgld // Turbo Gold (JPM)
j7wldwkd // Wild 'N' Wicked (JPM)
-//@source:jr100.cpp
+@source:jr100.cpp
jr100 //
jr100u //
-//@source:jr200.cpp
+@source:jr200.cpp
jr200 //
jr200u //
-//@source:jrpacman.cpp
+@source:jrpacman.cpp
jrpacman // (c) 1983 Midway
jrpacmanf // speedup hack
-//@source:jtc.cpp
+@source:jtc.cpp
jtc //
jtces23 //
jtces40 //
jtces88 //
-//@source:jubilee.cpp
+@source:jubilee.cpp
jubileep //
-//@source:juicebox.cpp
+@source:juicebox.cpp
juicebox //
-//@source:junior.cpp
+@source:junior.cpp
junior //
-//@source:junofrst.cpp
+@source:junofrst.cpp
junofrst // GX310 (c) 1983 Konami
junofrstg // GX310 (c) 1983 Konami + Gottlieb license
-//@source:jupace.cpp
+@source:jupace.cpp
jupace // Jupiter Ace
-//@source:jupiter.cpp
+@source:jupiter.cpp
jupiter2 //
jupiter3 //
-//@source:jvh.cpp
+@source:jvh.cpp
escape //
movmastr //
-//@source:k1003.cpp
+@source:k1003.cpp
k1003 //
-//@source:k28.cpp
+@source:k28.cpp
k28 // Tiger Electronics
-//@source:k8915.cpp
+@source:k8915.cpp
k8915 //
-//@source:kaneko16.cpp
+@source:kaneko16.cpp
bakubrkr // (c) 1992 Kaneko
berlwall // (c) 1991 Kaneko
berlwallk // (c) 1991 Kaneko (Korea, Inter license)
@@ -15989,13 +15991,13 @@ shogwarr // (c) 1992 Kaneko
shogwarru // (c) 1992 Kaneko
wingforc // (c) 1993 Atlus (Japan, prototype)
-//@source:kangaroo.cpp
+@source:kangaroo.cpp
fnkyfish // (c) 1981 Sun Electronics
kangaroo // (c) 1982 Sun Electronics
kangarooa // 136008 (c) 1982 Atari
kangaroob // (bootleg)
-//@source:karnov.cpp
+@source:karnov.cpp
chelnov // (c) 1988 Data East USA (World)
chelnovj // (c) 1988 Data East Corporation (Japan)
chelnovjbl // bootleg
@@ -16006,10 +16008,10 @@ karnova // (c) 1987 Data East USA (US)
karnovj // (c) 1987 Data East Corporation (Japan)
wndrplnt // (c) 1987 Data East Corporation (Japan)
-//@source:kas89.cpp
+@source:kas89.cpp
kas89 // 1989, SFC S.R.L.
-//@source:kaypro.cpp
+@source:kaypro.cpp
kaypro10 // Kaypro 10
kaypro2x // Kaypro 2 - 2/84
kaypro4 // Kaypro 4 - 4/83
@@ -16019,47 +16021,47 @@ kayproii // Kaypro II - 2/83
omni2 // Omni II
robie // Kaypro Robie
-//@source:kc.cpp
+@source:kc.cpp
kc85_2 // VEB KC 85/2
kc85_3 // VEB KC 85/3
kc85_4 // VEB KC 85/4
kc85_5 // VEB KC 85/5
-//@source:kchamp.cpp
+@source:kchamp.cpp
karatedo // (c) 1984 Data East Corporation (Japan)
karatevs // (c) 1984 Data East Corporation (Japan)
kchamp // (c) 1984 Data East USA (US)
kchampvs // (c) 1984 Data East USA (US)
kchampvs2 // (c) 1984 Data East USA (US)
-//@source:kenseim.cpp
+@source:kenseim.cpp
kenseim // 18/04/1994 (c) 1994 Togo/Sigma (Japan) not listed on Capcom's site
-//@source:kickgoal.cpp
+@source:kickgoal.cpp
actionhw // (c) 1995
kickgoal // (c) 1995
-//@source:kim1.cpp
+@source:kim1.cpp
kim1 // Commodore (MOS) KIM-1 1975
-//@source:kingdrby.cpp
+@source:kingdrby.cpp
cowrace // (c) 20?? hack
kingdrbb // (c) 1986 hack
kingdrbb2 // (c) 198? hack
kingdrby // (c) 1981 Tatsumi
-//@source:kingobox.cpp
+@source:kingobox.cpp
kingofb // (c) 1985 Wood Place Inc.
ringking // (c) 1985 Data East USA
ringking2 // (c) 1985 Data East USA
ringking3 // (c) 1985 Data East USA
ringkingw // (c) 1985 Wood Place Inc.
-//@source:kingpin.cpp
+@source:kingpin.cpp
kingpin // (c) 1983 American Communications Laboratories Inc.
maxideal // (c) 1983 American Communications Laboratories Inc.
-//@source:kinst.cpp
+@source:kinst.cpp
kinst // (c) 1994 Rare
kinst13 // (c) 1994 Rare
kinst14 // (c) 1994 Rare
@@ -16071,10 +16073,10 @@ kinst2k3 // (c) 1995 Rare
kinst2k4 // (c) 1995 Rare
kinstp // (c) 1994 Rare
-//@source:kissproto.cpp
+@source:kissproto.cpp
kissp //
-//@source:klax.cpp
+@source:klax.cpp
klax // 136075 (c) 1989
klax2 // 136075 (c) 1989
klax2bl // bootleg
@@ -16082,21 +16084,21 @@ klax3 // 136075 (c) 1989
klaxd // 136075 (c) 1989 (Germany)
klaxj // 136075 (c) 1989 (Japan)
-//@source:kncljoe.cpp
+@source:kncljoe.cpp
bcrusher // bootleg
kncljoe // (c) 1985 Taito Corporation
kncljoea // (c) 1985 Taito Corporation
-//@source:koftball.cpp
+@source:koftball.cpp
koftball // (c) 1995 BMC
-//@source:koikoi.cpp
+@source:koikoi.cpp
koikoi // (c) 1983 Kiwako
-//@source:konamigq.cpp
+@source:konamigq.cpp
cryptklr // Crypt Killer (GQ420 UAA)
-//@source:konamigv.cpp
+@source:konamigv.cpp
btchamp // GV053, UAA01
hyperath // GV021, Japan 1.00
kdeadeye // GV054, UA01
@@ -16113,7 +16115,7 @@ tmoshsp // GE756, JAB
tmoshspa // GE756, JAA
weddingr // GX624, JAA
-//@source:konamigx.cpp
+@source:konamigx.cpp
crzcross // 1994.?? GX315 (Europe)
daiskiss // 1996.03 GX535 (Japan)
dragoona // 1995.?? GX417 (Asia)
@@ -16154,7 +16156,7 @@ vsnetscru // 1996.?? GX627 (US)
winspike // 1997.?? GX705 (Europe)
winspikej // 1997.07 GX705 (Japan)
-//@source:konamim2.cpp
+@source:konamim2.cpp
3do_m2 //
btltryst // GX636 (c)1998
evilngt // GX810 (c)1998
@@ -16167,7 +16169,7 @@ totlvice // GX639 (c)1997
totlvicj // GX639 (c)1997
totlvicu // GX639 (c)1997
-//@source:konendev.cpp
+@source:konendev.cpp
aadvent // African Adventure
dragnfly // Dragonfly
enchlamp // Enchanted Lamp
@@ -16185,22 +16187,22 @@ spiceup // Spice It Up
sultanw // Sultan W
whiterus // White Russia
-//@source:konin.cpp
+@source:konin.cpp
konin //
-//@source:kontest.cpp
+@source:kontest.cpp
kontest // GX800 (c) 198? (Japan)
-//@source:kopunch.cpp
+@source:kopunch.cpp
kopunch // 834-0103 (c) 1981 Sega
-//@source:kramermc.cpp
+@source:kramermc.cpp
kramermc // 1987 Kramer MC
-//@source:ksayakyu.cpp
+@source:ksayakyu.cpp
ksayakyu // ??? (c) 1985 Taito Corporation
-//@source:ksys573.cpp
+@source:ksys573.cpp
bassang2 // 1998 - Bass Angler 2 (GE865 VER. JAA)
bassangl // 1998 - Bass Angler (GE765 VER. JAA)
cr589fw // 1999 - CR-589 Firmware (700B04)
@@ -16313,14 +16315,14 @@ salarymc // 2000 - Salary Man Champ (G*A18 VER. JAA)
stepchmp // 1999 - Step Champ (GE930 VER. JA)
sys573 //
-//@source:kungfur.cpp
+@source:kungfur.cpp
kungfur // (c) 1987
-//@source:kurukuru.cpp
+@source:kurukuru.cpp
kurukuru // (c) 1990 Success / Taiyo Jidoki.
ppj // (c) 199? Success / Taiyo Jidoki.
-//@source:kyocera.cpp
+@source:kyocera.cpp
kc85 //
m10 //
npc8300 //
@@ -16330,7 +16332,7 @@ tandy102 //
tandy200 //
trsm100 //
-//@source:kyugo.cpp
+@source:kyugo.cpp
99lstwar // (c) 1985 Proma
99lstwara // (c) 1985 Proma
99lstwark // (c) 1985 Kyugo
@@ -16351,12 +16353,12 @@ skywolf3 // bootleg
sonofphx // bootleg
srdmissn // (c) 1986 Taito Corporation
-//@source:labyrunr.cpp
+@source:labyrunr.cpp
labyrunr // GX771 (c) 1987 (Japan)
labyrunrk // GX771 (c) 1987 (Japan)
tricktrp // GX771 (c) 1987
-//@source:ladybug.cpp
+@source:ladybug.cpp
cavenger // 8106 (c) 1981
dorodon // Falcon
dorodon2 // Falcon
@@ -16366,26 +16368,26 @@ ladybugb // bootleg
snapjack // ???? (c)
sraider // ???? (c) 1982 Universal
-//@source:ladyfrog.cpp
+@source:ladyfrog.cpp
ladyfrog // (c) 1990 Mondial Games
toucheme //
touchemea //
-//@source:laser3k.cpp
+@source:laser3k.cpp
las3000 // 1983 Laser 3000
-//@source:laserbas.cpp
+@source:laserbas.cpp
futflash // (c) 1981 HOEI (Arcade TV Game List - P.96, Right, 18 from top)
laserbas // (c) 1981 Amstar/HOEI
laserbasa // (c) 1981 Amstar/HOEI
-//@source:laserbat.cpp
+@source:laserbat.cpp
catnmous // (c) 1982
catnmousa // (c) 1982
laserbat // (c) 1981
lazarian // (c) 1981
-//@source:lasso.cpp
+@source:lasso.cpp
chameleo // (c) 1983 Jaleco
lasso // 'WM' (c) 1982
photof // (c) 1984 Jaleco / Casio
@@ -16394,10 +16396,10 @@ pinboa // (c) 1984 Jaleco
pinbos // (c) 1985 Strike
wwjgtin // (c) 1984 Jaleco / Casio
-//@source:lastbank.cpp
+@source:lastbank.cpp
lastbank // (c) 1994 Excellent System
-//@source:lastduel.cpp
+@source:lastduel.cpp
lastduel // 7/1988 (c) 1988 (US)
lastduelb // bootleg
lastduelj // 7/1988 (c) 1988 (Japan)
@@ -16408,40 +16410,40 @@ ledstorm // 1988 (c) 1988 (US)
madgear // 2/1989 (c) 1989 (US)
madgearj // 2/1989 (c) 1989 (Japan)
-//@source:lastfght.cpp
+@source:lastfght.cpp
lastfght // (c) 2000 Subsino
-//@source:laz_aftrshok.cpp
+@source:laz_aftrshok.cpp
aftrshok // Lazer-tron After Shock
aftrshoka //
-//@source:laz_awetoss.cpp
+@source:laz_awetoss.cpp
awetoss // Lazer-tron Awesome Toss'em
-//@source:laz_ribrac.cpp
+@source:laz_ribrac.cpp
ribrac // Lazer-tron Ribbit Racing
-//@source:lazercmd.cpp
+@source:lazercmd.cpp
bbonk // [1976?]
lazercmd // [1976?]
medlanes // [1977?]
-//@source:lbeach.cpp
+@source:lbeach.cpp
lbeach // (c) 1979 Olympia / Seletron
-//@source:lc80.cpp
+@source:lc80.cpp
lc80 //
lc80_2 //
sc80 //
-//@source:lcmate2.cpp
+@source:lcmate2.cpp
lcmate2 //
-//@source:leapster.cpp
+@source:leapster.cpp
leapster //
leapstertv //
-//@source:legionna.cpp
+@source:legionna.cpp
cupsoc // (c) 1992 Seibu
cupsoca // (c) 1992 Seibu
cupsocb // (c) 1992 Seibu
@@ -16465,7 +16467,7 @@ olysoc92 // (c) 1992 Seibu
olysoc92a // (c) 1992 Seibu
olysoc92b // (c) 1992 Seibu
-//@source:leland.cpp
+@source:leland.cpp
aafb // (c) 1989 Leland
aafbb // (c) 1989 Leland
aafbc // (c) 1989 Leland
@@ -16492,10 +16494,10 @@ upyoural // (c) 1987 Cinematronics
viper // (c) 1988 Leland
wseries // (c) 1985 Cinematronics
-//@source:lemmings.cpp
+@source:lemmings.cpp
lemmings // prototype (c) 1991 Data East USA (US)
-//@source:lethal.cpp
+@source:lethal.cpp
lethalen // GX191 (c) 1992
lethaleneaa // GX191 (c) 1992
lethaleneab // GX191 (c) 1992
@@ -16505,7 +16507,7 @@ lethalenua // GX191 (c) 1992
lethalenub // GX191 (c) 1992
lethalenux // GX191 (c) 1992
-//@source:lethalj.cpp
+@source:lethalj.cpp
cclownz // (c) 1999 LAI Games
cfarm // (c) 1999 LAI Games
eggventr // (c) 1997 The Game Room
@@ -16519,18 +16521,18 @@ lethalj // (c) 1996 The Game Room
ripribit // (c) 1997 LAI Games
ripribita // (c) 1997 LAI Games
-//@source:lft.cpp
+@source:lft.cpp
lft1230 //
lft1510 //
-//@source:lg-dvd.cpp
+@source:lg-dvd.cpp
lggp40 //
-//@source:lgp.cpp
+@source:lgp.cpp
lgp // (c) 1983 Taito
lgpalt // (c) 1983 Taito
-//@source:liberate.cpp
+@source:liberate.cpp
boomrang // (c) 1983
boomranga // (c) 1983
dualaslt // (c) 1984 Data East USA (US)
@@ -16543,18 +16545,18 @@ prosporta // (c) 1983
yellowcbb // bootleg
yellowcbj // (c) 1984
-//@source:liberatr.cpp
+@source:liberatr.cpp
liberatr // 136012 (c) 1982
liberatr2 // 136012 (c) 1982
-//@source:limenko.cpp
+@source:limenko.cpp
dynabomb // (c) 2000 Limenko
legendoh // (c) 2000 Limenko
sb2003 // (c) 2003 Limenko
sb2003a // (c) 2003 Limenko
spotty // (c) 2001 Prince Co.
-//@source:lindbergh.cpp
+@source:lindbergh.cpp
2spicy //
abclimax //
ghostsev //
@@ -16574,16 +16576,16 @@ segartv //
vf5 //
vtennis3 //
-//@source:lisa.cpp
+@source:lisa.cpp
lisa // 1983 Apple Lisa
lisa2 // 1984 Apple Lisa 2
lisa210 // 1984 Apple Lisa 2/10
macxl // 1985 Apple Macintosh XL
-//@source:littlerb.cpp
+@source:littlerb.cpp
littlerb // (c) 1993 TCH
-//@source:lkage.cpp
+@source:lkage.cpp
bygone // A53 (c) 1985 Taito Corporation - prototype ?
lkage // A54 (c) 1984 Taito Corporation
lkageb // bootleg
@@ -16592,39 +16594,39 @@ lkageb3 // bootleg
lkageo // A54 (c) 1984 Taito Corporation
lkageoo // A54 (c) 1984 Taito Corporation
-//@source:llc.cpp
+@source:llc.cpp
llc1 //
llc2 //
-//@source:lockon.cpp
+@source:lockon.cpp
lockon // (c) 1986 Tatsumi
lockonc // (c) 1986 Tatsumi
-//@source:lola8a.cpp
+@source:lola8a.cpp
lola8a //
-//@source:looping.cpp
+@source:looping.cpp
looping // (c) 1982 Video Games GmbH
loopingv // (c) 1982 Video Games GmbH (Venture Line license)
loopingva // (c) 1982 Video Games GmbH (Venture Line license)
skybump // (c) 1982 Venture Line
-//@source:lordgun.cpp
+@source:lordgun.cpp
aliencha // (c) 1994
alienchac // (c) 1994
lordgun // (c) 1994
-//@source:lsasquad.cpp
+@source:lsasquad.cpp
daikaiju // A74 (c) 1986 Taito
lsasquad // A64 (c) 1986 Taito Corporation / Taito America (dip switch)
storming // A64 (c) 1986 Taito Corporation
-//@source:ltcasino.cpp
+@source:ltcasino.cpp
ltcasinn // (c) 1984 Digital Controls Inc
ltcasino // (c) 1982 Digital Controls Inc
mv4in1 // (c) 1983 Entertainment Enterprises
-//@source:ltd.cpp
+@source:ltd.cpp
alcapone //
atla_ltd //
bhol_ltd //
@@ -16633,25 +16635,25 @@ cowboy //
pecmen //
zephy //
-//@source:luckgrln.cpp
+@source:luckgrln.cpp
7smash // (c) 1993 Sovic
luckgrln // (c) 1991 Wing Co. Ltd
-//@source:lucky74.cpp
+@source:lucky74.cpp
excitbj // (c) 1992 Wing Co. Ltd
lucky74 // (c) 1988 Wing Co. Ltd
lucky74a // (c) 1988 Wing Co. Ltd
lucky74b // (c) 1988 Wing Co. Ltd
-//@source:lvcards.cpp
+@source:lvcards.cpp
lvcards // (c) 1985 Tehkan
lvpoker // ???? - (c) 1985 Tehkan
ponttehk // 6011 - (c) 1985 Tehkan
-//@source:lviv.cpp
+@source:lviv.cpp
lviv // Lviv/L'vov
-//@source:lwings.cpp
+@source:lwings.cpp
avengers // 2/1987 (c) 1987 (US)
avengers2 // 2/1987 (c) 1987 (US)
buraiken // 2/1987 (c) 1987 (Japan)
@@ -16668,10 +16670,10 @@ trojanb // bootleg
trojanj // 4/1986 (c) 1986 (Japan)
trojanr // 4/1986 (c) 1986 + Romstar
-//@source:lynx.cpp
+@source:lynx.cpp
lynx // Atari Lynx Handheld
-//@source:m10.cpp
+@source:m10.cpp
andromed // (c) 1979
greenber // Irem
headoni // Irem no copyright notice (1979 - Arcade TV Game List - P.98, Left, 7 from top)
@@ -16680,7 +16682,7 @@ ipminvad1 // M10 incomplete dump
skychut // Irem [1980]
spacbeam // M15 no copyright notice
-//@source:m107.cpp
+@source:m107.cpp
airass // (c) 1993 Irem (World)
dsoccr94 // (c) 1994 Irem (Data East Corporation license)
dsoccr94k //
@@ -16688,33 +16690,33 @@ firebarr // (c) 1993 Irem (Japan)
kftgoal // (c) 1994 Jaleco
wpksoc // (c) 1995 Jaleco
-//@source:m14.cpp
+@source:m14.cpp
ptrmj // M14 (c) 1979
-//@source:m20.cpp
+@source:m20.cpp
m20 //
m40 //
-//@source:m24.cpp
+@source:m24.cpp
m24 //
m240 //
-//@source:m5.cpp
+@source:m5.cpp
m5 //
m5p //
m5p_brno //
-//@source:m52.cpp
+@source:m52.cpp
alpha1v // Vision Electronics
mpatrol // M52 (c) 1982
mpatrolw // M52 (c) 1982 + Williams license
mranger // bootleg
-//@source:m57.cpp
+@source:m57.cpp
newtangl // (c) 1983
troangel // (c) 1983
-//@source:m58.cpp
+@source:m58.cpp
10yard // (c) 1983
10yard85 // (c) 1985
10yardj // (c) 1983
@@ -16722,7 +16724,7 @@ vs10yard // (c) 1983/1984
vs10yardj // (c) 1983/1984
vs10yardu // (c) 1983/1984
-//@source:m62.cpp
+@source:m62.cpp
battroad // (c) 1984
horizon // (c) 1985
kidniki // (c) 1986 + Data East USA license
@@ -16746,16 +16748,16 @@ spelunkrj // (c) 1985 licensed from Broderbund
yanchamr // (c) 1986 (Japan)
youjyudn // (c) 1986 (Japan)
-//@source:m63.cpp
+@source:m63.cpp
atomboy // M63 (c) 1985 Irem + Memetron license
atomboya // M63 (c) 1985 Irem + Memetron license
fghtbskt // (c) 1984 Paradise Co. Ltd.
wilytowr // M63 (c) 1984
-//@source:m6805evs.cpp
+@source:m6805evs.cpp
m6805evs //
-//@source:m72.cpp
+@source:m72.cpp
airduel // (c) 1990 (World)
airduelm72 // (c) 1990 (Japan)
bchopper // (c) 1987
@@ -16797,13 +16799,13 @@ rtypeu // (c) 1987 + Nintendo USA license (US)
xmultipl // (c) 1989 (Japan)
xmultiplm72 // (c) 1989 (Japan)
-//@source:m79152pc.cpp
+@source:m79152pc.cpp
m79152pc //
-//@source:m79amb.cpp
+@source:m79amb.cpp
m79amb // (c) 1977 RamTek
-//@source:m90.cpp
+@source:m90.cpp
atompunk // (c) 1991 Irem America (licensed from Hudson Soft)
bbmanw // (c) 1992 Irem (World)
bbmanwj // (c) 1992 Irem (Japan)
@@ -16821,7 +16823,7 @@ quizf1 // (c) 1992 Irem (Japan)
riskchal // (c) 1993 Irem
shisen2 // (c) 1993 Tamtex
-//@source:m92.cpp
+@source:m92.cpp
bmaster // (c) 1991 Irem
crossbld // (c) 1991 Irem (Japan)
dsoccr94j // (c) 1994 Irem (Japan)
@@ -16859,7 +16861,7 @@ uccopsar // (c) 1992 Irem (World)
uccopsj // (c) 1992 Irem (Japan)
uccopsu // (c) 1992 Irem (US)
-//@source:mac.cpp
+@source:mac.cpp
mac128k // 1984 Apple Macintosh
mac2fdhd // 1988 Apple Macintosh II (FDHD)
mac512k // 1985 Apple Macintosh 512k
@@ -16898,14 +16900,14 @@ macsefd // 1988 Apple Macintosh SE (FDHD)
pmac6100 // 1993 Apple Power Macintosh 6100
unitron // 1985 Unitron
-//@source:macpci.cpp
+@source:macpci.cpp
pippin //
-//@source:macrossp.cpp
+@source:macrossp.cpp
macrossp // (c) 1996 Banpresto
quizmoon // (c) 1997 Banpresto
-//@source:macs.cpp
+@source:macs.cpp
cultname // (c) 1995 I'Max
kisekaeh // (c) 1995 I'Max
kisekaem // (c) 1995 I'Max
@@ -16914,15 +16916,15 @@ macsbios //
yujan // (C) 1999 Yubis
yuka // (c) 1999 Yubis
-//@source:madalien.cpp
+@source:madalien.cpp
madalien // (c) 1980
madaliena // (c) 1980
madalienb // (c) 1980
-//@source:madmotor.cpp
+@source:madmotor.cpp
madmotor // (c) [1989] Mitchell
-//@source:magic10.cpp
+@source:magic10.cpp
hotslot // (c) 1996 ABM Electronics
magic10 // (c) 1995 A.W.P. Games
magic102 // (c) 1997 ABM Games
@@ -16934,7 +16936,7 @@ musicsrt // (c) 1995 ABM Games
sgsafari // (c) 1996 New Impeuropex Corp.
suprpool // (c) 1997 ABM Games
-//@source:magicard.cpp
+@source:magicard.cpp
hotslots // (c) 2002 Impera
magicard // (c) 199? Impera
magicarda // (c) 199? Impera
@@ -16943,22 +16945,22 @@ magicarde // (c) 1994 Impera
magicardj // (c) 1998 Impera
magicle // (c) 1998 Impera
-//@source:magicfly.cpp
+@source:magicfly.cpp
7mezzo // 198? Unknown
bchance // 198? Unknown
magicfly // (c) 198? P&A GAMES
-//@source:magictg.cpp
+@source:magictg.cpp
magictg // (c) 199? Acclaim
magictga // (c) 199? Acclaim
-//@source:magmax.cpp
+@source:magmax.cpp
magmax // (c) 1985
-//@source:magtouch.cpp
+@source:magtouch.cpp
magtouch // (c) 1995
-//@source:mainevt.cpp
+@source:mainevt.cpp
devstors // GX890 (c) 1988
devstors2 // GX890 (c) 1988
devstors3 // GX890 (c) 1988
@@ -16968,21 +16970,21 @@ mainevt2p // GX799 (c) 1988
mainevto // GX799 (c) 1988
ringohja // GX799 (c) 1988 (Japan)
-//@source:mainsnk.cpp
+@source:mainsnk.cpp
canvas // A3008 (c) 1985
mainsnk // (c) 1984
-//@source:majorpkr.cpp
+@source:majorpkr.cpp
majorpkr // (c) 1994 PAL System.
-//@source:malzak.cpp
+@source:malzak.cpp
malzak // (c) 1980? Kitronix
malzak2 // (c) 1980? Kitronix
-//@source:manohman.cpp
+@source:manohman.cpp
manohman // 199?, Merkur.
-//@source:mappy.cpp
+@source:mappy.cpp
digdug2 // (c) 1985
digdug2o // (c) 1985
grobda // (c) 1984
@@ -17002,7 +17004,7 @@ todruaga // (c) 1984
todruagao // (c) 1984
todruagas // (c) 1984 pcb manufactured by Sidam
-//@source:marineb.cpp
+@source:marineb.cpp
bcruzm12 // (c) 1983 Sigma Ent. Inc.
changes // (c) 1982 Orca
changesa // (c) 1982 Orca + Eastern Micro Electronics license
@@ -17014,10 +17016,10 @@ marineb // (c) 1982 Orca
springer // (c) 1982 Orca
wanted // (c) 1984 Sigma Ent. Inc.
-//@source:marinedt.cpp
+@source:marinedt.cpp
marinedt // MG (c) 1981 Taito Corporation
-//@source:mario.cpp
+@source:mario.cpp
dkong3abl //
mario // (c) 1983 Nintendo of America
mariobl // bootleg
@@ -17026,31 +17028,31 @@ marioj // (c) 1983 Nintendo
marioo // (c) 1983 Nintendo of America
masao // bootleg
-//@source:markham.cpp
+@source:markham.cpp
markham // TVG14 (c) 1983 Sun Electronics
-//@source:marywu.cpp
+@source:marywu.cpp
marywu //
-//@source:mastboy.cpp
+@source:mastboy.cpp
mastboy // (c) 1987 - No Ref on the PCB
mastboyi // (c) 1987 - No Ref on the PCB
mastboyia // (c) 1987 - No Ref on the PCB
-//@source:matmania.cpp
+@source:matmania.cpp
excthour // TA-0015 (c) 1985 + Taito license
maniach // TA-0017 (c) 1986 + Taito America license
maniach2 // TA-0017 (c) 1986 + Taito America license
matmania // TA-0015 (c) 1985 + Taito America license
-//@source:maxaflex.cpp
+@source:maxaflex.cpp
maxaflex //
mf_achas // (c) 1982 Exidy / First Star Software
mf_bdash // (c) 1984 Exidy / First Star Software
mf_brist // (c) 1983 Exidy / First Star Software
mf_flip // (c) 1983 Exidy / First Star Software
-//@source:maygay1bsw.cpp
+@source:maygay1bsw.cpp
m1albsq // Albert Square (Maygay)
m1albsq1 //
m1albsq1p //
@@ -18139,7 +18141,7 @@ m1wotw // War Of The Worlds (Maygay)
m1wotwa //
m1wotwb //
-//@source:maygayep.cpp
+@source:maygayep.cpp
ep_21clb // Twenty One Club (Maygay)
ep_21clba //
ep_25crt // 25 Carrot Gold (Maygay)
@@ -18929,7 +18931,7 @@ ep_xspotb //
ep_xtra // X-tra X-tra (Maygay)
ep_xtraa //
-//@source:maygaysw.cpp
+@source:maygaysw.cpp
mg_alad // Aladdin's Cave
mg_bb // Big Break
mg_ewg // Each Way Gambler
@@ -18941,7 +18943,7 @@ mg_pbw // Pinball Wizard
mg_risk // Risk
mg_scl // Super Clue
-//@source:maygayv1.cpp
+@source:maygayv1.cpp
mv1bon // Believe It Or Not
mv1cpc // Caesar's Palace Club
mv1cpca //
@@ -18963,24 +18965,24 @@ screenp3a //
screenp4 //
screenpl // Screenplay
-//@source:mayumi.cpp
+@source:mayumi.cpp
mayumi // (c) 1988 Victory L.L.C., made by Sanritsu
-//@source:mazerbla.cpp
+@source:mazerbla.cpp
greatgun // (c) 1983
mazerbla // (c) 1983
mazerblaa // (c) 1983
-//@source:mbc200.cpp
+@source:mbc200.cpp
mbc200 //
-//@source:mbc55x.cpp
+@source:mbc55x.cpp
mbc55x // Sanyo MBC-550, MBC-555
-//@source:mbdtower.cpp
+@source:mbdtower.cpp
mbdtower // Milton Bradley
-//@source:mbee.cpp
+@source:mbee.cpp
mbee // Microbee 16 Standard or Plus
mbee128 // Microbee 128K standard (CP/M)
mbee128p // Microbee 128K premium (CP/M)
@@ -18994,24 +18996,24 @@ mbeepc85s // Microbee 32 PC85 (Swedish)
mbeeppc // Microbee 32 PPC85
mbeett // Microbee Teleterm
-//@source:mc10.cpp
+@source:mc10.cpp
alice // Matra & Hachette Ordinateur Alice
alice32 // Matra & Hachette Alice 32
alice90 // Matra & Hachette Alice 90
mc10 // MC-10
-//@source:mc1000.cpp
+@source:mc1000.cpp
mc1000 //
-//@source:mc1502.cpp
+@source:mc1502.cpp
mc1502 //
pk88 //
-//@source:mc80.cpp
+@source:mc80.cpp
mc8020 // MC 80.2x
mc8030 // MC 80.3x
-//@source:mcatadv.cpp
+@source:mcatadv.cpp
catt // (c) 1993 Wintechno
mcatadv // (c) 1993 Wintechno
mcatadvj // (c) 1993 Wintechno
@@ -19019,14 +19021,14 @@ nost // (c) 1993 Face
nostj // (c) 1993 Face
nostk // (c) 1993 Face
-//@source:mcb216.cpp
+@source:mcb216.cpp
cb308 //
mcb216 //
-//@source:mccpm.cpp
+@source:mccpm.cpp
mccpm //
-//@source:mcr.cpp
+@source:mcr.cpp
demoderb // (c) 1984
demoderbc // (c) 1984
domino // (c) 1982
@@ -19057,7 +19059,7 @@ twotiger // (c) 1984
twotigerc // (c) 1984
wacko // (c) 1982
-//@source:mcr3.cpp
+@source:mcr3.cpp
crater // (c) 1984
demoderm // (c) 1984
maxrpm // (c) 1986
@@ -19071,7 +19073,7 @@ spyhuntpr //
stargrds // (c) 1987
turbotag // (c) 1985
-//@source:mcr68.cpp
+@source:mcr68.cpp
archrivl // (c) 1989
archrivla // (c) 1989
archrivlb // bootleg
@@ -19086,23 +19088,23 @@ trisport // (c) 1989
xenophob // (c) 1987
zwackery // (c) 1984
-//@source:meadows.cpp
+@source:meadows.cpp
bowl3d // [1978?]
deadeye // [1978?]
gypsyjug // [1978?]
minferno // [1978?]
-//@source:meadwttl.cpp
+@source:meadwttl.cpp
bombaway // (c) 1976 Meadows
cgunship // (c) 1976 Meadows
ckidzo // (c) 1976 Meadows
mead4in1 // (c) 197? Meadows
-//@source:mediagx.cpp
+@source:mediagx.cpp
a51site4 // ?? (c) 1998
a51site4a // Sept.11,1998 (c) 1998
-//@source:megadriv.cpp
+@source:megadriv.cpp
32x // 1994 Sega 32X (USA)
32x_mcd // 1995 Sega Mega-CD (Europe w/32X addon)
32x_mcdj // 1994 Sega Mega-CD (Japan w/32X addon)
@@ -19129,7 +19131,7 @@ wmega // 1992 Sega Wondermega (Japan)
wmegam2 // 1993 Victor Wondermega M2 (Japan)
xeye // 1993 JVC X'eye (USA)
-//@source:megadrvb.cpp
+@source:megadrvb.cpp
aladmdb // MegaDrive-based hack
mk3mdb // MegaDrive-based hack
sonic2mb // MegaDrive-based hack
@@ -19137,10 +19139,10 @@ srmdb // MegaDrive-based hack
ssf2mdb // MegaDrive-based hack
topshoot // (c) 1995 Sun Mixing
-//@source:megaphx.cpp
+@source:megaphx.cpp
megaphx // (c) 1991 Dinamic / Inder
-//@source:megaplay.cpp
+@source:megaplay.cpp
megaplay //
mp_bio // 06
mp_col3 // ??
@@ -19154,7 +19156,7 @@ mp_sonic // 01
mp_sor2 // 05
mp_twc // 04
-//@source:megasys1.cpp
+@source:megasys1.cpp
64street // (c) 1991
64streetj // (c) 1991 (Japan)
64streetja // (c) 1991 (Japan)
@@ -19196,7 +19198,7 @@ stdragonb // bootleg
tshingen // (c) 1988 (Japan)
tshingena // (c) 1988 (Japan)
-//@source:megatech.cpp
+@source:megatech.cpp
megatech //
mt_aftrb // 10
mt_arrow // 44
@@ -19247,20 +19249,20 @@ mt_tout // 61
mt_wcsoc // 21
mt_wwar // 48
-//@source:megazone.cpp
+@source:megazone.cpp
megazone // GX319 (c) 1983
megazonea // GX319 (c) 1983
megazoneb // GX319 (c) 1983 + Kosuka
megazonec // GX319 (c) 1983 + Kosuka
megazonei // GX319 (c) 1983 + Interlogic / Kosuka
-//@source:meijinsn.cpp
+@source:meijinsn.cpp
meijinsn // (c) 1986 SNK
-//@source:mekd2.cpp
+@source:mekd2.cpp
mekd2 // 1977 Motorola Evaluation Kit
-//@source:mephisto.cpp
+@source:mephisto.cpp
mm2 // Mephisto 2
mm4 // Mephisto 4
mm4tk // Mephisto 4 Turbo Kit
@@ -19269,11 +19271,11 @@ mm50 // Mephisto 5.0 ROM
mm5tk // Mephisto 5.1 ROM Turbo Kit Speed
rebel5 // Mephisto 5
-//@source:mephistp.cpp
+@source:mephistp.cpp
mephistp //
mephistp1 //
-//@source:merit.cpp
+@source:merit.cpp
bigappg // (c) 1986 Merit / Big Apple Games
casino5 // (c) 1984 Merit
couple // (c) 1988 Merit
@@ -19312,7 +19314,7 @@ trvwzha // (c) 1985 Merit
trvwzhb // (c) 1985 Merit
trvwzv // (c) 1985 Merit
-//@source:meritm.cpp
+@source:meritm.cpp
americna // (c) 1987 Merit
americnaa // (c) 1987 Merit
dodgecty // (c) 1988 Merit
@@ -19366,21 +19368,21 @@ pitbosssc // (c) 1992 Merit
realbrod // (c) 1995 Merit
spitboss // (c) 1988 Merit
-//@source:mermaid.cpp
+@source:mermaid.cpp
mermaid // (c) 1982 Rock-ola, made by Sanritsu
rougien // (c) 1982 Sanritsu
yachtmn // (c) 1982 [Sanritsu] Esco
-//@source:mes.cpp
+@source:mes.cpp
mes //
-//@source:metalmx.cpp
+@source:metalmx.cpp
metalmx // 136103? (c) 1994
-//@source:metlclsh.cpp
+@source:metlclsh.cpp
metlclsh // (c) 1985 Data East
-//@source:metro.cpp
+@source:metro.cpp
3kokushi // (c) 1996 Mitchell
balcube // (c) 1996
bangball // (c) 1996 Banpresto / Kunihiko Tashiro+Goodhouse
@@ -19423,7 +19425,7 @@ toride2j // (c) 1994
vmetal // (c) 1995 Excellent System?
vmetaln // (c) 1995 Excellent System?
-//@source:mexico86.cpp
+@source:mexico86.cpp
kicknrun // A87 (c) 1986 Taito Corporation
kicknrunu // A87 (c) 1986 Taito Corporation
kikikai // A85 (c) 1986 Taito Corporation
@@ -19431,27 +19433,27 @@ knightb // bootleg
mexico86 // bootleg (Micro Research)
mexico86a // bootleg
-//@source:meyc8080.cpp
+@source:meyc8080.cpp
casbjack // (c) 1983 Meyco Games
mdrawpkr // (c) 1984 Meyco Games
mdrawpkra // (c) 1984 Meyco Games
wldarrow // (c) 1982 Meyco Games
-//@source:meyc8088.cpp
+@source:meyc8088.cpp
gldarrow // (c) 1984 Meyco Games
-//@source:mgames.cpp
+@source:mgames.cpp
mgames // (c) 1981 Merit
-//@source:mgavegas.cpp
+@source:mgavegas.cpp
mgavegas //
mgavegas133 //
mgavegas21 //
-//@source:mgolf.cpp
+@source:mgolf.cpp
mgolf // ?????? prototype 1978 [6502]
-//@source:mhavoc.cpp
+@source:mhavoc.cpp
alphaone // (proto) (c) 1983
alphaonea // (proto) (c) 1983
mhavoc // 136025 (c) 1983
@@ -19459,51 +19461,51 @@ mhavoc2 // 136025 (c) 1983
mhavocp // 136025 (c) 1983
mhavocrv // (hack)
-//@source:mice.cpp
+@source:mice.cpp
mice //
-//@source:micral.cpp
+@source:micral.cpp
micral //
-//@source:micro3d.cpp
+@source:micro3d.cpp
botss // (c) 1992 Microprose Games Inc.
botss11 // (c) 1992 Microprose Games Inc.
f15se // (c) 1991 Microprose Games Inc.
f15se21 // (c) 1991 Microprose Games Inc.
tankbatl // (c) 1992 Microprose Games Inc.
-//@source:microdec.cpp
+@source:microdec.cpp
md2 //
md3 //
-//@source:microkit.cpp
+@source:microkit.cpp
microkit //
-//@source:micronic.cpp
+@source:micronic.cpp
micronic //
-//@source:micropin.cpp
+@source:micropin.cpp
pentacup //
pentacup2 //
-//@source:microtan.cpp
+@source:microtan.cpp
microtan // 1979 Microtan 65
-//@source:microvsn.cpp
+@source:microvsn.cpp
microvsn // Milton Bradley
-//@source:midas.cpp
+@source:midas.cpp
hammer // (c) 2000 Andamiro
livequiz // (c) 1999 Andamiro
-//@source:midqslvr.cpp
+@source:midqslvr.cpp
arctthnd // (c) 2001 Midway Games
hydrthnd // (c) 1999 Midway Games
offrthnd // (c) 2000 Midway Games
ultarctc // (c) 2001 Midway Games
ultarctcup // (c) 2001 Midway Games
-//@source:midtunit.cpp
+@source:midtunit.cpp
jdreddp // (c) 1993 Midway
mk // (c) 1992 Midway
mk2 // (c) 1993 Midway
@@ -19528,7 +19530,7 @@ nbajamte2 // (c) 1994 Midway
nbajamte3 // (c) 1994 Midway
nbajamten // (c) 1995 Midway
-//@source:midvunit.cpp
+@source:midvunit.cpp
crusnusa // (c) 1994 Midway
crusnusa21 // (c) 1994 Midway
crusnusa40 // (c) 1994 Midway
@@ -19548,7 +19550,7 @@ wargods // (c) 1996 Midway (HD 10/09/1996 - Dual Resolut
wargodsa // (c) 1996 Midway (HD 08/15/1996)
wargodsb // (c) 1996 Midway (HD 12/11/1995)
-//@source:midwunit.cpp
+@source:midwunit.cpp
mk3 // (c) 1994 Midway
mk3p40 // (c) 1994 Midway
mk3r10 // (c) 1994 Midway
@@ -19566,11 +19568,11 @@ wwfmania // (c) 1995 Midway
wwfmaniab // (c) 1995 Midway
wwfmaniac // (c) 1995 Midway
-//@source:midxunit.cpp
+@source:midxunit.cpp
revx // (c) 1994 Midway
revxp5 // (c) 1994 Midway
-//@source:midyunit.cpp
+@source:midyunit.cpp
hiimpact // (c) 1990 Williams
hiimpact1 // (c) 1990 Williams
hiimpact2 // (c) 1990 Williams
@@ -19617,7 +19619,7 @@ trog4 // (c) 1990 Midway
trogpa4 // (c) 1990 Midway
trogpa6 // (c) 1990 Midway
-//@source:midzeus.cpp
+@source:midzeus.cpp
crusnexo // (c) 1999 Midway (v2.4) Latest offical release
crusnexoa // (c) 1999 Midway (v2.0)
crusnexob // (c) 1999 Midway (v1.6)
@@ -19632,25 +19634,25 @@ mk4b // (c) 1997 Midway (v1.0)
thegrid // (c) 2001 Midway (v1.2) Latest offical release
thegrida // (c) 2001 Midway (v1.1)
-//@source:mikie.cpp
+@source:mikie.cpp
mikie // GX469 (c) 1984
mikiehs // GX469 (c) 1984
mikiej // GX469 (c) 1984
-//@source:mikro80.cpp
+@source:mikro80.cpp
kristall2 //
mikro80 //
radio99 //
-//@source:mikromik.cpp
+@source:mikromik.cpp
mm1m6 //
mm1m7 //
-//@source:mikrosha.cpp
+@source:mikrosha.cpp
m86rk //
mikrosha //
-//@source:mil4000.cpp
+@source:mil4000.cpp
chewheel // (c) 200? Assogiochi Assago (Mi)
mil4000 // (c) 2000 Sure Milano
mil4000a // (c) 2000 Sure Milano
@@ -19658,32 +19660,32 @@ mil4000b // (c) 2000 Sure Milano
mil4000c // (c) 2000 Sure Milano
top21 // (c) 200? Assogiochi Assago (Mi)
-//@source:mini2440.cpp
+@source:mini2440.cpp
mini2440 //
-//@source:miniboy7.cpp
+@source:miniboy7.cpp
miniboy7 // (c) 1983, Bonanza Enterprises
miniboy7a // (c) 1983, Bonanza Enterprises
-//@source:minicom.cpp
+@source:minicom.cpp
mcom4_02 //
minicom //
-//@source:minivadr.cpp
+@source:minivadr.cpp
minivadr // D26 cabinet test board
-//@source:mirage.cpp
+@source:mirage.cpp
mirage // (c) 1994 Mitchell
-//@source:mirax.cpp
+@source:mirax.cpp
mirax // (c) 1985 Current Technologies
miraxa // (c) 1985 Current Technologies
-//@source:missb2.cpp
+@source:missb2.cpp
bublpong // bootleg on enhanced hardware
missb2 // bootleg on enhanced hardware
-//@source:missile.cpp
+@source:missile.cpp
mcombat // bootleg
mcombata // bootleg
mcombats // bootleg
@@ -19694,7 +19696,7 @@ missilem // hack
suprmatk // (c) 1980 + (c) 1981 Gencomp
suprmatkd // (c) 1980 + (c) 1981 Gencomp
-//@source:mitchell.cpp
+@source:mitchell.cpp
7toitsu // (c) 1988 Yuga
bbros // (c) 1989 Capcom (US) not listed on Capcom's site
block // 19/12/1991 (c) 1991 Capcom (World) (Joystick version)
@@ -19726,48 +19728,48 @@ spang // 14/09/1990 (c) 1990 Mitchell (World)
spangbl // bootleg
spangj // --/--/1990 (c) 1990 Mitchell (Japan)
-//@source:mits680b.cpp
+@source:mits680b.cpp
mits680b //
-//@source:mjkjidai.cpp
+@source:mjkjidai.cpp
mjkjidai // (c) 1986 Sanritsu
-//@source:mjsister.cpp
+@source:mjsister.cpp
mjsister // (c) 1986 Toaplan
-//@source:mk1.cpp
+@source:mk1.cpp
ccmk1 // Chess Champion MK I
-//@source:mk14.cpp
+@source:mk14.cpp
mk14 //
-//@source:mk2.cpp
+@source:mk2.cpp
ccmk2 // Chess Champion MK II
-//@source:mk85.cpp
+@source:mk85.cpp
mk85 //
-//@source:mk90.cpp
+@source:mk90.cpp
mk90 //
-//@source:mkit09.cpp
+@source:mkit09.cpp
mkit09 //
mkit09a //
-//@source:mlanding.cpp
+@source:mlanding.cpp
mlanding // ??? (c) 1987 Taito America Corporation (US)
-//@source:mmagic.cpp
+@source:mmagic.cpp
mmagic // (c) 1979 Nintendo
-//@source:mmd1.cpp
+@source:mmd1.cpp
mmd1 //
mmd2 //
-//@source:mmm.cpp
+@source:mmm.cpp
mmm_ldip // Lucky Dip
-//@source:mmodular.cpp
+@source:mmodular.cpp
academy // 1989 Mephisto Academy Schachcomputer
alm16 // 1988 Mephisto Almeria 68000
alm32 // 1988 Mephisto Alimera 68020
@@ -19794,10 +19796,10 @@ sfortec // 1989 Novag Super Forte C Chess Computer
van16 // 1991 Mephisto Vancouver 68000
van32 // 1991 Mephisto Vancouver 68020
-//@source:mod8.cpp
+@source:mod8.cpp
mod8 //
-//@source:model1.cpp
+@source:model1.cpp
netmerc // ?? Info available in time ??
swa // 1994.04 Star Wars Arcade
vf // 1993.12 Virtua Fighter
@@ -19807,7 +19809,7 @@ wingwar // 1994.06 Wing War
wingwarj // 1994.06 Wing War (Japan)
wingwaru // 1994.09 Wing War (US)
-//@source:model2.cpp
+@source:model2.cpp
bel // 1998.12 Behind Enemy Lines
daytona // 1994.03 Daytona USA (Japan, Revision A)
daytona93 //
@@ -19875,7 +19877,7 @@ zeroguna // 1997.12 Zero Gunner (Export)
zerogunaj // 1997.12 Zero Gunner (Japan)
zerogunj // 1997.12 Zero Gunner (Japan)
-//@source:model3.cpp
+@source:model3.cpp
bass // 1997.12 Get Bass
bassdx //
dayto2pe // 1998.12 Daytone USA 2 Power Edition
@@ -19921,34 +19923,34 @@ vs299a // 1999.?? Virtual Striker 2 ver.99 (rev A)
vs299b // 1999.?? Virtual Striker 2 ver.99 (rev B)
vs2v991 // 1999.?? Virtual Striker 2 ver.99.1
-//@source:modellot.cpp
+@source:modellot.cpp
modellot //
-//@source:mogura.cpp
+@source:mogura.cpp
mogura // GX141 (c) 1991
-//@source:mole.cpp
+@source:mole.cpp
mole // (c) 1982 Yachiyo Electronics, Ltd.
-//@source:molecular.cpp
+@source:molecular.cpp
molecula //
-//@source:momoko.cpp
+@source:momoko.cpp
momoko // (c) 1986 Jaleco
-//@source:monacogp.cpp
+@source:monacogp.cpp
monacogp // (c) 1980 Sega
monacogpa // (c) 1980 Sega
-//@source:monty.cpp
+@source:monty.cpp
mmonty // Ritam
monty // Ritam
-//@source:monzagp.cpp
+@source:monzagp.cpp
monzagp // (c) 1981 Olympia
monzagpb // bootleg
-//@source:moo.cpp
+@source:moo.cpp
bucky // GX173 (c) 1992 (World)
buckyaab // GX173 (c) 1992 (Asia)
buckyea // GX173 (c) 1992 (World)
@@ -19959,32 +19961,32 @@ moomesabl // bootleg
moomesauab // GX151 (c) 1992 (US)
moomesauac // GX151 (c) 1992 (US)
-//@source:mosaic.cpp
+@source:mosaic.cpp
gfire2 // (c) 1992 Topis Corp
mosaic // (c) 1990 Space
mosaica // (c) 1990 Space + Fuuki license
-//@source:mouser.cpp
+@source:mouser.cpp
mouser // UPL-83001 (c) 1983
mouserc // UPL-83001 (c) 1983
-//@source:mpf1.cpp
+@source:mpf1.cpp
mpf1 // 1979 Multitech Micro Professor 1
mpf1b // 1979 Multitech Micro Professor 1B
mpf1p //
-//@source:mps1230.cpp
+@source:mps1230.cpp
mps1000 // 1986 Commodore MPS-1000 (dot matrix printer)
mps1230 // 1988 Commodore MPS-1230 near-letter-quality dot matrix printer
-//@source:mpu12wbk.cpp
+@source:mpu12wbk.cpp
fruitstb //
-//@source:mpu2.cpp
+@source:mpu2.cpp
m2hilite // Hi-Lights (Barcrest) (MPU2)
m2svlite // Silver Lights (Barcrest) (MPU2)
-//@source:mpu3.cpp
+@source:mpu3.cpp
m3acech // Ace Chase (Bwb)
m3autort // Autoroute (Barcrest)
m3bankr // Banker (Bwb)
@@ -20067,7 +20069,7 @@ m3xchngg // Exchanges Galore (Barcrest)
m3xchngu // Exchanges Unlimited (Barcrest)
m3xchngua //
-//@source:mpu4.cpp
+@source:mpu4.cpp
m4aao // Against All Odds (Eurotek)
m4addrd //
m4aliz // AlizBaz (Qps)
@@ -20327,7 +20329,7 @@ m4wnud // Unknown MPU4 'W Nudge'
m4zill // Zillionare's Challenge (Pure Leisure)
m4zilla //
-//@source:mpu4avan.cpp
+@source:mpu4avan.cpp
m4abeaut //
m4abeaut_1 //
m4abeaut_2 //
@@ -20829,7 +20831,7 @@ m4trg__x //
m4trg__y //
m4trg__z //
-//@source:mpu4bwb.cpp
+@source:mpu4bwb.cpp
m4abra // Abracadabra (Bwb)
m4abra__a //
m4abra__b //
@@ -21291,7 +21293,7 @@ m4xtrm // X-treme (Bwb)
m4xtrm__a //
m4xtrm__b //
-//@source:mpu4concept.cpp
+@source:mpu4concept.cpp
m4nudgwc // Nudge a Win (Concept)
m4nudgwc__a //
m4nudgwc__b //
@@ -21363,7 +21365,7 @@ m4spnwnc // Spin-A-Win (Concept)
m4spnwnc__a //
m4spnwnc__b //
-//@source:mpu4crystal.cpp
+@source:mpu4crystal.cpp
m4aladn // Aladdin's Cave (Crystal)
m4aladna //
m4aladnb //
@@ -21466,10 +21468,10 @@ m4twstrd //
m4tylb // Thank Your Lucky Bars (Crystal)
m4tylba //
-//@source:mpu4dealem.cpp
+@source:mpu4dealem.cpp
v4dealem // Deal 'Em
-//@source:mpu4empire.cpp
+@source:mpu4empire.cpp
m4apachg // Apache Gold (Empire)
m4apachga //
m4apachgb //
@@ -21552,7 +21554,7 @@ m4ttrail // Treasure Trail (Empire)
m4ttraila //
m4ttrailb //
-//@source:mpu4mdm.cpp
+@source:mpu4mdm.cpp
m42punlm // 2p Unlimited (Mdm)
m4bigapl // The Big Apple (Mdm)
m4bigapla //
@@ -21598,7 +21600,7 @@ m4themob // The Mob (Mdm)
m4themoba //
m4themobb //
-//@source:mpu4misc.cpp
+@source:mpu4misc.cpp
m4bangin // Bangin' Away (Global)
m4bangina //
m4banginb //
@@ -21737,7 +21739,7 @@ m4wwc // Wacky Weekend Club (Global)
m4wwca //
m4wwcb //
-//@source:mpu4mod2sw.cpp
+@source:mpu4mod2sw.cpp
m421 // Twenty One (Barcrest)
m421club // 21 Club (Barcrest)
m4actbnka //
@@ -21982,7 +21984,7 @@ m4wayin // Way In (Barcrest)
m4wayina //
m4wildms // Wild Mystery (Barcrest)
-//@source:mpu4mod4yam.cpp
+@source:mpu4mod4yam.cpp
m4acechs // Ace Chase (Bwb)
m4acechs__a //
m4acechs__b //
@@ -22265,7 +22267,7 @@ m4vivalv__y //
m4vivalv__z //
m4voodoo // Voodoo 1000 (Barcrest)
-//@source:mpu4plasma.cpp
+@source:mpu4plasma.cpp
m4apach // Apache (Barcrest)
m4bigchf // Big Chief (Barcrest)
m4bigchfa //
@@ -22274,7 +22276,7 @@ m4bigchfc //
m4click // Clickity Click (Barcrest)
m4elite // Elite (Barcrest)
-//@source:mpu4sw.cpp
+@source:mpu4sw.cpp
m4actbnk // Action Bank (Barcrest)
m4actbnk__a //
m4actbnk__b //
@@ -25654,7 +25656,7 @@ m4wta__x //
m4wta__y //
m4wta__z //
-//@source:mpu4union.cpp
+@source:mpu4union.cpp
m4crzbn // Crazy Bingo
m4cwalk // Cake Walk (Union)
m4eezee // Eezee Fruits (Union)
@@ -25688,7 +25690,7 @@ m4uniboxa //
m4unique // Unique (Union)
m4uniquep //
-//@source:mpu4vid.cpp
+@source:mpu4vid.cpp
v4addlad // Adders and Ladders
v4addlad20 //
v4barqs2 // Barquest 2 (v0.3)
@@ -25767,7 +25769,7 @@ v4vgpok // Vegas Poker (prototype release 2)
v4wize // Wize Move (v1.3d)
v4wizea // Wize Move
-//@source:mpu5.cpp
+@source:mpu5.cpp
m55050 // Fifty Fifty (Bwb)
m5aceclb // Ace Of Clubs (Empire)
m5aceclba //
@@ -26399,13 +26401,13 @@ m5xfact04 //
m5xfact11 //
m5zigzag // Zig Zag
-//@source:mpz80.cpp
+@source:mpz80.cpp
mpz80 //
-//@source:mquake.cpp
+@source:mquake.cpp
mquake // (c) 1987
-//@source:mrdo.cpp
+@source:mrdo.cpp
mrdo // 8201 (c) 1982
mrdofix // 8201 (c) 1982 + Taito license
mrdot // 8201 (c) 1982 + Taito license
@@ -26414,25 +26416,25 @@ mrdu // bootleg
mrlo // bootleg
yankeedo // bootleg
-//@source:mrflea.cpp
+@source:mrflea.cpp
mrflea // (c) 1982
-//@source:mrgame.cpp
+@source:mrgame.cpp
dakar //
macattck //
motrshow //
motrshowa //
wcup90 //
-//@source:mrjong.cpp
+@source:mrjong.cpp
blkbustr // (c) 1983 Kiwako + ECI license
crazyblk // (c) 1983 Kiwako + ECI license
mrjong // (c) 1983 Kiwako
-//@source:ms0515.cpp
+@source:ms0515.cpp
ms0515 //
-//@source:ms32.cpp
+@source:ms32.cpp
47pie2 // (c) 1994
47pie2o // (c) 1994
akiss // (c) 1995
@@ -26451,19 +26453,19 @@ tetrisp // (c) 1995 Jaleco / BPS
tp2m32 // (c) 1997
wpksocv2 // (c) 1997
-//@source:ms9540.cpp
+@source:ms9540.cpp
ms9540 //
-//@source:msbc1.cpp
+@source:msbc1.cpp
msbc1 //
-//@source:msisaac.cpp
+@source:msisaac.cpp
msisaac // A34 (c) 1985 Taito Corporation
-//@source:mstation.cpp
+@source:mstation.cpp
mstation //
-//@source:msx.cpp
+@source:msx.cpp
ax150 //
ax170 //
ax350 //
@@ -26711,18 +26713,18 @@ yis503m //
yis604 //
yis60464 //
-//@source:mt735.cpp
+@source:mt735.cpp
mt735 //
-//@source:mtx.cpp
+@source:mtx.cpp
mtx500 // 1983 Memotech MTX 500
mtx512 // 1983 Memotech MTX 512
rs128 // 1984 Memotech RS 128
-//@source:mugsmash.cpp
+@source:mugsmash.cpp
mugsmash // (c) Electronic Devices (Italy) / 3D Games (England)
-//@source:multfish.cpp
+@source:multfish.cpp
crzmon2 // (c) 2010
crzmon2_2 // (c) 2010
crzmon2_3 // (c) 2010
@@ -26820,7 +26822,7 @@ sweetl2_3 // (c) 2007
sweetl2_4 // (c) 2007
windjamr // (c) 2002
-//@source:multfish_boot.cpp
+@source:multfish_boot.cpp
czmon_7a // bootleg - Crazy Monkey
czmon_7b // bootleg
czmon_8a // bootleg
@@ -26932,13 +26934,13 @@ sweetl2_2d // bootleg
sweetla // bootleg - Sweet Life
sweetlb // bootleg
-//@source:multi16.cpp
+@source:multi16.cpp
multi16 //
-//@source:multi8.cpp
+@source:multi8.cpp
multi8 //
-//@source:multigam.cpp
+@source:multigam.cpp
multigam // 1992
multigm2 // 1992
multigm3 // 19??
@@ -26947,27 +26949,27 @@ multigmt //
sgmt1 // 1994
supergm3 // 1996
-//@source:munchmo.cpp
+@source:munchmo.cpp
joyfulr // A2001 (c) 1983
mnchmobl // A2001 (c) 1983 + Centuri license
-//@source:murogem.cpp
+@source:murogem.cpp
lasvegas // hack
murogem // ???
murogema // ???
murogemb // ???
-//@source:murogmbl.cpp
+@source:murogmbl.cpp
murogmbl // ???
-//@source:mustache.cpp
+@source:mustache.cpp
mustache // (c) 1987 March
-//@source:mw18w.cpp
+@source:mw18w.cpp
18w // 653 (c) 1979 Midway
18w2 // 653 (c) 1979 Midway
-//@source:mw8080bw.cpp
+@source:mw8080bw.cpp
280zzzap // 610 [1976]
blueshrk // 742 [1978]
boothill // 612 [1977]
@@ -26996,27 +26998,27 @@ spacwalk // 640 [1978]
spcenctr // 645 (c) 1980 Midway
tornbase // 605 [1976]
-//@source:mwarr.cpp
+@source:mwarr.cpp
mwarr //
-//@source:mwsub.cpp
+@source:mwsub.cpp
submar // 760 (c) 1979 Midway
-//@source:mx2178.cpp
+@source:mx2178.cpp
mx2178 //
-//@source:myb3k.cpp
+@source:myb3k.cpp
myb3k //
-//@source:mycom.cpp
+@source:mycom.cpp
mycom //
-//@source:mystston.cpp
+@source:mystston.cpp
mystston // TA-0010 (c) 1984
myststono // TA-0010 (c) 1984
myststonoi // PCB manufactured by Itisa
-//@source:mystwarr.cpp
+@source:mystwarr.cpp
dadandrn // GX170 (c) 1993 (Japan)
gaiapols // GX123 (c) 1993 (Europe)
gaiapolsj // GX123 (c) 1993 (Japan)
@@ -27043,43 +27045,43 @@ viostormj // GX168 (c) 1993 (Japan)
viostormu // GX168 (c) 1993 (US)
viostormub // GX168 (c) 1993 (US)
-//@source:myvision.cpp
+@source:myvision.cpp
myvision //
-//@source:mz2000.cpp
+@source:mz2000.cpp
mz2000 // 1981 Sharp MZ2000
mz2200 // 1981 Sharp MZ2200
-//@source:mz2500.cpp
+@source:mz2500.cpp
mz2500 // 1985 Sharp MZ2500
mz2520 // 1985 Sharp MZ2520
-//@source:mz3500.cpp
+@source:mz3500.cpp
mz3500 // 198? Sharp MZ3500
-//@source:mz6500.cpp
+@source:mz6500.cpp
mz6500 // 198? Sharp MZ6500
-//@source:mz700.cpp
+@source:mz700.cpp
mz1500 // 1984 Sharp MZ1500
mz700 // 1982 Sharp MZ700
mz700j // 1982 Sharp MZ700 Japan
mz800 // 1984 Sharp MZ800
-//@source:mz80.cpp
+@source:mz80.cpp
mz80a // 1982 Sharp MZ80A
mz80b // 1981 Sharp MZ80B
mz80k // 1979 Sharp MZ80K
mz80kj // 1979 Sharp MZ80K
-//@source:mzr8105.cpp
+@source:mzr8105.cpp
mzr8105 //
-//@source:n64.cpp
+@source:n64.cpp
n64 // Nintendo N64
n64dd // Nintendo N64 (64DD Attachment)
-//@source:n8080.cpp
+@source:n8080.cpp
bandido // (c) 1980 Exidy
helifire // (c) 1980 Nintendo
helifirea // (c) 1980 Nintendo
@@ -27093,7 +27095,7 @@ spacefevo2 // (c) 1979 Nintendo
spacelnc // (c) 1979 Nintendo
westgun2 // (c) 1980 Taito Corporation
-//@source:nakajies.cpp
+@source:nakajies.cpp
dator3k // 199? Dator 3000 (Spanish)
drwrt100 // 199? NTS DreamWriter T100
drwrt200 // 199? NTS DreamWriter T200
@@ -27102,13 +27104,13 @@ drwrt450 // 199? NTS DreamWriter 450
es210_es //
wales210 // 199? Walther ES-210 (German)
-//@source:namcofl.cpp
+@source:namcofl.cpp
finalapr // (c) 1995
finalaprj // (c) 1995
finalapro // (c) 1995
speedrcr // (c) 1995
-//@source:namcona1.cpp
+@source:namcona1.cpp
bkrtmaq // (c) 1992 (Japan)
cgangpzl // (c) 1992 (US)
cgangpzlj // (c) 1992 (Japan)
@@ -27130,7 +27132,7 @@ swcourtj // (c) 1992 (Japan)
tinklpit // (c) 1993 (Japan)
xday2 // (c) 1995 (Japan)
-//@source:namconb1.cpp
+@source:namconb1.cpp
gslgr94j // (c) 1994 (Japan)
gslgr94u // (c) 1994
gslugrsj // (c) 1993 (Japan)
@@ -27148,14 +27150,14 @@ sws96 // (c) 1996 (Japan)
sws97 // (c) 1997 (Japan)
vshoot // (c) 1994
-//@source:namcond1.cpp
+@source:namcond1.cpp
ncv1 // (c) 1995
ncv1j // (c) 1995 (Japan)
ncv1j2 // (c) 1995 (Japan)
ncv2 // (c) 1996
ncv2j // (c) 1996 (Japan)
-//@source:namcops2.cpp
+@source:namcops2.cpp
bldyr3b //
cobrata //
dragchrn //
@@ -27209,7 +27211,7 @@ zgundmdx //
zoidiexp //
zoidsinf //
-//@source:namcos1.cpp
+@source:namcos1.cpp
bakutotu // (c) 1988 (Japan)
berabohm // (c) 1988 (Japan, Rev C)
berabohmb // (c) 1988 (Japan, Rev B)
@@ -27249,7 +27251,7 @@ ws90 // (c) 1990 (Japan)
youkaidk1 // (c) 1987 (Japan, old version (YD1))
youkaidk2 // (c) 1987 (Japan, new version (YD2, Rev B))
-//@source:namcos10.cpp
+@source:namcos10.cpp
chocovdr // 2002.10 Uchuu Daisakusen : Chocovader Contactee
gamshara // 2002.08 Gamshara (10021 Ver.A)
gjspace // 2001.12 Gekitoride-Jong Space (10011 Ver.A)
@@ -27265,7 +27267,7 @@ panikuru // 2002.03 Panicuru Panekuru
ptblank3 // 2000.12 Point Blank 3 (GNN2 Ver.A)
startrgn // 2002.07 Star Trigon (STT1 Ver.A)
-//@source:namcos11.cpp
+@source:namcos11.cpp
danceyes // 1996.10 Dancing Eyes (US, DC3/VER.C)
danceyesj // 1996.09 Dancing Eyes (Japan, DC1/VER.A)
dunkmnia // 1996.05 Dunk Mania (Asia, DM2/VER.C)
@@ -27292,7 +27294,7 @@ tekkenac // 1995.01 Tekken (Asia, TE2/VER.C)
tekkenjb // 1994.12 Tekken (Japan, TE1/VER.B)
xevi3dg // 1996.05 Xevious 3D/G (Japan, XV31/VER.A)
-//@source:namcos12.cpp
+@source:namcos12.cpp
aplarail // 1998.12 Attack Pla Rail
aquarush // 2000.02 Aqua Rush (AQ1/VER.A1, Japan)
ehrgeiz // 1998.?? Ehrgeiz (US, EG3/VER.A)
@@ -27346,7 +27348,7 @@ tenkomorja // 1998.12 Tenkomori Shooting (Japan, TKM1/VER.A
toukon3 // 1997.12 Shin Nihon Pro Wrestling Toukon Retsuden 3 Arcade Edition (Japan, TR1/VER.A)
truckk // 2000.06 Truck Kyousoukyoku (Metro)
-//@source:namcos2.cpp
+@source:namcos2.cpp
assault // (c) 1988
assaultj // (c) 1988 (Japan)
assaultp // (c) 1988 (Japan)
@@ -27402,7 +27404,7 @@ sws92g // (c) 1992 (Japan)
sws93 // (c) 1993 (Japan)
valkyrie // (c) 1989 (Japan)
-//@source:namcos21.cpp
+@source:namcos21.cpp
aircomb // (c) 1992 (US)
aircombj // (c) 1992 (Japan)
cybsled // (c) 1993 (World)
@@ -27415,7 +27417,7 @@ winrun // (c) 1988
winrun91 // (c) 1991
winrungp // (c) 1989
-//@source:namcos22.cpp
+@source:namcos22.cpp
acedrvrw // (c) 1994
adillor // (c) 1997
airco22b // (c) 1995
@@ -27445,7 +27447,7 @@ timecrisa // (c) 1995
tokyowar // (c) 1996
victlapw // (c) 1996
-//@source:namcos23.cpp
+@source:namcos23.cpp
500gp // March 1999
aking // Angler King - March 1999
crszone // Crisis Zone - December 1999
@@ -27474,7 +27476,7 @@ timecrs2 // April 1998
timecrs2v2b // April 1998
timecrs2v4a // April 1998
-//@source:namcos86.cpp
+@source:namcos86.cpp
genpeitd // (c) 1986
hopmappy // (c) 1986
roishtar // (c) 1986
@@ -27487,10 +27489,10 @@ skykiddx // (c) 1986
skykiddxo // (c) 1986
wndrmomo // (c) 1987
-//@source:nanos.cpp
+@source:nanos.cpp
nanos //
-//@source:naomi.cpp
+@source:naomi.cpp
18wheelr // 2000.01 18 Wheeler Deluxe (Rev A)
18wheels // 2000.01 18 Wheeler (Standard)
18wheelu // 2000.01 18 Wheeler (Upright)
@@ -27757,12 +27759,12 @@ zombrvn // 1999.03 Zombie Revenge (Rev A)
zombrvno // 1999.02 Zombie Revenge
zunou // 2006.07 Touch de Zunou
-//@source:nascom1.cpp
+@source:nascom1.cpp
nascom1 // 1978 Nascom 1
nascom2 // 1979 Nascom 2
nascom2c // 1980 Nascom 2 (CP/M)
-//@source:naughtyb.cpp
+@source:naughtyb.cpp
naughtyb // (c) 1982 Jaleco
naughtyba // bootleg
naughtybc // (c) 1982 Jaleco + Cinematronics
@@ -27776,7 +27778,7 @@ trvmstra // (c) 1985 Enerdyne Technologies Inc.
trvmstrb // (c) 1985 Enerdyne Technologies Inc.
trvmstrc // (c) 1985 Enerdyne Technologies Inc.
-//@source:nbmj8688.cpp
+@source:nbmj8688.cpp
apparel // (c) 1986 Central Denshi
barline // (c) 1986?
bijokkog // (c) 1988
@@ -27817,7 +27819,7 @@ seiha // (c) 1987
seiham // (c) 1987
vipclub // (c) 1988 Daiichi Denshi
-//@source:nbmj8891.cpp
+@source:nbmj8891.cpp
abunai // (c) 1989
bananadr // (c) 1989 DIGITAL SOFT
chinmoku // (c) 1990
@@ -27853,11 +27855,11 @@ scandalm // (c) 1989
taiwanmb // (c) 1988
telmahjn // (c) 1988
-//@source:nbmj8900.cpp
+@source:nbmj8900.cpp
ohpaipee // (c) 1990 Nichibutsu
togenkyo // (c) 1990 Nichibutsu
-//@source:nbmj8991.cpp
+@source:nbmj8991.cpp
av2mj1bb // (c) 1991 MIKI SYOUJI/AV JAPAN
av2mj2rg // (c) 1991 MIKI SYOUJI/AV JAPAN
finalbny // (c) 1991
@@ -27877,7 +27879,7 @@ triplew2 // (c) 1990
uchuuai // (c) 1989
vanilla // (c) 1991
-//@source:nbmj9195.cpp
+@source:nbmj9195.cpp
bakuhatu // (c) 1991
cmehyou // (c) 1992 Nichibutsu/Kawakusu
gal10ren // (c) 1993 FUJIC
@@ -27911,13 +27913,13 @@ wcatcher // (c) 1993
yosimotm // (c) 1994 Nichibutsu/Yoshimoto Kougyou
yosimoto // (c) 1994 Nichibutsu/Yoshimoto Kougyou
-//@source:nc.cpp
+@source:nc.cpp
dw225 //
nc100 // 1992 NC100
nc150 // 1992 NC150
nc200 // 1993 NC200
-//@source:nemesis.cpp
+@source:nemesis.cpp
blkpnthr // GX604 (c) 1987 (Japan)
bubsys //
citybomb // GX787 (c) 1987 (World)
@@ -27938,10 +27940,10 @@ salamand // GX587 (c) 1986
salamandj // GX587 (c) 1986
twinbee // GX412 (c) 1985
-//@source:neogeo.cpp
+@source:neogeo.cpp
neogeo //
-//@source:neogeo_noslot.cpp
+@source:neogeo_noslot.cpp
2020bb // 0030 (c) 1991 SNK / Pallas
2020bba // 0030 (c) 1991 SNK / Pallas
2020bbh // 0030 (c) 1991 SNK / Pallas
@@ -28065,6 +28067,7 @@ lastsold // 0196 Censored Korean release of lastblad
lbowling // 0019 (c) 1990 SNK
legendos // 0029 (c) 1991 SNK
lresort // 0024 (c) 1992 SNK
+lresortp // prototype
magdrop2 // 0221 (c) 1996 Data East Corporation
magdrop3 // 0233 (c) 1997 Data East Corporation
maglord // 0005 (c) 1990 Alpha Denshi Co.
@@ -28198,16 +28201,16 @@ zedblade // 0076 (c) 1994 NMK
zintrckb // 0211 hack - this is not a genuine MVS proto, its a bootleg made from the CD version
zupapa // 0070 Zupapa - released in 2001, 1994 prototype probably exists
-//@source:neoprint.cpp
+@source:neoprint.cpp
98best44 //
neoprint //
npcartv1 //
nprsp //
-//@source:neptunp2.cpp
+@source:neptunp2.cpp
neptunp2 //
-//@source:nes.cpp
+@source:nes.cpp
dendy // Dendy (Classic russian famiclone)
drpcjr // Bung Doctor PC Jr
famicom // Nintendo Family Computer (a.k.a. Famicom)
@@ -28218,16 +28221,16 @@ m82 // Nintendo M82 Display Unit
nes // Nintendo Entertainment System
nespal // Nintendo Entertainment System PAL
-//@source:newbrain.cpp
+@source:newbrain.cpp
newbrain //
newbraina //
newbrainmd //
-//@source:news.cpp
+@source:news.cpp
news // "Virus"??? ((c) 1993 Poby in ROM VIRUS.4)
newsa // "Jeansole / Poby
-//@source:next.cpp
+@source:next.cpp
next //
nextct //
nextctc //
@@ -28237,29 +28240,29 @@ nextsc //
nextst //
nextstc //
-//@source:nexus3d.cpp
+@source:nexus3d.cpp
acheart //
acheartf // (c) 2006 Examu
-//@source:ng_aes.cpp
+@source:ng_aes.cpp
aes // NeoGeo AES
neocd // NeoGeo CD
neocdz // NeoGeo CDZ
neocdzj //
-//@source:ngen.cpp
+@source:ngen.cpp
386i // 199?
ngen // 1983
ngenb38 // 1991
-//@source:ngp.cpp
+@source:ngp.cpp
ngp // NeoGeo Pocket
ngpc // NeoGeo Pocket Color
-//@source:nibble.cpp
+@source:nibble.cpp
l9nibble // unknown Nibble game.
-//@source:nightgal.cpp
+@source:nightgal.cpp
ngalsumr // (c) 1985
ngtbunny // (c) 1984
nightgal // (c) 1984
@@ -28268,7 +28271,7 @@ royalqn //
sexygal // (c) 1985
sweetgal // (c) 1985
-//@source:ninjakd2.cpp
+@source:ninjakd2.cpp
arkarea // UPL-87007 (c) 1988 (Arcade TV Game List - P.67, Right, 2 from top)
jt104 // hack?
mnight // UPL-????? (c) 1987 distributed by Kawakus
@@ -28283,23 +28286,23 @@ robokid // UPL-88013 (c) 1988
robokidj // UPL-88013 (c) 1988
robokidj2 // UPL-88013 (c) 1988
-//@source:ninjaw.cpp
+@source:ninjaw.cpp
darius2 // C07 (c) 1989 Taito Corporation (Japan)
ninjaw // B31 (c) 1987 Taito Corporation Japan (World)
ninjawj // B31 (c) 1987 Taito Corporation (Japan)
ninjawu // B31 (c) 1987 Taito America Corporation (US)
-//@source:nitedrvr.cpp
+@source:nitedrvr.cpp
nitedrvr // 006321 1976/10 [6502]
-//@source:niyanpai.cpp
+@source:niyanpai.cpp
4psimasy // (c) 1994
mhhonban // (c) 199?
musobana // (c) 1995
niyanpai // (c) 1996
zokumahj // (c) 199?
-//@source:nmg5.cpp
+@source:nmg5.cpp
7ordi // (c) 2002 Yun Sung
garogun // (c) 2000 Yun Sung
nmg5 // (c) 1998 Yun Sung
@@ -28313,7 +28316,7 @@ searchp2 // (c) 1999 Yun Sung
wondstck // (c) ???? Yun Sung
wondstcka // (c) ???? Yun Sung
-//@source:nmk16.cpp
+@source:nmk16.cpp
acrobatm // UPL-91073 (c) 1991 UPL + Taito license
airattck // (c) 1996 Comad
airattcka // (c) 1996 Comad
@@ -28383,7 +28386,7 @@ vandykeb // bootleg
vandykejal // UPL-90064 (c) Jaleco
vandykejal2 // UPL-90064 (c) Jaleco
-//@source:nokia_3310.cpp
+@source:nokia_3310.cpp
noki3210 //
noki3310 //
noki3330 //
@@ -28397,7 +28400,7 @@ noki8250 //
noki8850 //
noki8890 //
-//@source:norautp.cpp
+@source:norautp.cpp
bjpoker // (c) M. Kramer Inc.
cgip30cs // (c) 1999, CGI
df_djpkr // (c) DellFern Ltd.
@@ -28435,10 +28438,10 @@ smshilo // (c) 1983 SMS Manufacturing Corp.
ssjkrpkr // (c) 1982 Southern Systems & Assembly, Ltd.
tpoker2 // (c) 1993 Micro Manufacturing, Inc.
-//@source:notetaker.cpp
+@source:notetaker.cpp
notetakr //
-//@source:nova2001.cpp
+@source:nova2001.cpp
ninjakun // UPL-84003 (c) 1984 Taito Corporation
nova2001 // UPL-83005 (c) 1983
nova2001h // hack?
@@ -28448,13 +28451,16 @@ pkunwarj // UPL-????? (c) 1985 (Arcade Game TV List - P.9
raiders5 // UPL-85004 (c) 1985
raiders5t // UPL-85004 (c) 1985 Taito license
-//@source:nsm.cpp
+@source:novag6502.cpp
+supercon //
+
+@source:nsm.cpp
firebird //
-//@source:nsmpoker.cpp
+@source:nsmpoker.cpp
nsmpoker //
-//@source:nss.cpp
+@source:nss.cpp
nss //
nss_actr // 1992 Enix
nss_adam // 1992 Ocean
@@ -28469,7 +28475,7 @@ nss_smw // 1991 Nintendo
nss_ssoc // 1992 Human Inc.
nss_sten // 199? Nintendo
-//@source:nwk-tr.cpp
+@source:nwk-tr.cpp
racingj // GX676 (c)1998
racingj2 // GX888 (c)1999 (EAE)
racingj2j // GX888 (c)1999 (JAE)
@@ -28477,96 +28483,96 @@ thrilld // GX713 (c)1998 Japan JAE
thrilldae // GX713 (c)1998 Europe EAA
thrilldb // GX713 (c)1998 Japan JAB
-//@source:nycaptor.cpp
+@source:nycaptor.cpp
bronx // bootleg
colt // bootleg
cyclshtg // A97 (c) 1986 Taito Corporation
nycaptor // A50 (c) 1985 Taito Corporation
-//@source:nyny.cpp
+@source:nyny.cpp
nyny // (c) 1980 Sigma Ent. Inc.
nynyg // (c) 1980 Sigma Ent. Inc. + Gottlieb
warcadia // (c) 1982 Sigma Ent. Inc.
-//@source:ob68k1a.cpp
+@source:ob68k1a.cpp
ob68k1a //
-//@source:octopus.cpp
+@source:octopus.cpp
octopus //
-//@source:odyssey2.cpp
+@source:odyssey2.cpp
g7400 // 1983 Videopac Plus G7400
jopac // 1983 Jopac JO7400
odyssey2 // Magnavox Odyssey 2 - 1978-1983
odyssey3 // Magnavox Odyssey 3 / Command Center (prototype)
videopac // 1979 Videopac G7000/C52
-//@source:offtwall.cpp
+@source:offtwall.cpp
offtwall // 136090 (c) 1991
offtwallc // 136090 (c) 1991
-//@source:ohmygod.cpp
+@source:ohmygod.cpp
naname // (c) 1994 Atlus (Japan)
ohmygod // (c) 1993 Atlus (Japan)
-//@source:ojankohs.cpp
+@source:ojankohs.cpp
ccasino // [1987] V-System Co. (Japan)
ojanko2 // [1987] V-System Co. (Japan)
ojankoc // [1986] V-System Co. (Japan)
ojankohs // [1988] V-System Co. (Japan)
ojankoy // [1986] V-System Co. (Japan)
-//@source:okean240.cpp
+@source:okean240.cpp
okean240 //
okean240a //
okean240t //
-//@source:olibochu.cpp
+@source:olibochu.cpp
olibochu // M47 (c) 1981 + "GDI presents"
-//@source:omegrace.cpp
+@source:omegrace.cpp
deltrace // bootleg
omegrace // (c) 1981 Midway
omegrace2 // (c) 1981 Midway
-//@source:ondra.cpp
+@source:ondra.cpp
ondrat //
ondrav //
-//@source:oneshot.cpp
+@source:oneshot.cpp
maddonna // (c) 1995 Tuning
maddonnb // (c) 1995 Tuning
oneshot // no copyright notice
-//@source:onetwo.cpp
+@source:onetwo.cpp
onetwo // (c) 1997 Barko
onetwoe // (c) 1997 Barko
-//@source:onyx.cpp
+@source:onyx.cpp
c8002 //
-//@source:opwolf.cpp
+@source:opwolf.cpp
opwolf // B20 (c) 1987 Taito Corporation Japan (World)
opwolfa // B20 (c) 1987 Taito Corporation Japan (World)
opwolfb // bootleg
opwolfj // B20 (c) 1987 Taito Corporation (Japan)
opwolfu // B20 (c) 1987 Taito America Corporation (US)
-//@source:orao.cpp
+@source:orao.cpp
orao //
orao103 //
-//@source:orbit.cpp
+@source:orbit.cpp
orbit // 033689-033702 1978/11 [6800]
-//@source:oric.cpp
+@source:oric.cpp
oric1 // 1983 Oric 1
orica // 1984 Oric Atmos
prav8d // 1985 Pravetz 8D
prav8dd // 1989 Pravetz 8D (Disk ROM)
telstrat // ??? Oric Telestrat/Stratos
-//@source:orion.cpp
+@source:orion.cpp
orion128 //
orionide //
orionidm //
@@ -28575,54 +28581,54 @@ orionpro //
orionz80 //
orionzms //
-//@source:osbexec.cpp
+@source:osbexec.cpp
osbexec // 1982 Osborne Executive
-//@source:osborne1.cpp
+@source:osborne1.cpp
osborne1 // 1981 Osborne-1
-//@source:osi.cpp
+@source:osi.cpp
c1p //
c1pmf //
sb2m600b //
uk101 //
-//@source:othello.cpp
+@source:othello.cpp
othello // (c) 1984 Success.
-//@source:othunder.cpp
+@source:othunder.cpp
othunder // B67 (c) 1988 Taito Corporation Japan (World)
othunderj // B67 (c) 1988 Taito Corporation (Japan)
othunderu // B67 (c) 1988 Taito America Corporation (US)
othunderuo // B67 (c) 1988 Taito America Corporation (US)
-//@source:overdriv.cpp
+@source:overdriv.cpp
overdriv // GX789 (c) 1990
overdriva // GX789 (c) 1990
overdrivb // GX789 (c) 1990
-//@source:p112.cpp
+@source:p112.cpp
p112 //
-//@source:p2000t.cpp
+@source:p2000t.cpp
p2000m // 1980 P2000M
p2000t // 1980 P2000T
-//@source:p8k.cpp
+@source:p8k.cpp
p8000 //
p8000_16 //
-//@source:pachifev.cpp
+@source:pachifev.cpp
pachifev // (c) 1983?
-//@source:pacland.cpp
+@source:pacland.cpp
pacland // (c) 1984
paclandj // (c) 1984
paclandjo // (c) 1984
paclandjo2 // (c) 1984
paclandm // (c) 1984 Midway
-//@source:pacman.cpp
+@source:pacman.cpp
8bpm // (c) 1985 Seatongrove Ltd (Magic Eletronics USA license)
abscam // hack
acitya // (c) 1983 Epos Corporation
@@ -28729,7 +28735,7 @@ vanvank // (c) 1983 Karateco (bootleg?)
woodpeca // (c) 1981 Amenip Nova Games Ltd.
woodpeck // (c) 1981 Amenip (Palcom Queen River)
-//@source:palm.cpp
+@source:palm.cpp
palmiii // Palm III
palmiiic // Palm IIIc
palmm100 // Palm m100
@@ -28747,20 +28753,20 @@ spt1700 // Symbol SPT 1700
spt1740 // Symbol SPT 1740
visor // Palm Visor Edge
-//@source:palmz22.cpp
+@source:palmz22.cpp
palmz22 // Palm Z22
-//@source:pandoras.cpp
+@source:pandoras.cpp
pandoras // GX328 (c) 1984 + Interlogic
-//@source:pangofun.cpp
+@source:pangofun.cpp
pangofun // (c) 1995 InfoCube
-//@source:panicr.cpp
+@source:panicr.cpp
panicr // Seibu / Taito
panicrg // Seibu / TV-Tuning (Germany)
-//@source:paradise.cpp
+@source:paradise.cpp
madball // (c) 1998 Yun Sung
madballn // (c) 1998 Yun Sung
para2dx // (c) >1994 Yun Sung
@@ -28773,58 +28779,58 @@ tgtball // (c) 1995 Yun Sung
tgtballa // (c) 1995 Yun Sung
torus // (c) 1996 Yun Sung
-//@source:paranoia.cpp
+@source:paranoia.cpp
paranoia // (c) 1990 Naxat Soft
-//@source:parodius.cpp
+@source:parodius.cpp
parodius // GX955 (c) 1990 (World)
parodiusa // GX955 (c) 1990 (Asia)
parodiuse // GX955 (c) 1990 (World)
parodiusj // GX955 (c) 1990 (Japan)
-//@source:partner.cpp
+@source:partner.cpp
partner //
-//@source:pasha2.cpp
+@source:pasha2.cpp
pasha2 // (c) 1998 Dong Sung
-//@source:paso1600.cpp
+@source:paso1600.cpp
paso1600 //
-//@source:pasogo.cpp
+@source:pasogo.cpp
pasogo // KOEI PasoGo
-//@source:pasopia.cpp
+@source:pasopia.cpp
pasopia //
-//@source:pasopia7.cpp
+@source:pasopia7.cpp
pasopia7 //
pasopia7lcd //
-//@source:pass.cpp
+@source:pass.cpp
pass // (c) 1992 Oksan
-//@source:pastelg.cpp
+@source:pastelg.cpp
galds // (c) 1985
pastelg // (c) 1985
threeds // (c) 1985
-//@source:patinho_feio.cpp
+@source:patinho_feio.cpp
patinho // 1972 Patinho Feio
-//@source:pb1000.cpp
+@source:pb1000.cpp
ai1000 // Casio AI-1000
pb1000 // Casio PB-1000
pb2000c // Casio PB-2000C
-//@source:pbaction.cpp
+@source:pbaction.cpp
pbaction // (c) 1985 Tehkan
pbaction2 // (c) 1985 Tehkan
pbaction3 // (c) 1985 Tehkan
pbaction4 // (c) 1985 Tehkan
pbaction5 // (c) 1985 Tehkan
-//@source:pc.cpp
+@source:pc.cpp
ataripc3 //
bw230 // 1985 Bondwell (CGA)
compc1 // 1984 Commodore PC-1
@@ -28844,13 +28850,13 @@ ssam88s //
sx16 // Sanyo SX-16
zdsupers //
-//@source:pc100.cpp
+@source:pc100.cpp
pc100 //
-//@source:pc1500.cpp
+@source:pc1500.cpp
pc1500 // Pocket Computer 1500
-//@source:pc1512.cpp
+@source:pc1512.cpp
pc1512 //
pc1512dd //
pc1512hd10 //
@@ -28860,7 +28866,7 @@ pc1640dd //
pc1640hd20 //
pc1640hd30 //
-//@source:pc2000.cpp
+@source:pc2000.cpp
gbs5505x // 2001 Genius BrainStation 5505X (Germany)
gl2000 // 1993 Genius Leader 2000
gl2000c // 1994 Genius Leader 2000 Compact
@@ -28879,25 +28885,25 @@ ordisava // 1988 Ordisavant (France)
pc1000 // 1988 PreComputer 1000
pc2000 // 1993 PreComputer 2000
-//@source:pc4.cpp
+@source:pc4.cpp
pc4 //
-//@source:pc6001.cpp
+@source:pc6001.cpp
pc6001 //
pc6001a //
pc6001mk2 //
pc6001sr //
pc6601 //
-//@source:pc8001.cpp
+@source:pc8001.cpp
pc8001 //
pc8001mk2 //
-//@source:pc8401a.cpp
+@source:pc8401a.cpp
pc8401a // roms needed
pc8500 //
-//@source:pc8801.cpp
+@source:pc8801.cpp
pc8801 //
pc8801fa //
pc8801ma //
@@ -28909,11 +28915,11 @@ pc8801mk2fr //
pc8801mk2mr //
pc8801mk2sr //
-//@source:pc88va.cpp
+@source:pc88va.cpp
pc88va //
pc88va2 //
-//@source:pc9801.cpp
+@source:pc9801.cpp
pc486mu //
pc9801bx2 // 1993
pc9801f // 1983
@@ -28930,11 +28936,11 @@ pc9821v13 //
pc9821v20 //
pc9821xs //
-//@source:pcat_dyn.cpp
+@source:pcat_dyn.cpp
toursol // (c) 1995 Dynamo
toursol1 // (c) 1995 Dynamo
-//@source:pcat_nit.cpp
+@source:pcat_nit.cpp
bonanza // (c) 1993
bonanzar2 // (c) 1993
streetg // (c) 1993
@@ -28942,24 +28948,24 @@ streetg2 // (c) 1993
streetg2r5 // (c) 1993
streetgr3 // (c) 1993
-//@source:pcd.cpp
+@source:pcd.cpp
pcd // Siemens PC-D
pcx // Siemens PC-X
-//@source:pce.cpp
+@source:pce.cpp
pce // PC/Engine NEC 1987-1993
sgx // SuperGrafX NEC 1989
tg16 // Turbo Grafix-16 NEC 1989-1993
-//@source:pce220.cpp
+@source:pce220.cpp
pce220 // Pocket Computer E220
pcg850v // Pocket Computer G850V
-//@source:pcfx.cpp
+@source:pcfx.cpp
pcfx // PC-FX NEC 1994
pcfxga // PC-FX NEC 199? (PC-FX on a PC ISA Card)
-//@source:pcktgal.cpp
+@source:pcktgal.cpp
pcktgal // (c) 1987 Data East Corporation (Japan)
pcktgal2 // (c) 1989 Data East Corporation (World?)
pcktgal2j // (c) 1989 Data East Corporation (World?)
@@ -28967,50 +28973,50 @@ pcktgalb // bootleg
spool3 // (c) 1989 Data East Corporation (World?)
spool3i // (c) 1990 Data East Corporation + I-Vics license
-//@source:pcm.cpp
+@source:pcm.cpp
pcm // PC/M Mugler
-//@source:pcw.cpp
+@source:pcw.cpp
pcw10 // 198? PCW10
pcw8256 // 198? PCW8256
pcw8512 // 198? PCW8512
pcw9256 // 198? PCW9256
pcw9512 // 198? PCW9512 (+)
-//@source:pcw16.cpp
+@source:pcw16.cpp
pcw16 // 1995 PCW16
-//@source:pcxt.cpp
+@source:pcxt.cpp
filetto // (c) 1990 Novamatic
tetriskr // (c) 1988? bootleg
-//@source:pda600.cpp
+@source:pda600.cpp
pda600 //
-//@source:pdp1.cpp
+@source:pdp1.cpp
pdp1 // 1961 DEC PDP1
-//@source:pdp11.cpp
+@source:pdp11.cpp
pdp11qb //
pdp11ub //
pdp11ub2 //
sms1000 //
-//@source:pecom.cpp
+@source:pecom.cpp
pecom32 //
pecom64 //
-//@source:pegasus.cpp
+@source:pegasus.cpp
pegasus //
pegasusm //
-//@source:pencil2.cpp
+@source:pencil2.cpp
pencil2 //
-//@source:pengadvb.cpp
+@source:pengadvb.cpp
pengadvb // (c) 1988 Screen
-//@source:pengo.cpp
+@source:pengo.cpp
jrpacmbl // bootleg on Pengo HW
pengo // 834-0386 (c) 1982 Sega
pengo2 // 834-0386 (c) 1982 Sega
@@ -29020,14 +29026,14 @@ pengo4 // 834-0386 (c) 1982 Sega
pengob // bootleg
penta // bootleg
-//@source:pentagon.cpp
+@source:pentagon.cpp
pent1024 //
pentagon //
-//@source:peoplepc.cpp
+@source:peoplepc.cpp
olypeopl // Olympia People PC
-//@source:peplus.cpp
+@source:peplus.cpp
pebe0014 // (c) 1994 IGT - International Game Technology
pebe0014a // (c) 1994 IGT - International Game Technology
peip0028 // (c) 1987 IGT - International Game Technology
@@ -29526,10 +29532,10 @@ pexmp026 // (c) 1997 IGT - International Game Technology
pexmp030 // (c) 1997 IGT - International Game Technology
pexmp030a // (c) 1997 IGT - International Game Technology
-//@source:pes.cpp
+@source:pes.cpp
pes //
-//@source:pet.cpp
+@source:pet.cpp
cbm3008 //
cbm3016 //
cbm3032 //
@@ -29566,7 +29572,7 @@ pet4032f //
pet8032 //
superpet //
-//@source:peyper.cpp
+@source:peyper.cpp
gamatros //
nemesisp //
odin //
@@ -29578,7 +29584,7 @@ sonstwar //
sonstwr2 //
wolfman //
-//@source:pgm.cpp
+@source:pgm.cpp
ddp2 // (c) 2001 DoDonPachi 2 - Bee Storm
ddp2100 //
ddp2100c //
@@ -29699,7 +29705,7 @@ theglad100 //
theglad101 //
thegladpcb //
-//@source:pgm2.cpp
+@source:pgm2.cpp
ddpdojh //
kov2nl // (c) 2008
kov2nlo //
@@ -29709,11 +29715,11 @@ orleg2 // (c) 2007
orleg2o //
orleg2oa //
-//@source:phc25.cpp
+@source:phc25.cpp
phc25 //
phc25j //
-//@source:phoenix.cpp
+@source:phoenix.cpp
avefenix // bootleg (Video Game)
avefenixl // bootleg (Laguna)
avefenixrf // bootleg (Recreativos Franco)
@@ -29749,23 +29755,23 @@ vautour // bootleg (Jeutel)
vautourz // bootleg
vautourza // bootleg (Jeutal)
-//@source:photon.cpp
+@source:photon.cpp
phklad //
phpython //
phtetris //
-//@source:photon2.cpp
+@source:photon2.cpp
black //
brod //
kok //
-//@source:photoply.cpp
+@source:photoply.cpp
photoply //
-//@source:phunsy.cpp
+@source:phunsy.cpp
phunsy //
-//@source:piggypas.cpp
+@source:piggypas.cpp
3lilpigs //
dumpump //
fidlstix //
@@ -29774,28 +29780,28 @@ jackbean //
piggypas //
rndrndqs //
-//@source:pimps.cpp
+@source:pimps.cpp
pimps //
-//@source:pinball2k.cpp
+@source:pinball2k.cpp
rfmpb //
rfmpbr2 //
swe1pb //
-//@source:pingpong.cpp
+@source:pingpong.cpp
cashquiz // (c) 1986 Zilec-Zenitone
merlinmm // (c) 1986 Zilec-Zenitone
pingpong // GX555 (c) 1985
-//@source:pinkiri8.cpp
+@source:pinkiri8.cpp
janshi //
pinkiri8 //
ronjan //
-//@source:pipbug.cpp
+@source:pipbug.cpp
pipbug //
-//@source:pipedrm.cpp
+@source:pipedrm.cpp
hatris // (c) 1990 Video System Co. (US)
hatrisj // (c) 1990 Video System Co. (Japan)
pipedrm // (c) 1990 Video System Co. (World)
@@ -29803,51 +29809,51 @@ pipedrmj // (c) 1990 Video System Co. (Japan)
pipedrmt // (c) 1990 Video System Co. (Taiwan)
pipedrmu // (c) 1990 Video System Co. (US)
-//@source:pipeline.cpp
+@source:pipeline.cpp
pipeline // (c) 1990 Daehyun Electronics
-//@source:pirates.cpp
+@source:pirates.cpp
genix // (c) 199? NIX
pirates // (c) 1994 NIX
piratesb // bootleg?
-//@source:pitagjr.cpp
+@source:pitagjr.cpp
pitagjr // Pitagorin Junior
-//@source:pitnrun.cpp
+@source:pitnrun.cpp
pitnrun // PR (c) 1984 Taito Corporation
pitnruna // PR (c) 1984 Taito Corporation
-//@source:pk8000.cpp
+@source:pk8000.cpp
hobby //
pk8002 //
vesta //
-//@source:pk8020.cpp
+@source:pk8020.cpp
bk8t //
kontur //
korvet //
neiva //
-//@source:pkscram.cpp
+@source:pkscram.cpp
pkscram // (c) 1993 Cosmo Electronics Corporation
-//@source:pktgaldx.cpp
+@source:pktgaldx.cpp
pktgaldx // MAZ (c) 1993 Data East (Euro v3.00)
pktgaldxb // bootleg
pktgaldxj // MAZ (c) 1993
-//@source:plan80.cpp
+@source:plan80.cpp
plan80 //
-//@source:play_1.cpp
+@source:play_1.cpp
bigtown //
chance //
lastlap //
party //
spcgambl //
-//@source:play_2.cpp
+@source:play_2.cpp
antar //
antar2 //
attack //
@@ -29857,11 +29863,11 @@ evlfight //
madrace //
zira //
-//@source:play_3.cpp
+@source:play_3.cpp
megaaton //
megaatona //
-//@source:play_5.cpp
+@source:play_5.cpp
fldragon //
kz26 //
nautilus //
@@ -29874,7 +29880,7 @@ theraid //
trailer //
ufo_x //
-//@source:playch10.cpp
+@source:playch10.cpp
pc_1942 // (c) 1985 Capcom
pc_bball // (c) 1984 Nintendo of America
pc_bfght // (c) 1984 Nintendo
@@ -29932,7 +29938,7 @@ pc_wgnmn // (c) 1984 Nintendo
pc_ynoid // (c) 1990 Capcom USA (Nintendo of America license)
playch10 //
-//@source:playmark.cpp
+@source:playmark.cpp
bigtwin // (c) 1995
bigtwinb // (c) 1995
excelsr // (c) 1995
@@ -29945,7 +29951,7 @@ wbeachvl // (c) 1995
wbeachvl2 // (c) 1995
wbeachvl3 // (c) 1995
-//@source:plus4.cpp
+@source:plus4.cpp
c116 //
c16 //
c16_hu //
@@ -29956,7 +29962,7 @@ plus4 //
plus4p //
v364 //
-//@source:pluto5.cpp
+@source:pluto5.cpp
hb_bar7 // Bar Seven (Fairgames)
hb_bar7a //
hb_bigx // Big X (JPM)
@@ -30052,14 +30058,14 @@ hb_ringbe //
hb_ydd // Yabba-Dabba-Dough (Qps)
hb_ydda //
-//@source:plygonet.cpp
+@source:plygonet.cpp
plygonet // GX305 (c) 1993
polynetw // GX305 too? (c) 1993
-//@source:pm68k.cpp
+@source:pm68k.cpp
pm68k //
-//@source:pmd85.cpp
+@source:pmd85.cpp
alfa // Alfa (PMD-85.1 clone)
c2717 // Consul 2717 (PMD-85.2 clone)
c2717pmd // Consul 2717 with PMD-32
@@ -30070,13 +30076,13 @@ pmd852a // PMD-85.2A
pmd852b // PMD-85.2B
pmd853 // PMD-85.3
-//@source:pmi80.cpp
+@source:pmi80.cpp
pmi80 //
-//@source:pntnpuzl.cpp
+@source:pntnpuzl.cpp
pntnpuzl // Century?
-//@source:pocketc.cpp
+@source:pocketc.cpp
pc1245 // Pocket Computer 1245
pc1250 // Pocket Computer 1250
pc1251 // Pocket Computer 1251
@@ -30092,24 +30098,24 @@ pc1403h // Pocket Computer 1403H
pc1450 // Pocket Computer 1450
trs80pc3 // Tandy TRS80 PC-3
-//@source:pockstat.cpp
+@source:pockstat.cpp
pockstat // 1999 Sony PocketStation
-//@source:poisk1.cpp
+@source:poisk1.cpp
poisk1 //
-//@source:pokechmp.cpp
+@source:pokechmp.cpp
billlist //
pokechmp // Korean hack of Pocket Gal
pokechmpa //
-//@source:pokemini.cpp
+@source:pokemini.cpp
pokemini // Nintendo Pokemon Mini
-//@source:poker72.cpp
+@source:poker72.cpp
poker72 //
-//@source:polepos.cpp
+@source:polepos.cpp
polepos // (c) 1982
polepos2 // (c) 1983
polepos2a // 136014 (c) 1983 + Atari license
@@ -30123,7 +30129,7 @@ topracer // bootleg
topracera // bootleg
topracern // bootleg
-//@source:policetr.cpp
+@source:policetr.cpp
policetr // (c) 1996 P&P Marketing
policetr10 // (c) 1996 P&P Marketing
policetr11 // (c) 1996 P&P Marketing
@@ -30134,80 +30140,80 @@ sshooter11 // (c) 1998 P&P Marketing
sshooter12 // (c) 1998 P&P Marketing
sshooter17 // (c) 1998 P&P Marketing
-//@source:poly.cpp
+@source:poly.cpp
poly1 //
-//@source:poly88.cpp
+@source:poly88.cpp
poly88 //
poly8813 //
-//@source:poly880.cpp
+@source:poly880.cpp
poly880 //
-//@source:polyplay.cpp
+@source:polyplay.cpp
polyplay //
-//@source:pong.cpp
+@source:pong.cpp
breakout // (c) 1976 Atari
pong // (c) 1972 Atari
pongd // (c) 1973 Atari
pongf // (c) 1972 Atari
-//@source:poolshrk.cpp
+@source:poolshrk.cpp
poolshrk // 006281 1977/06 [6800]
-//@source:pooyan.cpp
+@source:pooyan.cpp
pootan // bootleg
pooyan // GX320 (c) 1982
pooyans // GX320 (c) 1982 Stern
-//@source:popeye.cpp
+@source:popeye.cpp
popeye // (c) 1982
popeyebl // bootleg
popeyef // (c) 1982
popeyeu // (c) 1982
skyskipr // (c) 1981
-//@source:popobear.cpp
+@source:popobear.cpp
popobear // (c) 2000 BMC
-//@source:popper.cpp
+@source:popper.cpp
popper // (c) 1983 Omori Electric Co., Ltd.
-//@source:portfoli.cpp
+@source:portfoli.cpp
pofo //
-//@source:portrait.cpp
+@source:portrait.cpp
portrait // (c) 1983 Olympia
portraita // (c) 1983 Olympia
-//@source:potgoldu.cpp
+@source:potgoldu.cpp
potgoldu // (c) 200? U.S. Games
-//@source:powerbal.cpp
+@source:powerbal.cpp
hotminda // (c) 1995
magicstk // (c) 1995
powerbal // (c) 1994
-//@source:powerins.cpp
+@source:powerins.cpp
powerins // (c) 1993 Atlus (USA)
powerinsa // (c) 1993 Atlus (bootleg of USA version)
powerinsb // (c) 1993 Atlus (bootleg of USA version)
powerinsj // (c) 1993 Atlus (Japan)
-//@source:pp01.cpp
+@source:pp01.cpp
pp01 //
-//@source:ppmast93.cpp
+@source:ppmast93.cpp
ppmast93 // (c) 1993 Electronic Devices S.R.L.
-//@source:prehisle.cpp
+@source:prehisle.cpp
gensitou // A8003 'GT' (c) 1989
prehisle // A8003 'GT' (c) 1989
prehislek // A8003 'GT' (c) 1989
prehisleu // A8003 'GT' (c) 1989
-//@source:prestige.cpp
+@source:prestige.cpp
cars2lap // CARS 2 Laptop (Germany)
gj4000 // Genius Junior 4000 (Germany)
gj5000 // Genius Junior 5000 (Germany)
@@ -30227,7 +30233,7 @@ prestige // PreComputer Prestige Elite
snotec // Bandai Super Note Club (Japan)
snotecex // Bandai Super Note Club EX (Japan)
-//@source:primo.cpp
+@source:primo.cpp
primoa32 // Primo A-32
primoa48 // Primo A-48
primoa64 // Primo A-64
@@ -30236,10 +30242,10 @@ primob48 // Primo B-48
primob64 // Primo B-64
primoc64 // Primo C-64
-//@source:pro80.cpp
+@source:pro80.cpp
pro80 //
-//@source:proconn.cpp
+@source:proconn.cpp
pr_5xcsh // 5x Cash (Project)
pr_7hvn // 777 Heaven (Project)
pr_7hvna //
@@ -30373,24 +30379,24 @@ pr_whlft // Wheel Of Fortune (Project)
pr_wldkn // Wild Kings (Project)
pr_wnstk // Winning Streak (Coinworld)
-//@source:prof180x.cpp
+@source:prof180x.cpp
prof180x //
prof181x //
-//@source:prof80.cpp
+@source:prof80.cpp
prof80 //
-//@source:progolf.cpp
+@source:progolf.cpp
progolf // (c) 1981
progolfa // (c) 1981
-//@source:prophet600.cpp
+@source:prophet600.cpp
prpht600 // 1983 Sequential Circuits
-//@source:proteus3.cpp
+@source:proteus3.cpp
proteus3 //
-//@source:ps2.cpp
+@source:ps2.cpp
i8530286 // IBM PS/2 Model 30-286
i8530h31 // IBM PS/2 8530-H31 (Model 30/286)
i8535043 // IBM PS/2 8535-043 (Model 35)
@@ -30400,13 +30406,13 @@ i8555081 // IBM PS/2 8550-081 (Model 55SX)
i8580071 // IBM PS/2 8580-071 (Model 80)
i8580111 // IBM PS/2 8580-111 (Model 80)
-//@source:pse.cpp
+@source:pse.cpp
bazooka // (c) 1976 PSE
bazookabr // (c) 1977 Taito do Brasil
dpatrol // (c) 1977 PSE
dpatrola // (c) 1977 PSE / Telegames
-//@source:psikyo.cpp
+@source:psikyo.cpp
btlkroad // (c) 1994
btlkroadk // (c) 1994
gunbird // (c) 1994
@@ -30424,7 +30430,7 @@ sngkacea // (c) 1993 (Japan)
tengai // (c) 1996
tengaij // (c) 1996
-//@source:psikyo4.cpp
+@source:psikyo4.cpp
hgkairak // (c) 1998
hotdebut // (c) 2000
hotgm4ev // (c) 2000
@@ -30434,7 +30440,7 @@ hotgmcki // (c) 2001
loderndf // (c) 2000
loderndfa // (c) 2000
-//@source:psikyosh.cpp
+@source:psikyosh.cpp
daraku // (c) 1998
dragnblz // (c) 2000
gnbarich // (c) 2001
@@ -30448,7 +30454,7 @@ soldivid // (c) 1997
tgm2 // (c) 2000
tgm2p // (c) 2000
-//@source:psion.cpp
+@source:psion.cpp
psion1 //
psioncm //
psionla //
@@ -30461,37 +30467,37 @@ psionp350 //
psionp464 //
psionxp //
-//@source:psx.cpp
+@source:psx.cpp
psa // 1995 Sony PlayStation (Asia-Pacific)
pse // 1995 Sony PlayStation (Europe)
psj // 1994 Sony PlayStation (Japan)
psu // 1995 Sony PlayStation (USA)
-//@source:psychic5.cpp
+@source:psychic5.cpp
bombsa // (c) 1988 Jaleco
psychic5 // (c) 1987 Jaleco
psychic5j // (c) 1987 Jaleco
-//@source:pt68k4.cpp
+@source:pt68k4.cpp
pt68k2 //
pt68k4 //
-//@source:ptcsol.cpp
+@source:ptcsol.cpp
sol20 //
-//@source:pturn.cpp
+@source:pturn.cpp
pturn // (c) 1984 Jaleco
-//@source:puckpkmn.cpp
+@source:puckpkmn.cpp
jzth //
puckpkmn // (c) 2000 Genie
puckpkmna // (c) 2000 IBS
puckpkmnb // (c) 2000 IBS
-//@source:pulsar.cpp
+@source:pulsar.cpp
pulsarlb //
-//@source:punchout.cpp
+@source:punchout.cpp
armwrest // (c) 1985
punchita // bootleg
punchout // (c) 1984
@@ -30501,42 +30507,42 @@ spnchout // (c) 1984
spnchouta // (c) 1984
spnchoutj // (c) 1984 (Japan)
-//@source:pv1000.cpp
+@source:pv1000.cpp
pv1000 // Casio PV-1000
-//@source:pv2000.cpp
+@source:pv2000.cpp
pv2000 // Casio PV-2000
-//@source:pv9234.cpp
+@source:pv9234.cpp
pv9234 //
-//@source:pve500.cpp
+@source:pve500.cpp
pve500 // SONY PVE-500
-//@source:px4.cpp
+@source:px4.cpp
px4 // 1985 Epson PX-4
px4p // 1985 Epson PX-4+
-//@source:px8.cpp
+@source:px8.cpp
px8 //
-//@source:pyl601.cpp
+@source:pyl601.cpp
pyl601 //
pyl601a //
-//@source:pyson.cpp
+@source:pyson.cpp
pyson // Konami Pyson Bios
wswe // World Soccer Winning Eleven
wswe2k3 // World Soccer Winning Eleven 2003
-//@source:pzletime.cpp
+@source:pzletime.cpp
pzletime //
-//@source:qdrmfgp.cpp
+@source:qdrmfgp.cpp
qdrmfgp // 1994.12 GQ460 (Japan)
qdrmfgp2 // 1995.09 GE557 (Japan)
-//@source:qix.cpp
+@source:qix.cpp
complexx // CX (c) 1984 Taito America Corporation
elecyoyo // YY (c) 1982 Taito America Corporation
elecyoyo2 // YY (c) 1982 Taito America Corporation
@@ -30555,7 +30561,7 @@ zookeep // ZA (c) 1982 Taito America Corporation
zookeep2 // ZA (c) 1982 Taito America Corporation
zookeep3 // ZA (c) 1982 Taito America Corporation
-//@source:ql.cpp
+@source:ql.cpp
ql // 1984 Sinclair QL (UK)
ql_de // 1984 Sinclair QL (Germany)
ql_dk // 1984 Sinclair QL (Denmark)
@@ -30567,62 +30573,62 @@ ql_se // 1984 Sinclair QL (Sweden)
ql_us // 1984 Sinclair QL (USA)
tonto //
-//@source:qtsbc.cpp
+@source:qtsbc.cpp
qtsbc //
-//@source:quakeat.cpp
+@source:quakeat.cpp
quake // (c) 19?? Lazer-Tron / iD Software
-//@source:quantum.cpp
+@source:quantum.cpp
quantum // 136016 (c) 1982 // made by Gencomp
quantum1 // 136016 (c) 1982 // made by Gencomp
quantump // 136016 (c) 1982 // made by Gencomp
-//@source:quasar.cpp
+@source:quasar.cpp
quasar // (c) 1980 Zelco Games Italy
quasara // (c) 1980 Zelco Games Italy
-//@source:queen.cpp
+@source:queen.cpp
queen //
-//@source:quizdna.cpp
+@source:quizdna.cpp
gakupara // (c) 1991 NMK
gekiretu // (c) 1992 Face
quizdna // (c) 1992 Face
-//@source:quizo.cpp
+@source:quizo.cpp
quizo // (c) 1985 Seoul Coin Corp.
quizoa // (c) 1985 Seoul Coin Corp.
-//@source:quizpani.cpp
+@source:quizpani.cpp
quizpani // (c) 1993 NMK
-//@source:quizpun2.cpp
+@source:quizpun2.cpp
quizpun // (c) 1989 Space Computer System of Korea
quizpun2 // (c) 1989 Space Computer System of Korea
-//@source:quizshow.cpp
+@source:quizshow.cpp
quizshow // 005464 1976/04 [2650]
-//@source:qx10.cpp
+@source:qx10.cpp
qx10 //
-//@source:r2dtank.cpp
+@source:r2dtank.cpp
r2dtank // (c) 1980 Sigma Ent. Inc.
-//@source:r2dx_v33.cpp
+@source:r2dx_v33.cpp
nzeroteam // (c) 1997 Seibu Kaihatsu
r2dx_v33 // (c) 1996 Seibu Kaihatsu
r2dx_v33_r2 // (c) 1996 Seibu Kaihatsu
zerotm2k // (c) 2000 Seibu Kaihatsu
-//@source:r9751.cpp
+@source:r9751.cpp
r9751 // ROLM 9751 phone system
-//@source:rabbit.cpp
+@source:rabbit.cpp
rabbit // (c) 1997 Electronic Arts
-//@source:radio86.cpp
+@source:radio86.cpp
impuls03 //
kr03 //
mikron2 //
@@ -30635,7 +30641,7 @@ rk7007 //
rk700716 //
spektr01 //
-//@source:raiden.cpp
+@source:raiden.cpp
raiden // (c) 1990 Seibu Kaihatsu
raidena // (c) 1990 Seibu Kaihatsu
raidenb // (c) 1990 Seibu Kaihatsu
@@ -30644,7 +30650,7 @@ raident // (c) 1990 Seibu Kaihatsu + Liang HWA Electroni
raidenu // (c) 1990 Seibu Kaihatsu + Fabtek license
raidenua // (c) 1990 Seibu Kaihatsu + Fabtek license
-//@source:raiden2.cpp
+@source:raiden2.cpp
raiden2 // (c) 1993 Seibu Kaihatsu + Fabtek license
raiden2dx // (c) 1993 Seibu Kaihatsu
raiden2e // (c) 1993 Seibu Kaihatsu
@@ -30677,12 +30683,12 @@ zeroteamd // (c) 1993 Seibu Kaihatsu + Dreamsoft license
zeroteams // (c) 1993 Seibu Kaihatsu
zeroteamsr // (c) 1993 Seibu Kaihatsu
-//@source:rainbow.cpp
+@source:rainbow.cpp
rainbow // 1983 DEC Rainbow 100-B
rainbow100a // 1982 DEC Rainbow 100-A
rainbow190 // 1985 DEC Rainbow 190
-//@source:rallyx.cpp
+@source:rallyx.cpp
commsega // (c) 1983 Sega
cottong // bootleg
gutangtn // GX359 (c) 1982 Konami + Sega license
@@ -30701,15 +30707,15 @@ savanna // Olympia (c) 1982 (Jungler bootleg)
tactcian // GX335 (c) 1982 Sega
tactcian2 // GX335 (c) 1981 Sega
-//@source:rambo.cpp
+@source:rambo.cpp
metamaq2 // Metamaquina 2 desktop 3d printer
-//@source:rampart.cpp
+@source:rampart.cpp
rampart // 136082 (c) 1990
rampart2p // 136082 (c) 1990
rampartj // 136082 (c) 1990 (Japan)
-//@source:ramtek.cpp
+@source:ramtek.cpp
bballrmt // (c) 1974 Ramtek
cleanswp // (c) 1974 Ramtek
hockyrmt // (c) 1973 Ramtek
@@ -30718,7 +30724,7 @@ trivia // (c) 1976 Ramtek
vollyrmt // (c) 1973 Ramtek
wipeormt // (c) 1974 Ramtek
-//@source:rastan.cpp
+@source:rastan.cpp
rastan // B04 (c) 1987 Taito Corporation Japan (World)
rastana // B04 (c) 1987 Taito Corporation Japan (World)
rastanu // B04 (c) 1987 Taito America Corporation (US)
@@ -30727,15 +30733,15 @@ rastanub // B04 (c) 1987 Taito America Corporation (US)
rastsaga // B04 (c) 1987 Taito Corporation (Japan)
rastsagaa // B04 (c) 1987 Taito Corporation (Japan)
-//@source:rastersp.cpp
+@source:rastersp.cpp
fbcrazy // 1997
rotr // 1994
-//@source:ravens.cpp
+@source:ravens.cpp
ravens //
ravens2 //
-//@source:rbisland.cpp
+@source:rbisland.cpp
jumping // bootleg
jumpinga // bootleg (Seyutu)
jumpingi // bootleg (Seyutu / Imnoe)
@@ -30743,26 +30749,26 @@ rbisland // B22 (c) 1987 Taito Corporation
rbislande // B39 (c) 1988 Taito Corporation
rbislando // B22 (c) 1987 Taito Corporation
-//@source:rbmk.cpp
+@source:rbmk.cpp
rbmk // (c) 1995 GMS
-//@source:rc759.cpp
+@source:rc759.cpp
rc759 // 1984 RC759
-//@source:rcorsair.cpp
+@source:rcorsair.cpp
rcorsair // (c) 1984 Nakasawa
-//@source:rd100.cpp
+@source:rd100.cpp
rd100 //
-//@source:rd110.cpp
+@source:rd110.cpp
d110 //
-//@source:re900.cpp
+@source:re900.cpp
bs94 // (c) 1994 Entretenimientos GEMINIS
re900 // (c) 1993 Entretenimientos GEMINIS
-//@source:realbrk.cpp
+@source:realbrk.cpp
dai2kaku // "522" DaiDaiKakumei (Japan)
pkgnsh // "505" Pachinko Gindama Shoubu 1998 (Japan)
pkgnshdx // "522" Pachinko Gindama Shoubu DX 1998 (Japan)
@@ -30771,13 +30777,13 @@ realbrkj // "523" Billiard Academy Real Break 1998 (Japan
realbrkk // "600" Billiard Academy Real Break 1998 (Korea)
realbrko // "600" Billiard Academy Real Break 1998 (Europe)
-//@source:redalert.cpp
+@source:redalert.cpp
demoneye // M27 (c) 1981
panther // M27 no copyright notice
redalert // M27 (c) 1981 + "GDI presents"
ww3 // M27 (c) 1981
-//@source:redclash.cpp
+@source:redclash.cpp
redclash // (c) 1981 Tehkan
redclasha // (c) 1981 Tehkan
redclashk // (c) Kaneko (bootleg?)
@@ -30785,33 +30791,33 @@ zerohour // 8011 (c) Universal
zerohoura // 8011 (c) Universal
zerohouri //
-//@source:relief.cpp
+@source:relief.cpp
relief // 136093 (c) 1992
relief2 // 136093 (c) 1992
relief3 // 136093 (c) 1992
-//@source:renegade.cpp
+@source:renegade.cpp
kuniokun // TA-0018 (c) 1986
kuniokunb // bootleg
renegade // TA-0018 (c) 1986 + Taito America license
-//@source:replicator.cpp
+@source:replicator.cpp
replica1 // Makerbot Replicator 1 desktop 3d printer
-//@source:retofinv.cpp
+@source:retofinv.cpp
retofinv // A37 (c) 1985 Taito Corporation
retofinv1 // bootleg
retofinv2 // bootleg
-//@source:rex6000.cpp
+@source:rex6000.cpp
ds2 //
oz750 // 199? Sharp Wizard OZ-750
rex6000 //
-//@source:rgum.cpp
+@source:rgum.cpp
rgum //
-//@source:riscpc.cpp
+@source:riscpc.cpp
a7000 // 1995 Acorn Archimedes 7000
a7000p // 1997 Acorn Archimedes 7000+
rpc600 //
@@ -30819,37 +30825,37 @@ rpc700 //
sarpc //
sarpc_j233 //
-//@source:rltennis.cpp
+@source:rltennis.cpp
rltennis // (c) 1993 TCH
-//@source:rm380z.cpp
+@source:rm380z.cpp
rm380z //
-//@source:rmhaihai.cpp
+@source:rmhaihai.cpp
rmhaihai // (c) 1985 Alba
rmhaihib // (c) 1985 Alba
rmhaijin // (c) 1986 Alba
rmhaisei // (c) 1986 Visco
themj // (c) 1987 Visco
-//@source:rmnimbus.cpp
+@source:rmnimbus.cpp
nimbus // RM Nimbus 186
-//@source:rmt32.cpp
+@source:rmt32.cpp
cm32l //
mt32 //
-//@source:rockrage.cpp
+@source:rockrage.cpp
rockrage // GX620 (c) 1986 (World?)
rockragea // GX620 (c) 1986 (Prototype?)
rockragej // GX620 (c) 1986 (Japan)
-//@source:rocnrope.cpp
+@source:rocnrope.cpp
rocnrope // GX364 (c) 1983
rocnropek // GX364 (c) 1983 + Kosuka
ropeman // (c) 1983 bootleg
-//@source:rohga.cpp
+@source:rohga.cpp
darkseal2 // MAS (c) 1992 Data East Corporation (Japan)
gunball // MAV (c) 1992 Data East Corporation (Japan)
nitrobal // MAV (c) 1992 Data East Corporation (World)
@@ -30864,25 +30870,25 @@ wizdfire // MAS (c) 1992 Data East Corporation (Over Sea)
wizdfireu // MAS (c) 1992 Data East Corporation (US)
wolffang // MAM (c) 1991 Data East Corporation (Japan)
-//@source:rollerg.cpp
+@source:rollerg.cpp
rollerg // GX999 (c) 1991 (US)
rollergj // GX999 (c) 1991 (Japan)
-//@source:rollext.cpp
+@source:rollext.cpp
rollext // (c) 1999 - Ref 991015
-//@source:rollrace.cpp
+@source:rollrace.cpp
fightrol // (c) 1983 Taito
rollace // (c) 1983 Williams
rollace2 // (c) 1983 Williams
-//@source:rotaryf.cpp
+@source:rotaryf.cpp
rotaryf //
-//@source:roul.cpp
+@source:roul.cpp
roul // (c) 1990
-//@source:route16.cpp
+@source:route16.cpp
route16 // (c) 1981 Tehkan/Sun + Centuri license
route16a // (c) 1981 Tehkan/Sun + Centuri license
route16bl // bootleg
@@ -30896,10 +30902,10 @@ stratvox // [1980 Sun Electronics] Taito
stratvoxb // bootleg
ttmahjng // Taito
-//@source:rowamet.cpp
+@source:rowamet.cpp
heavymtl //
-//@source:royalmah.cpp
+@source:royalmah.cpp
cafebrk // "528" Mahjong Cafe Break (C) 1999 Nakanihon / Dynax
cafedoll // "76" (c) 1993 Dynax
cafepara // "001" 1999 Techno-Top
@@ -30939,7 +30945,7 @@ suzume // 04? (c) 1986 Dyna Electronics
tahjong // (c) 1985 Bally Pond / Nasco
tontonb // "09" (c) 1987 Dynax
-//@source:rpunch.cpp
+@source:rpunch.cpp
rabiolep // (c) 1987 V-System Co. (Japan)
rpunch // (c) 1987 V-System Co. + Bally/Midway/Sente license (US)
svolley // (c) 1989 V-System Co. (Japan)
@@ -30947,19 +30953,19 @@ svolleybl // bootleg
svolleyk // (c) 1989 V-System Co. (Korea)
svolleyu // (c) 1989 V-System Co. + Data East license (US)
-//@source:rsc55.cpp
+@source:rsc55.cpp
sc55 // 1991 Sound Canvas SC-55
-//@source:rt1715.cpp
+@source:rt1715.cpp
rt1715 //
rt1715lc // (latin/cyrillic)
rt1715w //
-//@source:runaway.cpp
+@source:runaway.cpp
qwak // (proto) (c) 1982
runaway // (proto) (c) 1982
-//@source:rungun.cpp
+@source:rungun.cpp
rungun // GX247 (c) 1993 (World)
runguna // GX247 (c) 1993 (World)
rungunad // GX247 (c) 1993 (World)
@@ -30972,13 +30978,13 @@ rungunud // GX247 (c) 1993 (US)
slmdunkj // GX247 (c) 1993 (Japan)
slmdunkjd // GX247 (c) 1993 (Japan)
-//@source:rvoice.cpp
+@source:rvoice.cpp
rvoicepc //
-//@source:rx78.cpp
+@source:rx78.cpp
rx78 //
-//@source:s11.cpp
+@source:s11.cpp
gmine_l2 //
grand_l4 //
hs_l3 //
@@ -30992,7 +30998,7 @@ tdawg_l1 //
tts_l1 //
tts_l2 //
-//@source:s11a.cpp
+@source:s11a.cpp
f14_l1 //
f14_p3 //
f14_p4 //
@@ -31004,7 +31010,7 @@ pb_l3 //
pb_l5 //
pb_p4 //
-//@source:s11b.cpp
+@source:s11b.cpp
bcats_l2 //
bcats_l5 //
bguns_l7 //
@@ -31053,7 +31059,7 @@ whirl_l2 //
whirl_l3 //
whirl_lg3 //
-//@source:s11c.cpp
+@source:s11c.cpp
bbnny_l2 //
bbnny_lu //
dd_l2 //
@@ -31080,7 +31086,7 @@ rollr_p2 //
rvrbt_l3 //
strax_p7 //
-//@source:s3.cpp
+@source:s3.cpp
cntct_l1 //
disco_l1 //
httip_l1 //
@@ -31089,7 +31095,7 @@ phnix_l1 //
pkrno_l1 //
wldcp_l1 //
-//@source:s4.cpp
+@source:s4.cpp
arist_l1 //
bstrk_l1 //
flash_l1 //
@@ -31107,7 +31113,7 @@ trizn_l1 //
trizn_t1 //
tstrk_l1 //
-//@source:s6.cpp
+@source:s6.cpp
blkou_f1 //
blkou_l1 //
blkou_t1 //
@@ -31121,13 +31127,13 @@ lzbal_t2 //
scrpn_l1 //
scrpn_t1 //
-//@source:s6a.cpp
+@source:s6a.cpp
algar_l1 //
alpok_f6 //
alpok_l2 //
alpok_l6 //
-//@source:s7.cpp
+@source:s7.cpp
barra_l1 //
bk_f4 //
bk_l3 //
@@ -31152,14 +31158,14 @@ tmfnt_l5 //
vrkon_l1 //
wrlok_l3 //
-//@source:s8.cpp
+@source:s8.cpp
pfevr_l2 //
pfevr_p3 //
-//@source:s8a.cpp
+@source:s8a.cpp
scrzy_l1 //
-//@source:s9.cpp
+@source:s9.cpp
alcat_l7 //
comet_l4 //
comet_l5 //
@@ -31170,17 +31176,17 @@ sshtl_l7 //
szone_l2 //
szone_l5 //
-//@source:sacstate.cpp
+@source:sacstate.cpp
sacstate //
-//@source:safarir.cpp
+@source:safarir.cpp
safarir // (c) 1980 Shin Nihon Kikaku (SNK) + Taito license
safarirj // (c) 1979 Shin Nihon Kikaku (SNK)
-//@source:sage2.cpp
+@source:sage2.cpp
sage2 //
-//@source:sam.cpp
+@source:sam.cpp
24_130 //
24_140 //
24_144 //
@@ -31380,89 +31386,89 @@ wpt_1400gf //
wpt_1400i //
wpt_1400l //
-//@source:samcoupe.cpp
+@source:samcoupe.cpp
samcoupe // 1989 Sam Coupe
-//@source:sandscrp.cpp
+@source:sandscrp.cpp
sandscrp // (c) 1992 Face
sandscrpa // (c) 1992 Face
sandscrpb // (c) 1992 Face
-//@source:sangho.cpp
+@source:sangho.cpp
pzlestar // (c) 199? Sang Ho Soft
sexyboom // (c) 1992 Sang Ho Soft
-//@source:sanremmg.cpp
+@source:sanremmg.cpp
sanremmg // San Remo / Elsy
-//@source:sanremo.cpp
+@source:sanremo.cpp
number1 // 1996 San Remo Games
-//@source:sansa_fuze.cpp
+@source:sansa_fuze.cpp
sanfuze2 //
-//@source:sapi1.cpp
+@source:sapi1.cpp
sapi1 //
sapizps2 //
sapizps3 //
sapizps3a //
sapizps3b //
-//@source:saturn.cpp
+@source:saturn.cpp
hisaturn // Hitachi HiSaturn
saturn // 1995 Sega Saturn (USA)
saturneu // 1995 Sega Saturn (Europe)
saturnjp // 1994 Sega Saturn (Japan)
vsaturn // JVC V-Saturn
-//@source:sauro.cpp
+@source:sauro.cpp
sauro // (c) 1987
saurop // (c) 1987
saurorr // (c) 1987
trckydoc // (c) 1987
trckydoca // (c) 1987
-//@source:savia84.cpp
+@source:savia84.cpp
savia84 //
-//@source:savquest.cpp
+@source:savquest.cpp
savquest //
-//@source:sbasketb.cpp
+@source:sbasketb.cpp
sbasketb // GX405 (c) 1984 (Version I, Encrypted)
sbaskete // GX405 (c) 1984 (Version E, Encrypted)
sbasketg // GX405 (c) 1984 (Version G, Encrypted)
sbasketh // GX405 (c) 1984 (Version H, Unprotected)
-//@source:sbc6510.cpp
+@source:sbc6510.cpp
sbc6510 //
-//@source:sbowling.cpp
+@source:sbowling.cpp
sbowling // KB (c) 1982 Taito Corporation
-//@source:sbrain.cpp
+@source:sbrain.cpp
sbrain //
-//@source:sbrkout.cpp
+@source:sbrkout.cpp
sbrkout // 033453-033455 1978/09 [6502]
sbrkout3 // 033442-033452 1978/09 [6502]
sbrkoutc // unrealeased proto
sbrkoutct // 034555-034559 proto ???? [6502]
-//@source:sbugger.cpp
+@source:sbugger.cpp
sbugger // (c) 1981 Game-A-Tron
sbuggera // (c) 1981 Game-A-Tron
-//@source:sc1.cpp
+@source:sc1.cpp
sc1 //
-//@source:sc2.cpp
+@source:sc2.cpp
sc2 //
-//@source:scm_500.cpp
+@source:scm_500.cpp
scm_500 //
-//@source:scobra.cpp
+@source:scobra.cpp
aponow // bootleg
billiard // bootleg
darkplnt // (c) 1982 Stern
@@ -31483,17 +31489,17 @@ stratgyx // GX306 (c) 1981 Konami
strongx // bootleg
tazmani2 // (c) 1982 Stern
-//@source:scorpion.cpp
+@source:scorpion.cpp
bestzx //
kay1024 //
profi //
quorum //
scorpio //
-//@source:scotrsht.cpp
+@source:scotrsht.cpp
scotrsht // GX545 (c) 1985
-//@source:scramble.cpp
+@source:scramble.cpp
800fath // (c) 1981 Amenip + U.S. Billiards license
ad2083 // (c) 1983 Midcoin
cavelon // (c) 1983 Jetsoft
@@ -31523,17 +31529,17 @@ triplep // (c) 1982 KKI / made by Sanritsu?
triplepa // (c) 1982 KKI / made by Sanritsu?
turpins // (c) 1981 bootleg
-//@source:scregg.cpp
+@source:scregg.cpp
dommy // TA-00?? (c) 1983 (Arcade TV Game List - P.90, Left, 13 from top)
eggs // TA-0002 (c) 1983 Universal USA
rockduck // bootleg? 1983 Datel SAS
scregg // TA-0001 (c) 1983
-//@source:scv.cpp
+@source:scv.cpp
scv //
scv_pal //
-//@source:sderby.cpp
+@source:sderby.cpp
croupier // (c) 1997 Playmark
croupiera // (c) 1997 Playmark
luckboom //
@@ -31541,23 +31547,23 @@ sderby // (c) 1996
sderbya // (c) 1996
spacewin //
-//@source:sdk80.cpp
+@source:sdk80.cpp
sdk80 //
-//@source:sdk85.cpp
+@source:sdk85.cpp
sdk85 //
-//@source:sdk86.cpp
+@source:sdk86.cpp
sdk86 //
-//@source:seabattl.cpp
+@source:seabattl.cpp
seabattl // (c) 1980
seabattla // (c) 1980
-//@source:sealy.cpp
+@source:sealy.cpp
crzyddz // (c) 2004? Sealy
-//@source:seattle.cpp
+@source:seattle.cpp
biofreak // (c) 1997 Midway Games (prototype)
blitz // (c) 1997 Midway Games
blitz11 // (c) 1997 Midway Games
@@ -31578,13 +31584,13 @@ vaportrx // (c) 1998 Atari Games
vaportrxp // (c) 1998 Atari Games
wg3dh // (c) 1996 Atari Games
-//@source:seattlecmp.cpp
+@source:seattlecmp.cpp
seattle //
-//@source:sega_sawatte.cpp
+@source:sega_sawatte.cpp
sawatte //
-//@source:segac2.cpp
+@source:segac2.cpp
bloxeedc // (c) 1989 Sega / Elorg
bloxeedu // (c) 1989 Sega / Elorg
borench // (c) 1990 Sega
@@ -31625,10 +31631,10 @@ twinsqua // (c) 1991 Sega
wwmarine // (c) 1992 Sega
zunkyou // (c) 1994 Sega
-//@source:segacoin.cpp
+@source:segacoin.cpp
westdrm //
-//@source:segae.cpp
+@source:segae.cpp
astrofl // 834-5803 (c) 1986
fantzn2 // (c) 1988
hangonjr // (c) 1985
@@ -31637,7 +31643,7 @@ ridleofp // (c) 1986 Sega / Nasco
tetrisse // (c) 1988
transfrm // 834-5803 (c) 1986
-//@source:segag80r.cpp
+@source:segag80r.cpp
005 // (c) 1981
astrob // (c) 1981
astrob1 // (c) 1981
@@ -31652,7 +31658,7 @@ sindbadm // 834-5244 (c) 1983 Sega
spaceod // (c) 1981
spaceod2 // (c) 1981
-//@source:segag80v.cpp
+@source:segag80v.cpp
elim2 // (c) 1981 Gremlin
elim2a // (c) 1981 Gremlin
elim2c // (c) 1981 Gremlin
@@ -31665,7 +31671,7 @@ startrek // (c) 1982
tacscan // (c) 1982
zektor // (c) 1982
-//@source:segahang.cpp
+@source:segahang.cpp
endurob2 // (c) 1985 (Beta bootleg)
endurobl // (c) 1985 (Herb bootleg)
enduror // (c) 1985 (FD1089B)
@@ -31680,10 +31686,10 @@ shangonro // (c) 1987 (FD1094)
sharrier // (c) 1985
sharrier1 // (c) 1985
-//@source:segajw.cpp
+@source:segajw.cpp
segajw //
-//@source:segald.cpp
+@source:segald.cpp
astron // (c) 1983
astronp // (c) 1983
cobraseg // (c) ????
@@ -31691,10 +31697,10 @@ galaxyr // (c) 1983
galaxyrp // (c) 1983
sblazerp // (c) 1983
-//@source:segam1.cpp
+@source:segam1.cpp
bingpty // ?
-//@source:segaorun.cpp
+@source:segaorun.cpp
outrun // Revision B
outrunb // 1986 (protected beta bootleg)
outrundx // Deluxe version
@@ -31721,16 +31727,16 @@ toutrunj1 // 1987 (FD1094)
toutrunj1d // bootleg
toutrunjd // bootleg
-//@source:segapico.cpp
+@source:segapico.cpp
copera // 1993 Sega / Yamaha
pico // 1994 Sega Pico (Europe)
picoj // 1993 Sega Pico (Japan)
picou // 1994 Sega Pico (USA)
-//@source:segapm.cpp
+@source:segapm.cpp
segapm // 1996 Sega Picture Magic (32x type hardware)
-//@source:segas16a.cpp
+@source:segas16a.cpp
aceattaca // (c) 1988 (FD1094)
afighter // (c) 1986 (FD1089A)
alexkidd // (c) 1986 (Unprotected)
@@ -31768,7 +31774,7 @@ wb31d //
wb35 // (c) 1988 Sega / Westone (FD1089A)
wb35d //
-//@source:segas16b.cpp
+@source:segas16b.cpp
aceattac // (c) 1988 (FD1094)
aliensyn // (c) 1987 (Unprotected)
aliensyn3 // (c) 1987 (FD1089A)
@@ -31902,7 +31908,7 @@ wrestwar1d //
wrestwar2 // (c) 1989 (FD1094)
wrestwar2d //
-//@source:segas18.cpp
+@source:segas18.cpp
astorm // 1990.?? Alien Storm (World, FD1094, 2 Players)
astorm3 // 1990.?? Alien Storm (World, FD1094)
astorm3d //
@@ -31953,7 +31959,7 @@ wwallyja // 1992.06 Wally wo Sagase! (Japan, FD1094)
wwallyjad //
wwallyjd //
-//@source:segas24.cpp
+@source:segas24.cpp
bnzabros // 1990.08 Bonanza Bros. (US)
bnzabrosj // 1990.06 Bonanza Bros. (Japan)
crkdown // 1989.?? Crack Down (World, FD1094)
@@ -31982,7 +31988,7 @@ sspiritj // 1988.10 Scramble Spirits (Japan)
sspirits // 1988.?? Scramble Spirits (World)
sspirtfc // 1988.?? Scramble Spirits (FD1094)
-//@source:segas32.cpp
+@source:segas32.cpp
alien3 // 1993.?? Aliens 3 (World)
alien3u // 1993.11 Aliens 3 (US)
arabfgt // 1992.?? Arabian Fight (World)
@@ -32036,7 +32042,7 @@ titlef // 1993.?? Title Fight (World)
titlefj // 1993.03 Title Fight (Japan)
titlefu // 1993.04 Title Fight (US)
-//@source:segasp.cpp
+@source:segasp.cpp
brickppl //
dinoki25 //
dinoking // 2005.09 Kodai Ouja Kyouryuu King / Ancient Ruler Dinosaur King
@@ -32048,7 +32054,7 @@ segasp //
tetgiano //
tetgiant //
-//@source:segaufo.cpp
+@source:segaufo.cpp
newufo //
newufo_nfl //
newufo_sonic //
@@ -32057,7 +32063,7 @@ ufo21 //
ufo800 //
ufomini //
-//@source:segaxbd.cpp
+@source:segaxbd.cpp
abcop // 1990.?? A.B.Cop (World, FD1094)
abcopd //
abcopj // 1991.01 A.B.Cop (Japan, FD1094)
@@ -32101,7 +32107,7 @@ thndrbld // 1988.02 Thunder Blade (US?, upright, FD1094)
thndrbld1 // 1987.12 Thunder Blade (Japan, deluxe/standard)
thndrbldd //
-//@source:segaybd.cpp
+@source:segaybd.cpp
gforce2 // 1988.?? Galaxy Force II (World)
gforce2j // 1988.07 Galaxy Force II (Japan)
gforce2ja // 1988.07 Galaxy Force II (Japan)
@@ -32119,7 +32125,7 @@ rchasej // 1991.09 Rail Chase (Japan)
strkfgtr // 1991.06 Strike Fighter (World)
strkfgtrj // 1991.06 Strike Fighter (Japan)
-//@source:seibuspi.cpp
+@source:seibuspi.cpp
batlball // (c) 1995 Seibu Kaihatsu (Tuning License)
batlballa // (c) 1995 Seibu Kaihatsu (Metrotainment License)
batlballe // (c) 1995 Seibu Kaihatsu (Metrotainment License)
@@ -32170,7 +32176,7 @@ viprp1s // (c) 1995 Seibu Kaihatsu
viprp1u // (c) 1995 Seibu Kaihatsu (Fabtek license)
viprp1ua // (c) 1995 Seibu Kaihatsu (Fabtek license)
-//@source:seicross.cpp
+@source:seicross.cpp
friskyt // (c) 1981
friskyta // (c) 1981
friskytb // (c) 1981
@@ -32178,14 +32184,14 @@ radrad // (c) 1982 Nichibutsu USA
sectrzon // (c) 1984 + Alice
seicross // (c) 1984 + Alice
-//@source:selz80.cpp
+@source:selz80.cpp
dagz80 //
selz80 //
-//@source:sengokmj.cpp
+@source:sengokmj.cpp
sengokmj // (c) 1991 Sigma
-//@source:senjyo.cpp
+@source:senjyo.cpp
baluba // (c) 1986 Able Corp.
megaforc // (c) 1985 Tehkan + Video Ware license
senjyo // (c) 1983 Tehkan
@@ -32194,7 +32200,7 @@ starforca // (c) 1984 Tehkan
starforcb // (c) 1984 Tehkan
starforce // (c) 1984 Tehkan
-//@source:seta.cpp
+@source:seta.cpp
arbalest // UK (c) 1989 + Jordan, Romstar or Taito license (DSW)
atehate // (C) 1993 Athena
blandia // (c) 1992 Allumer
@@ -32263,7 +32269,7 @@ zombraid // (c) 1995 American Sammy
zombraidp // (c) 1995 American Sammy
zombraidpj // (c) 1995 Sammy Industries Co.,Ltd.
-//@source:seta2.cpp
+@source:seta2.cpp
deerhunt // (c) 2000 Sammy USA Corporation
deerhunta // (c) 2000 Sammy USA Corporation
deerhuntb // (c) 2000 Sammy USA Corporation
@@ -32291,14 +32297,14 @@ wschamp // (c) 2001 Sammy USA Corporation
wschampa // (c) 2001 Sammy USA Corporation
wschampb // (c) 2001 Sammy USA Corporation
-//@source:sf.cpp
+@source:sf.cpp
sf // 8/1987 (c) 1987 (US)
sfan // 8/1987 (c) 1987 (World)
sfj // 8/1987 (c) 1987 (Japan)
sfp // 8/1987 (c) 1987
sfua // 8/1987 (c) 1987 (US)
-//@source:sfbonus.cpp
+@source:sfbonus.cpp
abnudge // (c) 2003 Amcoe - Animal Bonus Nudge
abnudgeb // (c) 2003 Amcoe
abnudged // (c) 2003 Amcoe
@@ -32534,19 +32540,19 @@ version4v // (c) 2006 Amcoe
version4v2 // (c) 2006 Amcoe
version4v3 // (c) 2006 Amcoe
-//@source:sfcbox.cpp
+@source:sfcbox.cpp
pss61 // 199? Nintendo
pss62 // 199? T & E Soft / I'Max
pss63 // 199? Nintendo / BPS
pss64 // 199? Nintendo / Hudson Soft
sfcbox //
-//@source:sfkick.cpp
+@source:sfkick.cpp
sfkick // (c) 1988 Haesung/HJ Corp
sfkicka // (c) 198? Haesung
spinkick // (c) 1988 Haesung/Seojin
-//@source:sg1000.cpp
+@source:sg1000.cpp
omv1000 // Tsukuda Original Othello Multivision FG-1000
omv2000 // Tsukuda Original Othello Multivision FG-2000
sc3000 // Sega SC-3000 (Japan)
@@ -32555,34 +32561,34 @@ sf7000 // Sega SC-3000 w/ SF-7000 (Japan)
sg1000 // Sega SG-1000 (Japan)
sg1000m2 // Sega SG-1000 Mark II (Japan)
-//@source:sg1000a.cpp
+@source:sg1000a.cpp
chboxing // (c) 1984
chwrestl // (c) 1985
dokidoki // (c) 1985
-//@source:sh4robot.cpp
+@source:sh4robot.cpp
sh4robot //
-//@source:shadfrce.cpp
+@source:shadfrce.cpp
shadfrce // TA-0032 (c) 1993 (World)
shadfrcej // TA-0032 (c) 1993 (Japan)
shadfrceu // TA-0032 (c) 1993 (US)
-//@source:shangha3.cpp
+@source:shangha3.cpp
blocken // (c) 1994 KID / Visco
heberpop // (c) 1994 Sunsoft / Atlus
shangha3 // (c) 1993 Sunsoft
shangha3j // (c) 1993 Sunsoft
shangha3u // (c) 1993 Sunsoft
-//@source:shanghai.cpp
+@source:shanghai.cpp
kothello // (c) 1990 Success.
shangha2 // (c) 1989 Sunsoft (Sun Electronics)
shangha2a // (c) 1989 Sunsoft (Sun Electronics)
shanghai // (c) 1988 Sunsoft (Sun Electronics)
shanghaij // (c) 1988 Sunsoft (Sun Electronics)
-//@source:shangkid.cpp
+@source:shangkid.cpp
chinhero // (c) 1984 Taiyo
chinhero2 // (c) 1984 Taiyo
chinhero3 // (c) 1984 Taiyo
@@ -32591,34 +32597,34 @@ dynamski // (c) 1984 Taiyo
hiryuken // (c) 1985 Taito
shangkid // (c) 1985 Taiyo + Data East license
-//@source:shaolins.cpp
+@source:shaolins.cpp
kicker // GX477 (c) 1985
shaolinb // bootleg
shaolins // GX477 (c) 1985
-//@source:shisen.cpp
+@source:shisen.cpp
matchit // (c) 1989 Tamtex
shisen // (c) 1989 Tamtex
sichuan2 // (c) 1989 Tamtex
sichuan2a // (c) 1989 Tamtex
-//@source:shootout.cpp
+@source:shootout.cpp
shootout // (c) 1985 Data East USA (US)
shootoutb // bootleg
shootoutj // (c) 1985 Data East USA (Japan)
-//@source:shougi.cpp
+@source:shougi.cpp
shougi // (c) 1982 (Arcade TV Game List - P.80, Left, 9 from top)
shougi2 // (c) 1982 (Arcade TV Game List - P.80, Left, 10 from top)
-//@source:shtzone.cpp
+@source:shtzone.cpp
shtzone // (c) 1987
-//@source:shuuz.cpp
+@source:shuuz.cpp
shuuz // 136083 (c) 1990
shuuz2 // 136083 (c) 1990
-//@source:sidearms.cpp
+@source:sidearms.cpp
dyger // (c) 1989 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
dygera // (c) 1989 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
sidearms // 12/1986 (c) 1986 (World)
@@ -32633,18 +32639,18 @@ turtshipko // (c) 1988 Philko (NOT A CAPCOM GAME but runs o
twinfalc // (c) 1989 Philko (Poara Enterprises license) (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
whizz // (c) 1989 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
-//@source:sidepckt.cpp
+@source:sidepckt.cpp
sidepckt // (c) 1986 Data East Corporation
sidepcktb // bootleg
sidepcktj // (c) 1986 Data East Corporation
-//@source:sigmab52.cpp
+@source:sigmab52.cpp
jwildb52 // (c) 199? Sigma
jwildb52a // (c) 199? Sigma
jwildb52h // (c) 199? Sigma
s8waysfc // (c) 199? Sigma
-//@source:sigmab98.cpp
+@source:sigmab98.cpp
animalc // (c) 2000 Sammy
b3rinsya // b9805 (c) 1997 Sigma
dashhero // b9811 (c) 1999 Sigma
@@ -32660,16 +32666,16 @@ tbeastw2 // b9808 (c) 1998 Sigma / Transformer Production
tdoboon // (c) 2000 Sammy
ucytokyu // b9809 (c) 1997 Sigma
-//@source:silkroad.cpp
+@source:silkroad.cpp
silkroad // (c) 1999
silkroada // (c) 1999
-//@source:silvmil.cpp
+@source:silvmil.cpp
puzzlove // (c) 1994 Para
puzzlovek // (c) 1994 Para
silvmil // (c) 1995 Para
-//@source:simpl156.cpp
+@source:simpl156.cpp
candance // MCF (c) 1996 Mitchell
chainrec // MCC (c) 1994
charlien // MBR (c) 1994 Mitchell
@@ -32682,7 +32688,7 @@ magdropp // MCC (c) 1995 Data East
osman // MCF (c) 1996 Mitchell
prtytime // MCB (c) 1995 Mitchell
-//@source:simple_st0016.cpp
+@source:simple_st0016.cpp
dcrown // 199? unknown
dcrowna // 199? unknown
gostop // 2001 Visco
@@ -32692,7 +32698,7 @@ mayjisn2 // (c) 1994 Seta
nratechu // (c) 1996 Seta
renju // (c) 1994 Visco
-//@source:simpsons.cpp
+@source:simpsons.cpp
simpsons // GX072 (c) 1991
simpsons2p // GX072 (c) 1991
simpsons2p2 // GX072 (c) 1991
@@ -32701,42 +32707,42 @@ simpsons2pa // GX072 (c) 1991 (Asia)
simpsons2pj // GX072 (c) 1991 (Japan)
simpsons4pa // GX072 (c) 1991
-//@source:sitcom.cpp
+@source:sitcom.cpp
sitcom //
-//@source:skeetsht.cpp
+@source:skeetsht.cpp
popshot // (c) 1991 (prototype)
skeetsht // (c) 1991
-//@source:skimaxx.cpp
+@source:skimaxx.cpp
skimaxx // (c) 1996 Kyle Hodgetts/ICE
-//@source:skullxbo.cpp
+@source:skullxbo.cpp
skullxbo // 136072 (c) 1989
skullxbo1 // 136072 (c) 1989
skullxbo2 // 136072 (c) 1989
skullxbo3 // 136072 (c) 1989
skullxbo4 // 136072 (c) 1989
-//@source:skyarmy.cpp
+@source:skyarmy.cpp
skyarmy // (c) 1982 Shoei
-//@source:skydiver.cpp
+@source:skydiver.cpp
skydiver // 009787 1978/06 [6800]
-//@source:skyfox.cpp
+@source:skyfox.cpp
exerizer // (c) 1987? Jaleco
exerizerb // bootleg
skyfox // (c) 1987 Jaleco + Nichibutsu USA license
-//@source:skykid.cpp
+@source:skykid.cpp
drgnbstr // (c) 1984
skykid // (c) 1985
skykidd // (c) 1985
skykido // (c) 1985
skykids // (c) 1985
-//@source:skylncr.cpp
+@source:skylncr.cpp
butrfly // (c) 1995 Bordun International
gallag50 // Bootleg?
leader // Bootleg?
@@ -32745,11 +32751,12 @@ mbutrfly // (c) 1999 (Bordun International?)
neraidou // Bootleg?
skylncr // (c) 1995 Bordun International
sstar97 // (c) 199? Bordun International
+bdream97 // Bootleg?
-//@source:skyraid.cpp
+@source:skyraid.cpp
skyraid // 009709 1978/03 [6502]
-//@source:slapfght.cpp
+@source:slapfght.cpp
alcon // A77 / TP-???
getstarb1 // GX-006 bootleg but (c) 1986 Taito Corporation
getstarb2 // GX-006 bootleg but (c) 1986 Taito Corporation
@@ -32768,35 +32775,35 @@ tigerhb2 // bootleg but (c) 1985 Taito Corporation
tigerhb3 // bootleg but (c) 1985 Taito Corporation
tigerhj // A47 (c) 1985 Taito Corporation GX-551 [not a Konami board!]
-//@source:slapshot.cpp
+@source:slapshot.cpp
opwolf3 // D74 (c) 1994 Taito
opwolf3u // D74 (c) 1994 Taito
slapshot // D71 (c) 1994 Taito Corporation (Japan)
-//@source:slc1.cpp
+@source:slc1.cpp
slc1 //
-//@source:sleic.cpp
+@source:sleic.cpp
sleicpin //
-//@source:slicer.cpp
+@source:slicer.cpp
slicer // 1983 Slicer Computers
-//@source:sliver.cpp
+@source:sliver.cpp
sliver // (c) 1996 Hollow Corp
slivera //
-//@source:slotcarn.cpp
+@source:slotcarn.cpp
slotcarn // (c) 1985 Wing Co. Ltd
spielbud // (c) 1985 ADP
-//@source:sm1800.cpp
+@source:sm1800.cpp
sm1800 //
-//@source:smc777.cpp
+@source:smc777.cpp
smc777 //
-//@source:sms.cpp
+@source:sms.cpp
gamegeaj // Sega GameGear (Japan)
gamegear // Sega GameGear
sg1000m3 // Sega SG-1000 Mark III (Japan)
@@ -32810,17 +32817,17 @@ smskr // Samsung Gam*Boy II (Korea)
smspal // Sega Master System II (PAL)
smssdisp // Sega Master System Store Display Unit
-//@source:smsmcorp.cpp
+@source:smsmcorp.cpp
secondch // (c) 1985 SMS MFG CORP
sureshot // (c) 1985 SMS MFG CORP
trvhang // (c) 1984 SMS MFG CORP
trvhanga // (c) 1984 SMS MFG CORP
-//@source:snes.cpp
+@source:snes.cpp
snes // Nintendo Super Nintendo NTSC
snespal // Nintendo Super Nintendo PAL
-//@source:snesb.cpp
+@source:snesb.cpp
denseib // bootleg
endless // bootleg
ffight2b // bootleg
@@ -32829,7 +32836,7 @@ kinstb // bootleg
mk3snes // bootleg
sblast2b // bootleg
-//@source:snk.cpp
+@source:snk.cpp
alphamis // (c) 1985
arian // (c) 1985
aso // (c) 1985
@@ -32879,7 +32886,7 @@ vangrd2 // A2005 (c) 1984
victroad // A6002 (c) 1986
worldwar // A6004 'WW' (c) 1987
-//@source:snk6502.cpp
+@source:snk6502.cpp
fantasy // (c) 1981 SNK
fantasyj // (c) 1981 SNK
fantasyu // (c) 1981 Rock-Ola
@@ -32899,7 +32906,7 @@ vanguardc // (c) 1981 SNK + Centuri
vanguardj // (c) 1981 SNK
zarzon // (c) 1981 Taito, gameplay says SNK
-//@source:snk68.cpp
+@source:snk68.cpp
ikari3 // A7007 'IK3'(c) 1989
ikari3j // A7007 'IK3'(c) 1989
ikari3k // A7007 'IK3'(c) 1989
@@ -32914,13 +32921,13 @@ streetsm1 // A7008 'S2' (c) 1989
streetsmj // A8007 'S2' (c) 1989
streetsmw // (c) 1989
-//@source:snookr10.cpp
+@source:snookr10.cpp
apple10 // (c) 1998 Sandii'
crystalc // 199? unknown
snookr10 // (c) 1998 Sandii'
tenballs // 1997 unknown
-//@source:snowbros.cpp
+@source:snowbros.cpp
3in1semi // (c) 1998 SemiCom
4in1boot // (c) 2002 KISoft (includes hacks of Semicom games + Snowbros)
ballboy // bootleg
@@ -32951,32 +32958,32 @@ twinadvk // (c) 1995 Barko Corp
twinkle // (c) 1997 SemiCom
wintbob // bootleg
-//@source:socrates.cpp
+@source:socrates.cpp
iqunlimz // 1991 IQ Unlimited (Z80)
profweis // 1988 (Yeno) Professor Weiss-Alles (Germany)
socrates // 1988 Socrates Educational Video System (USA)
socratfc // 1988 Socrates SAITOUT (French Canada)
-//@source:softbox.cpp
+@source:softbox.cpp
softbox //
-//@source:solomon.cpp
+@source:solomon.cpp
solomon // (c) 1986 Tecmo
solomonj // (c) 1986 Tecmo
-//@source:sonson.cpp
+@source:sonson.cpp
sonson // 7/1984 (c) 1984
sonsonj // 7/1984 (c) 1984 (Japan)
-//@source:sorcerer.cpp
+@source:sorcerer.cpp
sorcerer // Sorcerer
sorcerer2 // monitor 1.1 1979
sorcererd // Sorcerer with floppies
-//@source:sothello.cpp
+@source:sothello.cpp
sothello // (c) 1986 Success / Fujiwara.
-//@source:spacefb.cpp
+@source:spacefb.cpp
spacebrd // bootleg
spacedem // (c) 1980 Fortrek + made by Nintendo
spacefb // (c) [1980?] Nintendo
@@ -32987,38 +32994,38 @@ spacefbe2 // (c) [1980?] Nintendo
spacefbg // 834-0031 (c) 1980 Gremlin
starwarr // Potomac Mortgage
-//@source:spaceg.cpp
+@source:spaceg.cpp
spaceg // (c) 19??
-//@source:spbactn.cpp
+@source:spbactn.cpp
spbactn // 9002 - (c) 1991 Tecmo
spbactnj // 9002 - (c) 1991 Tecmo
spbactnp // prototype
-//@source:spc1000.cpp
+@source:spc1000.cpp
spc1000 //
-//@source:spc1500.cpp
+@source:spc1500.cpp
spc1500 //
-//@source:spcforce.cpp
+@source:spcforce.cpp
meteor // (c) 1981 Venture Line
meteors // (c) 1981 Amusement World
spcforc2 // bootleg
spcforce // (c) 1980 Venture Line
-//@source:spdodgeb.cpp
+@source:spdodgeb.cpp
nkdodge // TA-0022 (c) 1987 (Japan)
nkdodgeb // TA-0022 (c) 1987 (Japan)
spdodgeb // TA-0022 (c) 1987
-//@source:spec128.cpp
+@source:spec128.cpp
hc128 // 1991 HC-128
hc2000 // 1992 HC-2000
spec128 // 1986 ZX Spectrum 128
specpls2 // 1986 ZX Spectrum +2
-//@source:special.cpp
+@source:special.cpp
erik //
lik //
pioner //
@@ -33027,7 +33034,7 @@ specialm //
specialp //
specimx //
-//@source:specpls3.cpp
+@source:specpls3.cpp
sp3e8bit // 2002 ZX Spectrum +3e 8bit IDE
sp3eata // 2002 ZX Spectrum +3e ZXATASP
sp3ezcf // 2002 ZX Spectrum +3e ZXCF
@@ -33035,10 +33042,10 @@ specpl2a // 1987 ZX Spectrum +2a
specpl3e // 2000 ZX Spectrum +3e
specpls3 // 1987 ZX Spectrum +3
-//@source:spectra.cpp
+@source:spectra.cpp
spectra //
-//@source:spectrum.cpp
+@source:spectrum.cpp
blitzs // 1990 Blic
byte // 1990 Byte
cip01 // 1987 CIP-01
@@ -33072,33 +33079,33 @@ tk90x // 1985 TK90x Color Computer
tk95 // 1986 TK95 Color Computer
zvezda // 1990 Zvezda
-//@source:speedatk.cpp
+@source:speedatk.cpp
speedatk // CB-0 (c) SetaKikaku
-//@source:speedbal.cpp
+@source:speedbal.cpp
musicbal // (c) 1987
speedbal // (c) 1987
-//@source:speedspn.cpp
+@source:speedspn.cpp
speedspn // (c) 1994
-//@source:speglsht.cpp
+@source:speglsht.cpp
speglsht // (c) 1994 Seta
-//@source:spiders.cpp
+@source:spiders.cpp
spiders // (c) 1981 Sigma Ent. Inc.
spiders2 // (c) 1981 Sigma Ent. Inc.
spiders3 // (c) 1981 Sigma Ent. Inc.
spinner // bootleg
-//@source:spinb.cpp
+@source:spinb.cpp
bushido //
bushidoa //
jolypark //
mach2 //
vrnwrld //
-//@source:splash.cpp
+@source:splash.cpp
funystrp // not a gaelco game but on similar hw to splash
paintlad // (c) 1992 - ver 1.3
puckpepl // not a gaelco game but on similar hw to splash
@@ -33108,26 +33115,33 @@ roldfroga // not a gaelco game but based on splash code
splash // (c) 1992 - Ref 922804
splash10 // (c) 1992 - Ref 922804
-//@source:splus.cpp
+@source:splus.cpp
spss4240 //
-//@source:spoker.cpp
-3super8 // unknown
-spk115it // (c) 199? IGS
+@source:spoker.cpp
+spk306us // (c) 1996 IGS
+spk205us // (c) 1996 IGS
+spk203us // (c) 1996 IGS
+spk200ua // (c) 1996 IGS
spk116it // (c) 199? IGS
+spk116itmx // (c) 199? IGS
+spk115it // (c) 199? IGS
+spk114it // (c) 199? IGS
+spk102ua // (c) 1996 IGS
+3super8 // unknown
-//@source:spool99.cpp
+@source:spool99.cpp
spool99 // (c) 1998 Electronic Projects
spool99a // (c) 1998 Electronic Projects
spool99b // (c) 1998 Electronic Projects
spool99c // (c) 1998 Electronic Projects
vcarn // (c) 1999 Electronic Projects
-//@source:sprcros2.cpp
+@source:sprcros2.cpp
sprcros2 // (c) 1986 GM Shoji
sprcros2a // (c) 1986 GM Shoji
-//@source:sprint2.cpp
+@source:sprint2.cpp
dominos // 007305 1977/01 [6502]
dominos4 // 007754-007765 ??????? [6502]
sprint1 // 006443 1978/01 [6502]
@@ -33135,22 +33149,22 @@ sprint2 // 005922 1976/11 [6502]
sprint2a // 005922 1976/11 [6502]
sprint2h // 005922 romkit
-//@source:sprint4.cpp
+@source:sprint4.cpp
sprint4 // 008716 1977/12 [6502]
sprint4a // 008716 1977/12 [6502]
-//@source:sprint8.cpp
+@source:sprint8.cpp
sprint8 // ?????? 1977/05 [6800]
sprint8a // ?????? 1977/05 [6800]
-//@source:spy.cpp
+@source:spy.cpp
spy // GX857 (c) 1989 (World)
spyu // GX857 (c) 1989 (US)
-//@source:squale.cpp
+@source:squale.cpp
squale //
-//@source:srmp2.cpp
+@source:srmp2.cpp
mjyuugi // (c) 1990 Visco
mjyuugia // (c) 1990 Visco
ponchin // (c) 1991 Visco
@@ -33160,58 +33174,58 @@ srmp1 // UB or UC?? (c) 1987
srmp2 // UB or UC?? (c) 1987
srmp3 // ZA-0? (c) 1988
-//@source:srmp5.cpp
+@source:srmp5.cpp
srmp5 // (c) 199? Seta
-//@source:srmp6.cpp
+@source:srmp6.cpp
srmp6 // (c) 1996 Seta (Japan)
-//@source:srumbler.cpp
+@source:srumbler.cpp
rushcrsh // 9/1986 (c) 1986
srumbler // 9/1986 (c) 1986
srumbler2 // 9/1986 (c) 1986
srumbler3 // 9/1986 (c) 1986 + Tecfri
-//@source:ssem.cpp
+@source:ssem.cpp
ssem // Manchester Small-Scale Experimental Machine, "Baby"
-//@source:ssfindo.cpp
+@source:ssfindo.cpp
ppcar // (c) 1999 Icarus
ssfindo // (c) 1999 Icarus
tetfight // (c) 2001 Sego
-//@source:sshangha.cpp
+@source:sshangha.cpp
sshangha // (c) 1992 Hot-B
sshanghab // bootleg
-//@source:sshot.cpp
+@source:sshot.cpp
gunchamps // (c) 1980 Model Racing (sshot.cpp)
sshot // (c) 1979 Model Racing
-//@source:ssingles.cpp
+@source:ssingles.cpp
atamanot // (c) 1983 Yachiyo Denki / Uni Enterprize
ssingles // Yachiyo?
-//@source:sslam.cpp
+@source:sslam.cpp
powerbals // (c) 1994
sslam // (c) 1993 - hack of Namco's Super World Court
sslama // ^
sslamb // ^
-//@source:ssozumo.cpp
+@source:ssozumo.cpp
ssozumo // TA-0008 (c) 1984
-//@source:sspeedr.cpp
+@source:sspeedr.cpp
sspeedr // 1979 Midway
-//@source:ssrj.cpp
+@source:ssrj.cpp
ssrj // A40 (c) 1985 Taito Corporation
-//@source:sstrangr.cpp
+@source:sstrangr.cpp
sstrangr // (c) 1978 Yachiyo Electronics, Ltd.
sstrangr2 // (c) 1979 Yachiyo Electronics, Ltd.
-//@source:ssv.cpp
+@source:ssv.cpp
cairblad // (c) 1999 Sammy
drifto94 // (c) 1994 Visco
dynagear // (c) 1993 Sammy
@@ -33244,10 +33258,10 @@ vasara // (c) 2000 Visco
vasara2 // (c) 2001 Visco
vasara2a // (c) 2001 Visco
-//@source:ssystem3.cpp
+@source:ssystem3.cpp
ssystem3 // Chess Champion Super System III / MK III
-//@source:st_mp100.cpp
+@source:st_mp100.cpp
dracula //
hothand //
lectrono //
@@ -33261,7 +33275,7 @@ stingray //
trident //
wildfyre //
-//@source:st_mp200.cpp
+@source:st_mp200.cpp
ali //
biggame //
blkshpsq //
@@ -33285,7 +33299,7 @@ st_game //
stargzr //
viperp //
-//@source:st17xx.cpp
+@source:st17xx.cpp
st1700h //
st1701 //
st1702 //
@@ -33297,33 +33311,33 @@ st1707 //
st1708 //
st1714 //
-//@source:stactics.cpp
+@source:stactics.cpp
stactics // (c) 1981 Sega
-//@source:stadhero.cpp
+@source:stadhero.cpp
stadhero // (c) 1988 Data East Corporation (Japan)
-//@source:starcrus.cpp
+@source:starcrus.cpp
starcrus // (c) 1977 Ramtek
-//@source:starfire.cpp
+@source:starfire.cpp
fireone // (c) 1979 Exidy
starfir2 // (c) 1979 Exidy
starfire // Exidy [1979?]
starfirea // Exidy [1979?]
-//@source:starshp1.cpp
+@source:starshp1.cpp
starshp1 // 007513-007531 1977/07 [6502]
starshpp // 007513-007531 1977/07 [6502]
-//@source:starwars.cpp
+@source:starwars.cpp
esb // 136031 (c) 1985
starwars // 136021 (c) 1983
starwars1 // 136021 (c) 1983
starwarso // 136021 (c) 1983
tomcatsw // (proto) (c) 1983
-//@source:statriv2.cpp
+@source:statriv2.cpp
cstripxi // (c) 1981 Status Games
funcsino // (c) 1981 Status Games
hangman // (c) 1984 Status Games
@@ -33338,11 +33352,11 @@ supertr3 // (c) 1986 Status Games
tripdraw // (c) 1981 Status Games
trivquiz // (c) 1984 Status Games
-//@source:stellafr.cpp
+@source:stellafr.cpp
st_ohla //
st_vulkn //
-//@source:stfight.cpp
+@source:stfight.cpp
cshooter // (c) 1987 Taito
empcity // (c) 1986 Seibu Kaihatsu (bootleg?)
empcityi // (c) 1986 Seibu Kaihatsu (Eurobed license)
@@ -33351,21 +33365,21 @@ empcityu // (c) 1986 Taito (Romstar License)
stfight // (c) 1986 Seibu Kaihatsu (Germany) (bootleg?)
stfighta // (c) 1986 Seibu Kaihatsu (bootleg?)
-//@source:stlforce.cpp
+@source:stlforce.cpp
stlforce // (c) 1994 Electronic Devices (Italy) / Ecogames S.L. (Spain)
twinbrat // (c) 1995
twinbrata // (c) 1995
-//@source:stratos.cpp
+@source:stratos.cpp
stratos // Kasparov Stratos Chess Computer
-//@source:strnskil.cpp
+@source:strnskil.cpp
banbam // TVG16 (c) 1984 Sun Electronics
guiness // TVG15 (c) 1984 Sun Electronics
pettanp // TVG16 (c) 1984 Sun Electronics (Japan)
strnskil // TVG15 (c) 1984 Sun Electronics
-//@source:studio2.cpp
+@source:studio2.cpp
apollo80 //
cm1200 //
mpt02 //
@@ -33375,10 +33389,10 @@ shmc1200 //
studio2 // 1977 Studio II
visicom //
-//@source:stuntair.cpp
+@source:stuntair.cpp
stuntair // (c) 1983 Nuova Videotron
-//@source:stv.cpp
+@source:stv.cpp
astrass // 1998.06 Astra Super Stars (Sunsoft)
bakubaku // 1995.04 Bakubaku Animal
batmanfr // 1996.02 Batman Forever (Acclaim)
@@ -33463,19 +33477,19 @@ vmahjong // 1997.02 Virtual Mahjong (Micronet)
winterht // 1997.10 Winter Heat (Data East)
znpwfv // 1997.12 Zen Nippon Pro Wrestling featuring Virtua
-//@source:su2000.cpp
+@source:su2000.cpp
su2000 // (c) 1993 Virtuality
-//@source:sub.cpp
+@source:sub.cpp
sub // (c) 1985 Sigma Ent. Inc.
-//@source:subhuntr.cpp
+@source:subhuntr.cpp
subhuntr // 1979 Model Racing
-//@source:subs.cpp
+@source:subs.cpp
subs // 033714 1979/05 [6502]
-//@source:subsino.cpp
+@source:subsino.cpp
crsbingo // (c) 1991 Subsino
mtrainnv // (c) 1996 Subsino
sharkpy // (c) 1996 Subsino
@@ -33496,7 +33510,7 @@ victor6 // (c) 1995 Subsino (Alpha license)
victor6a // (c) 1995 Subsino (Alpha license)
victor6b // (c) 1995 Subsino (Alpha license)
-//@source:subsino2.cpp
+@source:subsino2.cpp
bishjan // (c) 1999 Subsino
expcard // (c) 1998 American Alpha
mtrain // (c) 1996 Subsino
@@ -33506,21 +33520,21 @@ wtrnymph // (c) 1996 Subsino
xplan // (c) 2006 Subsino
xtrain // (c) 1999 Subsino
-//@source:summit.cpp
+@source:summit.cpp
pushover // (c)1981 Summit Coin
-//@source:sumt8035.cpp
+@source:sumt8035.cpp
sm_ngacc // Nudge Accumulator
sm_ultng // Ultimate Nudge
-//@source:sun1.cpp
+@source:sun1.cpp
sun1 //
-//@source:sun2.cpp
+@source:sun2.cpp
sun2_120 //
sun2_50 //
-//@source:sun3.cpp
+@source:sun3.cpp
sun3_110 //
sun3_150 //
sun3_260 //
@@ -33530,7 +33544,7 @@ sun3_60 //
sun3_80 //
sun3_e //
-//@source:sun4.cpp
+@source:sun4.cpp
sun_s10 //
sun_s20 //
sun4_20 //
@@ -33540,14 +33554,14 @@ sun4_50 //
sun4_60 //
sun4_75 //
-//@source:suna16.cpp
+@source:suna16.cpp
bestbest // (c) 1994 SunA
bssoccer // (c) 1996 SunA
bssoccera // (c) 1996 SunA
sunaq // (c) 1994 SunA
uballoon // (c) 1996 SunA
-//@source:suna8.cpp
+@source:suna8.cpp
brickzn // (c) 1992 SunA
brickzn11 // (c) 1992 SunA
brickznv4 // (c) 1992 SunA
@@ -33569,24 +33583,24 @@ srangero // (c) 1988
srangerw // (c) 1988 SunA (WDK License)
starfigh // (c) 1990 SunA
-//@source:supbtime.cpp
+@source:supbtime.cpp
chinatwn // MAK (c) 1991 Data East Corporation (Japan)
supbtime // MAE (c) 1990 Data East Corporation (World)
supbtimea // MAE (c) 1990 Data East Corporation (World)
supbtimej // MAE (c) 1990 Data East Corporation (Japan)
-//@source:supdrapo.cpp
+@source:supdrapo.cpp
supdrapo // (c) 1983 + Stern license
supdrapoa // (c) 1983 + Jeutel license?
supdrapob // bootleg
-//@source:supduck.cpp
+@source:supduck.cpp
supduck // (c) Comad
-//@source:super6.cpp
+@source:super6.cpp
super6 //
-//@source:super80.cpp
+@source:super80.cpp
super80 //
super80d //
super80e //
@@ -33594,25 +33608,22 @@ super80m //
super80r //
super80v //
-//@source:superchs.cpp
+@source:superchs.cpp
superchs // D46 (c) 1992 Taito Corporation Japan (World)
superchsj // D46 (c) 1992 Taito Corporation (Japan)
superchsp // prototype
superchsu // D46 (c) 1992 Taito America Corporation (US)
-//@source:supercon.cpp
-supercon //
-
-//@source:supercrd.cpp
+@source:supercrd.cpp
fruitstr // (c) 1992 Fun World
supercrd // (c) 1992 Fun World
-//@source:superdq.cpp
+@source:superdq.cpp
superdq // ???? (c) 1984
superdqa // ???? (c) 1984
superdqs // ???? (c) 1984
-//@source:superqix.cpp
+@source:superqix.cpp
hotsmash // B18 (c) 1987 Taito
pbillian // (c) 1986 Taito
perestro // (c) 1994 Promat
@@ -33623,27 +33634,27 @@ sqixb2 // bootleg? but (c) 1987
sqixr1 // B03 1987
sqixu // B03 1987
-//@source:superslave.cpp
+@source:superslave.cpp
superslv //
-//@source:supertnk.cpp
+@source:supertnk.cpp
supertnk // (c) 1981 VIDEO GAMES GmbH, W.-GERMANY
-//@source:superwng.cpp
+@source:superwng.cpp
superwng // (c) 1985 Wing Co. Ltd
-//@source:supracan.cpp
+@source:supracan.cpp
supracan //
-//@source:suprgolf.cpp
+@source:suprgolf.cpp
albatross //
suprgolf // (c) 1989 Nasco
-//@source:suprloco.cpp
+@source:suprloco.cpp
suprloco // (c) 1982 Sega
suprlocoo // (c) 1982 Sega
-//@source:suprnova.cpp
+@source:suprnova.cpp
cyvern // 1998.02 (c) 1998 Kaneko (US)
cyvernj // 1998.02 (c) 1998 Kaneko (Japan)
galpani4 // 1996.09 (c) 1996 Kaneko (Japan)
@@ -33675,60 +33686,58 @@ skns //
teljan // 1999.11 (c) 1999 Electro Design Co. (Japan)
vblokbrk // 1997.?? (c) 1997 Kaneko / Mediaworks (Asia)
-//@source:suprridr.cpp
+@source:suprridr.cpp
suprridr // (c) 1983 Venture Line + Taito license
-//@source:suprslam.cpp
+@source:suprslam.cpp
suprslam // (c) 1995 Banpresto
-//@source:surpratk.cpp
+@source:surpratk.cpp
suratk // GX911 (c) 1990 (World)
suratka // GX911 (c) 1990 (Asia)
suratkj // GX911 (c) 1990 (Japan)
-//@source:sv8000.cpp
+@source:sv8000.cpp
sv8000 // Super Vision 8000
-//@source:svi318.cpp
-sv328n80 // SVI-328 (NTSC) + SVI-806 80 column card
-sv328p80 // SVI-328 (PAL) + SVI-806 80 column card
+@source:svi318.cpp
svi318 // SVI-318 (PAL)
svi318n // SVI-318 (NTSC)
svi328 // SVI-328 (PAL)
svi328n // SVI-328 (NTSC)
-//@source:svision.cpp
+@source:svision.cpp
svision // Supervision Handheld
svisionn //
svisionp //
svisions //
tvlinkp //
-//@source:svmu.cpp
+@source:svmu.cpp
svmu // 1998 Sega Visual Memory Unit
-//@source:swtpc.cpp
+@source:swtpc.cpp
swtpc //
-//@source:swtpc09.cpp
+@source:swtpc09.cpp
swtpc09 // S09, DMF2 Floppy SBUG rom - FLEX
swtpc09d3 // S09, DMF3 Floppy UNIBUG U3 rom - UniFLEX U3
swtpc09i // S09, DC4 Floppy + PIA IDE SBUG rom - FLEX
swtpc09u // S09, DMF2 Floppy UNIBUG rom - UniFLEX
-//@source:swyft.cpp
+@source:swyft.cpp
swyft //
-//@source:sym1.cpp
+@source:sym1.cpp
sym1 // Synertek SYM-1
-//@source:sys2900.cpp
+@source:sys2900.cpp
sys2900 //
-//@source:systec.cpp
+@source:systec.cpp
systec //
-//@source:system1.cpp
+@source:system1.cpp
4dwarrio // 834-5918 (c) 1985 Coreland / Sega (S1)
blockgal // 834-6303 (S1)
blockgalb // bootleg
@@ -33806,7 +33815,7 @@ wboyu // 834-5753 (? maybe a conversion) (c) 1986 + Es
wboyub // bootleg of wboyu
wmatch // (c) 1984 (S1)
-//@source:system16.cpp
+@source:system16.cpp
altbeastbl //
astormb2 // BOOTLEG
astormbl // BOOTLEG
@@ -33831,16 +33840,16 @@ tturfbl // (c) 1989 (Datsu bootleg)
wb3bbl // bootleg
wb3bble // bootleg
-//@source:tagteam.cpp
+@source:tagteam.cpp
bigprowr // TA-0007 (c) 1983
tagteam // TA-0007 (c) 1983 + Data East license
-//@source:tail2nos.cpp
+@source:tail2nos.cpp
sformula // [1989] V-System Co. (Japan)
sformulaa // [1989] V-System Co. (Japan)
tail2nos // [1989] V-System Co.
-//@source:taito.cpp
+@source:taito.cpp
cavnegro //
cavnegro1 //
cavnegro2 //
@@ -33879,7 +33888,7 @@ vortexp //
zarza //
zarza1 //
-//@source:taito_b.cpp
+@source:taito_b.cpp
ashura // C43 (c) 1990 Taito Corporation Japan (World)
ashuraj // C43 (c) 1990 Taito Corporation (Japan)
ashurau // C43 (c) 1990 Taito America Corporation (US)
@@ -33916,7 +33925,7 @@ viofightj // C16 (c) 1989 Taito Corporation (Japan)
viofightu // C16 (c) 1989 Taito America Corporation (US)
yukiwo // prototype
-//@source:taito_f2.cpp
+@source:taito_f2.cpp
cameltry // 1990.?? C38 (c) 1989 Taito America Corporation (US)
cameltrya // 1990.?? C38 (c) 1989 Taito America Corporation (US)
cameltryau // 1990.?? C38 (c) 1989 Taito America Corporation (US)
@@ -33979,7 +33988,7 @@ thundfoxu // 1990.06 C28 (c) 1990 Taito America Corporatio
yesnoj // 1992.03 D20 (c) 1992 Taito Corporation (Japan)
yuyugogo // 1991.03 C83 (c) 1990 Taito Corporation (Japan)
-//@source:taito_f3.cpp
+@source:taito_f3.cpp
akkanvdr // 1995.07 E06 (c) 1995 Taito Corporation (Japan)
arabianm // 1992.?? D29 (c) 1992 Taito Corporation Japan (World)
arabianmj // 1992.09 D29 (c) 1992 Taito Corporation (Japan)
@@ -34073,7 +34082,7 @@ trstaro // 1993.?? D53 (c) 1993 Taito Corporation (World
trstaroj // 1993.07 D53 (c) 1993 Taito Corporation (Japan)
twinqix // 1995.03 ??? (c) 1995 Taito America Corporation (US)
-//@source:taito_h.cpp
+@source:taito_h.cpp
dleague // C02 (c) 1990 Taito America Corporation (US)
dleaguej // C02 (c) 1990 Taito Corporation (Japan)
gogold // B56 (c) 1988 Taito Corporation (Japan)
@@ -34082,7 +34091,7 @@ syvalion // B51 (c) 1988 Taito Corporation (Japan)
syvalionp //
tetristh // C26 (c) 1988 Sega Enterprises,Ltd. (Japan)
-//@source:taito_l.cpp
+@source:taito_l.cpp
cachat // ??? (c) 1993 Taito Corporation (Japan)
champwr // C01 (c) 1989 Taito Corporation Japan (World)
champwrj // C01 (c) 1989 Taito Corporation (Japan)
@@ -34116,10 +34125,10 @@ raimaisj // B36 (c) 1988 Taito Corporation
raimaisjo // B36 (c) 1988 Taito Corporation
tubeit // ??? no copyright message
-//@source:taito_o.cpp
+@source:taito_o.cpp
parentj // C42 (c) 199? Taito
-//@source:taito_x.cpp
+@source:taito_x.cpp
ballbros // no copyright notice
daisenpu // B87 (c) 1989 Taito Corporation (Japan)
gigandes // (c) 1989 East Technology
@@ -34131,7 +34140,7 @@ supermanu // B61 (c) 1988 Taito Corporation
twinhawk // B87 (c) 1989 Taito Corporation Japan (World)
twinhawku // B87 (c) 1989 Taito America Corporation (US)
-//@source:taito_z.cpp
+@source:taito_z.cpp
aquajack // B77 (c) 1990 Taito Corporation Japan (World)
aquajackj // B77 (c) 1990 Taito Corporation (Japan)
aquajacku // B77 (c) 1990 Taito America Corporation (US)
@@ -34167,12 +34176,12 @@ spacegun // C57 (c) 1990 Taito Corporation Japan (World)
spacegunj // C57 (c) 1990 Taito Corporation (Japan)
spacegunu // C57 (c) 1990 Taito America Corporation (US)
-//@source:taitoair.cpp
+@source:taitoair.cpp
ainferno // C45 (c) 1990 Taito America Corporation (US)
ainfernoj // C45 (c) 1990 Taito Corporation (Japan)
topland // B62 (c) 1988 Taito Corporation Japan (World)
-//@source:taitogn.cpp
+@source:taitogn.cpp
chaoshea // 1998.10 Chaos Heat (V2.09O)
chaosheaj // 1998.10 Chaos Heat (V2.08J)
flipmaze // 1999.09 Flip Maze (V2.04J)
@@ -34201,7 +34210,7 @@ xiistag // 2002.07 XII Stag (V2.01J)
zokuoten // 2000.12 Zoku Otenamihaiken (V2.03J)
zooo // 2004.05 Zooo
-//@source:taitojc.cpp
+@source:taitojc.cpp
dangcurv // 1995.?? E09 (c) 1995 Taito Corporation
dendego // 1997.03 E35 (c) 1996 Taito Corporation (Japan) - Ver 2.2 J
dendego2 // 1998.03 E52 (c) 1998 Taito Corporation (Japan) - Ver 2.5 J
@@ -34216,10 +34225,10 @@ sidebs2 // 1997.?? E38 (c) 1997 Taito Corporation (US) -
sidebs2j // 1997.07 E38 (c) 1997 Taito Corporation (Japan) - Ver 2.4 J
sidebsja // 1996.07 E23 (c) 1996 Taito Corporation (Japan) - Ver 2.5 J
-//@source:taitopjc.cpp
+@source:taitopjc.cpp
optiger // 1998.09 E63 (c) 1998 Taito
-//@source:taitosj.cpp
+@source:taitosj.cpp
alpine // RH (c) 1982 Taito Corporation
alpinea // RH (c) 1982 Taito Corporation
bioatack // AA8 (c) 1983 Taito Corporation + Fox Video Games license
@@ -34245,13 +34254,13 @@ waterski // A03 (c) 1983 Taito Corporation
wwestern // WW (c) 1982 Taito Corporation
wwestern1 // WW (c) 1982 Taito Corporation
-//@source:taitottl.cpp
+@source:taitottl.cpp
gunman // (c) 1977 Taito
missilex // (c) 1977 Taito
ttblock // (c) 1977 Taito
zzblock // (c) 1979 Taito
-//@source:taitotx.cpp
+@source:taitotx.cpp
chaosbrk // (c) 2004 Taito Corporation
chasehq2 // (c) 2006 Taito Corporation
goketsuj // (c) 2009 Atlus
@@ -34268,7 +34277,7 @@ trbwtchs // (c) 2008 Adventure Planning Service/Studio Si
usagiol // (c) 2005 Taito Corporation/Warashi
wontmuch // (c) 2006 Capcom
-//@source:taitotz.cpp
+@source:taitotz.cpp
batlgear // E68 (c) 1999 Taito
batlgr2 // E87 (c) 2000 Taito (2.04J)
batlgr2a // E87 (c) 2000 Taito (2.01J)
@@ -34280,13 +34289,13 @@ raizpinj //
styphp // E98 (c) 2000 Taito
taitotz //
-//@source:taitowlf.cpp
+@source:taitowlf.cpp
pf2012 // E59 (c) 1997 Taito
-//@source:tamag1.cpp
+@source:tamag1.cpp
tama // Bandai
-//@source:tandy1t.cpp
+@source:tandy1t.cpp
t1000hx // 1987 Tandy 1000 HX (similiar to PCJr)
t1000rl // 1989 Tandy 1000 RL
t1000sl2 // 198? Tandy 1000 SL/2
@@ -34294,46 +34303,46 @@ t1000sx // 1987 Tandy 1000 SX (similiar to PCJr)
t1000tl2 // 1989 Tandy 1000 TL/2
t1000tx // 1987 Tandy 1000 TX
-//@source:tandy2k.cpp
+@source:tandy2k.cpp
tandy2k //
tandy2khd //
-//@source:tank8.cpp
+@source:tank8.cpp
tank8 // ?????? 1976/04 [6800]
tank8a // ?????? 1976/04 [6800]
tank8b // ?????? 1976/04 [6800]
tank8c // ?????? 1976/04 [6800]
tank8d // ?????? 1976/04 [6800]
-//@source:tankbatt.cpp
+@source:tankbatt.cpp
tankbatt // (c) 1980 Namco
tankbattb // bootleg
-//@source:tankbust.cpp
+@source:tankbust.cpp
tankbust // (c) 1985
-//@source:taotaido.cpp
+@source:taotaido.cpp
taotaido // (c) 1993 Video System Co.
taotaido3 // (c) 1993 Video System Co.
taotaidoa // (c) 1993 Video System Co.
-//@source:tapatune.cpp
+@source:tapatune.cpp
smartoss //
srockbwl //
tapatune //
-//@source:targeth.cpp
+@source:targeth.cpp
targeth // (c) 1994 - Ref 940531
targetha // (c) 1994 - Ref 940531
-//@source:tasman.cpp
+@source:tasman.cpp
dragsphr //
ivorytsk //
kingtut //
moneybnk //
vikingt //
-//@source:tatsumi.cpp
+@source:tatsumi.cpp
apache3 // (c) 1988 Tatsumi
apache3a // (c) 1988 Tatsumi + Kana Corporation license
bigfight // (c) 1992 Tatsumi
@@ -34341,42 +34350,42 @@ cyclwarr // (c) 1991 Tatsumi
cyclwarra // (c) 1991 Tatsumi
roundup5 // (c) 1989 Tatsumi
-//@source:tattack.cpp
+@source:tattack.cpp
tattack // (c) 198? Shonan
-//@source:tavernie.cpp
+@source:tavernie.cpp
cpu09 //
ivg09 //
-//@source:taxidriv.cpp
+@source:taxidriv.cpp
taxidriv // [1984 Graphic Techno]
-//@source:tb303.cpp
+@source:tb303.cpp
tb303 // Roland
-//@source:tbowl.cpp
+@source:tbowl.cpp
tbowl // 6206 - (c) 1987 Tecmo
tbowlj // 6206 - (c) 1987 Tecmo
tbowlp // Suspected proto of Japanese version for US Market
-//@source:tceptor.cpp
+@source:tceptor.cpp
tceptor // (c) 1986
tceptor2 // (c) 1986
-//@source:tcl.cpp
+@source:tcl.cpp
tcl // (c) 1995 Uniwang
-//@source:tdv2324.cpp
+@source:tdv2324.cpp
tdv2324 //
-//@source:tec1.cpp
+@source:tec1.cpp
tec1 // Talking Electronics Computer
tecjmon // Talking Electronics Computer
-//@source:techno.cpp
+@source:techno.cpp
xforce //
-//@source:tecmo.cpp
+@source:tecmo.cpp
backfirt // bootleg [(c) 1988 Tecmo]
gemini // (c) 1987 Tecmo
rygar // 6002 - (c) 1986 Tecmo
@@ -34386,39 +34395,39 @@ rygarj // 6002 - (c) 1986 Tecmo
silkworm // 6217 - (c) 1988 Tecmo
silkwormj // 6217 - (c) 1988 Tecmo
-//@source:tecmo16.cpp
+@source:tecmo16.cpp
fstarfrc // (c) 1992 Tecmo
fstarfrcj // (c) 1992 Tecmo
ginkun // (c) 1995 Tecmo
riot // (c) 1992 NMK
-//@source:tecmosys.cpp
+@source:tecmosys.cpp
deroon // (c) 1996 Tecmo
tkdensho // (c) 1996 Tecmo
tkdenshoa // (c) 1996 Tecmo
-//@source:tecnbras.cpp
+@source:tecnbras.cpp
tecnbras //
-//@source:tehkanwc.cpp
+@source:tehkanwc.cpp
gridiron // (c) 1985 Tehkan
teedoff // 6102 - (c) 1986 Tecmo
tehkanwc // (c) 1985 Tehkan
tehkanwcb // bootleg
tehkanwcc // bootleg
-//@source:tek405x.cpp
+@source:tek405x.cpp
tek4051 //
tek4052a //
-//@source:tek410x.cpp
+@source:tek410x.cpp
tek4107a //
tek4109a //
-//@source:tekxp33x.cpp
+@source:tekxp33x.cpp
tekxp330 //
-//@source:tempest.cpp
+@source:tempest.cpp
tempest // 136002 (c) 1980
tempest1 // 136002 (c) 1980
tempest1r // 136002 (c) 1980
@@ -34426,10 +34435,10 @@ tempest2 // 136002 (c) 1980
tempest3 // 136002 (c) 1980
temptube // (hack)
-//@source:terak.cpp
+@source:terak.cpp
terak //
-//@source:terracre.cpp
+@source:terracre.cpp
amatelas // (c) 1986
amazon // (c) 1986
boobhack // bootleg
@@ -34440,11 +34449,11 @@ terracrea // (c) 1985
terracren // (c) 1985
terracreo // (c) 1985
-//@source:test_t400.cpp
+@source:test_t400.cpp
test410 //
test420 //
-//@source:tetrisp2.cpp
+@source:tetrisp2.cpp
nndmseal // (c) 1997 I'Max/Jaleco
nndmseala // (c) 1997 I'Max/Jaleco
rockn // (c) 1999 Jaleco
@@ -34459,21 +34468,21 @@ tetrisp2 // (c) 1997 Jaleco
tetrisp2j // (c) 1997 Jaleco
tetrisp2ja // (c) 1997 Jaleco
-//@source:tgtpanic.cpp
+@source:tgtpanic.cpp
tgtpanic // GX601 (c) 1996
-//@source:thayers.cpp
+@source:thayers.cpp
thayers // (c) 1983 RDI Video Systems
thayersa // (c) 1983 RDI Video Systems
-//@source:thedealr.cpp
+@source:thedealr.cpp
thedealr // Visco Games
-//@source:thedeep.cpp
+@source:thedeep.cpp
rundeep // (c) 1988 Cream (bootleg?)
thedeep // (c) 1987 Wood Place
-//@source:thepit.cpp
+@source:thepit.cpp
desertdn // (c) 1982 Video Optics
dockman // (c) 1982 Taito Corp.
fitter // (c) 1981 Taito
@@ -34496,13 +34505,13 @@ thepitu2 // (c) 1982 Centuri (licensed)
ttfitter // bootleg
zaryavos // (c) 1983 Nova Games of Canada (prototype)
-//@source:thief.cpp
+@source:thief.cpp
natodef // (c) 1982
natodefa // (c) 1982
sharkatt // (c) 1980
thief // (c) 1981
-//@source:thomson.cpp
+@source:thomson.cpp
mo5 // 1984 Thomson MO5
mo5e // 1986 Thomson MO5E (export version)
mo5nr // 1986 Thomson MO5 NR
@@ -34517,14 +34526,14 @@ to8d // 1987 Thomson T08D
to9 // 1985 Thomson T09
to9p // 1986 Thomson T09+
-//@source:thoop2.cpp
+@source:thoop2.cpp
thoop2 // (c) 1994 - Ref ???
-//@source:thunderj.cpp
+@source:thunderj.cpp
thunderj // 136076 (c) 1990
thunderja // 136076 (c) 1990
-//@source:thunderx.cpp
+@source:thunderx.cpp
crazycop // GX878 (c) 1988 (Japan)
gbusters // GX878 (c) 1988
gbustersa // GX878 (c) 1988
@@ -34535,14 +34544,14 @@ thunderxa // GX873 (c) 1988
thunderxb // GX873 (c) 1988
thunderxj // GX873 (c) 1988 (Japan)
-//@source:ti630.cpp
+@source:ti630.cpp
ti630 //
-//@source:ti74.cpp
+@source:ti74.cpp
ti74 // 1985 TI-74
ti95 // 1986 TI-95
-//@source:ti85.cpp
+@source:ti85.cpp
ti73 // 1990 TI-73
ti81 // 1990 TI-81 (Z80 2 MHz)
ti81v2 // 1990 TI-81 (Z80 2 MHz)
@@ -34555,21 +34564,21 @@ ti84pse // 2004 TI-84 Plus Silver Edition
ti85 // 1992 TI-85 (Z80 6 MHz)
ti86 // 1997 TI-86 (Z80 6 MHz)
-//@source:ti89.cpp
+@source:ti89.cpp
ti89 // 1998 TI-89
ti89t // 2004 TI-89 Titanium
ti92 // 1995 TI-92
ti92p // 1999 TI-92 Plus
v200 // 2002 Voyage 200 PLT
-//@source:ti99_2.cpp
+@source:ti99_2.cpp
ti99_224 // 1983 TI 99/2 (24kb ROMs)
ti99_232 // 1983 TI 99/2 (32kb ROMs)
-//@source:ti99_4p.cpp
+@source:ti99_4p.cpp
ti99_4p // 1996 SNUG 99/4P (a.k.a. SGCPU)
-//@source:ti99_4x.cpp
+@source:ti99_4x.cpp
ti99_4 // 1979 TI-99/4
ti99_4a // 1981 TI-99/4A
ti99_4ae // 1981 TI-99/4A with 50Hz video
@@ -34578,24 +34587,24 @@ ti99_4ev // 1994 TI-99/4A with EVPC video card
ti99_4qe // 1983 TI-99/4QI with 50Hz video
ti99_4qi // 1983 TI-99/4QI
-//@source:ti99_8.cpp
+@source:ti99_8.cpp
ti99_8 // 1983 TI-99/8
ti99_8e // 1983 TI-99/8 with 50Hz video
-//@source:ti990_10.cpp
+@source:ti990_10.cpp
ti990_10 // 1975 TI 990/10
-//@source:ti990_4.cpp
+@source:ti990_4.cpp
ti990_4 // 1976 TI 990/4
ti990_4v // 1976 TI 990/4 with video display terminal
-//@source:tiamc1.cpp
+@source:tiamc1.cpp
bilyard // (c) 1988 Terminal
konek // (c) 1988 Terminal
koroleva // (c) 1988 Terminal
sosterm // (c) 1988 Terminal
-//@source:ticalc1x.cpp
+@source:ticalc1x.cpp
dataman //
lilprof //
lilprof78 //
@@ -34610,7 +34619,7 @@ tisr16 //
tisr16ii //
wizatron //
-//@source:tickee.cpp
+@source:tickee.cpp
ghoshunt // (c) 1995? Hanaho Games
maletmad // (c) 1999 Hanaho Games, licensed to Capcom
mouseatk // (c) 1996 ICE
@@ -34620,7 +34629,7 @@ rapidfire // (c) 1998 Hanaho Games
tickee // (c) 1994 Raster Elite
tutstomb // (c) 199?? Island Design
-//@source:tigeroad.cpp
+@source:tigeroad.cpp
bballs // (c) 1991 Comad
bballsa // (c) 1991 Comad
f1dream // 4/1988 (c) 1988 + Romstar
@@ -34635,21 +34644,21 @@ tigeroadb // bootleg
tigeroadu // 11/1987 (c) 1987 + Romstar (US)
toramich // 11/1987 (c) 1987 (Japan
-//@source:tiki100.cpp
+@source:tiki100.cpp
kontiki //
tiki100 //
-//@source:tim011.cpp
+@source:tim011.cpp
tim011 //
-//@source:tim100.cpp
+@source:tim100.cpp
tim100 //
-//@source:timelimt.cpp
+@source:timelimt.cpp
progress // (c) 1984 Chuo Co. Ltd
timelimt // (c) 1983 Chuo Co. Ltd
-//@source:timeplt.cpp
+@source:timeplt.cpp
bikkuric // Peni Soft (NOT Konami)
chkun // Peni Soft (NOT Konami)
psurge // (c) 1988 unknown (NOT Konami)
@@ -34658,15 +34667,15 @@ timeplt // GX393 (c) 1982
timeplta // GX393 (c) 1982 + Atari license
timepltc // GX393 (c) 1982 + Centuri license
-//@source:timetrv.cpp
+@source:timetrv.cpp
timetrv // (c) 1991.10 Virtual Image Productions
-//@source:timex.cpp
+@source:timex.cpp
tc2048 // 198? TC2048
ts2068 // 1983 TS2068
uk2086 // 1986 UK2086
-//@source:tispeak.cpp
+@source:tispeak.cpp
k28m2 // Tiger Electronics
lantutor //
snmath //
@@ -34691,28 +34700,28 @@ tntellp //
tntelluk //
vocaid //
-//@source:tispellb.cpp
+@source:tispellb.cpp
mrchalgr //
spellb //
-//@source:tk2000.cpp
+@source:tk2000.cpp
tk2000 // Microdigital TK2000
-//@source:tk80.cpp
+@source:tk80.cpp
ics8080 //
mikrolab //
nd80z //
nectk85 //
tk80 //
-//@source:tk80bs.cpp
+@source:tk80bs.cpp
tk80bs //
-//@source:tm990189.cpp
+@source:tm990189.cpp
990189 // 1978 TM 990/189
990189v // 1980 TM 990/189 with Color Video Board
-//@source:tmaster.cpp
+@source:tmaster.cpp
galgame2 // (c) 1998 Creative Electronics & Software (CES) / Namco
galgbios // (c) 1998 Creative Electronics & Software (CES)
tm // (c) 1996 Midway Games
@@ -34741,21 +34750,21 @@ tm8k // (c) 2000 Midway Games
tm8k902 // (c) 2000 Midway Games
tmdo // (c) 1996 Midway Games
-//@source:tmc1800.cpp
+@source:tmc1800.cpp
nano //
tmc2000 //
-//@source:tmc2000e.cpp
+@source:tmc2000e.cpp
tmc2000e //
-//@source:tmc600.cpp
+@source:tmc600.cpp
tmc600s2 //
-//@source:tmmjprd.cpp
+@source:tmmjprd.cpp
tmmjprd // (c) 1997 Media / Sonnet
tmpdoki // (c) 1998 Media Syouji
-//@source:tmnt.cpp
+@source:tmnt.cpp
blswhstl // GX060 (c) 1991 (World)
blswhstla // GX060 (c) 1991 (Asia)
cuebrick // GX903 (c) 1989
@@ -34808,10 +34817,10 @@ tmntu // GX963 (c) 1989 (US)
tmntua // GX963 (c) 1989 (US)
trigon // GX939 (c) 1990 (Japan)
-//@source:tmspoker.cpp
+@source:tmspoker.cpp
tmspoker //
-//@source:tnzs.cpp
+@source:tnzs.cpp
arknoid2 // B08 (c) 1987 Taito Corporation Japan (World)
arknoid2b // B08 (c) 1987 (bootleg)
arknoid2j // B08 (c) 1987 Taito Corporation (Japan)
@@ -34840,7 +34849,7 @@ tnzsjo // B53 (c) 1988 Taito Corporation (Japan) (new l
tnzso // B53 (c) 1988 Taito Corporation Japan (World) (old logo)
tnzsop // B53?(c) 1988 Taito Corporation Japan (World) (old logo)
-//@source:toaplan1.cpp
+@source:toaplan1.cpp
demonwld // TP-O16 (c) 1990 Toaplan (+ Taito license when set to Japan)
demonwld1 // TP-O16 (c) 1989 Toaplan + Taito license
demonwld2 // TP-O16 (c) 1989 Toaplan
@@ -34869,7 +34878,7 @@ zerowing // TP-O15 (c) 1989 Toaplan
zerowing1 // TP-O15 (c) 1989 Toaplan
zerowingw // TP-O15 (c) 1989 Williams Electronics
-//@source:toaplan2.cpp
+@source:toaplan2.cpp
batrider // (c) 1998 Raizing/8ing
batriderc // (c) 1998 Raizing/8ing
batriderhk // (c) 1998 Raizing/8ing
@@ -34937,7 +34946,7 @@ truxton2 // TP-024 (c) 1992 Toaplan
vfive // TP-027 (c) 1993 Toaplan (Japan)
whoopee // TP-025
-//@source:toki.cpp
+@source:toki.cpp
juju // (c) 1989 Tad (Japan)
jujub // bootleg
jujuba // bootleg
@@ -34947,16 +34956,16 @@ tokib // bootleg
tokiu // (c) 1989 Tad + Fabtek license (US)
tokiua // (c) 1989 Tad + Fabtek license (US)
-//@source:tokyocop.cpp
+@source:tokyocop.cpp
tokyocop // (c) 2003 (Arcade TV Game List - P.168, Right, 19 from bottom)
-//@source:tomcat.cpp
+@source:tomcat.cpp
tomcat // (proto) (c) 1985
-//@source:tonton.cpp
+@source:tonton.cpp
tonton // (c) 199? Success / Taiyo Jidoki.
-//@source:toobin.cpp
+@source:toobin.cpp
toobin // 136061 (c) 1988
toobin1 // 136061 (c) 1988
toobin2 // 136061 (c) 1988
@@ -34964,20 +34973,20 @@ toobin2e // 136061 (c) 1988
toobine // 136061 (c) 1988
toobing // 136061 (c) 1988
-//@source:topspeed.cpp
+@source:topspeed.cpp
fullthrl // B14 (c) 1987 Taito Corporation (Japan)
topspeed // B14 (c) 1987 Taito Corporation Japan (World)
topspeedu // B14 (c) 1987 Taito America Corporation (US)
-//@source:toratora.cpp
+@source:toratora.cpp
toratora // (c) 1980 Game Plan
toratorab // (c) 1980 Game Plan
-//@source:tourtabl.cpp
+@source:tourtabl.cpp
tourtab2 // 030170 1978/03 [6507]
tourtabl // 030170 1978/03 [6507]
-//@source:tourvis.cpp
+@source:tourvis.cpp
tourvis // (c) ???? Tourvision
tv1943 // (c) 1991 Capcom / Nexat Soft (Tourvision bootleg)
tvablast // (c) 1990 Hudson / Kaneko (Tourvision bootleg)
@@ -35046,23 +35055,24 @@ tvwnshot // (c) 1989 Data East Corp. (Tourvision bootleg)
tvwring // (c) 1990 Naxat Soft (Tourvision bootleg)
tvxvious // (c) 1990 Namco Ltd. / Namcot (Tourvision bootleg)
-//@source:toypop.cpp
+@source:toypop.cpp
liblrabl // (c) 1983
toypop // (c) 1986
-//@source:tp84.cpp
+@source:tp84.cpp
tp84 // GX388 (c) 1984
tp84a // GX388 (c) 1984
tp84b // GX388 (c) 1984
-//@source:tr606.cpp
+@source:tr606.cpp
tr606 // Roland
-//@source:trackfld.cpp
+@source:trackfld.cpp
atlantol // bootleg
hyprolym // GX361 (c) 1983
hyprolymb // bootleg
hyprolymba // bootleg
+hipoly // bootleg
mastkin // (c) 1988 Du Tech
reaktor // (c) 1985 Zilec
trackfld // GX361 (c) 1983
@@ -35072,7 +35082,7 @@ wizzquiz // (c) 1985 Konami
wizzquiza // (c) 1985 Zilec-Zenitone
yieartf // GX361 (c) 1985
-//@source:travrusa.cpp
+@source:travrusa.cpp
motorace // (c) 1983 Williams license
mototour // (c) 1983 Tecfri
shtrider // (c) 1984 Seibu Kaihatsu
@@ -35081,10 +35091,10 @@ shtriderb // bootleg
travrusa // (c) 1983
travrusab // (c) 1983 I.P. (bootleg)
-//@source:tricep.cpp
+@source:tricep.cpp
tricep //
-//@source:triforce.cpp
+@source:triforce.cpp
avalnc12 // 2004.03 The Key Of Avalon 1.20 - Summon The New Monsters (client) (Rev A)
avalnc13 // 2004.06.08 The Key Of Avalon 1.30 - Chaotic Sabbat (client) (Rev C)
avalns12 // 2004.03 The Key Of Avalon 1.20 - Summon The New Monsters (server) (Rev A)
@@ -35114,10 +35124,10 @@ vs42006 // 2006.05 Virtua Striker 4 Ver.2006 (Japan) (Re
vs42k6ex // 2006.01.31 Virtua Striker 4 Ver.2006 (Export)
vs4j // 2004.10 Virtua Striker 4 (Japan) (Rev E)
-//@source:triplhnt.cpp
+@source:triplhnt.cpp
triplhnt // 008422-008791 1977/04 [6800]
-//@source:trs80.cpp
+@source:trs80.cpp
ht108064 // Hradstechnika Szvetkezet HT-1080Z/64
ht1080z // Hradstechnika Szvetkezet HT-1080Z
ht1080z2 // Hradstechnika Szvetkezet HT-1080Z Series II
@@ -35132,37 +35142,37 @@ trs80m3 // TRS-80 Model III - Radio Shack/Tandy
trs80m4 //
trs80m4p //
-//@source:trs80m2.cpp
+@source:trs80m2.cpp
trs80m16 //
trs80m2 //
-//@source:truco.cpp
+@source:truco.cpp
truco // (c) 198? Playtronic SRL
-//@source:trucocl.cpp
+@source:trucocl.cpp
trucocl // (c) 1991 Miky SRL
-//@source:trvmadns.cpp
+@source:trvmadns.cpp
trvmadns // (c) 1985 Thunderhead Inc.
trvmadnsa // (c) 1985 Thunderhead Inc.
-//@source:trvquest.cpp
+@source:trvquest.cpp
trvquest // (c) 1984 Sunn / Techstar
-//@source:tryout.cpp
+@source:tryout.cpp
tryout // (c) 1985 Data East Corporation (Japan)
-//@source:ts802.cpp
+@source:ts802.cpp
ts802 //
ts802h //
-//@source:ts803.cpp
+@source:ts803.cpp
ts803h //
-//@source:ts816.cpp
+@source:ts816.cpp
ts816 //
-//@source:tsamurai.cpp
+@source:tsamurai.cpp
alphaxz // AZ (c) 1986 Ed/Wood Place
ladymstr // A49 (c) 1985 Taito
m660 // ??? (c) 1986 Taito America Corporation
@@ -35177,25 +35187,25 @@ tsamuraih // bootleg
vsgongf // (c) 1984 Kaneko
yamagchi // A38 (c) 1985 Taito
-//@source:tsispch.cpp
+@source:tsispch.cpp
prose2k //
prose2ko //
-//@source:ttchamp.cpp
+@source:ttchamp.cpp
ttchamp //
ttchampa //
-//@source:tubep.cpp
+@source:tubep.cpp
rjammer // (c) 1984 + Alice
tubep // (c) 1984 + Fujitek
tubepb // (c) 1984 + bootleg
-//@source:tugboat.cpp
+@source:tugboat.cpp
berenstn // (c) 1984 Enter-Tech
noahsark // (c) 1983 Enter-Tech
tugboat // (c) 1982 ETM
-//@source:tumbleb.cpp
+@source:tumbleb.cpp
bcstry // (c) 1997 SemiCom
bcstrya // (c) 1997 SemiCom
carket //
@@ -35218,15 +35228,15 @@ tumblepba //
wlstar // (c) 1995 Mijin
wondl96 // (c) 1996 SemiCom
-//@source:tumblep.cpp
+@source:tumblep.cpp
tumblep // MAP (c) 1991 Data East Corporation (World)
tumblepj // MAP (c) 1991 Data East Corporation (Japan)
-//@source:tunhunt.cpp
+@source:tunhunt.cpp
tunhunt // 136000 (c) 1979
tunhuntc // 136000 (c) 1981 // licensed to / distributed by Centuri
-//@source:turbo.cpp
+@source:turbo.cpp
buckrog // (c) 1982 Sega
buckrogn // (c) 1982 Sega
buckrogn2 // (c) 1982 Sega
@@ -35239,33 +35249,33 @@ turboc // (c) 1981 Sega
turbod // (c) 1981 Sega
zoom909 // (c) 1982 Sega
-//@source:turrett.cpp
+@source:turrett.cpp
turrett // (c) 2001 licensed from Dell Electronics
-//@source:tutankhm.cpp
+@source:tutankhm.cpp
tutankhm // GX350 (c) 1982 Konami
tutankhms // GX350 (c) 1982 Stern
-//@source:tutor.cpp
+@source:tutor.cpp
pyuuta // 1982 Tomy Pyuuta
pyuutajr // 1982 Tomy Pyuuta Jr.
tutor // 1983? Tomy Tutor
-//@source:tv950.cpp
+@source:tv950.cpp
tv950 //
-//@source:tvc.cpp
+@source:tvc.cpp
tvc64 //
tvc64p //
tvc64pru //
-//@source:tvcapcom.cpp
+@source:tvcapcom.cpp
tvcapcom //
-//@source:tvgame.cpp
+@source:tvgame.cpp
tvgame //
-//@source:twin16.cpp
+@source:twin16.cpp
cuebrickj // GX903 (c) 1989 (Japan)
darkadv // GX687 (c) 1987
devilw // GX687 (c) 1987
@@ -35281,7 +35291,7 @@ vulcan // GX785 (c) 1988
vulcana // GX785 (c) 1988
vulcanb // GX785 (c) 1988
-//@source:twincobr.cpp
+@source:twincobr.cpp
fnshark // bootleg
fshark // B02 / TP-007 (c) 1987 Taito Corporation (World)
fsharkbt // bootleg
@@ -35294,7 +35304,7 @@ skysharka // B02 / TP-007 (c) 1987 Taito America Corporati
twincobr // B30 / TP-011 (c) 1987 Taito Corporation (World)
twincobru // B30 / TP-011 (c) 1987 Taito America Corporation + Romstar license (US)
-//@source:twinkle.cpp
+@source:twinkle.cpp
bmiidx //
bmiidx2 //
bmiidx3 //
@@ -35312,45 +35322,45 @@ bmiidxca //
bmiidxs //
gq863 //
-//@source:twins.cpp
+@source:twins.cpp
spider //
twins // (c) 1994
twinsa // (c) 1994
-//@source:tx0.cpp
+@source:tx0.cpp
tx0_64kw // April 1956 MIT TX-0 (64kw RAM)
tx0_8kw // 1962 MIT TX-0 (8kw RAM)
-//@source:tx1.cpp
+@source:tx1.cpp
buggyboy // (c) 1985 Tatsumi
buggyboyjr // (c) 1986 Tatsumi
tx1 // (c) 1983 Tatsumi + Atari, Namco and Taito license
tx1jb // (c) 1983 Tatsumi
tx1jc // (c) 1983 Tatsumi
-//@source:uapce.cpp
+@source:uapce.cpp
aliencr // (c) 1989 Hudson Soft
blazlaz // (c) 1989 Hudson Soft
keith // (c) 1989 Hudson Soft
paclandp // (c) 1989 Namco
-//@source:uknc.cpp
+@source:uknc.cpp
uknc //
-//@source:ultraman.cpp
+@source:ultraman.cpp
ultraman // GX910 (c) 1991 Banpresto/Bandai
-//@source:ultratnk.cpp
+@source:ultratnk.cpp
ultratnk // 009801 1978/02 [6502]
-//@source:ultrsprt.cpp
+@source:ultrsprt.cpp
fiveside // GX479 (c)1995
-//@source:umipoker.cpp
+@source:umipoker.cpp
saiyukip //
umipoker //
-//@source:undrfire.cpp
+@source:undrfire.cpp
cbombers // D83 (c) 1993 Taito Corporation Japan (World)
cbombersj // D83 (c) 1993 Taito Corporation (Japan)
cbombersp //
@@ -35358,35 +35368,35 @@ undrfire // D67 (c) 1993 Taito Corporation Japan (World)
undrfirej // D67 (c) 1993 Taito Corporation (Japan)
undrfireu // D67 (c) 1993 Taito America Corporation (US)
-//@source:unichamp.cpp
+@source:unichamp.cpp
unichamp //
-//@source:unico.cpp
+@source:unico.cpp
burglarx // (c) 1997
zeropnt // (c) 1998
zeropnt2 // (c) 1999
zeropnta // (c) 1998
zeropntj // (c) 1998 (Japan)
-//@source:unior.cpp
+@source:unior.cpp
unior //
-//@source:unistar.cpp
+@source:unistar.cpp
unistar //
-//@source:univac.cpp
+@source:univac.cpp
uts20 //
-//@source:unixpc.cpp
+@source:unixpc.cpp
3b1 // 3B1 "Unix PC"
-//@source:unkhorse.cpp
+@source:unkhorse.cpp
unkhorse //
-//@source:upscope.cpp
+@source:upscope.cpp
upscope // (c) 1986 Grand products
-//@source:usgames.cpp
+@source:usgames.cpp
superten // (c) 1988
usg182 // (c) 1989
usg185 // (c) 1990
@@ -35396,20 +35406,20 @@ usg82 // (c) 1988
usg83x // (c) 1988
usgames // (c) 1992
-//@source:ut88.cpp
+@source:ut88.cpp
ut88 //
ut88mini //
-//@source:uzebox.cpp
+@source:uzebox.cpp
uzebox //
-//@source:v1050.cpp
+@source:v1050.cpp
v1050 //
-//@source:v6809.cpp
+@source:v6809.cpp
v6809 //
-//@source:vamphalf.cpp
+@source:vamphalf.cpp
aoh // (c) 2001
boonggab // (c) 2001 Taff System
coolmini // (c) 1999 SemiCom
@@ -35435,32 +35445,32 @@ wyvernwg // (c) 2001 Semicom / Game Vision
wyvernwga // (c) 2001 Semicom / Game Vision
yorijori // (c)
-//@source:vaportra.cpp
+@source:vaportra.cpp
kuhga // MAA (c) 1989 Data East Corporation (Japan)
vaportra // MAA (c) 1989 Data East Corporation (World)
vaportra3 // MAA (c) 1989 Data East Corporation (World)
vaportrau // MAA (c) 1989 Data East Corporation (US)
-//@source:vastar.cpp
+@source:vastar.cpp
pprobe // Kyugo?
vastar // (c) 1983 Sesame Japan
vastar2 // (c) 1983 Sesame Japan
vastar3 // (c) 1983 Sesame Japan
vastar4 // (c) 1983 Sesame Japan
-//@source:vax11.cpp
+@source:vax11.cpp
vax785 //
-//@source:vball.cpp
+@source:vball.cpp
vball // TA-0025 (c) 1988 (US)
vball2pj // TA-0025 (c) 1988 (Japan)
vball2pjb // bootleg (of Japan set)
vballb // bootleg (of US set)
-//@source:vboy.cpp
+@source:vboy.cpp
vboy //
-//@source:vc4000.cpp
+@source:vc4000.cpp
1292apvs //
1392apvs //
cx3000tc //
@@ -35487,37 +35497,37 @@ vc4000 // Interton vc4000
vc6000 //
vmdtbase //
-//@source:vcombat.cpp
+@source:vcombat.cpp
shadfgtr // (c) 1993 DUTECH Inc.
vcombat // (c) 1993 VR8 Inc.
-//@source:vcs80.cpp
+@source:vcs80.cpp
vcs80 //
-//@source:vd.cpp
+@source:vd.cpp
break86 //
papillon //
-//@source:vector06.cpp
+@source:vector06.cpp
krista2 //
pk6128c //
vec1200 //
vector06 //
-//@source:vector4.cpp
+@source:vector4.cpp
vector4 //
-//@source:vectrex.cpp
+@source:vectrex.cpp
raaspec // (c) Roy Abel & Associates 1984
vectrex // General Consumer Electric Vectrex - 1982-1984
-//@source:vega.cpp
+@source:vega.cpp
vega // (c) 19?? Olympia?
-//@source:vegaeo.cpp
+@source:vegaeo.cpp
crazywar // (c) 2002 Eolith
-//@source:vegas.cpp
+@source:vegas.cpp
cartfury // (c) 2000 Midway Games
gauntdl // (c) 1999 Midway Games
gauntdl24 // (c) 1999 Midway Games
@@ -35534,7 +35544,7 @@ tenthdeg // (c) 1998 Atari Games (prototype)
warfa // (c) 1999 Atari Games
warfaa // (c) 1999 Atari Games
-//@source:vendetta.cpp
+@source:vendetta.cpp
esckids // GX975 (c) 1991 (Asia)
esckidsj // GX975 (c) 1991 (Japan)
vendetta // GX081 (c) 1991 (World)
@@ -35546,22 +35556,22 @@ vendettaj // GX081 (c) 1991 (Japan)
vendettar // GX081 (c) 1991 (World)
vendettaz // GX081 (c) 1991 (World)
-//@source:vertigo.cpp
+@source:vertigo.cpp
topgunnr // (c) 1986
-//@source:vg5k.cpp
+@source:vg5k.cpp
vg5k // 1984 VG-5000
-//@source:vic10.cpp
+@source:vic10.cpp
vic10 // Commodore Max Machine (Japan)
-//@source:vic20.cpp
+@source:vic20.cpp
vic1001 // Commodore VIC-1001 (Japan)
vic20 // Commodore VIC 20 (NTSC)
vic20_se // Commodore VIC 20 (Swedish Expanson Kit)
vic20p // Commodore VIC 20 (PAL)
-//@source:vicdual.cpp
+@source:vicdual.cpp
alphaho // Data East
brdrlinb // Karateco bootleg
brdrline // (c) 1980 Sega
@@ -35607,21 +35617,21 @@ subhunt // ? [1977 Taito]
supcrash // bootleg
tranqgun // 413-428 (c) 1980 Sega
-//@source:victor9k.cpp
+@source:victor9k.cpp
victor9k //
-//@source:victory.cpp
+@source:victory.cpp
victorba // (c) 1982
victory // (c) 1982
-//@source:vidbrain.cpp
+@source:vidbrain.cpp
vidbrain //
-//@source:videopin.cpp
+@source:videopin.cpp
solarwar // 036154-036169 1979 [6502]
videopin // 034253-034267 1979/02 [6502]
-//@source:videopkr.cpp
+@source:videopkr.cpp
babydad // (c) 1987 Recreativos Franco
babypkr // (c) 1987 Recreativos Franco
blckjack // (c) 1984 InterFlip
@@ -35631,7 +35641,7 @@ videocba // (c) 1987 InterFlip
videodad // (c) 1987 InterFlip
videopkr // (c) 1984 InterFlip
-//@source:vigilant.cpp
+@source:vigilant.cpp
buccanrs // (c) 1989 Duintronic
buccanrsa // (c) 1989 Duintronic
kikcubic // (c) 1988 (Japan)
@@ -35645,14 +35655,14 @@ vigilantd // (c) 1988 (Japan Rev D)
vigilantg // (c) 1988 (US Rev G)
vigilanto // (c) 1988 (US)
-//@source:vii.cpp
+@source:vii.cpp
batmantv // The Batman, 2004
vii // Chintendo / KenSingTon / Jungle Soft / Siatronics Vii
vsmile //
vsmilef //
walle //
-//@source:vindictr.cpp
+@source:vindictr.cpp
vindictr // 136059 (c) 1988
vindictr1 // 136059 (c) 1988
vindictr2 // 136059 (c) 1988
@@ -35662,11 +35672,11 @@ vindictre3 // 136059 (c) 1988
vindictre4 // 136059 (c) 1988
vindictrg // 136059 (c) 1988
-//@source:vip.cpp
+@source:vip.cpp
vip // 1977 Cosmac VIP VP-711
vp111 // 1977 Cosmac VIP VP-111
-//@source:viper.cpp
+@source:viper.cpp
boxingm // 2001
code1d // 2000
code1db // 2000
@@ -35707,16 +35717,16 @@ wcombatk // 2002
wcombatu // 2002
xtrial // 2002
-//@source:vixen.cpp
+@source:vixen.cpp
vixen //
-//@source:vk100.cpp
+@source:vk100.cpp
vk100 // 1980 Digital Equipment Corporation
-//@source:vlc.cpp
+@source:vlc.cpp
nevada //
-//@source:volfied.cpp
+@source:volfied.cpp
volfied // C04 (c) 1989 Taito Corporation Japan (World)
volfiedj // C04 (c) 1989 Taito Corporation (Japan)
volfiedjo // C04 (c) 1989 Taito Corporation (Japan)
@@ -35724,27 +35734,27 @@ volfiedo // C04 (c) 1989 Taito Corporation Japan (World)
volfiedu // C04 (c) 1989 Taito America Corporation (US)
volfieduo // C04 (c) 1989 Taito America Corporation (US)
-//@source:votrpss.cpp
+@source:votrpss.cpp
votrpss // 1982 Votrax Personal Speech System
-//@source:votrtnt.cpp
+@source:votrtnt.cpp
votrtnt // 1980 Votrax Type-'N-Talk
-//@source:voyager.cpp
+@source:voyager.cpp
voyager // (c) 2002 Team Play, Inc.
-//@source:vp101.cpp
+@source:vp101.cpp
jnero // (c) 2004 ICE/Play Mechanix
specfrce // (c) 2002 ICE/Play Mechanix
-//@source:vpoker.cpp
+@source:vpoker.cpp
5acespkr // (c) 198?
vpoker // (c) 198?
-//@source:vroulet.cpp
+@source:vroulet.cpp
vroulet // (c) 1989 World Game
-//@source:vsnes.cpp
+@source:vsnes.cpp
balonfgt // (c) 1984 Nintendo
bnglngby // (c) 1985 Nintendo licensed by Broderbund Software Inc.
btlecity // (c) 1985 Namco
@@ -35800,7 +35810,7 @@ vstennisb // (c) 1984 Nintendo Co., Ltd. / Nintendo of Ame
vstetris // (c) 1988 Atari
wrecking // (c) 1984 Nintendo
-//@source:vt100.cpp
+@source:vt100.cpp
vt100 // 1978 Digital Equipment Corporation
vt101 // 1981 Digital Equipment Corporation
vt102 // 1981 Digital Equipment Corporation
@@ -35808,23 +35818,23 @@ vt105 // 1978 Digital Equipment Corporation
vt131 // 1981 Digital Equipment Corporation
vt180 // 1981 Digital Equipment Corporation
-//@source:vt220.cpp
+@source:vt220.cpp
vt220 // 1983 Digital Equipment Corporation
-//@source:vt240.cpp
+@source:vt240.cpp
mc7105 // Elektronika MC7105
vt240 // 1983 Digital Equipment Corporation
-//@source:vt320.cpp
+@source:vt320.cpp
vt320 // 1987 Digital Equipment Corporation
-//@source:vt520.cpp
+@source:vt520.cpp
vt520 // 1994 Digital Equipment Corporation
-//@source:vta2000.cpp
+@source:vta2000.cpp
vta2000 //
-//@source:vtech1.cpp
+@source:vtech1.cpp
fellow // 1983 Salora Fellow
laser110 // 1983 Laser 110
laser200 // 1983 Laser 200
@@ -35836,37 +35846,37 @@ vz200 // 1984 Dick Smith Electronics VZ-200
vz200de // 1983 VZ-200 (Germany)
vz300 // 1984 Dick Smith Electronics VZ-300
-//@source:vtech2.cpp
+@source:vtech2.cpp
laser350 // 1984? Laser 350
laser500 // 1984? Laser 500
laser700 // 1984? Laser 700
-//@source:vulgus.cpp
+@source:vulgus.cpp
vulgus // 5/1984 (c) 1984
vulgusa // 5/1984 (c) 1984
vulgusj // 5/1984 (c) 1984
-//@source:wacky_gator.cpp
+@source:wacky_gator.cpp
wackygtr // Wacky Gator
-//@source:wallc.cpp
+@source:wallc.cpp
brkblast // bootleg (Fadesa)
sidampkr //
wallc // (c) 1984 Midcoin
wallca // (c) 1984 Midcoin
-//@source:wangpc.cpp
+@source:wangpc.cpp
wangpc //
-//@source:wardner.cpp
+@source:wardner.cpp
pyros // B25 / TP-009 (c) 1987 Taito America Corporation (US)
wardner // B25 / TP-009 (c) 1987 Taito Corporation Japan (World)
wardnerj // B25 / TP-009 (c) 1987 Taito Corporation (Japan)
-//@source:warpsped.cpp
+@source:warpsped.cpp
warpsped // 197?
-//@source:warpwarp.cpp
+@source:warpwarp.cpp
bombbee // [1979] Namco
cutieq // (c) 1979 Namco
geebee // [1978] Namco
@@ -35880,47 +35890,47 @@ warpwarp // (c) 1981 Namco
warpwarpr // (c) 1981 [Namco] (Rock-ola license)
warpwarpr2 // (c) 1981 [Namco] (Rock-ola license)
-//@source:warriorb.cpp
+@source:warriorb.cpp
darius2d // C07 (c) 1989 Taito Corporation (Japan)
darius2do // C07 (c) 1989 Taito Corporation (Japan)
sagaia // C07 (c) 1989 Taito Corporation Japan (World)
warriorb // D24 (c) 1991 Taito Corporation (Japan)
-//@source:wc90.cpp
+@source:wc90.cpp
pac90 // bootleg
wc90 // (c) 1989 Tecmo
wc90a // (c) 1989 Tecmo
wc90b // (c) 1989 Tecmo
wc90t // (c) 1989 Tecmo
-//@source:wc90b.cpp
+@source:wc90b.cpp
wc90b1 // bootleg
wc90b2 // bootleg
wc90ba // bootleg
-//@source:wecleman.cpp
+@source:wecleman.cpp
hotchase // GX763 (c) 1988
hotchasea //
wecleman // GX602 (c) 1986
weclemana // GX602?(c) 1988
weclemanb // GX602 (c) 1986
-//@source:welltris.cpp
+@source:welltris.cpp
quiz18k // (c) 1992 EIM (Welltris hardware)
welltris // (c) 1991 Video System Co. (Japan)
welltrisj // (c) 1991 Video System Co. (Japan)
-//@source:wgp.cpp
+@source:wgp.cpp
wgp // C32 (c) 1989 Taito America Corporation (US)
wgp2 // C73 (c) 1990 Taito Corporation (Japan)
wgpj // C32 (c) 1989 Taito Corporation (Japan)
wgpjoy // C32 (c) 1989 Taito Corporation (Japan)
wgpjoya // C32 (c) 1989 Taito Corporation (Japan)
-//@source:wheelfir.cpp
+@source:wheelfir.cpp
wheelfir // (c) 199? TCH
-//@source:white_mod.cpp
+@source:white_mod.cpp
elvisf //
elvisf302 //
elvisf303 //
@@ -36074,7 +36084,7 @@ sopranos_204 //
sopranos_300 //
sopranos_400 //
-//@source:whitestar.cpp
+@source:whitestar.cpp
apollo13 //
apollo13_10 //
aust201 //
@@ -36256,20 +36266,20 @@ wackadoo //
xfiles2 //
xfilesp //
-//@source:wicat.cpp
+@source:wicat.cpp
wicat //
-//@source:wico.cpp
+@source:wico.cpp
aftor //
-//@source:wildfire.cpp
+@source:wildfire.cpp
wildfire // Parker Bros
-//@source:wildpkr.cpp
+@source:wildpkr.cpp
tabpkr // 199?, TAB Austira
wildpkr // 199?, TAB Austria.
-//@source:williams.cpp
+@source:williams.cpp
alienar // (c) 1985 Duncan Brown
alienaru // (c) 1985 Duncan Brown
batlzone // bootleg?
@@ -36317,21 +36327,21 @@ tshoot // (c) 1984
zero // bootleg
zero2 // bootleg
-//@source:wink.cpp
+@source:wink.cpp
wink // (c) 1985 Midcoin
winka // (c) 1985 Midcoin
-//@source:wiping.cpp
+@source:wiping.cpp
rugrats // (c) 1983
wiping // (c) 1982
-//@source:witch.cpp
+@source:witch.cpp
pbchmp95 // (c) 1995 Veltmeijer Automaten
witch // (c) 1992 Excellent System
witchb // (c) 1992 Excellent System
witchs // (c) 1992 Sega / Vic Tokai license
-//@source:wiz.cpp
+@source:wiz.cpp
kungfut // (c) 1984 Seibu Kaihatsu
kungfuta // (c) 1984 Seibu Kaihatsu
scion // (c) 1984 Seibu Denshi
@@ -36342,10 +36352,10 @@ wiz // (c) 1985 Seibu Kaihatsu
wizt // (c) 1985 Taito Corporation
wizta // (c) 1985 Taito Corporation
-//@source:wmg.cpp
+@source:wmg.cpp
wmg // Williams 6in1 Multigame, Clay Cowgill
-//@source:wms.cpp
+@source:wms.cpp
btippers // Big Tippers (Russian)
cashcrop // Cash Crop (Russian)
filthyr // Filthy Rich (Russian)
@@ -36373,10 +36383,10 @@ wmsboom // Boom (Russian)
wmstopb // Top Banana (Russian)
yukongld // Yukon Gold (Russian)
-//@source:wolfpack.cpp
+@source:wolfpack.cpp
wolfpack // ?????? prototype [6502]
-//@source:wpc_95.cpp
+@source:wpc_95.cpp
afm_10 //
afm_11 //
afm_113 //
@@ -36440,7 +36450,7 @@ totan_13 //
totan_14 //
ttt_10 //
-//@source:wpc_an.cpp
+@source:wpc_an.cpp
bop_l2 //
bop_l3 //
bop_l4 //
@@ -36459,7 +36469,7 @@ hd_l1 //
hd_l3 //
tfa_13 //
-//@source:wpc_dcs.cpp
+@source:wpc_dcs.cpp
afv_l4 //
dm_h5 //
dm_h6 //
@@ -36493,7 +36503,7 @@ sttng_p8 //
sttng_s7 //
sttng_x7 //
-//@source:wpc_dot.cpp
+@source:wpc_dot.cpp
gi_l3 //
gi_l4 //
gi_l6 //
@@ -36513,7 +36523,7 @@ t2_l8 //
t2_p2f //
tfdmd_l3 //
-//@source:wpc_flip1.cpp
+@source:wpc_flip1.cpp
taf_h4 //
taf_l1 //
taf_l2 //
@@ -36524,7 +36534,7 @@ taf_l6 //
taf_l7 //
taf_p2 //
-//@source:wpc_flip2.cpp
+@source:wpc_flip2.cpp
br_l1 //
br_l3 //
br_l4 //
@@ -36575,7 +36585,7 @@ ww_lh6 //
ww_p1 //
ww_p8 //
-//@source:wpc_s.cpp
+@source:wpc_s.cpp
corv_21 //
corv_la1 //
corv_lx1 //
@@ -36634,57 +36644,57 @@ wd_11 //
wd_12 //
wd_12g //
-//@source:wrally.cpp
+@source:wrally.cpp
wrally // (c) 1993 - Ref 930705
wrallya // (c) 1993 - Ref 930705
wrallyat // (c) 1993 - Ref 930217
wrallyb // (c) 1993 - Ref 930217
-//@source:wswan.cpp
+@source:wswan.cpp
wscolor // Bandai WonderSwan Color Handheld
wswan // Bandai WonderSwan Handheld
-//@source:wwfsstar.cpp
+@source:wwfsstar.cpp
wwfsstar // TA-0024 (c) 1989 (Europe)
wwfsstarb // TA-0024 (c) 1989 (Japan)
wwfsstarj // TA-0024 (c) 1989 (Japan)
wwfsstaru // TA-0024 (c) 1989 (US, newer)
wwfsstarua // TA-0024 (c) 1989 (US)
-//@source:wyvernf0.cpp
+@source:wyvernf0.cpp
wyvernf0 // A39 (c) 1985 Taito Corporation (Japan)
-//@source:x07.cpp
+@source:x07.cpp
x07 //
-//@source:x1.cpp
+@source:x1.cpp
x1 // 1982 Sharp X1
x1turbo // 1984 Sharp X1 Turbo (Model 10)
x1turbo40 // 1985 Sharp X1 Turbo (Model 40)
-//@source:x1twin.cpp
+@source:x1twin.cpp
x1twin // 1986 Sharp X1 Twin
-//@source:x68k.cpp
+@source:x68k.cpp
x68000 // Sharp X68000 (1987)
x68030 // Sharp X68030 (1993)
x68ksupr // Sharp X68000 Super (1990)
x68kxvi // Sharp X68000 XVI (1991)
-//@source:xain.cpp
+@source:xain.cpp
solrwarr // TA-0019 (c) 1986 + Taito / Memetron license
xsleena // TA-0019 (c) 1986 + Taito license
xsleenab // bootleg
xsleenaba // bootleg
xsleenaj // TA-0019 (c) 1986
-//@source:xavix.cpp
+@source:xavix.cpp
taitons1 //
-//@source:xbox.cpp
+@source:xbox.cpp
xbox //
-//@source:xerox820.cpp
+@source:xerox820.cpp
bigboard //
mk82 //
mk83 //
@@ -36692,13 +36702,13 @@ x168 //
x820 //
x820ii //
-//@source:xexex.cpp
+@source:xexex.cpp
orius // GX067 (c) 1991 (USA)
xexex // GX067 (c) 1991 (World)
xexexa // GX067 (c) 1991 (Asia)
xexexj // GX067 (c) 1991 (Japan)
-//@source:xmen.cpp
+@source:xmen.cpp
xmen // GX065 (c) 1992 (US)
xmen2pa // GX065 (c) 1992 (Asia)
xmen2pe // GX065 (c) 1992 (World)
@@ -36711,40 +36721,40 @@ xmenaa // GX065 (c) 1992 (Asia)
xmene // GX065 (c) 1992 (World)
xmenj // GX065 (c) 1992 (Japan)
-//@source:xor100.cpp
+@source:xor100.cpp
xor100 //
-//@source:xorworld.cpp
+@source:xorworld.cpp
xorworld // (c) 1990 - prototype
-//@source:xtheball.cpp
+@source:xtheball.cpp
xtheball // (c) 1991 Rare
-//@source:xtom3d.cpp
+@source:xtom3d.cpp
xtom3d //
-//@source:xxmissio.cpp
+@source:xxmissio.cpp
xxmissio // UPL-86001 [1986]
-//@source:xybots.cpp
+@source:xybots.cpp
xybots // 136054 (c) 1987
xybots0 // 136054 (c) 1987
xybots1 // 136054 (c) 1987
xybotsf // 136054 (c) 1987
xybotsg // 136054 (c) 1987
-//@source:xyonix.cpp
+@source:xyonix.cpp
xyonix // [1989 Philko]
-//@source:yiear.cpp
+@source:yiear.cpp
yiear // GX407 (c) 1985
yiear2 // GX407 (c) 1985
-//@source:ymmu100.cpp
+@source:ymmu100.cpp
mu100 // 1997 MU-100
mu100r // 1997 MU-100 Rackable version
-//@source:yunsun16.cpp
+@source:yunsun16.cpp
bombkick // (c) 1998 Yun Sung
bombkicka // (c) 1998 Yun Sung
magicbub // (c) Yun Sung
@@ -36755,33 +36765,33 @@ shocking // (c) 1997 Yun Sung
shockingk // (c) 1997 Yun Sung
shockingko // (c) 1997 Yun Sung
-//@source:yunsung8.cpp
+@source:yunsung8.cpp
cannball // (c) 1995 Yun Sung / Soft Visio
cannballv // (c) 1995 Yun Sung / T&K
magix // (c) 1995 Yun Sung
magixb // bootleg
rocktris // (c) 1994? Yun Sung
-//@source:z100.cpp
+@source:z100.cpp
z100 //
-//@source:z1013.cpp
+@source:z1013.cpp
z1013 //
z1013a2 //
z1013k69 //
z1013k76 //
z1013s60 //
-//@source:z80dev.cpp
+@source:z80dev.cpp
z80dev //
-//@source:z80ne.cpp
+@source:z80ne.cpp
z80ne // 1980 - Z80NE
z80net // 1980 - Z80NE + LX388 Video Interface
z80netb // 1980 - Z80NE + LX388 Video Interface + 16Kb BASIC
z80netf // 1980 - Z80NE + LX.388 Video Interface + LX.390 FD Controller
-//@source:z88.cpp
+@source:z88.cpp
z88 // Z88 (UK)
z88ch // Z88 (Swiss)
z88de // Z88 (German)
@@ -36794,7 +36804,7 @@ z88no // Z88 (Norwegian)
z88se // Z88 (Swedish)
z88tr // Z88 (Turkish)
-//@source:z9001.cpp
+@source:z9001.cpp
kc85_111 //
kc87_10 //
kc87_11 //
@@ -36802,7 +36812,7 @@ kc87_20 //
kc87_21 //
z9001 //
-//@source:zac_1.cpp
+@source:zac_1.cpp
ewf //
firemntn //
futurwld //
@@ -36815,7 +36825,7 @@ stargoda //
strapids //
wsports //
-//@source:zac_2.cpp
+@source:zac_2.cpp
bbeltzac //
clown //
dvlrider //
@@ -36855,26 +36865,26 @@ tmachzacf //
tmachzacg //
zankor //
-//@source:zac_proto.cpp
+@source:zac_proto.cpp
skijump //
spacecty //
strike //
-//@source:zac2650.cpp
+@source:zac2650.cpp
dodgem // (c) 1979
sia2650 // (c) 1978
tinv2650 // (c) 1978
-//@source:zaccaria.cpp
+@source:zaccaria.cpp
jackrabt // (c) 1984
jackrabt2 // (c) 1984
jackrabts // (c) 1984
monymony // (c) 1983
-//@source:zapcomputer.cpp
+@source:zapcomputer.cpp
zapcomp // (1981) ZAP computer - Z80 Applications Processor
-//@source:zaurus.cpp
+@source:zaurus.cpp
zsl5500 // Sharp Zaurus SL-5500 "Collie"
zsl5600 // Sharp Zaurus SL-5600 / SL-B500 "Poodle"
zslc1000 // Sharp Zaurus SL-C1000 "Akita"
@@ -36882,7 +36892,7 @@ zslc3000 // Sharp Zaurus SL-C3000 "Spitz"
zslc750 // Sharp Zaurus SL-C750 "Shepherd"
zslc760 // Sharp Zaurus SL-C760 "Husky"
-//@source:zaxxon.cpp
+@source:zaxxon.cpp
congo // 605-5167 (c) 1983 (2 board stack)
congoa // 605-5167 (c) 1983 (3 board stack)
futspy // (c) 1984
@@ -36896,14 +36906,14 @@ zaxxon3 // (c) 1982
zaxxonb // bootleg
zaxxonj // (c) 1982
-//@source:zerozone.cpp
+@source:zerozone.cpp
lvgirl94 // (c) 1994 Comad
zerozone // (c) 1993 Comad
-//@source:zexall.cpp
+@source:zexall.cpp
zexall // zexall z80 test suite with kevtris' preloader/serial interface at 0000-00ff
-//@source:zn.cpp
+@source:zn.cpp
1on1gov // 1 on 1 Government (JAPAN)
acpsx //
aerofgts // Aero Fighters Special (TAIWAN)
@@ -37006,17 +37016,17 @@ ts2a // Battle Arena Toshinden 2 (USA 951124)
ts2j // Battle Arena Toshinden 2 (JAPAN 951124)
vspsx //
-//@source:zodiack.cpp
+@source:zodiack.cpp
bounty // (c) 1982 Orca
dogfight // (c) 1983 Thunderbolt
moguchan // (c) 1982 Orca + Eastern Commerce Inc. license (doesn't appear on screen)
percuss // (c) 1981 Orca
zodiack // (c) 1983 Orca + Esco Trading Co license
-//@source:zorba.cpp
+@source:zorba.cpp
zorba //
-//@source:zr107.cpp
+@source:zr107.cpp
jetwave // GX678 (c)1996 Euro EAB
jetwavej // GX678 (c)1996 Japan JAB
midnrun // GX476 (c)1995 Europe EAA
@@ -37027,13 +37037,13 @@ windheata // GX677 (c)1996 Asia AAA
windheatj // GX677 (c)1996 Japan JAA
windheatu // GX677 (c)1996 USA UBC
-//@source:zrt80.cpp
+@source:zrt80.cpp
zrt80 //
-//@source:zsbc3.cpp
+@source:zsbc3.cpp
zsbc3 //
-//@source:zx.cpp
+@source:zx.cpp
lambda // Lambda 8300
pc8300 // Your Computer - PC8300
pow3000 // Creon Enterprises - Power 3000
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index 00289661e14..93b0531b119 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -101,7 +101,6 @@ ccs2810.cpp
ccs300.cpp
cd2650.cpp
cdc721.cpp
-cdi.cpp
cfx9850.cpp
cgc7900.cpp
cgenie.cpp
@@ -123,7 +122,6 @@ concept.cpp
cortex.cpp
cosmicos.cpp
cp1.cpp
-cps1.cpp
craft.cpp
crvision.cpp
ct486.cpp
@@ -267,7 +265,6 @@ isbc.cpp
iskr103x.cpp
itt3030.cpp
jade.cpp
-jaguar.cpp
jonos.cpp
jr100.cpp
jr200.cpp
@@ -282,7 +279,6 @@ k8915.cpp
kaypro.cpp
kc.cpp
kim1.cpp
-konamim2.cpp
konin.cpp
kramermc.cpp
kyocera.cpp
@@ -380,6 +376,7 @@ ngen.cpp
ngp.cpp
nokia_3310.cpp
notetaker.cpp
+novag6502.cpp
ob68k1a.cpp
octopus.cpp
odyssey2.cpp
@@ -546,7 +543,6 @@ sun3.cpp
sun4.cpp
super6.cpp
super80.cpp
-supercon.cpp
superslave.cpp
supracan.cpp
sv8000.cpp
@@ -672,3 +668,24 @@ zorba.cpp
zrt80.cpp
zsbc3.cpp
zx.cpp
+//exceptions + to add - to remove from imported list
+//3do.cpp
+-3dobios
+-orbatak
+//cps1.cpp
++wofch
++sfzch
++sfach
++sfzbch
+//cdi.cpp
++cdimono1
++cdimono2
++cdi910
++cdi490a
+//jaguar.cpp
++jaguar
++jaguarcd
+//konamim2.cpp
++3do_m2
+//vectrex.cpp
+-raaspec
diff --git a/src/mame/video/abc1600.cpp b/src/mame/video/abc1600.cpp
index 60b05e4fc94..f7ca47d97bb 100644
--- a/src/mame/video/abc1600.cpp
+++ b/src/mame/video/abc1600.cpp
@@ -187,14 +187,14 @@ MC6845_ON_UPDATE_ADDR_CHANGED( abc1600_mover_device::crtc_update )
static MACHINE_CONFIG_FRAGMENT( abc1600_mover )
MCFG_DEFAULT_LAYOUT(layout_abc1600)
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
MCFG_SCREEN_UPDATE_DRIVER(abc1600_mover_device, screen_update)
MCFG_SCREEN_SIZE(958, 1067)
MCFG_SCREEN_VISIBLE_AREA(0, 958-1, 0, 1067-1)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_MC6845_ADD(SY6845E_TAG, SY6845E, SCREEN_TAG, XTAL_64MHz/32)
MCFG_MC6845_SHOW_BORDER_AREA(true)
diff --git a/src/mame/video/abc80.cpp b/src/mame/video/abc80.cpp
index 30272f3b0ea..a267538093d 100644
--- a/src/mame/video/abc80.cpp
+++ b/src/mame/video/abc80.cpp
@@ -201,5 +201,5 @@ MACHINE_CONFIG_FRAGMENT( abc80_video )
MCFG_SCREEN_RAW_PARAMS(XTAL_11_9808MHz/2, ABC80_HTOTAL, ABC80_HBEND, ABC80_HBSTART, ABC80_VTOTAL, ABC80_VBEND, ABC80_VBSTART)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", abc80)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
diff --git a/src/mame/video/abc800.cpp b/src/mame/video/abc800.cpp
index ee9fc3a19de..422cf3ae6a0 100644
--- a/src/mame/video/abc800.cpp
+++ b/src/mame/video/abc800.cpp
@@ -300,12 +300,12 @@ MACHINE_CONFIG_FRAGMENT( abc800m_video )
MCFG_MC6845_UPDATE_ROW_CB(abc800m_state, abc800m_update_row)
MCFG_MC6845_OUT_VSYNC_CB(DEVWRITELINE(Z80DART_TAG, z80dart_device, rib_w))
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t(0xff, 0xff, 0x00))
MCFG_SCREEN_UPDATE_DRIVER(abc800m_state, screen_update)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
MCFG_SCREEN_SIZE(768, 312)
MCFG_SCREEN_VISIBLE_AREA(0,768-1, 0, 312-1)
- MCFG_PALETTE_ADD_MONOCHROME_YELLOW("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
diff --git a/src/mame/video/abc802.cpp b/src/mame/video/abc802.cpp
index 667f8cfe931..c2786d0b024 100644
--- a/src/mame/video/abc802.cpp
+++ b/src/mame/video/abc802.cpp
@@ -208,7 +208,7 @@ MACHINE_CONFIG_FRAGMENT( abc802_video )
MCFG_MC6845_UPDATE_ROW_CB(abc802_state, abc802_update_row)
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(abc802_state, vs_w))
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::amber)
MCFG_SCREEN_UPDATE_DRIVER(abc802_state, screen_update)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -216,5 +216,5 @@ MACHINE_CONFIG_FRAGMENT( abc802_video )
MCFG_SCREEN_SIZE(768, 312)
MCFG_SCREEN_VISIBLE_AREA(0,768-1, 0, 312-1)
- MCFG_PALETTE_ADD_MONOCHROME_AMBER("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
diff --git a/src/mame/video/apollo.cpp b/src/mame/video/apollo.cpp
index 9735f0e334a..32f7256aa94 100644
--- a/src/mame/video/apollo.cpp
+++ b/src/mame/video/apollo.cpp
@@ -1891,7 +1891,7 @@ void apollo_graphics_15i::device_reset()
MACHINE_CONFIG_FRAGMENT( apollo_mono19i )
MCFG_DEFAULT_LAYOUT( layout_apollo )
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_SCREEN_ADD(VIDEO_SCREEN_TAG, RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
MCFG_SCREEN_REFRESH_RATE(64)
diff --git a/src/mame/video/bking.cpp b/src/mame/video/bking.cpp
index ac3851e7217..d9b82ddd7e5 100644
--- a/src/mame/video/bking.cpp
+++ b/src/mame/video/bking.cpp
@@ -1,5 +1,5 @@
-// license:???
-// copyright-holders:Ed Mueller, Mike Balfour, Zsolt Vasvari
+// license:BSD-3-Clause
+// copyright-holders:Mike Balfour, Zsolt Vasvari
/***************************************************************************
bking.c
diff --git a/src/mame/video/carjmbre.cpp b/src/mame/video/carjmbre.cpp
deleted file mode 100644
index 374dcc0f9b9..00000000000
--- a/src/mame/video/carjmbre.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-// license:???
-// copyright-holders:insideoutboy, Nicola Salmoria
-/***************************************************************************
-
- Car Jamboree
- Omori Electric CAD (OEC) 1983
-
-***************************************************************************/
-
-#include "emu.h"
-#include "video/resnet.h"
-#include "includes/carjmbre.h"
-
-// palette info from Popper (OEC 1983, very similar video hw)
-static const res_net_decode_info carjmbre_decode_info =
-{
- 1, // there may be two proms needed to construct color
- 0, 63, // start/end
- // R, G, B,
- { 0, 0, 0, }, // offsets
- { 0, 3, 6, }, // shifts
- {0x07,0x07,0x03, } // masks
-};
-
-static const res_net_info carjmbre_net_info =
-{
- RES_NET_VCC_5V | RES_NET_VBIAS_5V | RES_NET_VIN_TTL_OUT,
- {
- { RES_NET_AMP_NONE, 0, 0, 3, { 1000, 470, 220 } },
- { RES_NET_AMP_NONE, 0, 0, 3, { 1000, 470, 220 } },
- { RES_NET_AMP_NONE, 0, 0, 2, { 470, 220, 0 } }
- }
-};
-
-PALETTE_INIT_MEMBER(carjmbre_state, carjmbre)
-{
- const UINT8 *color_prom = memregion("proms")->base();
- std::vector<rgb_t> rgb;
-
- compute_res_net_all(rgb, color_prom, carjmbre_decode_info, carjmbre_net_info);
- palette.set_pen_colors(0, rgb);
- palette.palette()->normalize_range(0, 63);
-}
-
-
-
-WRITE8_MEMBER(carjmbre_state::carjmbre_flipscreen_w)
-{
- m_flipscreen = (data & 1) ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0;
- machine().tilemap().set_flip_all(m_flipscreen);
-}
-
-WRITE8_MEMBER(carjmbre_state::carjmbre_bgcolor_w)
-{
- data = ~data & 0x3f;
-
- if (data != m_bgcolor)
- {
- int i;
-
- m_bgcolor = data;
- if (data & 3)
- for (i = 0; i < 64; i += 4)
- m_palette->set_pen_color(i, data);
- else
- // restore to initial state (black)
- for (i = 0; i < 64; i += 4)
- m_palette->set_pen_color(i, rgb_t::black);
- }
-}
-
-WRITE8_MEMBER(carjmbre_state::carjmbre_8806_w)
-{
- // unknown, gets updated at same time as carjmbre_bgcolor_w
-}
-
-WRITE8_MEMBER(carjmbre_state::carjmbre_videoram_w)
-{
- m_videoram[offset] = data;
- m_cj_tilemap->mark_tile_dirty(offset & 0x3ff);
-}
-
-
-
-TILE_GET_INFO_MEMBER(carjmbre_state::get_carjmbre_tile_info)
-{
- UINT32 tile_number = m_videoram[tile_index] & 0xff;
- UINT8 attr = m_videoram[tile_index + 0x400];
- tile_number += (attr & 0x80) << 1; /* bank */
-
- SET_TILE_INFO_MEMBER(0,
- tile_number,
- attr & 0xf,
- 0);
-}
-
-void carjmbre_state::video_start()
-{
- m_cj_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(carjmbre_state::get_carjmbre_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
- save_item(NAME(m_flipscreen));
- save_item(NAME(m_bgcolor));
-}
-
-UINT32 carjmbre_state::screen_update_carjmbre(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- int offs, troffs, sx, sy, flipx, flipy;
-
- //colorram
- //76543210
- //x------- graphic bank
- //-xxx---- unused
- //----xxxx colour
-
- m_cj_tilemap->draw(screen, bitmap, cliprect, 0, 0);
-
- //spriteram[offs]
- //+0 y pos
- //+1 sprite number
- //+2
- //76543210
- //x------- flipy
- //-x------ flipx
- //--xx---- unused
- //----xxxx colour
- //+3 x pos
- for (offs = m_spriteram.bytes() - 4; offs >= 0; offs -= 4)
- {
- //before copying the sprites to spriteram the game reorders the first
- //sprite to last, sprite ordering is incorrect if this isn't undone
- troffs = (offs - 4 + m_spriteram.bytes()) % m_spriteram.bytes();
-
- //unused sprites are marked with ypos <= 0x02 (or >= 0xfd if screen flipped)
- if (m_spriteram[troffs] > 0x02 && m_spriteram[troffs] < 0xfd)
- {
- sx = m_spriteram[troffs + 3] - 7;
- sy = 241 - m_spriteram[troffs];
- flipx = (m_spriteram[troffs + 2] & 0x40) >> 6;
- flipy = (m_spriteram[troffs + 2] & 0x80) >> 7;
-
- if (m_flipscreen)
- {
- sx = (256 + (226 - sx)) % 256;
- sy = 242 - sy;
- flipx = !flipx;
- flipy = !flipy;
- }
-
- m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
- m_spriteram[troffs + 1],
- m_spriteram[troffs + 2] & 0xf,
- flipx,flipy,
- sx,sy,0);
- }
- }
- return 0;
-}
diff --git a/src/mame/video/flower.cpp b/src/mame/video/flower.cpp
deleted file mode 100644
index b7fee29475b..00000000000
--- a/src/mame/video/flower.cpp
+++ /dev/null
@@ -1,192 +0,0 @@
-// license:???
-// copyright-holders:insideoutboy, David Haywood, Stephh
-/* Flower Video Hardware */
-
-#include "emu.h"
-#include "includes/flower.h"
-
-
-void flower_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect )
-{
- gfx_element *gfx = m_gfxdecode->gfx(1);
- UINT8 *source = m_spriteram + 0x200;
- UINT8 *finish = source - 0x200;
-
- source -= 8;
-
- while( source>=finish )
- {
- int xblock,yblock;
- int sy = 256-32-source[0]+1;
- int sx = (source[4]|(source[5]<<8))-55;
- int code = source[1] & 0x3f;
- int color = (source[6]>>4);
-
- /*
- Byte 0: Y
- Byte 1:
- 0x80 - FlipY
- 0x40 - FlipX
- 0x3f - Tile
- Byte 2:
- 0x08 - Tile MSB
- 0x01 - Tile MSB
- Byte 3:
- 0x07 - X Zoom
- 0x08 - X Size
- 0x70 - Y Zoom
- 0x80 - Y Size
- Byte 4: X LSB
- Byte 5: X MSB
- Byte 6:
- 0xf0 - Colour
- */
-
- int flipy = source[1] & 0x80;
- int flipx = source[1] & 0x40;
-
- int size = source[3];
-
- int xsize = ((size & 0x08)>>3);
- int ysize = ((size & 0x80)>>7);
-
- xsize++;
- ysize++;
-
- if (ysize==2) sy -= 16;
-
- code |= ((source[2] & 0x01) << 6);
- code |= ((source[2] & 0x08) << 4);
-
- if(flip_screen())
- {
- flipx = !flipx;
- flipy = !flipy;
- sx = sx+16;
- sy = 250-sy;
-
- if (ysize==2) sy += 16;
- }
-
- for (xblock = 0; xblock<xsize; xblock++)
- {
- int xoffs=!flipx ? (xblock*8) : ((xsize-xblock-1)*8);
- int zoomx=((size&7)+1)<<13;
- int zoomy=((size&0x70)+0x10)<<9;
- int xblocksizeinpixels=(zoomx*16)>>16;
- int yblocksizeinpixels=(zoomy*16)>>16;
-
- for (yblock = 0; yblock<ysize; yblock++)
- {
- int yoffs=!flipy ? yblock : (ysize-yblock-1);
- int sxoffs=(16-xblocksizeinpixels)/2;
- int syoffs=(16-yblocksizeinpixels)/2;
- if (xblock) sxoffs+=xblocksizeinpixels;
- if (yblock) syoffs+=yblocksizeinpixels;
-
- gfx->zoom_transpen(bitmap,cliprect,
- code+yoffs+xoffs,
- color,
- flipx,flipy,
- sx+sxoffs,sy+syoffs,
- zoomx,zoomy,15);
- }
- }
- source -= 8;
- }
-
-}
-
-TILE_GET_INFO_MEMBER(flower_state::get_bg0_tile_info)
-{
- int code = m_bg0ram[tile_index];
- int color = m_bg0ram[tile_index+0x100];
- /* Todo - may be tile flip bits? */
-
- SET_TILE_INFO_MEMBER(2, code, color>>4, 0);
-}
-
-TILE_GET_INFO_MEMBER(flower_state::get_bg1_tile_info)
-{
- int code = m_bg1ram[tile_index];
- int color = m_bg1ram[tile_index+0x100];
- /* Todo - may be tile flip bits? */
-
- SET_TILE_INFO_MEMBER(2, code, color>>4, 0);
-}
-
-TILE_GET_INFO_MEMBER(flower_state::get_text_tile_info)
-{
- int code = m_textram[tile_index];
- int color = m_textram[tile_index+0x400];
- /* Todo - may be tile flip bits? */
-
- SET_TILE_INFO_MEMBER(0, code, color>>2, 0);
-}
-
-void flower_state::video_start()
-{
- m_bg0_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(flower_state::get_bg0_tile_info),this), TILEMAP_SCAN_ROWS,16,16,16,16);
- m_bg1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(flower_state::get_bg1_tile_info),this), TILEMAP_SCAN_ROWS,16,16,16,16);
- m_text_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(flower_state::get_text_tile_info),this),TILEMAP_SCAN_ROWS, 8, 8,32,32);
- m_text_right_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(flower_state::get_text_tile_info),this),TILEMAP_SCAN_COLS, 8, 8, 2,32);
-
- m_bg1_tilemap->set_transparent_pen(15);
- m_text_tilemap->set_transparent_pen(3);
- m_text_right_tilemap->set_transparent_pen(3);
-
- m_text_tilemap->set_scrolly(0, 16);
- m_text_right_tilemap->set_scrolly(0, 16);
-}
-
-UINT32 flower_state::screen_update_flower(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- rectangle myclip = cliprect;
-
- m_bg0_tilemap->set_scrolly(0, m_bg0_scroll[0]+16);
- m_bg1_tilemap->set_scrolly(0, m_bg1_scroll[0]+16);
-
- m_bg0_tilemap->draw(screen, bitmap, cliprect, 0,0);
- m_bg1_tilemap->draw(screen, bitmap, cliprect, 0,0);
-
- draw_sprites(bitmap,cliprect);
-
- if(flip_screen())
- {
- myclip.min_x = cliprect.min_x;
- myclip.max_x = cliprect.min_x + 15;
- }
- else
- {
- myclip.min_x = cliprect.max_x - 15;
- myclip.max_x = cliprect.max_x;
- }
-
- m_text_tilemap->draw(screen, bitmap, cliprect, 0,0);
- m_text_right_tilemap->draw(screen, bitmap, myclip, 0,0);
- return 0;
-}
-
-WRITE8_MEMBER(flower_state::flower_textram_w)
-{
- m_textram[offset] = data;
- m_text_tilemap->mark_tile_dirty(offset);
- m_text_right_tilemap->mark_all_dirty();
-}
-
-WRITE8_MEMBER(flower_state::flower_bg0ram_w)
-{
- m_bg0ram[offset] = data;
- m_bg0_tilemap->mark_tile_dirty(offset & 0x1ff);
-}
-
-WRITE8_MEMBER(flower_state::flower_bg1ram_w)
-{
- m_bg1ram[offset] = data;
- m_bg1_tilemap->mark_tile_dirty(offset & 0x1ff);
-}
-
-WRITE8_MEMBER(flower_state::flower_flipscreen_w)
-{
- flip_screen_set(data);
-}
diff --git a/src/mame/video/galastrm.cpp b/src/mame/video/galastrm.cpp
index b2841777249..0bda7291482 100644
--- a/src/mame/video/galastrm.cpp
+++ b/src/mame/video/galastrm.cpp
@@ -1,4 +1,4 @@
-// license:???
+// license:BSD-3-Clause
// copyright-holders:Hau
#include "emu.h"
#include "includes/galastrm.h"
diff --git a/src/mame/video/igs017_igs031.cpp b/src/mame/video/igs017_igs031.cpp
index 8e8993e0fa7..9708d4413e8 100644
--- a/src/mame/video/igs017_igs031.cpp
+++ b/src/mame/video/igs017_igs031.cpp
@@ -374,7 +374,7 @@ int igs017_igs031_device::debug_viewer(bitmap_ind16 &bitmap,const rectangle &cli
popmessage("a: %08X w: %03X p: %02x-%02x-%02x",a,w,m_sprites_gfx[a/3*3+0],m_sprites_gfx[a/3*3+1],m_sprites_gfx[a/3*3+2]);
m_debug_addr = a;
m_debug_width = w;
- osd_sleep(200000);
+ osd_sleep(osd_ticks_per_second() / 1000 * 200);
return 1;
}
#endif
diff --git a/src/mame/video/n64.cpp b/src/mame/video/n64.cpp
index b80d22785ad..85033978fca 100644
--- a/src/mame/video/n64.cpp
+++ b/src/mame/video/n64.cpp
@@ -174,7 +174,7 @@ void n64_periphs::video_update(bitmap_rgb32 &bitmap)
}
else
{
- field = 1;
+ field = 0;
}
switch(vi_control & 0x3)
diff --git a/src/mame/video/newbrain.cpp b/src/mame/video/newbrain.cpp
index 8e6b9f0cc7a..3b39e206397 100644
--- a/src/mame/video/newbrain.cpp
+++ b/src/mame/video/newbrain.cpp
@@ -180,14 +180,14 @@ GFXDECODE_END
MACHINE_CONFIG_FRAGMENT( newbrain_video )
MCFG_DEFAULT_LAYOUT(layout_newbrain)
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DRIVER(newbrain_state, screen_update)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(640, 250)
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", newbrain)
MACHINE_CONFIG_END
diff --git a/src/mame/video/osi.cpp b/src/mame/video/osi.cpp
index 94dd155454b..eea0822be61 100644
--- a/src/mame/video/osi.cpp
+++ b/src/mame/video/osi.cpp
@@ -153,7 +153,7 @@ MACHINE_CONFIG_FRAGMENT( osi600_video )
MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0, 32*8-1)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
MACHINE_CONFIG_FRAGMENT( uk101_video )
@@ -164,7 +164,7 @@ MACHINE_CONFIG_FRAGMENT( uk101_video )
MCFG_SCREEN_VISIBLE_AREA(0, 64*8-1, 0, 16*16-1)
MCFG_SCREEN_PALETTE("palette")
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
MACHINE_CONFIG_FRAGMENT( osi630_video )
diff --git a/src/mame/video/pc_t1t.cpp b/src/mame/video/pc_t1t.cpp
index b5931d4daba..8c7b2fafdfd 100644
--- a/src/mame/video/pc_t1t.cpp
+++ b/src/mame/video/pc_t1t.cpp
@@ -49,13 +49,14 @@ pc_t1t_device::pc_t1t_device(const machine_config &mconfig, device_type type, co
m_display_enable(0),
m_vsync(0),
m_palette_base(0),
- m_palette(*this,"palette")
+ m_palette(*this,"palette"),
+ m_ram(*this, ":" RAM_TAG),
+ m_vram(*this, "vram")
{
}
pcvideo_t1000_device::pcvideo_t1000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : pc_t1t_device(mconfig, PCVIDEO_T1000, "Tandy 1000 Graphics Adapter", tag, owner, clock, "tandy_1000_graphics_adapter", __FILE__),
- m_t1_displayram(nullptr)
+ : pc_t1t_device(mconfig, PCVIDEO_T1000, "Tandy 1000 Graphics Adapter", tag, owner, clock, "tandy_1000_graphics_adapter", __FILE__)
{
}
@@ -68,24 +69,35 @@ pcvideo_pcjr_device::pcvideo_pcjr_device(const machine_config &mconfig, const ch
void pcvideo_t1000_device::device_start()
{
+ if(!m_ram->started())
+ throw device_missing_dependencies();
m_chr_gen = machine().root_device().memregion("gfx1")->base();
m_bank = 0;
m_chr_size = 1;
m_ra_offset = 256;
+ m_vram->space(AS_0).install_ram(0, 128*1024 - 1, m_ram->pointer());
}
void pcvideo_pcjr_device::device_start()
{
+ if(!m_ram->started())
+ throw device_missing_dependencies();
m_chr_gen = machine().root_device().memregion("gfx1")->base();
m_bank = 0;
m_mode_control = 0x08;
m_chr_size = 8;
m_ra_offset = 1;
if(!strncmp(machine().system().name, "ibmpcjx", 7))
+ {
m_jxkanji = machine().root_device().memregion("kanji")->base();
+ m_vram->space(AS_0).install_ram(0, 128*1024 - 1, memshare(":vram")->ptr()); // TODO: fix when this is really understood
+ }
else
+ {
m_jxkanji = nullptr;
+ m_vram->space(AS_0).install_ram(0, 128*1024 - 1, m_ram->pointer());
+ }
}
@@ -95,6 +107,11 @@ void pcvideo_pcjr_device::device_start()
***************************************************************************/
+static ADDRESS_MAP_START(vram_map, AS_0, 8, pcvideo_t1000_device)
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x20000, 0x3ffff) AM_NOP
+ADDRESS_MAP_END
+
MACHINE_CONFIG_FRAGMENT( pcvideo_t1000 )
MCFG_SCREEN_ADD(T1000_SCREEN_NAME, RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL_14_31818MHz,912,0,640,262,0,200)
@@ -109,6 +126,13 @@ MACHINE_CONFIG_FRAGMENT( pcvideo_t1000 )
MCFG_MC6845_UPDATE_ROW_CB(pc_t1t_device, crtc_update_row)
MCFG_MC6845_OUT_DE_CB(WRITELINE(pc_t1t_device, t1000_de_changed))
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(pcvideo_t1000_device, t1000_vsync_changed))
+
+ MCFG_DEVICE_ADD("vram", ADDRESS_MAP_BANK, 0)
+ MCFG_DEVICE_PROGRAM_MAP(vram_map)
+ MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
+ MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
+ MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(18)
+ MCFG_ADDRESS_MAP_BANK_STRIDE(0x4000)
MACHINE_CONFIG_END
machine_config_constructor pcvideo_t1000_device::device_mconfig_additions() const
@@ -116,7 +140,6 @@ machine_config_constructor pcvideo_t1000_device::device_mconfig_additions() cons
return MACHINE_CONFIG_NAME( pcvideo_t1000 );
}
-
MACHINE_CONFIG_FRAGMENT( pcvideo_pcjr )
MCFG_SCREEN_ADD(T1000_SCREEN_NAME, RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL_14_31818MHz,912,0,640,262,0,200)
@@ -131,6 +154,12 @@ MACHINE_CONFIG_FRAGMENT( pcvideo_pcjr )
MCFG_MC6845_UPDATE_ROW_CB(pcvideo_pcjr_device, crtc_update_row)
MCFG_MC6845_OUT_DE_CB(WRITELINE(pc_t1t_device, t1000_de_changed))
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(pcvideo_pcjr_device, pcjr_vsync_changed))
+ MCFG_DEVICE_ADD("vram", ADDRESS_MAP_BANK, 0)
+ MCFG_DEVICE_PROGRAM_MAP(vram_map)
+ MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
+ MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
+ MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(18)
+ MCFG_ADDRESS_MAP_BANK_STRIDE(0x4000)
MACHINE_CONFIG_END
machine_config_constructor pcvideo_pcjr_device::device_mconfig_additions() const
@@ -474,22 +503,6 @@ MC6845_UPDATE_ROW( pcvideo_pcjr_device::crtc_update_row )
}
-READ8_MEMBER( pcvideo_t1000_device::videoram_r )
-{
- UINT8 *videoram = m_t1_displayram;
- int data = 0xff;
- if( videoram )
- data = videoram[offset];
- return data;
-}
-
-WRITE8_MEMBER( pcvideo_t1000_device::videoram_w )
-{
- UINT8 *videoram = m_t1_displayram;
- if( videoram )
- videoram[offset] = data;
-}
-
void pcvideo_t1000_device::mode_switch( void )
{
switch( m_mode_control & 0x3B )
@@ -798,78 +811,66 @@ int pc_t1t_device::vga_data_r(void)
*/
void pcvideo_t1000_device::bank_w(int data)
{
- if (m_bank != data)
+ int dram, vram;
+ if ((data&0xc0)==0xc0) /* needed for lemmings */
{
- UINT8 *ram = machine().root_device().memregion("maincpu")->base();
- int dram, vram;
- m_bank = data;
- /* it seems the video ram is mapped to the last 128K of main memory */
-#if 1
- if ((data&0xc0)==0xc0) /* needed for lemmings */
- {
- dram = 0x80000 + ((data & 0x06) << 14);
- vram = 0x80000 + ((data & 0x30) << (14-3));
- }
- else
- {
- dram = 0x80000 + ((data & 0x07) << 14);
- vram = 0x80000 + ((data & 0x38) << (14-3));
- }
-#else
- dram = (data & 0x07) << 14;
- vram = (data & 0x38) << (14-3);
-#endif
- m_t1_displayram = &ram[vram];
- m_displayram = &ram[dram];
- mode_switch();
+ dram = (m_bank & 0x06);// | ((m_bank & 0x1800) >> 8);
+ vram = ((m_bank & 0x30) >> 3);// | ((m_bank & 0x6000) >> 10);
+ }
+ else
+ {
+ dram = (m_bank & 0x07);// | ((m_bank & 0x1800) >> 8);
+ vram = ((m_bank & 0x38) >> 3);// | ((m_bank & 0x6000) >> 10);
}
+ m_displayram = m_ram->pointer() + (dram << 14);
+ if(m_disable)
+ return;
+ m_vram->set_bank(vram);
+ if((m_bank & 0xc0) != (data & 0xc0))
+ mode_switch();
}
void pcvideo_pcjr_device::pc_pcjr_bank_w(int data)
{
- if (m_bank != data)
+ int dram, vram;
+ m_bank = data;
+ /* it seems the video ram is mapped to the last 128K of main memory */
+ if ((data&0xc0)==0xc0) /* needed for lemmings */
{
- int dram, vram;
- m_bank = data;
- /* it seems the video ram is mapped to the last 128K of main memory */
- if ((data&0xc0)==0xc0) /* needed for lemmings */
- {
- dram = ((data & 0x06) << 14);
- vram = ((data & 0x30) << (14-3));
- }
- else
- {
- dram = ((data & 0x07) << 14);
- vram = ((data & 0x38) << (14-3));
- }
- machine().root_device().membank( "bank14" )->set_base( machine().device<ram_device>(RAM_TAG)->pointer() + vram );
- m_displayram = machine().device<ram_device>(RAM_TAG)->pointer() + dram;
- pc_pcjr_mode_switch();
+ dram = (data & 0x06);
+ vram = (data & 0x30) >> 3;
}
+ else
+ {
+ dram = (data & 0x07);
+ vram = (data & 0x38) >> 3;
+ }
+ m_vram->set_bank(vram);
+ m_displayram = m_ram->pointer() + (dram << 14);
+ if((m_bank & 0xc0) != (data & 0xc0))
+ pc_pcjr_mode_switch();
}
void pcvideo_pcjr_device::pc_pcjx_bank_w(int data)
{
- if (m_bank != data)
+ int dram, vram;
+ m_bank = data;
+ if ((data&0xc0)==0xc0) /* needed for lemmings */
{
- int dram, vram;
- m_bank = data;
- /* this probably isn't right, but otherwise the memory test stomps on the vram */
- if ((data&0xc0)==0xc0) /* needed for lemmings */
- {
- dram = 0x80000 + ((data & 0x06) << 14);
- vram = 0x80000 + ((data & 0x30) << (14-3));
- }
- else
- {
- dram = 0x80000 + ((data & 0x07) << 14);
- vram = 0x80000 + ((data & 0x38) << (14-3));
- }
- machine().root_device().membank( "bank14" )->set_base( machine().device<ram_device>(RAM_TAG)->pointer() + vram );
- m_displayram = machine().device<ram_device>(RAM_TAG)->pointer() + dram;
- pc_pcjr_mode_switch();
+ dram = (data & 0x06);
+ vram = (data & 0x30) >> 3;
+ }
+ else
+ {
+ dram = (data & 0x07);
+ vram = (data & 0x38) >> 3;
}
+ m_vram->set_bank(vram);
+ /* this certainly isn't correct but otherwise the memory test stomps on the vram */
+ m_displayram = (UINT8 *)memshare(":vram")->ptr() + (dram << 14);
+ if((m_bank & 0xc0) != (data & 0xc0))
+ pc_pcjr_mode_switch();
}
int pc_t1t_device::bank_r(void)
@@ -909,17 +910,19 @@ WRITE8_MEMBER( pcvideo_t1000_device::write )
case 12:
break;
case 13:
+ m_bank = (data << 8) | (m_bank & 0xff);
+ bank_w(m_bank);
break;
case 14:
vga_data_w(data);
break;
case 15:
+ m_bank = (m_bank & 0xff00) | data;
bank_w(data);
break;
}
}
-
WRITE8_MEMBER( pcvideo_pcjr_device::write )
{
switch( offset )
@@ -1005,7 +1008,6 @@ READ8_MEMBER( pc_t1t_device::read )
return data;
}
-
WRITE_LINE_MEMBER( pc_t1t_device::t1000_de_changed )
{
m_display_enable = state ? 1 : 0;
@@ -1021,6 +1023,14 @@ WRITE_LINE_MEMBER( pcvideo_t1000_device::t1000_vsync_changed )
}
}
+WRITE_LINE_MEMBER( pcvideo_t1000_device::disable_w )
+{
+ if(state)
+ m_vram->set_bank(8);
+ else
+ bank_w(m_bank);
+ m_disable = state ? true : false;
+}
WRITE_LINE_MEMBER( pcvideo_pcjr_device::pcjr_vsync_changed )
{
diff --git a/src/mame/video/pc_t1t.h b/src/mame/video/pc_t1t.h
index 7dc6f981762..34839955b95 100644
--- a/src/mame/video/pc_t1t.h
+++ b/src/mame/video/pc_t1t.h
@@ -4,6 +4,8 @@
#define PC_T1T_H
#include "video/mc6845.h"
+#include "machine/ram.h"
+#include "machine/bankdev.h"
#define T1000_SCREEN_NAME "screen"
#define T1000_MC6845_NAME "mc6845_t1000"
@@ -39,6 +41,7 @@ public:
DECLARE_PALETTE_INIT( pcjr );
DECLARE_WRITE_LINE_MEMBER( t1000_de_changed );
+ DECLARE_READ8_MEMBER( read );
virtual MC6845_UPDATE_ROW( crtc_update_row );
MC6845_UPDATE_ROW( t1000_text_inten_update_row );
@@ -48,13 +51,14 @@ public:
MC6845_UPDATE_ROW( t1000_gfx_2bpp_tga_update_row );
MC6845_UPDATE_ROW( t1000_gfx_1bpp_update_row );
+protected:
required_device<mc6845_device> m_mc6845;
UINT8 m_mode_control, m_color_select;
UINT8 m_status;
struct reg m_reg;
- UINT8 m_bank;
+ UINT16 m_bank;
int m_pc_framecnt;
@@ -80,8 +84,9 @@ public:
int vga_data_r(void);
int bank_r(void);
- DECLARE_READ8_MEMBER( read );
required_device<palette_device> m_palette;
+ required_device<ram_device> m_ram;
+ required_device<address_map_bank_device> m_vram;
};
class pcvideo_t1000_device : public pc_t1t_device
@@ -91,20 +96,19 @@ public:
pcvideo_t1000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
DECLARE_WRITE8_MEMBER( write );
- DECLARE_READ8_MEMBER( videoram_r );
- DECLARE_WRITE8_MEMBER( videoram_w );
DECLARE_WRITE_LINE_MEMBER( t1000_vsync_changed );
+ DECLARE_WRITE_LINE_MEMBER( disable_w );
protected:
virtual machine_config_constructor device_mconfig_additions() const override;
virtual void device_start() override;
private:
- UINT8 *m_t1_displayram;
void mode_switch( void );
void vga_data_w(int data);
void bank_w(int data);
void mode_control_w(int data);
+ bool m_disable;
};
extern const device_type PCVIDEO_T1000;
diff --git a/src/mame/video/pcd.cpp b/src/mame/video/pcd.cpp
index d8c6d2b95e5..66d4b288347 100644
--- a/src/mame/video/pcd.cpp
+++ b/src/mame/video/pcd.cpp
@@ -160,7 +160,7 @@ static MACHINE_CONFIG_FRAGMENT( pcx_video )
MCFG_SCREEN_UPDATE_DEVICE("crtc", scn2674_device, screen_update)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", pcx)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_SCN2674_VIDEO_ADD("crtc", 0, INPUTLINE("graphics", MCS51_INT0_LINE));
MCFG_SCN2674_TEXT_CHARACTER_WIDTH(8)
diff --git a/src/mame/video/poisk1.cpp b/src/mame/video/poisk1.cpp
deleted file mode 100644
index 6f2a102bde4..00000000000
--- a/src/mame/video/poisk1.cpp
+++ /dev/null
@@ -1,322 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Sergey Svishchev
-/*
- * Poisk-1 does not have a real mc6845 and always runs in graphics mode.
- * Text mode is emulated by BIOS.
- * Video RAM in native graphics mode starts at 0xB8000, in emulated text mode -- at 0xBC000.
- */
-
-#include "emu.h"
-
-#include "includes/poisk1.h"
-
-#define CGA_PALETTE_SETS 83
-/* one for colour, one for mono, 81 for colour composite */
-
-#include "video/cgapal.h"
-
-#define BG_COLOR(x) (((x) & 7)|(((x) & 0x10) >> 1))
-
-#define VERBOSE_DBG 0
-
-#define DBG_LOG(N,M,A) \
- do { \
- if(VERBOSE_DBG>=N) \
- { \
- if( M ) \
- logerror("%11.6f: %-24s",machine().time().as_double(),(char*)M ); \
- logerror A; \
- } \
- } while (0)
-
-//
-
-/*
- * Poisk-1 doesn't have a mc6845 and always runs in graphics mode. Text mode is emulated by BIOS;
- * NMI is triggered on access to video memory and to mc6845 ports. Address and data are latched into:
- *
- * Port 28H (offset 0) -- lower 8 bits of address
- * Port 29H (offset 1) -- high -//- and mode bits
- * Port 2AH (offset 2) -- data
- */
-
-READ8_MEMBER(p1_state::p1_trap_r)
-{
- UINT8 data = m_video.trap[offset];
- DBG_LOG(1,"trap",("R %.2x $%02x\n", 0x28+offset, data));
- if (offset == 0)
- m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
- return data;
-}
-
-WRITE8_MEMBER(p1_state::p1_trap_w)
-{
- DBG_LOG(1,"trap",("W %.2x $%02x\n", 0x28+offset, data));
-}
-
-READ8_MEMBER(p1_state::p1_cga_r)
-{
- m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
- return 0;
-}
-
-WRITE8_MEMBER(p1_state::p1_cga_w)
-{
- UINT16 port = offset + 0x3d0;
-
- DBG_LOG(1,"cga",("W %.4x $%02x\n", port, data));
- m_video.trap[2] = data;
- m_video.trap[1] = 0xC0 | ((port >> 8) & 0x3f);
- m_video.trap[0] = port & 255;
- m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
-}
-
-WRITE8_MEMBER(p1_state::p1_vram_w)
-{
- DBG_LOG(1,"vram",("W %.4x $%02x\n", offset, data));
- if (m_video.videoram_base)
- m_video.videoram_base[offset] = data;
- m_video.trap[2] = data;
- m_video.trap[1] = 0x80 | ((offset >> 8) & 0x3f);
- m_video.trap[0] = offset & 255;
- m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
-}
-
-// CGA emulator
-/*
-068h D42 0..2 R, G, B XXX Foreground/Background color
- 3 NMI DISABLE NMI trap 1: Disabled 0: Enabled
- 4 PALETTE XXX Colour palette 0: XXX 1: XXX
- 5 I (INTENS) XXX Foreground/Background color intensity
- 6 DISPLAY BANK XXX Video RAM page
- 7 HIRES 1: 640x200 0: 320x200
-*/
-
-WRITE8_MEMBER(p1_state::p1_ppi2_porta_w)
-{
- address_space &space_prg = m_maincpu->space(AS_PROGRAM);
-
- DBG_LOG(1,"color_select_68",("W $%02x\n", data));
-
- // NMI DISABLE
- if (BIT(data, 3) != BIT(m_video.color_select_68, 3)) {
- if (BIT(data, 3)) {
- space_prg.install_readwrite_bank( 0xb8000, 0xbbfff, "bank11" );
- } else {
- space_prg.install_read_bank( 0xb8000, 0xbbfff, "bank11" );
- space_prg.install_write_handler( 0xb8000, 0xbbfff, WRITE8_DELEGATE(p1_state, p1_vram_w) );
- }
- }
- // DISPLAY BANK
- if (BIT(data, 6) != BIT(m_video.color_select_68, 6)) {
- if (BIT(data, 6))
- m_video.videoram = m_video.videoram_base.get() + 0x4000;
- else
- m_video.videoram = m_video.videoram_base.get();
- }
- // HIRES -- XXX
- if (BIT(data, 7) != BIT(m_video.color_select_68, 7)) {
- if (BIT(data, 7))
- machine().first_screen()->set_visible_area(0, 640-1, 0, 200-1);
- else
- machine().first_screen()->set_visible_area(0, 320-1, 0, 200-1);
- }
- m_video.color_select_68 = data;
- set_palette_luts();
-}
-
-/*
-06Ah Dxx 6 Enable/Disable color burst (?)
- 7 Enable/Disable D7H/D7L
-*/
-
-WRITE8_MEMBER(p1_state::p1_ppi_portc_w)
-{
- DBG_LOG(1,"mode_control_6a",("W $%02x\n", data));
-
- m_video.mode_control_6a = data;
- set_palette_luts();
-}
-
-void p1_state::set_palette_luts(void)
-{
- /* Setup 2bpp palette lookup table */
- // HIRES
- if ( m_video.color_select_68 & 0x80 )
- {
- m_video.palette_lut_2bpp[0] = 0;
- }
- else
- {
- m_video.palette_lut_2bpp[0] = BG_COLOR(m_video.color_select_68);
- }
- // B&W -- XXX
-/*
- if ( m_video.mode_control_6a & 0x40 )
- {
- m_video.palette_lut_2bpp[1] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 3;
- m_video.palette_lut_2bpp[2] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 4;
- m_video.palette_lut_2bpp[3] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 7;
- }
- else
-*/
- {
- // PALETTE
- if ( m_video.color_select_68 & 0x20 )
- {
- m_video.palette_lut_2bpp[1] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 3;
- m_video.palette_lut_2bpp[2] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 5;
- m_video.palette_lut_2bpp[3] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 7;
- }
- else
- {
- m_video.palette_lut_2bpp[1] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 2;
- m_video.palette_lut_2bpp[2] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 4;
- m_video.palette_lut_2bpp[3] = ( ( m_video.color_select_68 & 0x20 ) >> 2 ) | 6;
- }
- }
-}
-
-/***************************************************************************
- Draw graphics mode with 320x200 pixels (default) with 2 bits/pixel.
- Even scanlines are from CGA_base + 0x0000, odd from CGA_base + 0x2000
- cga fetches 2 byte per mc6845 access.
-***************************************************************************/
-
-POISK1_UPDATE_ROW( p1_state::cga_gfx_2bpp_update_row )
-{
- const rgb_t *palette = m_palette->palette()->entry_list_raw();
- UINT32 *p = &bitmap.pix32(ra);
- UINT16 odd, offset;
- int i;
-
- if ( ra == 0 ) DBG_LOG(1,"cga_gfx_2bpp_update_row",("\n"));
- odd = ( ra & 1 ) << 13;
- offset = ( ma & 0x1fff ) | odd;
- for ( i = 0; i < stride; i++ )
- {
- UINT8 data = videoram[ offset++ ];
-
- *p = palette[m_video.palette_lut_2bpp[ ( data >> 6 ) & 0x03 ]]; p++;
- *p = palette[m_video.palette_lut_2bpp[ ( data >> 4 ) & 0x03 ]]; p++;
- *p = palette[m_video.palette_lut_2bpp[ ( data >> 2 ) & 0x03 ]]; p++;
- *p = palette[m_video.palette_lut_2bpp[ data & 0x03 ]]; p++;
- }
-}
-
-/***************************************************************************
- Draw graphics mode with 640x200 pixels (default).
- The cell size is 1x1 (1 scanline is the real default)
- Even scanlines are from CGA_base + 0x0000, odd from CGA_base + 0x2000
-***************************************************************************/
-
-POISK1_UPDATE_ROW( p1_state::cga_gfx_1bpp_update_row )
-{
- const rgb_t *palette = m_palette->palette()->entry_list_raw();
- UINT32 *p = &bitmap.pix32(ra);
- UINT8 fg = 15, bg = BG_COLOR(m_video.color_select_68);
- UINT16 odd, offset;
- int i;
-
- if ( ra == 0 ) DBG_LOG(1,"cga_gfx_1bpp_update_row",("bg %d\n", bg));
- odd = ( ra & 1 ) << 13;
- offset = ( ma & 0x1fff ) | odd;
- for ( i = 0; i < stride; i++ )
- {
- UINT8 data = videoram[ offset++ ];
-
- *p = palette[( data & 0x80 ) ? fg : bg ]; p++;
- *p = palette[( data & 0x40 ) ? fg : bg ]; p++;
- *p = palette[( data & 0x20 ) ? fg : bg ]; p++;
- *p = palette[( data & 0x10 ) ? fg : bg ]; p++;
- *p = palette[( data & 0x08 ) ? fg : bg ]; p++;
- *p = palette[( data & 0x04 ) ? fg : bg ]; p++;
- *p = palette[( data & 0x02 ) ? fg : bg ]; p++;
- *p = palette[( data & 0x01 ) ? fg : bg ]; p++;
- }
-}
-
-/***************************************************************************
- Draw graphics mode with 640x200 pixels + extra highlight color for text
- mode emulation
- Even scanlines are from CGA_base + 0x0000, odd from CGA_base + 0x2000
-***************************************************************************/
-
-POISK1_UPDATE_ROW( p1_state::poisk1_gfx_1bpp_update_row )
-{
- const rgb_t *palette = m_palette->palette()->entry_list_raw();
- UINT32 *p = &bitmap.pix32(ra);
- UINT8 fg, bg = BG_COLOR(m_video.color_select_68);
- UINT16 odd, offset;
- int i;
-
- if ( ra == 0 ) DBG_LOG(1,"poisk1_gfx_1bpp_update_row",("bg %d\n", bg));
- odd = ( ra & 1 ) << 13;
- offset = ( ma & 0x1fff ) | odd;
- for ( i = 0; i < stride; i++ )
- {
- UINT8 data = videoram[ offset++ ];
-
- fg = (data & 0x80) ? ( (m_video.color_select_68 & 0x20) ? 10 : 11 ) : 15; // XXX
- *p = palette[bg]; p++;
- *p = palette[( data & 0x40 ) ? fg : bg ]; p++;
- *p = palette[( data & 0x20 ) ? fg : bg ]; p++;
- *p = palette[( data & 0x10 ) ? fg : bg ]; p++;
- *p = palette[( data & 0x08 ) ? fg : bg ]; p++;
- *p = palette[( data & 0x04 ) ? fg : bg ]; p++;
- *p = palette[( data & 0x02 ) ? fg : bg ]; p++;
- *p = palette[( data & 0x01 ) ? fg : bg ]; p++;
- }
-}
-
-/* Initialise the cga palette */
-PALETTE_INIT_MEMBER(p1_state, p1)
-{
- int i;
-
- DBG_LOG(0,"init",("palette_init()\n"));
-
- for ( i = 0; i < CGA_PALETTE_SETS * 16; i++ )
- {
- palette.set_pen_color(i, cga_palette[i][0], cga_palette[i][1], cga_palette[i][2] );
- }
-}
-
-void p1_state::video_start()
-{
- address_space &space = m_maincpu->space( AS_PROGRAM );
-
- DBG_LOG(0,"init",("video_start()\n"));
-
- memset(&m_video, 0, sizeof(m_video));
- m_video.videoram_base = std::make_unique<UINT8[]>(0x8000);
- m_video.videoram = m_video.videoram_base.get();
- m_video.stride = 80;
-
- space.install_readwrite_bank(0xb8000, 0xbffff, "bank11" );
- machine().root_device().membank("bank11")->set_base(m_video.videoram);
-}
-
-UINT32 p1_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
-{
- UINT16 ra, ma = 0;
-
- if (!m_video.stride || !m_video.videoram) return 0;
-
- // bit 6 of 6Ah disables color burst -- not implemented
- for (ra = cliprect.min_y; ra <= cliprect.max_y; ra++)
- {
- if (BIT(m_video.color_select_68, 7)) {
- if (BIT(m_video.mode_control_6a, 7)) {
- cga_gfx_1bpp_update_row(bitmap, cliprect, m_video.videoram, ma, ra, m_video.stride);
- } else {
- poisk1_gfx_1bpp_update_row(bitmap, cliprect, m_video.videoram, ma, ra, m_video.stride);
- }
- } else {
- cga_gfx_2bpp_update_row(bitmap, cliprect, m_video.videoram, ma, ra, m_video.stride);
- }
- if (ra & 1) ma += m_video.stride;
- }
-
- return 0;
-}
diff --git a/src/mame/video/poisk1.h b/src/mame/video/poisk1.h
deleted file mode 100644
index 092de267b1e..00000000000
--- a/src/mame/video/poisk1.h
+++ /dev/null
@@ -1,10 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Sergey Svishchev
-#include "emu.h"
-
-#define CGA_PALETTE_SETS 83
-/* one for colour, one for mono, 81 for colour composite */
-
-INPUT_PORTS_EXTERN( pcvideo_poisk1 );
-
-MACHINE_CONFIG_EXTERN( pcvideo_poisk1 );
diff --git a/src/mame/video/popper.cpp b/src/mame/video/popper.cpp
deleted file mode 100644
index ccabc1263f5..00000000000
--- a/src/mame/video/popper.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-// license:???
-// copyright-holders:David Haywood,insideoutboy, Pierpaolo Prazzoli
-/***************************************************************************
-
- Popper
-
- Omori Electric CAD (OEC) 1983
-
-***************************************************************************/
-
-#include "emu.h"
-#include "video/resnet.h"
-#include "includes/popper.h"
-
-
-/***************************************************************************
- *
- * Color guns - from schematics
- *
- ***************************************************************************/
-
-static const res_net_decode_info popper_decode_info =
-{
- 1, // there may be two proms needed to construct color
- 0, // start at 0
- 63, // end at 255
- // R, G, B,
- { 0, 0, 0, }, // offsets
- { 0, 3, 6, }, // shifts
- {0x07,0x07,0x03, } // masks
-};
-
-static const res_net_info popper_net_info =
-{
- RES_NET_VCC_5V | RES_NET_VBIAS_5V | RES_NET_VIN_TTL_OUT,
- {
- { RES_NET_AMP_NONE, 0, 0, 3, { 1000, 470, 220 } },
- { RES_NET_AMP_NONE, 0, 0, 3, { 1000, 470, 220 } },
- { RES_NET_AMP_NONE, 0, 0, 2, { 470, 220, 0 } }
- }
-};
-
-PALETTE_INIT_MEMBER(popper_state, popper)
-{
- const UINT8 *color_prom = memregion("proms")->base();
- std::vector<rgb_t> rgb;
-
- compute_res_net_all(rgb, color_prom, popper_decode_info, popper_net_info);
- palette.set_pen_colors(0, rgb);
- palette.palette()->normalize_range(0, 63);
-}
-
-WRITE8_MEMBER(popper_state::popper_ol_videoram_w)
-{
- m_ol_videoram[offset] = data;
- m_ol_p123_tilemap->mark_tile_dirty(offset);
- m_ol_p0_tilemap->mark_tile_dirty(offset);
-}
-
-WRITE8_MEMBER(popper_state::popper_videoram_w)
-{
- m_videoram[offset] = data;
- m_p123_tilemap->mark_tile_dirty(offset);
- m_p0_tilemap->mark_tile_dirty(offset);
-}
-
-WRITE8_MEMBER(popper_state::popper_ol_attribram_w)
-{
- m_ol_attribram[offset] = data;
- m_ol_p123_tilemap->mark_tile_dirty(offset);
- m_ol_p0_tilemap->mark_tile_dirty(offset);
-}
-
-WRITE8_MEMBER(popper_state::popper_attribram_w)
-{
- m_attribram[offset] = data;
- m_p123_tilemap->mark_tile_dirty(offset);
- m_p0_tilemap->mark_tile_dirty(offset);
-}
-
-WRITE8_MEMBER(popper_state::popper_flipscreen_w)
-{
- m_flipscreen = data;
- machine().tilemap().set_flip_all(m_flipscreen ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0);
-
- if (m_flipscreen)
- m_tilemap_clip.min_x = m_tilemap_clip.max_x - 15;
- else
- m_tilemap_clip.max_x = 15;
-}
-
-WRITE8_MEMBER(popper_state::popper_e002_w)
-{
- m_e002 = data;
-}
-
-WRITE8_MEMBER(popper_state::popper_gfx_bank_w)
-{
- if (m_gfx_bank != data)
- {
- m_gfx_bank = data;
- machine().tilemap().mark_all_dirty();
- }
-}
-
-TILE_GET_INFO_MEMBER(popper_state::get_popper_p123_tile_info)
-{
- UINT32 tile_number = m_videoram[tile_index];
- UINT8 attr = m_attribram[tile_index];
- tile_number += m_gfx_bank << 8;
-
- SET_TILE_INFO_MEMBER(0,
- tile_number,
- (attr & 0xf),
- 0);
- tileinfo.group = (attr & 0x80) >> 7;
-}
-
-TILE_GET_INFO_MEMBER(popper_state::get_popper_p0_tile_info)
-{
- UINT32 tile_number = m_videoram[tile_index];
- UINT8 attr = m_attribram[tile_index];
- tile_number += m_gfx_bank << 8;
-
- //pen 0 only in front if colour set as well
- tileinfo.group = (attr & 0x70) ? ((attr & 0x80) >> 7) : 0;
-
- SET_TILE_INFO_MEMBER(0,
- tile_number,
- ((attr & 0x70) >> 4) + 8,
- 0);
-}
-
-TILE_GET_INFO_MEMBER(popper_state::get_popper_ol_p123_tile_info)
-{
- UINT32 tile_number = m_ol_videoram[tile_index];
- UINT8 attr = m_ol_attribram[tile_index];
- tile_number += m_gfx_bank << 8;
-
- SET_TILE_INFO_MEMBER(0,
- tile_number,
- (attr & 0xf),
- 0);
- tileinfo.group = (attr & 0x80) >> 7;
-}
-
-TILE_GET_INFO_MEMBER(popper_state::get_popper_ol_p0_tile_info)
-{
- UINT32 tile_number = m_ol_videoram[tile_index];
- UINT8 attr = m_ol_attribram[tile_index];
- tile_number += m_gfx_bank << 8;
-
- //pen 0 only in front if colour set as well
- tileinfo.group = (attr & 0x70) ? ((attr & 0x80) >> 7) : 0;
-
- SET_TILE_INFO_MEMBER(0,
- tile_number,
- ((attr & 0x70) >> 4) + 8,
- 0);
-}
-
-void popper_state::video_start()
-{
- m_p123_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(popper_state::get_popper_p123_tile_info),this), TILEMAP_SCAN_COLS, 8, 8, 33, 32 );
- m_p0_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(popper_state::get_popper_p0_tile_info),this), TILEMAP_SCAN_COLS, 8, 8, 33, 32);
- m_ol_p123_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(popper_state::get_popper_ol_p123_tile_info),this), TILEMAP_SCAN_COLS, 8, 8, 2, 32);
- m_ol_p0_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(popper_state::get_popper_ol_p0_tile_info),this), TILEMAP_SCAN_COLS, 8, 8, 2, 32);
-
- m_p123_tilemap->set_transmask(0, 0x0f, 0x01);
- m_p123_tilemap->set_transmask(1, 0x01, 0x0f);
- m_p0_tilemap->set_transmask(0, 0x0f, 0x0e);
- m_p0_tilemap->set_transmask(1, 0x0e, 0x0f);
- m_ol_p123_tilemap->set_transmask(0, 0x0f, 0x01);
- m_ol_p123_tilemap->set_transmask(1, 0x01, 0x0f);
- m_ol_p0_tilemap->set_transmask(0, 0x0f, 0x0e);
- m_ol_p0_tilemap->set_transmask(1, 0x0e, 0x0f);
-
- m_tilemap_clip = m_screen->visible_area();
-}
-
-void popper_state::draw_sprites( bitmap_ind16 &bitmap,const rectangle &cliprect )
-{
- int offs, sx, sy, flipx, flipy;
-
- for (offs = 0; offs < m_spriteram.bytes() - 4; offs += 4)
- {
- //if y position is in the current strip
- if (m_spriteram[offs + 1] && (((m_spriteram[offs] + (m_flipscreen ? 2 : 0)) & 0xf0) == (0x0f - offs / 0x80) << 4))
- {
- //offs y pos
- //offs+1 sprite number
- //offs+2
- //76543210
- //x------- flipy
- //-x------ flipx
- //--xx---- unused
- //----xxxx colour
- //offs+3 x pos
-
- sx = m_spriteram[offs + 3];
- sy = 240 - m_spriteram[offs];
- flipx = (m_spriteram[offs + 2] & 0x40) >> 6;
- flipy = (m_spriteram[offs + 2] & 0x80) >> 7;
-
- if (m_flipscreen)
- {
- sx = 248 - sx;
- sy = 242 - sy;
- flipx = !flipx;
- flipy = !flipy;
- }
-
- m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
- m_spriteram[offs + 1],
- (m_spriteram[offs + 2] & 0x0f),
- flipx,flipy,
- sx,sy,0);
- }
- }
-}
-
-UINT32 popper_state::screen_update_popper(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- rectangle finalclip = m_tilemap_clip;
- finalclip &= cliprect;
-
- //attribram
- //76543210
- //x------- draw over sprites
- //-xxx---- colour for pen 0 (from second prom?)
- //----xxxx colour for pens 1,2,3
-
- m_p123_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 0);
- m_p0_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 0);
- m_ol_p123_tilemap->draw(screen, bitmap, finalclip, TILEMAP_DRAW_LAYER1, 0);
- m_ol_p0_tilemap->draw(screen, bitmap, finalclip, TILEMAP_DRAW_LAYER1, 0);
-
- draw_sprites(bitmap, cliprect);
-
- m_p123_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 0);
- m_p0_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 0);
- m_ol_p123_tilemap->draw(screen, bitmap, finalclip, TILEMAP_DRAW_LAYER0, 0);
- m_ol_p0_tilemap->draw(screen, bitmap, finalclip, TILEMAP_DRAW_LAYER0, 0);
- return 0;
-}
diff --git a/src/mame/video/powervr2.cpp b/src/mame/video/powervr2.cpp
index 4907b985f86..1b68402c493 100644
--- a/src/mame/video/powervr2.cpp
+++ b/src/mame/video/powervr2.cpp
@@ -2010,7 +2010,7 @@ WRITE64_MEMBER( powervr2_device::ta_fifo_poly_w )
tafifo_buff[tafifo_pos]=(UINT32)data;
tafifo_buff[tafifo_pos+1]=(UINT32)(data >> 32);
#if DEBUG_FIFO_POLY
- osd_printf_debug("ta_fifo_poly_w: Unmapped write64 %08x = %" I64FMT "x -> %08x %08x\n", 0x10000000+offset*8, data, tafifo_buff[tafifo_pos], tafifo_buff[tafifo_pos+1]);
+ osd_printf_debug("%s",string_format("ta_fifo_poly_w: Unmapped write64 %08x = %I64x -> %08x %08x\n", 0x10000000+offset*8, data, tafifo_buff[tafifo_pos], tafifo_buff[tafifo_pos+1]).c_str());
#endif
tafifo_pos += 2;
}
diff --git a/src/mame/video/qdrmfgp.cpp b/src/mame/video/qdrmfgp.cpp
index ce98f259cc0..b86c9e12b5d 100644
--- a/src/mame/video/qdrmfgp.cpp
+++ b/src/mame/video/qdrmfgp.cpp
@@ -1,5 +1,5 @@
-// license:???
-// copyright-holders:Eisuke Watanabe
+// license:BSD-3-Clause
+// copyright-holders:Hau
/***************************************************************************
video.c
diff --git a/src/mame/video/snk68_spr.h b/src/mame/video/snk68_spr.h
index 8a0494e0a7b..088b6a97a45 100644
--- a/src/mame/video/snk68_spr.h
+++ b/src/mame/video/snk68_spr.h
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Bryan McPhail, Acho A. Tang, Nicola Salmoria
typedef device_delegate<void (int&, int&, int&, int&)> snk68_tile_indirection_delegate;
#define MCFG_SNK68_SPR_GFXDECODE(_gfxtag) \
diff --git a/src/mame/video/sprcros2.cpp b/src/mame/video/sprcros2.cpp
deleted file mode 100644
index a64da9bfafc..00000000000
--- a/src/mame/video/sprcros2.cpp
+++ /dev/null
@@ -1,187 +0,0 @@
-// license:???
-// copyright-holders:insideoutboy
-/*
-Super Cross II (JPN Ver.)
-(c)1986 GM Shoji
-*/
-
-#include "emu.h"
-#include "includes/sprcros2.h"
-
-
-PALETTE_INIT_MEMBER(sprcros2_state, sprcros2)
-{
- const UINT8 *color_prom = memregion("proms")->base();
- int i;
-
- /* create a lookup table for the palette */
- for (i = 0; i < 0x20; i++)
- {
- int bit0, bit1, bit2;
- int r, g, b;
-
- /* red component */
- bit0 = (color_prom[i] >> 0) & 0x01;
- bit1 = (color_prom[i] >> 1) & 0x01;
- bit2 = (color_prom[i] >> 2) & 0x01;
- r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
-
- /* green component */
- bit0 = (color_prom[i] >> 3) & 0x01;
- bit1 = (color_prom[i] >> 4) & 0x01;
- bit2 = (color_prom[i] >> 5) & 0x01;
- g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
-
- /* blue component */
- bit0 = (color_prom[i] >> 6) & 0x01;
- bit1 = (color_prom[i] >> 7) & 0x01;
- b = 0x47 * bit0 + 0xb8 * bit1;
- palette.set_pen_color(i,rgb_t(r,g,b));
-
- palette.set_indirect_color(i, rgb_t(r, g, b));
- }
-
- /* color_prom now points to the beginning of the lookup table */
- color_prom += 0x20;
-
- /* bg */
- for (i = 0; i < 0x100; i++)
- {
- UINT8 ctabentry = (color_prom[i] & 0x0f) | ((color_prom[i + 0x100] & 0x0f) << 4);
- palette.set_pen_indirect(i, ctabentry);
- }
-
- /* sprites & fg */
- for (i = 0x100; i < 0x300; i++)
- {
- UINT8 ctabentry = color_prom[i + 0x100];
- palette.set_pen_indirect(i, ctabentry);
- }
-}
-
-WRITE8_MEMBER(sprcros2_state::fgvideoram_w)
-{
- m_fgvideoram[offset] = data;
- m_fgtilemap->mark_tile_dirty(offset&0x3ff);
-}
-
-WRITE8_MEMBER(sprcros2_state::bgvideoram_w)
-{
- m_bgvideoram[offset] = data;
- m_bgtilemap->mark_tile_dirty(offset&0x3ff);
-}
-
-WRITE8_MEMBER(sprcros2_state::bgscrollx_w)
-{
- if(m_port7&0x02)
- m_bgtilemap->set_scrollx(0, 0x100-data);
- else
- m_bgtilemap->set_scrollx(0, data);
-}
-
-WRITE8_MEMBER(sprcros2_state::bgscrolly_w)
-{
- m_bgtilemap->set_scrolly(0, data);
-}
-
-TILE_GET_INFO_MEMBER(sprcros2_state::get_bgtile_info)
-{
- UINT32 tile_number = m_bgvideoram[tile_index];
- UINT8 attr = m_bgvideoram[tile_index + 0x400];
-
- //attr
- //76543210
- //xxxx---- colour
- //----x--- flipx
- //-----xxx tile bank
-
- tile_number += (attr&0x07)<<8;
-
- SET_TILE_INFO_MEMBER(0,
- tile_number,
- (attr&0xf0)>>4,
- (attr&0x08)?TILE_FLIPX:0);
-}
-
-TILE_GET_INFO_MEMBER(sprcros2_state::get_fgtile_info)
-{
- UINT32 tile_number = m_fgvideoram[tile_index];
- UINT8 attr = m_fgvideoram[tile_index + 0x400];
- int color = (attr&0xfc)>>2;
-
- tileinfo.group = color;
-
- //attr
- //76543210
- //xxxxxx-- colour
- //------xx tile bank
-
- tile_number += (attr&0x03)<<8;
-
- SET_TILE_INFO_MEMBER(2,
- tile_number,
- color,
- 0);
-}
-
-void sprcros2_state::video_start()
-{
- m_bgtilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(sprcros2_state::get_bgtile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
- m_fgtilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(sprcros2_state::get_fgtile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
-
- m_fgtilemap->configure_groups(*m_gfxdecode->gfx(2), 0);
-}
-
-void sprcros2_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect)
-{
- int offs,sx,sy,color,flipx,flipy;
-
- for (offs = m_spriteram.bytes()-4; offs >= 0; offs -= 4)
- {
- if (m_spriteram[offs])
- {
- //offs
- //76543210
- //x------- unused
- //-xxxxxxx sprite number
- //offs+1
- //76543210
- //xx------ unused
- //--xxx--- colour (6/7 unused and blank in prom)
- //-----x-- unused
- //------x- flipx
- //-------x unused
- //offs+2 y pos
- //offs+3 x pos
-
- sx = ((m_spriteram[offs+3]+0x10)%0x100)-0x10;
- sy = 225-(((m_spriteram[offs+2]+0x10)%0x100)-0x10);
- color = (m_spriteram[offs+1]&0x38)>>3;
- flipx = m_spriteram[offs+1]&0x02;
- flipy = 0;
-
- if (m_port7&0x02)
- {
- sx = 224-sx;
- sy = 224-sy;
- flipx = !flipx;
- flipy = !flipy;
- }
-
- m_gfxdecode->gfx(1)->transmask(bitmap,cliprect,
- m_spriteram[offs],
- color,
- flipx,flipy,
- sx,sy,
- m_palette->transpen_mask(*m_gfxdecode->gfx(1), color, 0));
- }
- }
-}
-
-UINT32 sprcros2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- m_bgtilemap->draw(screen, bitmap, cliprect, 0, 0);
- draw_sprites(bitmap, cliprect);
- m_fgtilemap->draw(screen, bitmap, cliprect, 0, 0);
- return 0;
-}
diff --git a/src/mame/video/suprnova.cpp b/src/mame/video/suprnova.cpp
index ecacd5b26be..5e4249470fa 100644
--- a/src/mame/video/suprnova.cpp
+++ b/src/mame/video/suprnova.cpp
@@ -8,7 +8,7 @@
/* draws ROZ with linescroll OR columnscroll to 16-bit indexed bitmap */
-void skns_state::suprnova_draw_roz(bitmap_ind16 &bitmap, bitmap_ind8& bitmapflags, const rectangle &cliprect, tilemap_t *tmap, UINT32 startx, UINT32 starty, int incxx, int incxy, int incyx, int incyy, int wraparound, int columnscroll, UINT32* scrollram)
+void skns_state::draw_roz(bitmap_ind16 &bitmap, bitmap_ind8& bitmapflags, const rectangle &cliprect, tilemap_t *tmap, UINT32 startx, UINT32 starty, int incxx, int incxy, int incyx, int incyy, int wraparound, int columnscroll, UINT32* scrollram)
{
//bitmap_ind16 *destbitmap = bitmap;
bitmap_ind16 &srcbitmap = tmap->pixmap();
@@ -89,7 +89,7 @@ void skns_state::suprnova_draw_roz(bitmap_ind16 &bitmap, bitmap_ind8& bitmapflag
}
-WRITE32_MEMBER(skns_state::skns_pal_regs_w)
+WRITE32_MEMBER(skns_state::pal_regs_w)
{
COMBINE_DATA(&m_pal_regs[offset]);
m_palette_updated =1;
@@ -176,7 +176,7 @@ WRITE32_MEMBER(skns_state::skns_pal_regs_w)
}
-WRITE32_MEMBER(skns_state::skns_palette_ram_w)
+WRITE32_MEMBER(skns_state::palette_ram_w)
{
int r,g,b;
int brightness_r, brightness_g, brightness_b/*, alpha*/;
@@ -291,7 +291,7 @@ TILE_GET_INFO_MEMBER(skns_state::get_tilemap_A_tile_info)
//if (pri) popmessage("pri A!! %02x\n", pri);
}
-WRITE32_MEMBER(skns_state::skns_tilemapA_w)
+WRITE32_MEMBER(skns_state::tilemapA_w)
{
COMBINE_DATA(&m_tilemapA_ram[offset]);
m_tilemap_A->mark_tile_dirty(offset);
@@ -317,13 +317,13 @@ TILE_GET_INFO_MEMBER(skns_state::get_tilemap_B_tile_info)
//if (pri) popmessage("pri B!! %02x\n", pri); // 02 on cyvern
}
-WRITE32_MEMBER(skns_state::skns_tilemapB_w)
+WRITE32_MEMBER(skns_state::tilemapB_w)
{
COMBINE_DATA(&m_tilemapB_ram[offset]);
m_tilemap_B->mark_tile_dirty(offset);
}
-WRITE32_MEMBER(skns_state::skns_v3_regs_w)
+WRITE32_MEMBER(skns_state::v3_regs_w)
{
COMBINE_DATA(&m_v3_regs[offset]);
@@ -361,6 +361,29 @@ void skns_state::video_start()
m_gfxdecode->gfx(2)->set_granularity(256);
m_gfxdecode->gfx(3)->set_granularity(256);
+
+
+ save_item(NAME(m_depthA));
+ save_item(NAME(m_depthB));
+ save_item(NAME(m_use_spc_bright));
+ save_item(NAME(m_use_v3_bright));
+ save_item(NAME(m_bright_spc_b));
+ save_item(NAME(m_bright_spc_g));
+ save_item(NAME(m_bright_spc_r));
+ save_item(NAME(m_bright_spc_b_trans));
+ save_item(NAME(m_bright_spc_g_trans));
+ save_item(NAME(m_bright_spc_r_trans));
+ save_item(NAME(m_bright_v3_b));
+ save_item(NAME(m_bright_v3_g));
+ save_item(NAME(m_bright_v3_r));
+ save_item(NAME(m_bright_v3_b_trans));
+ save_item(NAME(m_bright_v3_g_trans));
+ save_item(NAME(m_bright_v3_r_trans));
+ save_item(NAME(m_spc_changed));
+ save_item(NAME(m_v3_changed));
+ save_item(NAME(m_palette_updated));
+ save_item(NAME(m_alt_enable_background));
+ save_item(NAME(m_alt_enable_sprites));
}
void skns_state::video_reset()
@@ -376,7 +399,7 @@ void skns_state::video_reset()
m_alt_enable_background = m_alt_enable_sprites = 1;
}
-void skns_state::supernova_draw_a( bitmap_ind16 &bitmap, bitmap_ind8 &bitmap_flags, const rectangle &cliprect, int tran )
+void skns_state::draw_a( bitmap_ind16 &bitmap, bitmap_ind8 &bitmap_flags, const rectangle &cliprect, int tran )
{
int enable_a = (m_v3_regs[0x10/4] >> 0) & 0x0001;
int nowrap_a = (m_v3_regs[0x10/4] >> 0) & 0x0004;
@@ -401,12 +424,12 @@ void skns_state::supernova_draw_a( bitmap_ind16 &bitmap, bitmap_ind8 &bitmap_fla
columnscroll = (m_v3_regs[0x0c/4] >> 1) & 0x0001;
- suprnova_draw_roz(bitmap,bitmap_flags,cliprect, m_tilemap_A, startx << 8,starty << 8, incxx << 8,incxy << 8,incyx << 8,incyy << 8, !nowrap_a, columnscroll, &m_v3slc_ram[0]);
+ draw_roz(bitmap,bitmap_flags,cliprect, m_tilemap_A, startx << 8,starty << 8, incxx << 8,incxy << 8,incyx << 8,incyy << 8, !nowrap_a, columnscroll, &m_v3slc_ram[0]);
//tilemap_copy_bitmap(bitmap, m_tilemap_bitmap_lower, m_tilemap_bitmapflags_lower);
}
}
-void skns_state::supernova_draw_b( bitmap_ind16 &bitmap, bitmap_ind8 &bitmap_flags, const rectangle &cliprect, int tran )
+void skns_state::draw_b( bitmap_ind16 &bitmap, bitmap_ind8 &bitmap_flags, const rectangle &cliprect, int tran )
{
int enable_b = (m_v3_regs[0x34/4] >> 0) & 0x0001;
int nowrap_b = (m_v3_regs[0x34/4] >> 0) & 0x0004;
@@ -429,14 +452,14 @@ void skns_state::supernova_draw_b( bitmap_ind16 &bitmap, bitmap_ind8 &bitmap_fla
incxx = m_v3_regs[0x48/4]&0x7ffff;
if (incxx&0x40000) incxx = incxx-0x80000;
columnscroll = (m_v3_regs[0x0c/4] >> 9) & 0x0001; // selects column scroll or rowscroll
- suprnova_draw_roz(bitmap,bitmap_flags, cliprect, m_tilemap_B, startx << 8,starty << 8, incxx << 8,incxy << 8,incyx << 8,incyy << 8, !nowrap_b, columnscroll, &m_v3slc_ram[0x1000/4]);
+ draw_roz(bitmap,bitmap_flags, cliprect, m_tilemap_B, startx << 8,starty << 8, incxx << 8,incxy << 8,incyx << 8,incyy << 8, !nowrap_b, columnscroll, &m_v3slc_ram[0x1000/4]);
//popmessage("%08x %08x %08x %08x %08x %08x", startx, starty, incxx, incyy, incxy, incyx);
}
}
-UINT32 skns_state::screen_update_skns(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+UINT32 skns_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
palette_update();
@@ -457,8 +480,8 @@ UINT32 skns_state::screen_update_skns(screen_device &screen, bitmap_rgb32 &bitma
//popmessage("pri %d %d\n", supernova_pri_a, supernova_pri_b);
/*if (!supernova_pri_b) { */
- supernova_draw_b(m_tilemap_bitmap_lower, m_tilemap_bitmapflags_lower, cliprect,tran);// tran = 1;
- supernova_draw_a(m_tilemap_bitmap_higher,m_tilemap_bitmapflags_higher,cliprect,tran);// tran = 1;
+ draw_b(m_tilemap_bitmap_lower, m_tilemap_bitmapflags_lower, cliprect,tran);// tran = 1;
+ draw_a(m_tilemap_bitmap_higher,m_tilemap_bitmapflags_higher,cliprect,tran);// tran = 1;
{
int x,y;
@@ -615,7 +638,3 @@ UINT32 skns_state::screen_update_skns(screen_device &screen, bitmap_rgb32 &bitma
return 0;
}
-
-void skns_state::screen_eof_skns(screen_device &screen, bool state)
-{
-}
diff --git a/src/mame/video/tecmo16.cpp b/src/mame/video/tecmo16.cpp
index 7a49c8c705a..c1ca267b720 100644
--- a/src/mame/video/tecmo16.cpp
+++ b/src/mame/video/tecmo16.cpp
@@ -1,5 +1,5 @@
-// license:???
-// copyright-holders:Eisuke Watanabe, Nicola Salmoria
+// license:BSD-3-Clause
+// copyright-holders:Hau, Nicola Salmoria
/******************************************************************************
Ganbare Ginkun (Japan) (c)1995 TECMO
diff --git a/src/mame/video/toypop.cpp b/src/mame/video/toypop.cpp
deleted file mode 100644
index 296da8daaf8..00000000000
--- a/src/mame/video/toypop.cpp
+++ /dev/null
@@ -1,275 +0,0 @@
-// license:???
-// copyright-holders:Edgardo E. Contini Salvan
-/***************************************************************************
-
- video.c
-
- Functions to emulate the video hardware of the machine.
-
-***************************************************************************/
-
-#include "emu.h"
-#include "includes/toypop.h"
-
-/***************************************************************************
-
- Convert the color PROMs into a more useable format.
-
- toypop has three 256x4 palette PROM and two 256x8 color lookup table PROMs
- (one for characters, one for sprites).
-
-***************************************************************************/
-
-PALETTE_INIT_MEMBER(toypop_state, toypop)
-{
- const UINT8 *color_prom = memregion("proms")->base();
-
- for (int i = 0;i < 256;i++)
- {
- int bit0,bit1,bit2,bit3,r,g,b;
-
- // red component
- bit0 = (color_prom[i] >> 0) & 0x01;
- bit1 = (color_prom[i] >> 1) & 0x01;
- bit2 = (color_prom[i] >> 2) & 0x01;
- bit3 = (color_prom[i] >> 3) & 0x01;
- r = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
- // green component
- bit0 = (color_prom[i+0x100] >> 0) & 0x01;
- bit1 = (color_prom[i+0x100] >> 1) & 0x01;
- bit2 = (color_prom[i+0x100] >> 2) & 0x01;
- bit3 = (color_prom[i+0x100] >> 3) & 0x01;
- g = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
- // blue component
- bit0 = (color_prom[i+0x200] >> 0) & 0x01;
- bit1 = (color_prom[i+0x200] >> 1) & 0x01;
- bit2 = (color_prom[i+0x200] >> 2) & 0x01;
- bit3 = (color_prom[i+0x200] >> 3) & 0x01;
- b = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
-
- palette.set_indirect_color(i, rgb_t(r,g,b));
- }
-
- for (int i = 0;i < 256;i++)
- {
- UINT8 entry;
-
- // characters
- palette.set_pen_indirect(i + 0*256, (color_prom[i + 0x300] & 0x0f) | 0x70);
- palette.set_pen_indirect(i + 1*256, (color_prom[i + 0x300] & 0x0f) | 0xf0);
- // sprites
- entry = color_prom[i + 0x500];
- palette.set_pen_indirect(i + 2*256, entry);
- }
- for (int i = 0;i < 16;i++)
- {
- // background
- palette.set_pen_indirect(i + 3*256 + 0*16, 0x60 + i);
- palette.set_pen_indirect(i + 3*256 + 1*16, 0xe0 + i);
- }
-}
-
-
-
-/***************************************************************************
-
- Callbacks for the TileMap code
-
-***************************************************************************/
-
-/* convert from 32x32 to 36x28 */
-TILEMAP_MAPPER_MEMBER(toypop_state::tilemap_scan)
-{
- int offs;
-
- row += 2;
- col -= 2;
- if (col & 0x20)
- offs = row + ((col & 0x1f) << 5);
- else
- offs = col + (row << 5);
-
- return offs;
-}
-
-TILE_GET_INFO_MEMBER(toypop_state::get_tile_info)
-{
- UINT8 attr = m_videoram[tile_index + 0x400];
- SET_TILE_INFO_MEMBER(0,
- m_videoram[tile_index],
- (attr & 0x3f) + 0x40 * m_palettebank,
- 0);
-}
-
-
-
-/***************************************************************************
-
- Start the video hardware emulation.
-
-***************************************************************************/
-
-void toypop_state::video_start()
-{
- m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(toypop_state::get_tile_info),this), tilemap_mapper_delegate(FUNC(toypop_state::tilemap_scan),this),8,8,36,28);
-
- m_bg_tilemap->set_transparent_pen(0);
-}
-
-
-
-/***************************************************************************
-
- Memory handlers
-
-***************************************************************************/
-
-WRITE8_MEMBER(toypop_state::toypop_videoram_w)
-{
- m_videoram[offset] = data;
- m_bg_tilemap->mark_tile_dirty(offset & 0x3ff);
-}
-
-WRITE8_MEMBER(toypop_state::toypop_palettebank_w)
-{
- if (m_palettebank != (offset & 1))
- {
- m_palettebank = offset & 1;
- machine().tilemap().mark_all_dirty();
- }
-}
-
-WRITE16_MEMBER(toypop_state::toypop_flipscreen_w)
-{
- m_bitmapflip = offset & 1;
-}
-
-READ16_MEMBER(toypop_state::toypop_merged_background_r)
-{
- int data1, data2;
-
- // 0x0a0b0c0d is read as 0xabcd
- data1 = m_bg_image[2*offset];
- data2 = m_bg_image[2*offset + 1];
- return ((data1 & 0xf00) << 4) | ((data1 & 0xf) << 8) | ((data2 & 0xf00) >> 4) | (data2 & 0xf);
-}
-
-WRITE16_MEMBER(toypop_state::toypop_merged_background_w)
-{
- // 0xabcd is written as 0x0a0b0c0d in the background image
- if (ACCESSING_BITS_8_15)
- m_bg_image[2*offset] = ((data & 0xf00) >> 8) | ((data & 0xf000) >> 4);
-
- if (ACCESSING_BITS_0_7)
- m_bg_image[2*offset+1] = (data & 0xf) | ((data & 0xf0) << 4);
-}
-
-void toypop_state::draw_background(bitmap_ind16 &bitmap)
-{
- pen_t pen_base = 0x300 + 0x10*m_palettebank;
-
- // copy the background image from RAM (0x190200-0x19FDFF) to bitmap
- if (m_bitmapflip)
- {
- int offs = 0xFDFE/2;
- for (int y = 0; y < 224; y++)
- {
- UINT16 *scanline = &bitmap.pix16(y);
- for (int x = 0; x < 288; x+=2)
- {
- UINT16 data = m_bg_image[offs];
- scanline[x] = pen_base | (data & 0x0f);
- scanline[x+1] = pen_base | (data >> 8);
- offs--;
- }
- }
- }
- else
- {
- int offs = 0x200/2;
- for (int y = 0; y < 224; y++)
- {
- UINT16 *scanline = &bitmap.pix16(y);
- for (int x = 0; x < 288; x+=2)
- {
- UINT16 data = m_bg_image[offs];
- scanline[x] = pen_base | (data >> 8);
- scanline[x+1] = pen_base | (data & 0x0f);
- offs++;
- }
- }
- }
-}
-
-
-
-/***************************************************************************
-
- Display refresh
-
-***************************************************************************/
-
-
-void toypop_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8 *spriteram_base)
-{
- UINT8 *spriteram = spriteram_base + 0x780;
- UINT8 *spriteram_2 = spriteram + 0x800;
- UINT8 *spriteram_3 = spriteram_2 + 0x800;
- enum { xoffs = -31, yoffs = -8 };
- int flip = flip_screen();
-
- for (int offs = 0;offs < 0x80;offs += 2)
- {
- /* is it on? */
- if ((spriteram_3[offs+1] & 2) == 0)
- {
- static const UINT8 gfx_offs[2][2] =
- {
- { 0, 1 },
- { 2, 3 }
- };
- int sprite = spriteram[offs];
- int color = spriteram[offs+1];
- int sx = spriteram_2[offs+1] + 0x100 * (spriteram_3[offs+1] & 1) - 40 + xoffs;
- int sy = 256 - spriteram_2[offs] + yoffs + 1; // sprites are buffered and delayed by one scanline
- int flipx = (spriteram_3[offs] & 0x01);
- int flipy = (spriteram_3[offs] & 0x02) >> 1;
- int sizex = (spriteram_3[offs] & 0x04) >> 2;
- int sizey = (spriteram_3[offs] & 0x08) >> 3;
-
- sprite &= ~sizex;
- sprite &= ~(sizey << 1);
-
- sy -= 16 * sizey;
- sy = (sy & 0xff) - 32; // fix wraparound
-
- if (flip)
- {
- flipx ^= 1;
- flipy ^= 1;
- }
-
- for (int y = 0;y <= sizey;y++)
- {
- for (int x = 0;x <= sizex;x++)
- {
- m_gfxdecode->gfx(1)->transmask(bitmap,cliprect,
- sprite + gfx_offs[y ^ (sizey & flipy)][x ^ (sizex & flipx)],
- color,
- flipx,flipy,
- sx + 16*x,sy + 16*y,
- m_palette->transpen_mask(*m_gfxdecode->gfx(1), color, 0xff));
- }
- }
- }
- }
-}
-
-
-UINT32 toypop_state::screen_update_toypop(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- draw_background(bitmap);
- m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0);
- draw_sprites(bitmap, cliprect, m_spriteram);
- return 0;
-}
diff --git a/src/mame/video/v1050.cpp b/src/mame/video/v1050.cpp
index 2154b01fb42..a37fcae796b 100644
--- a/src/mame/video/v1050.cpp
+++ b/src/mame/video/v1050.cpp
@@ -113,12 +113,12 @@ MACHINE_CONFIG_FRAGMENT( v1050_video )
MCFG_MC6845_UPDATE_ROW_CB(v1050_state, crtc_update_row)
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(v1050_state, crtc_vs_w))
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
MCFG_SCREEN_UPDATE_DEVICE(H46505_TAG, h46505_device, screen_update)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
MCFG_SCREEN_SIZE(640, 400)
MCFG_SCREEN_VISIBLE_AREA(0,640-1, 0, 400-1)
- MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette")
+ MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
MACHINE_CONFIG_END
diff --git a/src/mame/video/vtvideo.cpp b/src/mame/video/vtvideo.cpp
index b4d5b40ab55..45bcfe5da79 100644
--- a/src/mame/video/vtvideo.cpp
+++ b/src/mame/video/vtvideo.cpp
@@ -928,7 +928,7 @@ TIMER_CALLBACK_MEMBER(vt100_video_device::lba7_change)
}
static MACHINE_CONFIG_FRAGMENT(vt100_video)
-MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
MACHINE_CONFIG_END
//-------------------------------------------------
@@ -942,7 +942,7 @@ machine_config_constructor vt100_video_device::device_mconfig_additions() const
}
static MACHINE_CONFIG_FRAGMENT(rainbow_video)
-MCFG_PALETTE_ADD("palette", 4)
+ MCFG_PALETTE_ADD("palette", 4)
MACHINE_CONFIG_END
//-------------------------------------------------
diff --git a/src/mame/video/yiear.cpp b/src/mame/video/yiear.cpp
index 5fa3cac6f7a..c45ec809c1c 100644
--- a/src/mame/video/yiear.cpp
+++ b/src/mame/video/yiear.cpp
@@ -1,5 +1,6 @@
-// license:???
-// copyright-holders:Enrique Sanchez
+// license:BSD-3-Clause
+// copyright-holders:Phil Stroffolino
+// thanks-to:Enrique Sanchez
/***************************************************************************
video.c
diff --git a/src/osd/eigccppc.h b/src/osd/eigccppc.h
index d9cd2ee1828..7d61ee49752 100644
--- a/src/osd/eigccppc.h
+++ b/src/osd/eigccppc.h
@@ -284,23 +284,4 @@ _count_leading_ones(UINT32 value)
return result;
}
-
-/***************************************************************************
- INLINE TIMING FUNCTIONS
-***************************************************************************/
-
-/*-------------------------------------------------
- get_profile_ticks - return a tick counter
- from the processor that can be used for
- profiling. It does not need to run at any
- particular rate.
--------------------------------------------------*/
-
-#define get_profile_ticks _get_profile_ticks
-static inline INT64 ATTR_UNUSED ATTR_FORCE_INLINE _get_profile_ticks(void)
-{
- // fix me - should use the time base
- return osd_ticks();
-}
-
#endif /* __EIGCCPPC__ */
diff --git a/src/osd/eigccx86.h b/src/osd/eigccx86.h
index 3494e33b5db..1d5c30d151c 100644
--- a/src/osd/eigccx86.h
+++ b/src/osd/eigccx86.h
@@ -521,40 +521,4 @@ _count_leading_ones(UINT32 value)
return result;
}
-/***************************************************************************
- INLINE TIMING FUNCTIONS
-***************************************************************************/
-
-/*-------------------------------------------------
- get_profile_ticks - return a tick counter
- from the processor that can be used for
- profiling. It does not need to run at any
- particular rate.
--------------------------------------------------*/
-
-#define get_profile_ticks _get_profile_ticks
-
-#ifndef __x86_64__
-static inline UINT64 ATTR_UNUSED ATTR_FORCE_INLINE _get_profile_ticks(void)
-{
- UINT64 result;
- __asm__ __volatile__ (
- "rdtsc"
- : "=A" (result)
- );
- return result;
-}
-#else
-static inline UINT64 ATTR_UNUSED ATTR_FORCE_INLINE _get_profile_ticks(void)
-{
- _x86_union r;
- __asm__ __volatile__ (
- "rdtsc"
- : "=a" (r.u32.l), "=d" (r.u32.h)
- );
-
- return (UINT64) r.u64;
-}
-#endif
-
#endif /* __EIGCCX86__ */
diff --git a/src/osd/eivcx86.h b/src/osd/eivcx86.h
index b6139f70c26..503594d3a99 100644
--- a/src/osd/eivcx86.h
+++ b/src/osd/eivcx86.h
@@ -460,45 +460,4 @@ static inline UINT8 _count_leading_ones(UINT32 value)
}
#endif
-
-
-/***************************************************************************
- INLINE TIMING FUNCTIONS
-***************************************************************************/
-
-/*-------------------------------------------------
- get_profile_ticks - return a tick counter
- from the processor that can be used for
- profiling. It does not need to run at any
- particular rate.
--------------------------------------------------*/
-
-#define get_profile_ticks _get_profile_ticks
-
-#ifdef PTR64
-
-static inline osd_ticks_t _get_profile_ticks(void)
-{
- return __rdtsc();
-}
-
-#else
-
-static inline osd_ticks_t _get_profile_ticks(void)
-{
- UINT64 result;
- UINT64 *presult = &result;
-
- __asm {
- __asm _emit 0Fh __asm _emit 031h // rdtsc
- mov ebx, presult
- mov [ebx],eax
- mov [ebx+4],edx
- }
-
- return result;
-}
-
-#endif
-
#endif /* __EIVCX86__ */
diff --git a/src/osd/modules/debugger/debugosx.mm b/src/osd/modules/debugger/debugosx.mm
index 6c52459f719..598a85dd569 100644
--- a/src/osd/modules/debugger/debugosx.mm
+++ b/src/osd/modules/debugger/debugosx.mm
@@ -29,6 +29,8 @@
#import "osx/debugconsole.h"
#import "osx/debugwindowhandler.h"
+#include <atomic>
+
//============================================================
// MODULE SUPPORT
@@ -60,10 +62,14 @@ public:
private:
running_machine *m_machine;
MAMEDebugConsole *m_console;
+
+ static std::atomic_bool s_added_menus;
};
MODULE_DEFINITION(DEBUG_OSX, debugger_osx)
+std::atomic_bool debugger_osx::s_added_menus(false);
+
//============================================================
// debugger_osx::init
//============================================================
@@ -113,7 +119,99 @@ void debugger_osx::wait_for_debugger(device_t &device, bool firststop)
// create a console window
if (m_console == nil)
+ {
+ if (!s_added_menus.exchange(true, std::memory_order_relaxed))
+ {
+ NSMenuItem *item;
+
+ NSMenu *const debugMenu = [[NSMenu allocWithZone:[NSMenu menuZone]] initWithTitle:@"Debug"];
+ item = [[NSApp mainMenu] insertItemWithTitle:@"Debug" action:NULL keyEquivalent:@"" atIndex:1];
+ [item setSubmenu:debugMenu];
+ [debugMenu release];
+
+ [debugMenu addItemWithTitle:@"New Memory Window"
+ action:@selector(debugNewMemoryWindow:)
+ keyEquivalent:@"d"];
+ [debugMenu addItemWithTitle:@"New Disassembly Window"
+ action:@selector(debugNewDisassemblyWindow:)
+ keyEquivalent:@"a"];
+ [debugMenu addItemWithTitle:@"New Error Log Window"
+ action:@selector(debugNewErrorLogWindow:)
+ keyEquivalent:@"l"];
+ [debugMenu addItemWithTitle:@"New (Break|Watch)points Window"
+ action:@selector(debugNewPointsWindow:)
+ keyEquivalent:@"b"];
+ [debugMenu addItemWithTitle:@"New Devices Window"
+ action:@selector(debugNewDevicesWindow:)
+ keyEquivalent:@"D"];
+
+ [debugMenu addItem:[NSMenuItem separatorItem]];
+
+ [[debugMenu addItemWithTitle:@"Soft Reset"
+ action:@selector(debugSoftReset:)
+ keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF3FunctionKey]]
+ setKeyEquivalentModifierMask:0];
+ [[debugMenu addItemWithTitle:@"Hard Reset"
+ action:@selector(debugHardReset:)
+ keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF3FunctionKey]]
+ setKeyEquivalentModifierMask:NSShiftKeyMask];
+
+ NSMenu *const runMenu = [[NSMenu allocWithZone:[NSMenu menuZone]] initWithTitle:@"Run"];
+ item = [[NSApp mainMenu] insertItemWithTitle:@"Run"
+ action:NULL
+ keyEquivalent:@""
+ atIndex:([[NSApp mainMenu] indexOfItemWithSubmenu:debugMenu] + 1)];
+ [item setSubmenu:runMenu];
+ [runMenu release];
+
+ [runMenu addItemWithTitle:@"Break"
+ action:@selector(debugBreak:)
+ keyEquivalent:@""];
+
+ [runMenu addItem:[NSMenuItem separatorItem]];
+
+ [[runMenu addItemWithTitle:@"Run"
+ action:@selector(debugRun:)
+ keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF5FunctionKey]]
+ setKeyEquivalentModifierMask:0];
+ [[runMenu addItemWithTitle:@"Run and Hide Debugger"
+ action:@selector(debugRunAndHide:)
+ keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF12FunctionKey]]
+ setKeyEquivalentModifierMask:0];
+ [[runMenu addItemWithTitle:@"Run to Next CPU"
+ action:@selector(debugRunToNextCPU:)
+ keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF6FunctionKey]]
+ setKeyEquivalentModifierMask:0];
+ [[runMenu addItemWithTitle:@"Run until Next Interrupt on Current CPU"
+ action:@selector(debugRunToNextInterrupt:)
+ keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF7FunctionKey]]
+ setKeyEquivalentModifierMask:0];
+ [[runMenu addItemWithTitle:@"Run until Next VBLANK"
+ action:@selector(debugRunToNextVBLANK:)
+ keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF8FunctionKey]]
+ setKeyEquivalentModifierMask:0];
+ [[runMenu addItemWithTitle:@"Run to Cursor"
+ action:@selector(debugRunToCursor:)
+ keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF4FunctionKey]]
+ setKeyEquivalentModifierMask:0];
+
+ [runMenu addItem:[NSMenuItem separatorItem]];
+
+ [[runMenu addItemWithTitle:@"Step Into"
+ action:@selector(debugStepInto:)
+ keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF11FunctionKey]]
+ setKeyEquivalentModifierMask:0];
+ [[runMenu addItemWithTitle:@"Step Over"
+ action:@selector(debugStepOver:)
+ keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF10FunctionKey]]
+ setKeyEquivalentModifierMask:0];
+ [[runMenu addItemWithTitle:@"Step Out"
+ action:@selector(debugStepOut:)
+ keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF10FunctionKey]]
+ setKeyEquivalentModifierMask:NSShiftKeyMask];
+ }
m_console = [[MAMEDebugConsole alloc] initWithMachine:*m_machine];
+ }
// make sure the debug windows are visible
if (firststop)
diff --git a/src/osd/modules/debugger/debugqt.cpp b/src/osd/modules/debugger/debugqt.cpp
index e553585f729..ac6c6a9d95c 100644
--- a/src/osd/modules/debugger/debugqt.cpp
+++ b/src/osd/modules/debugger/debugqt.cpp
@@ -317,7 +317,7 @@ void debug_qt::wait_for_debugger(device_t &device, bool firststop)
mainQtWindow->setProcessor(&device);
// Run our own QT event loop
- osd_sleep(50000);
+ osd_sleep(osd_ticks_per_second() / 1000 * 50);
qApp->processEvents(QEventLoop::AllEvents, 1);
// Refresh everyone if requested
diff --git a/src/osd/modules/debugger/osx/debugview.mm b/src/osd/modules/debugger/osx/debugview.mm
index e793c649d9e..05d2e2dfc17 100644
--- a/src/osd/modules/debugger/osx/debugview.mm
+++ b/src/osd/modules/debugger/osx/debugview.mm
@@ -63,7 +63,7 @@ static void debugwin_view_update(debug_view &view, void *osdprivate)
InactiveSelectedBackground = [[NSColor colorWithCalibratedWhite:0.875 alpha:1.0] retain];
InactiveSelectedCurrentBackground = [[NSColor colorWithCalibratedRed:0.875 green:0.5 blue:0.625 alpha:1.0] retain];
- NonWhiteCharacters = [[NSCharacterSet whitespaceAndNewlineCharacterSet] invertedSet];
+ NonWhiteCharacters = [[[NSCharacterSet whitespaceAndNewlineCharacterSet] invertedSet] retain];
}
diff --git a/src/osd/modules/debugger/osx/debugwindowhandler.h b/src/osd/modules/debugger/osx/debugwindowhandler.h
index e8d2d6eb08d..0fc40d9eb64 100644
--- a/src/osd/modules/debugger/osx/debugwindowhandler.h
+++ b/src/osd/modules/debugger/osx/debugwindowhandler.h
@@ -38,6 +38,7 @@ extern NSString *const MAMEAuxiliaryDebugWindowWillCloseNotification;
- (void)activate;
+- (IBAction)debugBreak:(id)sender;
- (IBAction)debugRun:(id)sender;
- (IBAction)debugRunAndHide:(id)sender;
- (IBAction)debugRunToNextCPU:(id)sender;
diff --git a/src/osd/modules/debugger/osx/debugwindowhandler.mm b/src/osd/modules/debugger/osx/debugwindowhandler.mm
index d99a9ec9961..fd11fa89152 100644
--- a/src/osd/modules/debugger/osx/debugwindowhandler.mm
+++ b/src/osd/modules/debugger/osx/debugwindowhandler.mm
@@ -29,6 +29,10 @@ NSString *const MAMEAuxiliaryDebugWindowWillCloseNotification = @"MAMEAuxiliaryD
@implementation MAMEDebugWindowHandler
+ (void)addCommonActionItems:(NSMenu *)menu {
+ [menu addItemWithTitle:@"Break"
+ action:@selector(debugBreak:)
+ keyEquivalent:@""];
+
NSMenuItem *runParentItem = [menu addItemWithTitle:@"Run"
action:@selector(debugRun:)
keyEquivalent:[NSString stringWithFormat:@"%C", (short)NSF5FunctionKey]];
@@ -181,13 +185,22 @@ NSString *const MAMEAuxiliaryDebugWindowWillCloseNotification = @"MAMEAuxiliaryD
}
+- (IBAction)debugBreak:(id)sender {
+ if (machine->debug_flags & DEBUG_FLAG_ENABLED)
+ debug_cpu_get_visible_cpu(*machine)->debug()->halt_on_next_instruction("User-initiated break\n");
+}
+
+
- (IBAction)debugRun:(id)sender {
debug_cpu_get_visible_cpu(*machine)->debug()->go();
}
- (IBAction)debugRunAndHide:(id)sender {
- [[NSNotificationCenter defaultCenter] postNotificationName:MAMEHideDebuggerNotification object:self];
+ [[NSNotificationCenter defaultCenter] postNotificationName:MAMEHideDebuggerNotification
+ object:self
+ userInfo:[NSDictionary dictionaryWithObject:[NSValue valueWithPointer:machine]
+ forKey:@"MAMEDebugMachine"]];
debug_cpu_get_visible_cpu(*machine)->debug()->go();
}
diff --git a/src/osd/modules/font/font_dwrite.cpp b/src/osd/modules/font/font_dwrite.cpp
index 8f78badda3b..cfcc952ef0d 100644
--- a/src/osd/modules/font/font_dwrite.cpp
+++ b/src/osd/modules/font/font_dwrite.cpp
@@ -661,13 +661,31 @@ public:
{
}
+ virtual bool probe() override
+ {
+ // This module is available if it can load the expected API Functions
+ if (m_pfnD2D1CreateFactory.initialize() != 0
+ || m_pfnDWriteCreateFactory.initialize() != 0)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
virtual int init(const osd_options &options) override
{
HRESULT result;
+ osd_printf_verbose("FontProvider: Initializing DirectWrite\n");
+
// Make sure we can initialize our api functions
- HR_RET1(m_pfnD2D1CreateFactory.initialize());
- HR_RET1(m_pfnDWriteCreateFactory.initialize());
+ if (m_pfnD2D1CreateFactory.initialize()
+ || m_pfnDWriteCreateFactory.initialize())
+ {
+ osd_printf_error("ERROR: FontProvider: Failed to load DirectWrite functions.\n");
+ return -1;
+ }
// Create a Direct2D factory.
HR_RET1(m_pfnD2D1CreateFactory(
@@ -692,6 +710,7 @@ public:
__uuidof(IWICImagingFactory),
(void**)&m_wicFactory));
+ osd_printf_verbose("FontProvider: DirectWrite initialized successfully.\n");
return 0;
}
diff --git a/src/osd/modules/input/input_common.cpp b/src/osd/modules/input/input_common.cpp
index c3d6367da5f..72a0261c99a 100644
--- a/src/osd/modules/input/input_common.cpp
+++ b/src/osd/modules/input/input_common.cpp
@@ -33,13 +33,16 @@
#include <windows.h>
#define KEY_TRANS_ENTRY0(mame, sdlsc, sdlkey, disc, virtual, ascii, UI) { ITEM_ID_##mame, KEY_ ## disc, virtual, ascii, "ITEM_ID_"#mame, (char *) UI }
#define KEY_TRANS_ENTRY1(mame, sdlsc, sdlkey, disc, virtual, ascii) { ITEM_ID_##mame, KEY_ ## disc, virtual, ascii, "ITEM_ID_"#mame, (char*) #mame }
-#else
+#elif defined(OSD_SDL)
// SDL include
#include <sdlinc.h>
#define KEY_TRANS_ENTRY0(mame, sdlsc, sdlkey, disc, virtual, ascii, UI) { ITEM_ID_##mame, SDL_SCANCODE_ ## sdlsc, SDLK_ ## sdlkey, ascii, "ITEM_ID_"#mame, (char *) UI }
#define KEY_TRANS_ENTRY1(mame, sdlsc, sdlkey, disc, virtual, ascii) { ITEM_ID_##mame, SDL_SCANCODE_ ## sdlsc, SDLK_ ## sdlkey, ascii, "ITEM_ID_"#mame, (char*) #mame }
+#else
+// osd mini
#endif
+#if defined(OSD_WINDOWS) || defined(OSD_SDL)
key_trans_entry keyboard_trans_table::s_default_table[] =
{
// MAME key sdl scancode sdl key di scancode virtual key ascii ui
@@ -181,7 +184,14 @@ keyboard_trans_table::keyboard_trans_table()
m_table = s_default_table;
m_table_size = ARRAY_LENGTH(s_default_table);
}
+#else
+keyboard_trans_table::keyboard_trans_table()
+{
+ m_table = nullptr;
+ m_table_size = 0;
+}
+#endif
// public constructor to allow creation of non-default instances
keyboard_trans_table::keyboard_trans_table(std::unique_ptr<key_trans_entry[]> entries, unsigned int size)
{
diff --git a/src/osd/modules/input/input_dinput.cpp b/src/osd/modules/input/input_dinput.cpp
index a80eb4c994d..a56f913854d 100644
--- a/src/osd/modules/input/input_dinput.cpp
+++ b/src/osd/modules/input/input_dinput.cpp
@@ -115,8 +115,6 @@ protected:
class dinput_keyboard_device : public dinput_device
{
private:
- HANDLE m_dataEvent;
- HANDLE m_exitEvent;
std::mutex m_device_lock;
public:
@@ -124,7 +122,7 @@ public:
dinput_keyboard_device(running_machine &machine, const char *name, input_module &module)
: dinput_device(machine, name, DEVICE_CLASS_KEYBOARD, module),
- keyboard({0})
+ keyboard({{0}})
{
}
@@ -152,8 +150,6 @@ class dinput_module : public wininput_module
private:
LPDIRECTINPUT m_dinput;
int m_dinput_version;
- int didevtype_keyboard;
- int didevtype_mouse;
public:
dinput_module(const char* type, const char* name)
@@ -493,7 +489,7 @@ public:
dinput_joystick_device(running_machine &machine, const char *name, input_module &module)
: dinput_device(machine, name, DEVICE_CLASS_JOYSTICK, module),
- joystick({0})
+ joystick({{0}})
{
}
diff --git a/src/osd/modules/input/input_rawinput.cpp b/src/osd/modules/input/input_rawinput.cpp
index 5f930e5d780..cf17742ce58 100644
--- a/src/osd/modules/input/input_rawinput.cpp
+++ b/src/osd/modules/input/input_rawinput.cpp
@@ -27,6 +27,7 @@
#include "strconv.h"
// MAMEOS headers
+#include "winutil.h"
#include "winmain.h"
#include "window.h"
@@ -44,10 +45,10 @@
#endif
// RawInput APIs
-typedef /*WINUSERAPI*/ INT(WINAPI *get_rawinput_device_list_ptr)(OUT PRAWINPUTDEVICELIST pRawInputDeviceList, IN OUT PINT puiNumDevices, IN UINT cbSize);
-typedef /*WINUSERAPI*/ INT(WINAPI *get_rawinput_data_ptr)(IN HRAWINPUT hRawInput, IN UINT uiCommand, OUT LPVOID pData, IN OUT PINT pcbSize, IN UINT cbSizeHeader);
-typedef /*WINUSERAPI*/ INT(WINAPI *get_rawinput_device_info_ptr)(IN HANDLE hDevice, IN UINT uiCommand, OUT LPVOID pData, IN OUT PINT pcbSize);
-typedef /*WINUSERAPI*/ BOOL(WINAPI *register_rawinput_devices_ptr)(IN PCRAWINPUTDEVICE pRawInputDevices, IN UINT uiNumDevices, IN UINT cbSize);
+typedef lazy_loaded_function_p3<INT, PRAWINPUTDEVICELIST, PINT, UINT> get_rawinput_device_list_ptr;
+typedef lazy_loaded_function_p5<INT, HRAWINPUT, UINT, LPVOID, PINT, UINT> get_rawinput_data_ptr;
+typedef lazy_loaded_function_p4<INT, HANDLE, UINT, LPVOID, PINT> get_rawinput_device_info_ptr;
+typedef lazy_loaded_function_p3<BOOL, PCRAWINPUTDEVICE, UINT, UINT> register_rawinput_devices_ptr;
//============================================================
// reg_query_string
@@ -262,7 +263,7 @@ public:
rawinput_keyboard_device(running_machine& machine, const char* name, input_module& module)
: rawinput_device(machine, name, DEVICE_CLASS_KEYBOARD, module),
- keyboard({0})
+ keyboard({{0}})
{
}
@@ -289,19 +290,11 @@ public:
// rawinput_mouse_device
//============================================================
-struct rawinput_mouse_state
-{
- int raw_x;
- int raw_y;
- int raw_z;
-};
-
class rawinput_mouse_device : public rawinput_device
{
private:
std::mutex m_device_lock;
public:
- //rawinput_mouse_state raw_mouse;
mouse_state mouse;
rawinput_mouse_device(running_machine& machine, const char* name, input_module& module)
@@ -317,18 +310,6 @@ public:
mouse.lZ = 0;
rawinput_device::poll();
-
- //std::lock_guard<std::mutex> scope_lock(m_device_lock);
-
- //// copy the accumulated raw state to the actual state
- //mouse.lX = raw_mouse.raw_x;
- //mouse.lY = raw_mouse.raw_y;
- //mouse.lZ = raw_mouse.raw_z;
- //raw_mouse.raw_x = 0;
- //raw_mouse.raw_y = 0;
- //raw_mouse.raw_z = 0;
-
- //osd_printf_verbose("At poll: lX=%d, lY=%d, lZ=%d\n", (int)mouse.lX, (int)mouse.lY, (int)mouse.lZ);
}
void reset() override
@@ -345,13 +326,6 @@ public:
mouse.lX += rawinput.data.mouse.lLastX * INPUT_RELATIVE_PER_PIXEL;
mouse.lY += rawinput.data.mouse.lLastY * INPUT_RELATIVE_PER_PIXEL;
- /*osd_printf_verbose(
- "Mouse Abs : lastX = %d, lastY = %d, rawx = %d, rawy = %d\n",
- (int)rawinput.data.mouse.lLastX,
- (int)rawinput.data.mouse.lLastY,
- (int)raw_mouse.raw_x,
- (int)raw_mouse.raw_y);*/
-
// update zaxis
if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_WHEEL)
mouse.lZ += (INT16)rawinput.data.mouse.usButtonData * INPUT_RELATIVE_PER_PIXEL;
@@ -370,6 +344,13 @@ public:
}
};
+/*
+register_rawinput_devices = (register_rawinput_devices_ptr)GetProcAddress(user32, "RegisterRawInputDevices");
+get_rawinput_device_list = (get_rawinput_device_list_ptr)GetProcAddress(user32, "GetRawInputDeviceList");
+get_rawinput_device_info = (get_rawinput_device_info_ptr)GetProcAddress(user32, "GetRawInputDeviceInfo" UNICODE_SUFFIX);
+get_rawinput_data = (get_rawinput_data_ptr)GetProcAddress(user32, "GetRawInputData");
+*/
+
//============================================================
// rawinput_module - base class for rawinput modules
//============================================================
@@ -387,25 +368,38 @@ private:
public:
rawinput_module(const char *type, const char* name)
: wininput_module(type, name),
- get_rawinput_device_list(nullptr),
- get_rawinput_data(nullptr),
- get_rawinput_device_info(nullptr),
- register_rawinput_devices(nullptr)
+ get_rawinput_device_list("GetRawInputDeviceList", L"user32.dll"),
+ get_rawinput_data("GetRawInputData", L"user32.dll"),
+ get_rawinput_device_info("GetRawInputDeviceInfo", L"user32.dll"),
+ register_rawinput_devices("RegisterRawInputDevices", L"user32.dll")
{
}
+ bool probe() override
+ {
+ int status = get_rawinput_device_list.initialize();
+ status |= get_rawinput_data.initialize();
+ status |= get_rawinput_device_info.initialize();
+ status |= register_rawinput_devices.initialize();
+
+ if (status != 0)
+ return false;
+
+ return true;
+ }
+
void input_init(running_machine &machine) override
{
// get the number of devices, allocate a device list, and fetch it
int device_count = 0;
- if ((*get_rawinput_device_list)(NULL, &device_count, sizeof(RAWINPUTDEVICELIST)) != 0)
+ if (get_rawinput_device_list(NULL, &device_count, sizeof(RAWINPUTDEVICELIST)) != 0)
return;
if (device_count == 0)
return;
auto rawinput_devices = std::make_unique<RAWINPUTDEVICELIST[]>(device_count);
- if ((*get_rawinput_device_list)(rawinput_devices.get(), &device_count, sizeof(RAWINPUTDEVICELIST)) == -1)
+ if (get_rawinput_device_list(rawinput_devices.get(), &device_count, sizeof(RAWINPUTDEVICELIST)) == -1)
return;
// iterate backwards through devices; new devices are added at the head
@@ -433,7 +427,7 @@ public:
registration.hwndTarget = win_window_list->m_hwnd;
// register the device
- (*register_rawinput_devices)(&registration, 1, sizeof(registration));
+ register_rawinput_devices(&registration, 1, sizeof(registration));
}
protected:
@@ -443,23 +437,15 @@ protected:
int init_internal() override
{
- HMODULE user32;
-
- // look in user32 for the raw input APIs
- user32 = LoadLibrary(TEXT("user32.dll"));
- if (user32 == NULL)
- return 1;
-
// look up the entry points
- register_rawinput_devices = (register_rawinput_devices_ptr)GetProcAddress(user32, "RegisterRawInputDevices");
- get_rawinput_device_list = (get_rawinput_device_list_ptr)GetProcAddress(user32, "GetRawInputDeviceList");
- get_rawinput_device_info = (get_rawinput_device_info_ptr)GetProcAddress(user32, "GetRawInputDeviceInfo" UNICODE_SUFFIX);
- get_rawinput_data = (get_rawinput_data_ptr)GetProcAddress(user32, "GetRawInputData");
- if (register_rawinput_devices == NULL || get_rawinput_device_list == NULL || get_rawinput_device_info == NULL || get_rawinput_data == NULL)
+ int status = get_rawinput_device_list.initialize();
+ status |= get_rawinput_data.initialize();
+ status |= get_rawinput_device_info.initialize();
+ status |= register_rawinput_devices.initialize();
+ if (status != 0)
return 1;
osd_printf_verbose("RawInput: APIs detected\n");
-
return 0;
}
@@ -469,11 +455,11 @@ protected:
TDevice* devinfo = nullptr;
INT name_length = 0;
// determine the length of the device name, allocate it, and fetch it if not nameless
- if ((*get_rawinput_device_info)(rawinputdevice->hDevice, RIDI_DEVICENAME, NULL, &name_length) != 0)
+ if (get_rawinput_device_info(rawinputdevice->hDevice, RIDI_DEVICENAME, NULL, &name_length) != 0)
return nullptr;
std::unique_ptr<TCHAR[]> tname = std::make_unique<TCHAR[]>(name_length + 1);
- if (name_length > 1 && (*get_rawinput_device_info)(rawinputdevice->hDevice, RIDI_DEVICENAME, tname.get(), &name_length) == -1)
+ if (name_length > 1 && get_rawinput_device_info(rawinputdevice->hDevice, RIDI_DEVICENAME, tname.get(), &name_length) == -1)
return nullptr;
// if this is an RDP name, skip it
@@ -514,7 +500,7 @@ protected:
return FALSE;
// determine the size of databuffer we need
- if ((*get_rawinput_data)(rawinputdevice, RID_INPUT, NULL, &size, sizeof(RAWINPUTHEADER)) != 0)
+ if (get_rawinput_data(rawinputdevice, RID_INPUT, NULL, &size, sizeof(RAWINPUTHEADER)) != 0)
return FALSE;
// if necessary, allocate a temporary buffer and fetch the data
@@ -527,7 +513,7 @@ protected:
}
// fetch the data and process the appropriate message types
- result = (*get_rawinput_data)((HRAWINPUT)rawinputdevice, RID_INPUT, data, &size, sizeof(RAWINPUTHEADER));
+ result = get_rawinput_data((HRAWINPUT)rawinputdevice, RID_INPUT, data, &size, sizeof(RAWINPUTHEADER));
if (result)
{
std::lock_guard<std::mutex> scope_lock(m_module_lock);
@@ -563,8 +549,8 @@ public:
}
protected:
- USHORT usagepage() { return 1; }
- USHORT usage() { return 6; }
+ USHORT usagepage() override { return 1; }
+ USHORT usage() override { return 6; }
void add_rawinput_device(running_machine& machine, RAWINPUTDEVICELIST * device) override
{
// make sure this is a keyboard
@@ -610,8 +596,8 @@ public:
}
protected:
- USHORT usagepage() { return 1; }
- USHORT usage() { return 2; }
+ USHORT usagepage() override { return 1; }
+ USHORT usage() override { return 2; }
void add_rawinput_device(running_machine& machine, RAWINPUTDEVICELIST * device) override
{
// make sure this is a mouse
diff --git a/src/osd/modules/input/input_sdl.cpp b/src/osd/modules/input/input_sdl.cpp
index 3894f25e1b4..43d4cbf6a6c 100644
--- a/src/osd/modules/input/input_sdl.cpp
+++ b/src/osd/modules/input/input_sdl.cpp
@@ -688,11 +688,20 @@ public:
int physical_stick;
for (physical_stick = 0; physical_stick < SDL_NumJoysticks(); physical_stick++)
{
- SDL_Joystick *joy = SDL_JoystickOpen(physical_stick);
- std::string joy_name = remove_spaces(SDL_JoystickName(joy));
- SDL_JoystickClose(joy);
-
- devmap_register(&m_joy_map, physical_stick, joy_name.c_str());
+ if (SDL_IsGameController(physical_stick)) {
+ osd_printf_verbose("Joystick %i is supported by the game controller interface!\n", physical_stick);
+ osd_printf_verbose("Compatible controller, named \'%s\'\n", SDL_GameControllerNameForIndex(physical_stick));
+ SDL_GameController *joy = SDL_GameControllerOpen(physical_stick);
+ osd_printf_verbose("Controller is mapped as \"%s\".\n", SDL_GameControllerMapping(joy));
+ std::string joy_name = remove_spaces(SDL_GameControllerName(joy));
+ SDL_GameControllerClose(joy);
+ devmap_register(&m_joy_map, physical_stick, joy_name.c_str());
+ } else {
+ SDL_Joystick *joy = SDL_JoystickOpen(physical_stick);
+ std::string joy_name = remove_spaces(SDL_JoystickName(joy));
+ SDL_JoystickClose(joy);
+ devmap_register(&m_joy_map, physical_stick, joy_name.c_str());
+ }
}
for (int stick = 0; stick < MAX_DEVMAP_ENTRIES; stick++)
diff --git a/src/osd/modules/input/input_win32.cpp b/src/osd/modules/input/input_win32.cpp
index e1b69c8091c..0fb86095112 100644
--- a/src/osd/modules/input/input_win32.cpp
+++ b/src/osd/modules/input/input_win32.cpp
@@ -45,7 +45,7 @@ public:
win32_keyboard_device(running_machine& machine, const char *name, input_module &module)
: event_based_device(machine, name, DEVICE_CLASS_KEYBOARD, module),
- keyboard({0})
+ keyboard({{0}})
{
}
@@ -68,7 +68,6 @@ protected:
class keyboard_input_win32 : public wininput_module
{
private:
- const osd_options * m_options;
public:
keyboard_input_win32()
@@ -138,7 +137,7 @@ public:
win32_mouse_device(running_machine& machine, const char *name, input_module &module)
: event_based_device(machine, name, DEVICE_CLASS_MOUSE, module),
mouse({0}),
- win32_mouse({0})
+ win32_mouse({{0}})
{
}
@@ -172,10 +171,11 @@ public:
void reset() override
{
memset(&mouse, 0, sizeof(mouse));
+ memset(&win32_mouse, 0, sizeof(win32_mouse));
}
protected:
- void process_event(MouseButtonEventArgs &args)
+ void process_event(MouseButtonEventArgs &args) override
{
// set the button state
mouse.rgbButtons[args.button] = args.keydown ? 0x80 : 0x00;
@@ -192,9 +192,6 @@ protected:
class mouse_input_win32 : public wininput_module
{
-private:
- const osd_options * m_options;
-
public:
mouse_input_win32()
: wininput_module(OSD_MOUSEINPUT_PROVIDER, "win32")
@@ -301,7 +298,7 @@ public:
}
protected:
- void process_event(MouseButtonEventArgs &args)
+ void process_event(MouseButtonEventArgs &args) override
{
// Are we in shared axis mode?
if (m_lightgun_shared_axis_mode)
diff --git a/src/osd/modules/input/input_xinput.cpp b/src/osd/modules/input/input_xinput.cpp
index e256b04b101..b88dbe24c1a 100644
--- a/src/osd/modules/input/input_xinput.cpp
+++ b/src/osd/modules/input/input_xinput.cpp
@@ -16,7 +16,7 @@
#include <windows.h>
// XInput header
-#include <Xinput.h>
+#include <xinput.h>
#undef interface
@@ -187,7 +187,7 @@ private:
public:
xinput_joystick_device(running_machine &machine, const char *name, input_module &module)
: device_info(machine, name, DEVICE_CLASS_JOYSTICK, module),
- gamepad({0}),
+ gamepad({{0}}),
xinput_state({0}),
xinput_api(nullptr)
{
diff --git a/src/osd/modules/lib/osdlib_macosx.cpp b/src/osd/modules/lib/osdlib_macosx.cpp
index 0d89e6c3596..501719c1e3c 100644
--- a/src/osd/modules/lib/osdlib_macosx.cpp
+++ b/src/osd/modules/lib/osdlib_macosx.cpp
@@ -14,11 +14,6 @@
#include <sys/types.h>
#include <signal.h>
-#include <mach/mach.h>
-#include <mach/mach_time.h>
-#include <mach/mach_traps.h>
-#include <Carbon/Carbon.h>
-
// MAME headers
#include "osdcore.h"
#include "osdlib.h"
@@ -55,30 +50,6 @@ void osd_process_kill(void)
}
//============================================================
-// osd_num_processors
-//============================================================
-
-int osd_get_num_processors(void)
-{
- int processors = 1;
-
- struct host_basic_info host_basic_info;
- unsigned int count;
- kern_return_t r;
- mach_port_t my_mach_host_self;
-
- count = HOST_BASIC_INFO_COUNT;
- my_mach_host_self = mach_host_self();
- if ( ( r = host_info(my_mach_host_self, HOST_BASIC_INFO, (host_info_t)(&host_basic_info), &count)) == KERN_SUCCESS )
- {
- processors = host_basic_info.avail_cpus;
- }
- mach_port_deallocate(mach_task_self(), my_mach_host_self);
-
- return processors;
-}
-
-//============================================================
// osd_malloc
//============================================================
@@ -166,120 +137,3 @@ void osd_break_into_debugger(const char *message)
#endif
}
-
-//============================================================
-// PROTOTYPES
-//============================================================
-
-static osd_ticks_t init_cycle_counter(void);
-static osd_ticks_t mach_cycle_counter(void);
-
-//============================================================
-// STATIC VARIABLES
-//============================================================
-
-static osd_ticks_t (*cycle_counter)(void) = init_cycle_counter;
-static osd_ticks_t (*ticks_counter)(void) = init_cycle_counter;
-static osd_ticks_t ticks_per_second;
-
-//============================================================
-// init_cycle_counter
-//
-// to avoid total grossness, this function is split by subarch
-//============================================================
-
-static osd_ticks_t init_cycle_counter(void)
-{
- osd_ticks_t start, end;
- osd_ticks_t a, b;
-
- cycle_counter = mach_cycle_counter;
- ticks_counter = mach_cycle_counter;
-
- // wait for an edge on the timeGetTime call
- a = SDL_GetTicks();
- do
- {
- b = SDL_GetTicks();
- } while (a == b);
-
- // get the starting cycle count
- start = (*cycle_counter)();
-
- // now wait for 1/4 second total
- do
- {
- a = SDL_GetTicks();
- } while (a - b < 250);
-
- // get the ending cycle count
- end = (*cycle_counter)();
-
- // compute ticks_per_sec
- ticks_per_second = (end - start) * 4;
-
- // return the current cycle count
- return (*cycle_counter)();
-}
-
-//============================================================
-// performance_cycle_counter
-//============================================================
-
-//============================================================
-// mach_cycle_counter
-//============================================================
-static osd_ticks_t mach_cycle_counter(void)
-{
- return mach_absolute_time();
-}
-
-//============================================================
-// osd_ticks
-//============================================================
-
-osd_ticks_t osd_ticks(void)
-{
- return (*cycle_counter)();
-}
-
-
-//============================================================
-// osd_ticks_per_second
-//============================================================
-
-osd_ticks_t osd_ticks_per_second(void)
-{
- if (ticks_per_second == 0)
- {
- // if we haven't computed the value yet, there's no time like the present
- init_cycle_counter();
- }
- return ticks_per_second;
-}
-
-
-
-//============================================================
-// osd_sleep
-//============================================================
-
-void osd_sleep(osd_ticks_t duration)
-{
- UINT32 msec;
-
- // make sure we've computed ticks_per_second
- if (ticks_per_second == 0)
- (void)osd_ticks();
-
- // convert to milliseconds, rounding down
- msec = (UINT32)(duration * 1000 / ticks_per_second);
-
- // only sleep if at least 2 full milliseconds
- if (msec >= 2)
- {
- // take a couple of msecs off the top for good measure
- msec -= 2;
- usleep(msec*1000);
- }
-}
diff --git a/src/osd/modules/lib/osdlib_unix.cpp b/src/osd/modules/lib/osdlib_unix.cpp
index a275eb04192..3075ea63769 100644
--- a/src/osd/modules/lib/osdlib_unix.cpp
+++ b/src/osd/modules/lib/osdlib_unix.cpp
@@ -13,8 +13,7 @@
#include <sys/mman.h>
#include <sys/types.h>
#include <signal.h>
-#include <time.h>
-#include <sys/time.h>
+
#ifdef SDLMAME_EMSCRIPTEN
#include <emscripten.h>
#endif
@@ -51,20 +50,6 @@ void osd_process_kill(void)
}
//============================================================
-// osd_num_processors
-//============================================================
-
-int osd_get_num_processors(void)
-{
- int processors = 1;
-
-#if defined(_SC_NPROCESSORS_ONLN)
- processors = sysconf(_SC_NPROCESSORS_ONLN);
-#endif
- return processors;
-}
-
-//============================================================
// osd_malloc
//============================================================
@@ -150,53 +135,3 @@ void osd_break_into_debugger(const char *message)
printf("Ignoring MAME exception: %s\n", message);
#endif
}
-
-
-//============================================================
-// osd_ticks
-//============================================================
-
-osd_ticks_t osd_ticks(void)
-{
-#ifdef SDLMAME_EMSCRIPTEN
- return (osd_ticks_t)(emscripten_get_now() * 1000.0);
-#else
- struct timeval tp;
- static osd_ticks_t start_sec = 0;
-
- gettimeofday(&tp, NULL);
- if (start_sec==0)
- start_sec = tp.tv_sec;
- return (tp.tv_sec - start_sec) * (osd_ticks_t) 1000000 + tp.tv_usec;
-#endif
-}
-
-
-//============================================================
-// osd_ticks_per_second
-//============================================================
-
-osd_ticks_t osd_ticks_per_second(void)
-{
- return (osd_ticks_t) 1000000;
-}
-
-//============================================================
-// osd_sleep
-//============================================================
-
-void osd_sleep(osd_ticks_t duration)
-{
- UINT32 msec;
-
- // convert to milliseconds, rounding down
- msec = (UINT32)(duration * 1000 / osd_ticks_per_second());
-
- // only sleep if at least 2 full milliseconds
- if (msec >= 2)
- {
- // take a couple of msecs off the top for good measure
- msec -= 2;
- usleep(msec*1000);
- }
-}
diff --git a/src/osd/modules/lib/osdlib_win32.cpp b/src/osd/modules/lib/osdlib_win32.cpp
index 75218574aff..bb6f136be90 100644
--- a/src/osd/modules/lib/osdlib_win32.cpp
+++ b/src/osd/modules/lib/osdlib_win32.cpp
@@ -101,21 +101,6 @@ void osd_process_kill(void)
}
//============================================================
-// osd_num_processors
-//============================================================
-
-int osd_get_num_processors(void)
-{
- SYSTEM_INFO info;
-
- // otherwise, fetch the info from the system
- GetSystemInfo(&info);
-
- // max out at 4 for now since scaling above that seems to do poorly
- return MIN(info.dwNumberOfProcessors, 4);
-}
-
-//============================================================
// osd_malloc
//============================================================
@@ -256,94 +241,3 @@ void osd_break_into_debugger(const char *message)
#endif
}
-//============================================================
-// GLOBAL VARIABLES
-//============================================================
-
-static osd_ticks_t ticks_per_second = 0;
-static osd_ticks_t suspend_ticks = 0;
-static BOOL using_qpc = TRUE;
-
-
-
-//============================================================
-// osd_ticks
-//============================================================
-
-osd_ticks_t osd_ticks(void)
-{
- LARGE_INTEGER performance_count;
-
- // if we're suspended, just return that
- if (suspend_ticks != 0)
- return suspend_ticks;
-
- // if we have a per second count, just go for it
- if (ticks_per_second != 0)
- {
- // QueryPerformanceCounter if we can
- if (using_qpc)
- {
- QueryPerformanceCounter(&performance_count);
- return (osd_ticks_t)performance_count.QuadPart - suspend_ticks;
- }
-
- // otherwise, fall back to timeGetTime
- else
- return (osd_ticks_t)timeGetTime() - suspend_ticks;
- }
-
- // if not, we have to determine it
- using_qpc = QueryPerformanceFrequency(&performance_count) && (performance_count.QuadPart != 0);
- if (using_qpc)
- ticks_per_second = (osd_ticks_t)performance_count.QuadPart;
- else
- ticks_per_second = 1000;
-
- // call ourselves to get the first value
- return osd_ticks();
-}
-
-
-//============================================================
-// osd_ticks_per_second
-//============================================================
-
-osd_ticks_t osd_ticks_per_second(void)
-{
- if (ticks_per_second == 0)
- osd_ticks();
- return ticks_per_second;
-}
-
-//============================================================
-// osd_sleep
-//============================================================
-
-void osd_sleep(osd_ticks_t duration)
-{
- DWORD msec;
-
- // make sure we've computed ticks_per_second
- if (ticks_per_second == 0)
- (void)osd_ticks();
-
- // convert to milliseconds, rounding down
- msec = (DWORD)(duration * 1000 / ticks_per_second);
-
- // only sleep if at least 2 full milliseconds
- if (msec >= 2)
- {
- HANDLE current_thread = GetCurrentThread();
- int old_priority = GetThreadPriority(current_thread);
-
- // take a couple of msecs off the top for good measure
- msec -= 2;
-
- // bump our thread priority super high so that we get
- // priority when we need it
- SetThreadPriority(current_thread, THREAD_PRIORITY_TIME_CRITICAL);
- Sleep(msec);
- SetThreadPriority(current_thread, old_priority);
- }
-}
diff --git a/src/osd/modules/opengl/shader/glsl_bilinear_idx16_lut.fsh b/src/osd/modules/opengl/shader/glsl_bilinear_idx16_lut.fsh
index ef0030b7519..c2fba95bdc6 100644
--- a/src/osd/modules/opengl/shader/glsl_bilinear_idx16_lut.fsh
+++ b/src/osd/modules/opengl/shader/glsl_bilinear_idx16_lut.fsh
@@ -1,4 +1,5 @@
-
+// license:BSD-3-Clause
+// copyright-holders:Sven Gothel
#pragma optimize (on)
#pragma debug (off)
diff --git a/src/osd/modules/opengl/shader/glsl_bilinear_rgb32_dir.fsh b/src/osd/modules/opengl/shader/glsl_bilinear_rgb32_dir.fsh
index c739c16934e..97278c65df5 100644
--- a/src/osd/modules/opengl/shader/glsl_bilinear_rgb32_dir.fsh
+++ b/src/osd/modules/opengl/shader/glsl_bilinear_rgb32_dir.fsh
@@ -1,4 +1,5 @@
-
+// license:BSD-3-Clause
+// copyright-holders:Sven Gothel
#pragma optimize (on)
#pragma debug (off)
diff --git a/src/osd/modules/opengl/shader/glsl_bilinear_rgb32_lut.fsh b/src/osd/modules/opengl/shader/glsl_bilinear_rgb32_lut.fsh
index d6c9f5e7f59..93cd172e0b1 100644
--- a/src/osd/modules/opengl/shader/glsl_bilinear_rgb32_lut.fsh
+++ b/src/osd/modules/opengl/shader/glsl_bilinear_rgb32_lut.fsh
@@ -1,4 +1,5 @@
-
+// license:BSD-3-Clause
+// copyright-holders:Sven Gothel
#pragma optimize (on)
#pragma debug (off)
diff --git a/src/osd/modules/opengl/shader/glsl_plain_idx16_lut.fsh b/src/osd/modules/opengl/shader/glsl_plain_idx16_lut.fsh
index 465aa610d59..9c8728d90b9 100644
--- a/src/osd/modules/opengl/shader/glsl_plain_idx16_lut.fsh
+++ b/src/osd/modules/opengl/shader/glsl_plain_idx16_lut.fsh
@@ -1,4 +1,5 @@
-
+// license:BSD-3-Clause
+// copyright-holders:Sven Gothel
#pragma optimize (on)
#pragma debug (off)
diff --git a/src/osd/modules/opengl/shader/glsl_plain_rgb32_dir.fsh b/src/osd/modules/opengl/shader/glsl_plain_rgb32_dir.fsh
index 0e5a4605ac8..eb3f902f93b 100644
--- a/src/osd/modules/opengl/shader/glsl_plain_rgb32_dir.fsh
+++ b/src/osd/modules/opengl/shader/glsl_plain_rgb32_dir.fsh
@@ -1,4 +1,5 @@
-
+// license:BSD-3-Clause
+// copyright-holders:Sven Gothel
#pragma optimize (on)
#pragma debug (off)
diff --git a/src/osd/modules/opengl/shader/glsl_plain_rgb32_lut.fsh b/src/osd/modules/opengl/shader/glsl_plain_rgb32_lut.fsh
index 14c05aaa844..3bc16870166 100644
--- a/src/osd/modules/opengl/shader/glsl_plain_rgb32_lut.fsh
+++ b/src/osd/modules/opengl/shader/glsl_plain_rgb32_lut.fsh
@@ -1,4 +1,5 @@
-
+// license:BSD-3-Clause
+// copyright-holders:Sven Gothel
#pragma optimize (on)
#pragma debug (off)
diff --git a/src/osd/modules/render/bgfx/chainmanager.cpp b/src/osd/modules/render/bgfx/chainmanager.cpp
index 547694bd1f8..4a14bc47b86 100644
--- a/src/osd/modules/render/bgfx/chainmanager.cpp
+++ b/src/osd/modules/render/bgfx/chainmanager.cpp
@@ -16,6 +16,7 @@
#include <bgfx/bgfxplatform.h>
#include <bgfx/bgfx.h>
#include <bx/readerwriter.h>
+#include <bx/crtimpl.h>
#include "chainmanager.h"
#include "chainreader.h"
diff --git a/src/osd/modules/render/bgfx/effectmanager.cpp b/src/osd/modules/render/bgfx/effectmanager.cpp
index dc2550354f2..c7410406f13 100644
--- a/src/osd/modules/render/bgfx/effectmanager.cpp
+++ b/src/osd/modules/render/bgfx/effectmanager.cpp
@@ -16,6 +16,7 @@
#include <bgfx/bgfxplatform.h>
#include <bgfx/bgfx.h>
#include <bx/readerwriter.h>
+#include <bx/crtimpl.h>
#include "effectmanager.h"
#include "effectreader.h"
diff --git a/src/osd/modules/render/bgfx/shadermanager.cpp b/src/osd/modules/render/bgfx/shadermanager.cpp
index f7e7b30e7ec..93a7205b93c 100644
--- a/src/osd/modules/render/bgfx/shadermanager.cpp
+++ b/src/osd/modules/render/bgfx/shadermanager.cpp
@@ -15,6 +15,7 @@
#include <bgfx/bgfx.h>
#include <bx/fpumath.h>
#include <bx/readerwriter.h>
+#include <bx/crtimpl.h>
#include "shadermanager.h"
diff --git a/src/osd/modules/render/bgfx/statereader.cpp b/src/osd/modules/render/bgfx/statereader.cpp
index 93fb021be5c..0a459c60102 100644
--- a/src/osd/modules/render/bgfx/statereader.cpp
+++ b/src/osd/modules/render/bgfx/statereader.cpp
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
#include "statereader.h"
uint64_t state_reader::get_enum_from_value(const Value& value, std::string name, const uint64_t default_value, const string_to_enum* enums, const int count)
diff --git a/src/osd/modules/render/bgfx/statereader.h b/src/osd/modules/render/bgfx/statereader.h
index d32cf52c817..ce52536ca0a 100644
--- a/src/osd/modules/render/bgfx/statereader.h
+++ b/src/osd/modules/render/bgfx/statereader.h
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
#pragma once
#ifndef __DRAWBGFX_STATE_READER__
diff --git a/src/osd/modules/render/bgfx/writereader.cpp b/src/osd/modules/render/bgfx/writereader.cpp
index 5d6ca0fcf93..7fd36a03fda 100644
--- a/src/osd/modules/render/bgfx/writereader.cpp
+++ b/src/osd/modules/render/bgfx/writereader.cpp
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
#include <bgfx/bgfx.h>
#include "writereader.h"
diff --git a/src/osd/modules/render/bgfx/writereader.h b/src/osd/modules/render/bgfx/writereader.h
index 5210a8df286..bd43b5899f5 100644
--- a/src/osd/modules/render/bgfx/writereader.h
+++ b/src/osd/modules/render/bgfx/writereader.h
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
#pragma once
#ifndef __DRAWBGFX_WRITE_READER__
diff --git a/src/osd/modules/render/binpacker.h b/src/osd/modules/render/binpacker.h
index 696bd18eb7d..33f02dc2642 100644
--- a/src/osd/modules/render/binpacker.h
+++ b/src/osd/modules/render/binpacker.h
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
#pragma once
#ifndef __RECTPACKER_H__
diff --git a/src/osd/modules/render/drawbgfx.h b/src/osd/modules/render/drawbgfx.h
index 62e00dd7d1d..806bc651344 100644
--- a/src/osd/modules/render/drawbgfx.h
+++ b/src/osd/modules/render/drawbgfx.h
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
#pragma once
#ifndef __RENDER_BGFX__
diff --git a/src/osd/modules/sound/xaudio2_sound.cpp b/src/osd/modules/sound/xaudio2_sound.cpp
index 9dc3d0461be..e09d87aa6c6 100644
--- a/src/osd/modules/sound/xaudio2_sound.cpp
+++ b/src/osd/modules/sound/xaudio2_sound.cpp
@@ -9,26 +9,17 @@
#include "sound_module.h"
#include "modules/osdmodule.h"
-#if (defined(OSD_WINDOWS) && USE_XAUDIO2)
+#if defined(OSD_WINDOWS)
// standard windows headers
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
-#include <mutex>
-#pragma warning( push )
-#pragma warning( disable: 4068 )
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wattributes"
// XAudio2 include
#include <xaudio2.h>
-#pragma GCC diagnostic pop
-#pragma warning( pop )
-
-
-#include <mmsystem.h>
// stdlib includes
+#include <mutex>
#include <thread>
#include <queue>
@@ -37,7 +28,8 @@
// MAME headers
#include "emu.h"
#include "osdepend.h"
-#include "emuopts.h"
+
+#include "winutil.h"
//============================================================
// Constants
@@ -133,7 +125,7 @@ typedef std::unique_ptr<IXAudio2MasteringVoice, xaudio2_custom_deleter> masterin
typedef std::unique_ptr<IXAudio2SourceVoice, xaudio2_custom_deleter> src_voice_ptr;
// Typedef for pointer to XAudio2Create
-typedef HRESULT(__stdcall* PFN_XAUDIO2CREATE)(IXAudio2**, UINT32, XAUDIO2_PROCESSOR);
+typedef lazy_loaded_function_p3<HRESULT, IXAudio2**, UINT32, XAUDIO2_PROCESSOR> xaudio2_create_ptr;
//============================================================
// Helper classes
@@ -196,6 +188,8 @@ public:
class sound_xaudio2 : public osd_module, public sound_module, public IXAudio2VoiceCallback
{
private:
+ const wchar_t* XAUDIO_DLLS[2] = { L"XAudio2_9.dll", L"XAudio2_8.dll" };
+
xaudio2_ptr m_xAudio2;
mastering_voice_ptr m_masterVoice;
src_voice_ptr m_sourceVoice;
@@ -211,11 +205,10 @@ private:
std::thread m_audioThread;
std::queue<xaudio2_buffer> m_queue;
std::unique_ptr<bufferpool> m_buffer_pool;
- HMODULE m_xaudio2_module;
- PFN_XAUDIO2CREATE m_pfnxaudio2create;
UINT32 m_overflows;
UINT32 m_underflows;
BOOL m_in_underflow;
+ xaudio2_create_ptr XAudio2Create;
public:
sound_xaudio2() :
@@ -229,56 +222,73 @@ public:
m_buffer_size(0),
m_buffer_count(0),
m_writepos(0),
- m_hEventBufferCompleted(NULL),
- m_hEventDataAvailable(NULL),
- m_hEventExiting(NULL),
+ m_hEventBufferCompleted(nullptr),
+ m_hEventDataAvailable(nullptr),
+ m_hEventExiting(nullptr),
m_buffer_pool(nullptr),
- m_xaudio2_module(NULL),
- m_pfnxaudio2create(nullptr),
m_overflows(0),
m_underflows(0),
- m_in_underflow(FALSE)
+ m_in_underflow(FALSE),
+ XAudio2Create("XAudio2Create", XAUDIO_DLLS, ARRAY_LENGTH(XAUDIO_DLLS))
{
}
- virtual int init(osd_options const &options) override;
- virtual void exit() override;
+ bool probe() override;
+ int init(osd_options const &options) override;
+ void exit() override;
// sound_module
- virtual void update_audio_stream(bool is_throttled, INT16 const *buffer, int samples_this_frame) override;
- virtual void set_mastervolume(int attenuation) override;
+ void update_audio_stream(bool is_throttled, INT16 const *buffer, int samples_this_frame) override;
+ void set_mastervolume(int attenuation) override;
// Xaudio callbacks
- void OnVoiceProcessingPassStart(UINT32 bytes_required) override;
- void OnVoiceProcessingPassEnd() override {}
- void OnStreamEnd() override {}
- void OnBufferStart(void* pBufferContext) override {}
- void OnLoopEnd(void* pBufferContext) override {}
- void OnVoiceError(void* pBufferContext, HRESULT error) override {}
- void OnBufferEnd(void *pBufferContext) override;
+ void STDAPICALLTYPE OnVoiceProcessingPassStart(UINT32 bytes_required) override;
+ void STDAPICALLTYPE OnVoiceProcessingPassEnd() override {}
+ void STDAPICALLTYPE OnStreamEnd() override {}
+ void STDAPICALLTYPE OnBufferStart(void* pBufferContext) override {}
+ void STDAPICALLTYPE OnLoopEnd(void* pBufferContext) override {}
+ void STDAPICALLTYPE OnVoiceError(void* pBufferContext, HRESULT error) override {}
+ void STDAPICALLTYPE OnBufferEnd(void *pBufferContext) override;
private:
void create_buffers(const WAVEFORMATEX &format);
HRESULT create_voices(const WAVEFORMATEX &format);
void process_audio();
- void submit_buffer(std::unique_ptr<BYTE[]> audioData, DWORD audioLength);
+ void submit_buffer(std::unique_ptr<BYTE[]> audioData, DWORD audioLength) const;
void submit_needed();
- HRESULT xaudio2_create(IXAudio2 ** xaudio2_interface);
void roll_buffer();
BOOL submit_next_queued();
};
//============================================================
+// probe
+//============================================================
+
+bool sound_xaudio2::probe()
+{
+ int status = XAudio2Create.initialize();
+ return status == 0;
+}
+
+//============================================================
// init
//============================================================
int sound_xaudio2::init(osd_options const &options)
{
- HRESULT result = S_OK;
+ HRESULT result;
+
+ // Make sure our XAudio2Create entrypoint is bound
+ int status = XAudio2Create.initialize();
+ if (status != 0)
+ {
+ osd_printf_error("Could not find XAudio2 library\n");
+ return 1;
+ }
// Create the IXAudio2 object
IXAudio2 *temp_xaudio2 = nullptr;
- HR_RET1(xaudio2_create(&temp_xaudio2));
+ HR_RET1(this->XAudio2Create(&temp_xaudio2, 0, XAUDIO2_DEFAULT_PROCESSOR));
m_xAudio2 = xaudio2_ptr(temp_xaudio2);
// make a format description for what we want
@@ -292,20 +302,13 @@ int sound_xaudio2::init(osd_options const &options)
m_sample_bytes = format.nBlockAlign;
-#if defined(_DEBUG)
- XAUDIO2_DEBUG_CONFIGURATION debugConfig = { 0 };
- debugConfig.TraceMask = XAUDIO2_LOG_WARNINGS | XAUDIO2_LOG_TIMING | XAUDIO2_LOG_STREAMING;
- debugConfig.LogFunctionName = TRUE;
- m_xAudio2->SetDebugConfiguration(&debugConfig);
-#endif
-
// Create the buffers
create_buffers(format);
// Initialize our events
- m_hEventBufferCompleted = CreateEvent(NULL, FALSE, FALSE, NULL);
- m_hEventDataAvailable = CreateEvent(NULL, FALSE, FALSE, NULL);
- m_hEventExiting = CreateEvent(NULL, FALSE, FALSE, NULL);
+ m_hEventBufferCompleted = CreateEvent(nullptr, FALSE, FALSE, nullptr);
+ m_hEventDataAvailable = CreateEvent(nullptr, FALSE, FALSE, nullptr);
+ m_hEventExiting = CreateEvent(nullptr, FALSE, FALSE, nullptr);
// create the voices and start them
HR_RET1(create_voices(format));
@@ -413,7 +416,7 @@ void sound_xaudio2::set_mastervolume(int attenuation)
// The XAudio2 voice callback triggered when a buffer finishes playing
void sound_xaudio2::OnBufferEnd(void *pBufferContext)
{
- BYTE* completed_buffer = (BYTE*)pBufferContext;
+ BYTE* completed_buffer = static_cast<BYTE*>(pBufferContext);
if (completed_buffer != nullptr)
{
std::lock_guard<std::mutex> lock(m_buffer_lock);
@@ -447,40 +450,6 @@ void sound_xaudio2::OnVoiceProcessingPassStart(UINT32 bytes_required)
}
//============================================================
-// xaudio2_create
-//============================================================
-
-// Dynamically loads the XAudio2 DLL and calls the exported XAudio2Create()
-HRESULT sound_xaudio2::xaudio2_create(IXAudio2 ** ppxaudio2_interface)
-{
- HRESULT result;
-
- if (nullptr == m_pfnxaudio2create)
- {
- if (nullptr == m_xaudio2_module)
- {
- m_xaudio2_module = LoadLibrary(XAUDIO2_DLL);
- if (nullptr == m_xaudio2_module)
- {
- osd_printf_error("Failed to load module '%S', error: 0x%X\n", XAUDIO2_DLL, (unsigned int)GetLastError());
- HR_RETHR(E_FAIL);
- }
- }
-
- m_pfnxaudio2create = (PFN_XAUDIO2CREATE)GetProcAddress(m_xaudio2_module, "XAudio2Create");
- if (nullptr == m_pfnxaudio2create)
- {
- osd_printf_error("Failed to get adddress of exported function XAudio2Create, error: 0x%X\n", (unsigned int)GetLastError());
- HR_RETHR(E_FAIL);
- }
- }
-
- HR_RETHR(m_pfnxaudio2create(ppxaudio2_interface, 0, XAUDIO2_DEFAULT_PROCESSOR));
-
- return S_OK;
-}
-
-//============================================================
// create_buffers
//============================================================
@@ -510,9 +479,9 @@ void sound_xaudio2::create_buffers(const WAVEFORMATEX &format)
osd_printf_verbose(
"Sound: XAudio2 created initial buffers. total size: %u, count %u, size each %u\n",
- (unsigned int)total_buffer_size,
- (unsigned int)m_buffer_count,
- (unsigned int)m_buffer_size);
+ static_cast<unsigned int>(total_buffer_size),
+ static_cast<unsigned int>(m_buffer_count),
+ static_cast<unsigned int>(m_buffer_size));
// reset buffer states
m_writepos = 0;
@@ -608,7 +577,7 @@ void sound_xaudio2::submit_needed()
// submit_buffer
//============================================================
-void sound_xaudio2::submit_buffer(std::unique_ptr<BYTE[]> audioData, DWORD audioLength)
+void sound_xaudio2::submit_buffer(std::unique_ptr<BYTE[]> audioData, DWORD audioLength) const
{
assert(audioLength != 0);
@@ -623,7 +592,7 @@ void sound_xaudio2::submit_buffer(std::unique_ptr<BYTE[]> audioData, DWORD audio
HRESULT result;
if (FAILED(result = m_sourceVoice->SubmitSourceBuffer(&buf)))
{
- osd_printf_verbose("Sound: XAudio2 failed to submit source buffer (non-fatal). Error: 0x%X\n", (unsigned int)result);
+ osd_printf_verbose("Sound: XAudio2 failed to submit source buffer (non-fatal). Error: 0x%X\n", static_cast<unsigned int>(result));
m_buffer_pool->return_to_pool(audioData.release());
return;
}
diff --git a/src/osd/osdcomm.h b/src/osd/osdcomm.h
index 0a94ec0c284..ee040498cf0 100644
--- a/src/osd/osdcomm.h
+++ b/src/osd/osdcomm.h
@@ -65,27 +65,20 @@
/* 8-bit values */
-using UINT8 = uint8_t;
-using INT8 = int8_t;
+using UINT8 = std::uint8_t;
+using INT8 = std::int8_t;
/* 16-bit values */
-using UINT16 = uint16_t;
-using INT16 = int16_t;
+using UINT16 = std::uint16_t;
+using INT16 = std::int16_t;
/* 32-bit values */
-using UINT32 = uint32_t;
-using INT32 = int32_t;
+using UINT32 = std::uint32_t;
+using INT32 = std::int32_t;
/* 64-bit values */
-#ifndef _WINDOWS_H
-#ifdef _MSC_VER
-using UINT64 = unsigned __int64;
-using INT64 = signed __int64;
-#else
-using UINT64 = unsigned long long;
-using INT64 = signed long long;
-#endif
-#endif
+using UINT64 = std::uint64_t;
+using INT64 = std::int64_t;
/* pointer-sized values */
using FPTR = uintptr_t;
@@ -135,25 +128,6 @@ using FPTR = uintptr_t;
#define EXTRACT_64HI(val) ((UINT32)((val) >> 32))
#define EXTRACT_64LO(val) ((UINT32)(val))
-
-/* MINGW has adopted the MSVC formatting for 64-bit ints as of gcc 4.4 */
-#if defined(__MINGW32__) || defined(_MSC_VER)
-#define I64FMT "I64"
-#else
-#define I64FMT "ll"
-#endif
-
-#if defined(_MSC_VER) || defined(__MINGW32__)
-#ifdef PTR64
-#define SIZETFMT "I64u"
-#else
-#define SIZETFMT "u"
-#endif
-#else
-#define SIZETFMT "zu"
-#endif
-
-
/* Highly useful macro for compile-time knowledge of an array size */
#define ARRAY_LENGTH(x) (sizeof(x) / sizeof(x[0]))
diff --git a/src/osd/osdcore.cpp b/src/osd/osdcore.cpp
index 632124e2e7c..fef7d0d0f7a 100644
--- a/src/osd/osdcore.cpp
+++ b/src/osd/osdcore.cpp
@@ -2,6 +2,8 @@
// copyright-holders:Aaron Giles
#include "osdcore.h"
+#include <thread>
+#include <chrono>
static const int MAXSTACK = 10;
static osd_output *m_stack[MAXSTACK];
@@ -141,3 +143,41 @@ void CLIB_DECL osd_printf_log(const char *format, ...)
va_end(argptr);
}
#endif
+
+//============================================================
+// osd_ticks
+//============================================================
+
+osd_ticks_t osd_ticks(void)
+{
+ return std::chrono::high_resolution_clock::now().time_since_epoch().count();
+}
+
+
+//============================================================
+// osd_ticks_per_second
+//============================================================
+
+osd_ticks_t osd_ticks_per_second(void)
+{
+ return std::chrono::high_resolution_clock::period::den / std::chrono::high_resolution_clock::period::num;
+}
+
+//============================================================
+// osd_sleep
+//============================================================
+
+void osd_sleep(osd_ticks_t duration)
+{
+ std::this_thread::sleep_for(std::chrono::high_resolution_clock::duration(duration));
+}
+
+//============================================================
+// osd_num_processors
+//============================================================
+
+int osd_get_num_processors(void)
+{
+ // max out at 4 for now since scaling above that seems to do poorly
+ return MIN(std::thread::hardware_concurrency(), 4);
+}
diff --git a/src/osd/sdl/aueffectutil.mm b/src/osd/sdl/aueffectutil.mm
index 45ca18d178e..531d814e987 100644
--- a/src/osd/sdl/aueffectutil.mm
+++ b/src/osd/sdl/aueffectutil.mm
@@ -1,3 +1,5 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
#import <AvailabilityMacros.h>
#import <AudioUnit/AudioUnit.h>
#import <AudioUnit/AUCocoaUIView.h>
diff --git a/src/osd/sdl/keymaps/km-be.txt b/src/osd/sdl/keymaps/km-be.txt
deleted file mode 100644
index 014f3f02fac..00000000000
--- a/src/osd/sdl/keymaps/km-be.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-# Keymap for Belgian AZERTY keyboard (Linux)
-ITEM_ID_TILDE SDLK_WORLD_18 0x31 0xb2 ²
-ITEM_ID_1 SDLK_AMPERSAND 0xa 0x26 &
-ITEM_ID_2 SDLK_WORLD_73 0xb 0xe9 é
-ITEM_ID_3 SDLK_QUOTEDBL 0xc 0x22 "
-ITEM_ID_4 SDLK_QUOTE 0xd 0x27 '
-ITEM_ID_5 SDLK_LEFTPAREN 0xe 0x28 (
-ITEM_ID_6 SDLK_WORLD_39 0xf 0xa7 §
-ITEM_ID_7 SDLK_WORLD_72 0x10 0xe8 è
-ITEM_ID_8 SDLK_EXCLAIM 0x11 0x21 !
-ITEM_ID_9 SDLK_WORLD_71 0x12 0xe7 ç
-ITEM_ID_0 SDLK_WORLD_64 0x13 0xe0 à
-ITEM_ID_MINUS SDLK_RIGHTPAREN 0x14 0x29 )
-ITEM_ID_EQUALS SDLK_MINUS 0x15 0x2d -
-ITEM_ID_OPENBRACE SDLK_CARET 0x22 0x5e ^
-ITEM_ID_CLOSEBRACE SDLK_DOLLAR 0x23 0x24 $
-ITEM_ID_COMMA SDLK_COMMA 0x3a 0x2c ,
-ITEM_ID_STOP SDLK_SEMICOLON 0x3b 0x3b ;
-ITEM_ID_SLASH SDLK_COLON 0x3c 0x3a :
-ITEM_ID_COLON SDLK_WORLD_89 0x30 0xf9 ù
-ITEM_ID_QUOTE SDLK_WORLD_53 0x33 0xb5 µ
-ITEM_ID_BACKSLASH SDLK_EQUALS 0x3d 0x3d =
-ITEM_ID_BACKSLASH2 SDLK_LESS 0x5e 0x3c <
diff --git a/src/osd/sdl/keymaps/km-ch.txt b/src/osd/sdl/keymaps/km-ch.txt
deleted file mode 100644
index a23545bf5c8..00000000000
--- a/src/osd/sdl/keymaps/km-ch.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-# Keymap file for a swiss keyboard (Linux)
-#
-#
-ITEM_ID_MINUS SDLK_QUOTE 0x14 0x27 '
-ITEM_ID_EQUALS SDLK_CARET 0x15 0x0 ^
-ITEM_ID_Y SDLK_z 0x1d 0x7a z
-ITEM_ID_OPENBRACE SDLK_WORLD_92 0x22 0xfc ü
-ITEM_ID_CLOSEBRACE SDLK_COMPOSE 0x23 0x0 "
-ITEM_ID_COLON SDLK_WORLD_86 0x2f 0xf6 ö
-ITEM_ID_QUOTE SDLK_WORLD_68 0x30 0xe4 ä
-ITEM_ID_TILDE SDLK_WORLD_7 0x31 0xa7 §
-ITEM_ID_BACKSLASH SDLK_LESS 0x5e 0x3c <
-ITEM_ID_Z SDLK_y 0x34 0x79 y
-ITEM_ID_SLASH SDLK_MINUS 0x3d 0x2d -
diff --git a/src/osd/sdl/keymaps/km-de.txt b/src/osd/sdl/keymaps/km-de.txt
deleted file mode 100644
index 5e5b75fa7e9..00000000000
--- a/src/osd/sdl/keymaps/km-de.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-# Keymap file for a german keyboard (Linux)
-#
-#
-ITEM_ID_TILDE SDLK_CARET 0x31 0x0 ^
-ITEM_ID_MINUS SDLK_WORLD_63 0x14 0xdf ß
-ITEM_ID_EQUALS SDLK_COMPOSE 0x15 0x0 '
-ITEM_ID_OPENBRACE SDLK_WORLD_92 0x22 0xfc Ü
-ITEM_ID_CLOSEBRACE SDLK_PLUS 0x23 0x2b +
-ITEM_ID_COLON SDLK_WORLD_86 0x2f 0xf6 Ö
-ITEM_ID_QUOTE SDLK_WORLD_68 0x30 0xe4 Ä
-ITEM_ID_BACKSLASH SDLK_LESS 0x5e 0x3c <
-ITEM_ID_SLASH SDLK_MINUS 0x3d 0x2d -
-ITEM_ID_Z SDLK_y 0x34 0x79 Y
-ITEM_ID_Y SDLK_z 0x1d 0x7a Z
-[SDL2]
-ITEM_ID_TILDE SDL_SCANCODE_GRAVE 0x35 0x0 ^
-ITEM_ID_MINUS SDL_SCANCODE_MINUS 0x2d 0x0 ß
-ITEM_ID_EQUALS SDL_SCANCODE_EQUALS 0x2e 0x0 '
-ITEM_ID_OPENBRACE SDL_SCANCODE_LEFTBRACKET 0x2f 0x0 Ü
-ITEM_ID_CLOSEBRACE SDL_SCANCODE_RIGHTBRACKET 0x30 0x0 +
-ITEM_ID_COLON SDL_SCANCODE_SEMICOLON 0x33 0x0 Ö
-ITEM_ID_QUOTE SDL_SCANCODE_APOSTROPHE 0x34 0x0 Ä
-ITEM_ID_BACKSLASH SDL_SCANCODE_BACKSLASH 0x31 0x0 #
-ITEM_ID_SLASH SDL_SCANCODE_SLASH 0x38 0x0 -
-ITEM_ID_Z SDL_SCANCODE_Y 0x34 0x79 Y
-ITEM_ID_Y SDL_SCANCODE_Z 0x1d 0x7a Z
diff --git a/src/osd/sdl/keymaps/km-fr-OSX.txt b/src/osd/sdl/keymaps/km-fr-OSX.txt
deleted file mode 100644
index fc9bbef9f7c..00000000000
--- a/src/osd/sdl/keymaps/km-fr-OSX.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-# Keymap for French AZERTY keyboard (OSX)
-ITEM_ID_1 SDLK_AMPERSAND 0x12 0x26 &
-ITEM_ID_2 SDLK_WORLD_0 0x13 0xe9 é
-ITEM_ID_3 SDLK_QUOTEDBL 0x14 0x22 "
-ITEM_ID_4 SDLK_QUOTE 0x15 0x27 '
-ITEM_ID_5 SDLK_LEFTPAREN 0x17 0x28 (
-ITEM_ID_6 SDLK_WORLD_1 0x16 0xa7 §
-ITEM_ID_7 SDLK_WORLD_3 0x1a 0xe8 è
-ITEM_ID_8 SDLK_EXCLAIM 0x1c 0x21 !
-ITEM_ID_9 SDLK_WORLD_2 0x19 0xe7 ç
-ITEM_ID_0 SDLK_WORLD_4 0x1d 0xe0 à
-ITEM_ID_MINUS SDLK_RIGHTPAREN 0x1b 0x29 )
-ITEM_ID_EQUALS SDLK_MINUS 0x18 0x2d -
diff --git a/src/osd/sdl/keymaps/km-fr.txt b/src/osd/sdl/keymaps/km-fr.txt
deleted file mode 100644
index f68948295da..00000000000
--- a/src/osd/sdl/keymaps/km-fr.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-# Keymap for French AZERTY keyboard (Linux)
-ITEM_ID_TILDE SDLK_WORLD_18 0x31 0xb2 ²
-ITEM_ID_1 SDLK_AMPERSAND 0xa 0x26 &
-ITEM_ID_2 SDLK_WORLD_73 0xb 0xe9 é
-ITEM_ID_3 SDLK_QUOTEDBL 0xc 0x22 "
-ITEM_ID_4 SDLK_QUOTE 0xd 0x27 '
-ITEM_ID_5 SDLK_LEFTPAREN 0xe 0x28 (
-ITEM_ID_6 SDLK_MINUS 0xf 0x2d -
-ITEM_ID_7 SDLK_WORLD_72 0x10 0xe8 è
-ITEM_ID_8 SDLK_UNDERSCORE 0x11 0x5f _
-ITEM_ID_9 SDLK_WORLD_71 0x12 0xe7 ç
-ITEM_ID_0 SDLK_WORLD_64 0x13 0xe0 à
-ITEM_ID_MINUS SDLK_RIGHTPAREN 0x14 0x29 )
-ITEM_ID_EQUALS SDLK_EQUALS 0x15 0x3d =
-ITEM_ID_OPENBRACE SDLK_CARET 0x22 0x0
-ITEM_ID_CLOSEBRACE SDLK_DOLLAR 0x23 0x0
-ITEM_ID_COMMA SDLK_COMMA 0x3a 0x2c ,
-ITEM_ID_STOP SDLK_SEMICOLON 0x3b 0x3b ;
-ITEM_ID_SLASH SDLK_COLON 0x3c 0x3a :
-ITEM_ID_COLON SDLK_WORLD_89 0x30 0xf9 ù
-ITEM_ID_QUOTE SDLK_ASTERISK 0x33 0x2a *
-ITEM_ID_BACKSLASH SDLK_EXCLAIM 0x3d 0x21 !
-ITEM_ID_BACKSLASH2 SDLK_LESS 0x5e 0x3c <
diff --git a/src/osd/sdl/keymaps/km_it.txt b/src/osd/sdl/keymaps/km_it.txt
deleted file mode 100644
index aae0a121356..00000000000
--- a/src/osd/sdl/keymaps/km_it.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-# MAME/MESS keymap for an italian PC 105-keys keyboard
-
-ITEM_ID_TILDE SDLK_BACKSLASH 0x31 0x5c \
-ITEM_ID_MINUS SDLK_QUOTE 0x14 0x27 '
-ITEM_ID_EQUALS SDLK_WORLD_76 0x15 0xec ì
-ITEM_ID_OPENBRACE SDLK_WORLD_72 0x22 0xe8 è
-ITEM_ID_CLOSEBRACE SDLK_PLUS 0x23 0x2b +
-ITEM_ID_COLON SDLK_WORLD_82 0x2f 0xf2 ò
-ITEM_ID_QUOTE SDLK_WORLD_64 0x30 0xe0 à
-ITEM_ID_BACKSLASH SDLK_WORLD_89 0x33 0xf9 ù
-ITEM_ID_BACKSLASH2 SDLK_LESS 0x5e 0x3c <
-ITEM_ID_SLASH SDLK_MINUS 0x3d 0x2d - \ No newline at end of file
diff --git a/src/osd/sdl/ledutil.sh b/src/osd/sdl/ledutil.sh
index ef9ac93d353..e91e44200de 100644
--- a/src/osd/sdl/ledutil.sh
+++ b/src/osd/sdl/ledutil.sh
@@ -1,5 +1,6 @@
#!/bin/sh
-
+# license:BSD-3-Clause
+# copyright-holders:Olivier Galibert, R. Belmont
# ============================================================
#
# ledutil.sh - Example script for output notifiers
diff --git a/src/osd/sdl/man/LICENSE b/src/osd/sdl/man/LICENSE
new file mode 100644
index 00000000000..670154e3538
--- /dev/null
+++ b/src/osd/sdl/man/LICENSE
@@ -0,0 +1,116 @@
+CC0 1.0 Universal
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later
+claims of infringement build upon, modify, incorporate in other works, reuse
+and redistribute as freely as possible in any form whatsoever and for any
+purposes, including without limitation commercial purposes. These owners may
+contribute to the Commons to promote the ideal of a free culture and the
+further production of creative, cultural and scientific works, or to gain
+reputation or greater distribution for their Work in part through the use and
+efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with a
+Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not limited
+to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display, communicate,
+ and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or performer(s);
+
+ iii. publicity and privacy rights pertaining to a person's image or likeness
+ depicted in a Work;
+
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+
+ v. rights protecting the extraction, dissemination, use and reuse of data in
+ a Work;
+
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation thereof,
+ including any amended or successor version of such directive); and
+
+ vii. other similar, equivalent or corresponding rights throughout the world
+ based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time
+extensions), (iii) in any current or future medium and for any number of
+copies, and (iv) for any purpose whatsoever, including without limitation
+commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
+the Waiver for the benefit of each member of the public at large and to the
+detriment of Affirmer's heirs and successors, fully intending that such Waiver
+shall not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of the Work
+by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account
+Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
+is so judged Affirmer hereby grants to each affected person a royalty-free,
+non transferable, non sublicensable, non exclusive, irrevocable and
+unconditional license to exercise Affirmer's Copyright and Related Rights in
+the Work (i) in all territories worldwide, (ii) for the maximum duration
+provided by applicable law or treaty (including future time extensions), (iii)
+in any current or future medium and for any number of copies, and (iv) for any
+purpose whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed effective as
+of the date CC0 was applied by Affirmer to the Work. Should any part of the
+License for any reason be judged legally invalid or ineffective under
+applicable law, such partial invalidity or ineffectiveness shall not
+invalidate the remainder of the License, and in such case Affirmer hereby
+affirms that he or she will not (i) exercise any of his or her remaining
+Copyright and Related Rights in the Work or (ii) assert any associated claims
+and causes of action with respect to the Work, in either case contrary to
+Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+
+ b. Affirmer offers the Work as-is and makes no representations or warranties
+ of any kind concerning the Work, express, implied, statutory or otherwise,
+ including without limitation warranties of title, merchantability, fitness
+ for a particular purpose, non infringement, or the absence of latent or
+ other defects, accuracy, or the present or absence of errors, whether or not
+ discoverable, all to the greatest extent permissible under applicable law.
+
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without limitation
+ any person's Copyright and Related Rights in the Work. Further, Affirmer
+ disclaims responsibility for obtaining any necessary consents, permissions
+ or other rights required for any use of the Work.
+
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to this
+ CC0 or use of the Work.
+
+For more information, please see
+<http://creativecommons.org/publicdomain/zero/1.0/>
diff --git a/src/osd/sdl/man/README.md b/src/osd/sdl/man/README.md
new file mode 100644
index 00000000000..61036986e6a
--- /dev/null
+++ b/src/osd/sdl/man/README.md
@@ -0,0 +1,5 @@
+# **man pages** #
+
+man pages for MAME and its tools is work of many different contributors, and contain information about usage of MAME and utilities that are comming in package.
+
+Licensed under [CC0 1.0 Universal (CC0 1.0)](https://creativecommons.org/publicdomain/zero/1.0/) \ No newline at end of file
diff --git a/src/osd/sdl/sdlmain.cpp b/src/osd/sdl/sdlmain.cpp
index 1a52a105fd5..66bca69b1cf 100644
--- a/src/osd/sdl/sdlmain.cpp
+++ b/src/osd/sdl/sdlmain.cpp
@@ -270,8 +270,7 @@ void sdl_osd_interface::osd_exit()
if (!SDLMAME_INIT_IN_WORKER_THREAD)
{
- /* FixMe: Bug in SDL2.0, Quitting joystick will cause SIGSEGV */
- SDL_QuitSubSystem(SDL_INIT_TIMER| SDL_INIT_VIDEO /*| SDL_INIT_JOYSTICK */);
+ SDL_QuitSubSystem(SDL_INIT_TIMER| SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER );
}
}
@@ -490,9 +489,9 @@ void sdl_osd_interface::init(running_machine &machine)
{
#ifdef SDLMAME_EMSCRIPTEN
// timer brings in threads which are not supported in Emscripten
- if (SDL_InitSubSystem(SDL_INIT_VIDEO| SDL_INIT_JOYSTICK|SDL_INIT_NOPARACHUTE)) {
+ if (SDL_InitSubSystem(SDL_INIT_VIDEO| SDL_INIT_GAMECONTROLLER|SDL_INIT_NOPARACHUTE)) {
#else
- if (SDL_InitSubSystem(SDL_INIT_TIMER| SDL_INIT_VIDEO| SDL_INIT_JOYSTICK|SDL_INIT_NOPARACHUTE)) {
+ if (SDL_InitSubSystem(SDL_INIT_TIMER| SDL_INIT_VIDEO| SDL_INIT_GAMECONTROLLER|SDL_INIT_NOPARACHUTE)) {
#endif
osd_printf_error("Could not initialize SDL %s\n", SDL_GetError());
exit(-1);
diff --git a/src/osd/sdl/taputil.sh b/src/osd/sdl/taputil.sh
index 669d652436e..1a22048b9ca 100644
--- a/src/osd/sdl/taputil.sh
+++ b/src/osd/sdl/taputil.sh
@@ -1,5 +1,6 @@
#!/bin/sh
-
+# license:BSD-3-Clause
+# copyright-holders:Carl
NAME=$2
OURUID=`id -u $NAME`
HOSTIP=$4
diff --git a/src/osd/sdl/window.cpp b/src/osd/sdl/window.cpp
index 0c5bb7a51ca..1ca6e9605a6 100644
--- a/src/osd/sdl/window.cpp
+++ b/src/osd/sdl/window.cpp
@@ -184,7 +184,7 @@ static OSDWORK_CALLBACK(sdlwindow_thread_id)
if (SDLMAME_INIT_IN_WORKER_THREAD)
{
- if (SDL_InitSubSystem(SDL_INIT_TIMER|SDL_INIT_AUDIO| SDL_INIT_VIDEO| SDL_INIT_JOYSTICK|SDL_INIT_NOPARACHUTE))
+ if (SDL_InitSubSystem(SDL_INIT_TIMER|SDL_INIT_AUDIO| SDL_INIT_VIDEO| SDL_INIT_GAMECONTROLLER|SDL_INIT_NOPARACHUTE))
{
osd_printf_error("Could not initialize SDL: %s.\n", SDL_GetError());
exit(-1);
@@ -203,7 +203,7 @@ bool sdl_osd_interface::window_init()
{
osd_printf_verbose("Enter sdlwindow_init\n");
// determine if we are using multithreading or not
- multithreading_enabled = options().multithreading();
+ multithreading_enabled = false;//options().multithreading();
// get the main thread ID before anything else
main_threadid = SDL_ThreadID();
@@ -310,7 +310,7 @@ static void sdlwindow_sync(void)
while (!osd_work_queue_wait(work_queue, osd_ticks_per_second()*10))
{
osd_printf_warning("sdlwindow_sync: Sleeping...\n");
- osd_sleep(100000);
+ osd_sleep(osd_ticks_per_second() / 1000 * 100);
}
}
}
diff --git a/src/osd/windows/window.cpp b/src/osd/windows/window.cpp
index 52d0a898df7..326e8248bab 100644
--- a/src/osd/windows/window.cpp
+++ b/src/osd/windows/window.cpp
@@ -12,7 +12,6 @@
// Needed for RAW Input
#define WM_INPUT 0x00FF
-#include <stdio.h> // must be here otherwise issues with I64FMT in MINGW
// standard C headers
#include <process.h>
@@ -152,7 +151,7 @@ static void mtlog_dump(void)
for (i = 0; i < mtlogindex; i++)
{
osd_ticks_t curr = mtlog[i].timestamp * 1000000 / cps;
- fprintf(f, "%20" I64FMT "d %10" I64FMT "d %s\n", (UINT64)curr, (UINT64)(curr - last), mtlog[i].event);
+ fprintf(f, "%s",string_format("%20I64d %10I64d %s\n", (UINT64)curr, (UINT64)(curr - last), mtlog[i].event).c_str());
last = curr;
}
fclose(f);
@@ -174,7 +173,7 @@ bool windows_osd_interface::window_init()
size_t temp;
// determine if we are using multithreading or not
- multithreading_enabled = downcast<windows_options &>(machine().options()).multithreading();
+ multithreading_enabled = false;//downcast<windows_options &>(machine().options()).multithreading();
// get the main thread ID before anything else
main_threadid = GetCurrentThreadId();
diff --git a/src/osd/windows/winfile.cpp b/src/osd/windows/winfile.cpp
index e8fcc30ab2c..742f97363d6 100644
--- a/src/osd/windows/winfile.cpp
+++ b/src/osd/windows/winfile.cpp
@@ -290,19 +290,6 @@ file_error osd_fflush(osd_file *file)
if (!file || !file->handle)
return FILERR_FAILURE;
- switch (file->type)
- {
- case WINFILE_FILE:
- // attempt to flush file buffers
- if (!FlushFileBuffers(file->handle))
- return win_error_to_mame_file_error(GetLastError());
- break;
- case WINFILE_SOCKET:
- return FILERR_FAILURE;
- case WINFILE_PTTY:
- return FILERR_FAILURE;
-
- }
return FILERR_NONE;
}
diff --git a/src/osd/windows/winutil.cpp b/src/osd/windows/winutil.cpp
index fe835301907..eb63eecacd0 100644
--- a/src/osd/windows/winutil.cpp
+++ b/src/osd/windows/winutil.cpp
@@ -160,7 +160,7 @@ lazy_loaded_function::lazy_loaded_function(const char * name, const wchar_t* dll
}
lazy_loaded_function::lazy_loaded_function(const char * name, const wchar_t** dll_names, int dll_count)
- : m_name(name), m_initialized(false), m_pfn(nullptr)
+ : m_name(name), m_module(NULL), m_initialized(false), m_pfn(nullptr)
{
for (int i = 0; i < dll_count; i++)
m_dll_names.push_back(std::wstring(dll_names[i]));
@@ -187,14 +187,20 @@ int lazy_loaded_function::initialize()
}
if (m_module == NULL)
+ {
+ osd_printf_verbose("Could not find DLL to dynamically link function %s.\n", m_name.c_str());
return ERROR_DLL_NOT_FOUND;
+ }
}
if (m_pfn == nullptr)
{
m_pfn = GetProcAddress(m_module, m_name.c_str());
if (m_pfn == nullptr)
+ {
+ osd_printf_verbose("Could not find function address to dynamically link function %s.\n", m_name.c_str());
return ERROR_NOT_FOUND;
+ }
}
m_initialized = true;
diff --git a/src/osd/windows/winutil.h b/src/osd/windows/winutil.h
index 8f205e5a8ba..530327dcf61 100644
--- a/src/osd/windows/winutil.h
+++ b/src/osd/windows/winutil.h
@@ -153,4 +153,26 @@ public:
}
};
+// Five parameters
+template <class TRet, class P1, class P2, class P3, class P4, class P5>
+class lazy_loaded_function_p5 : public lazy_loaded_function
+{
+public:
+ lazy_loaded_function_p5(const char * name, const wchar_t* dll_name)
+ : lazy_loaded_function(name, &dll_name, 1)
+ {
+ }
+
+ lazy_loaded_function_p5(const char * name, const wchar_t** dll_names, int dll_count)
+ : lazy_loaded_function(name, dll_names, dll_count)
+ {
+ }
+
+ TRet operator ()(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5)
+ {
+ check_init();
+ return ((TRet(__stdcall *) (P1, P2, P3, P4, P5))m_pfn)(p1, p2, p3, p4, p5);
+ }
+};
+
#endif // __WINUTIL__
diff --git a/src/tools/chdman.cpp b/src/tools/chdman.cpp
index 94ea358e825..1a80bc76e13 100644
--- a/src/tools/chdman.cpp
+++ b/src/tools/chdman.cpp
@@ -23,14 +23,22 @@
#include <stdio.h>
#include <time.h>
#include <ctype.h>
-#include <unordered_map>
+
+#include <iostream>
#include <new>
+#include <unordered_map>
//**************************************************************************
// CONSTANTS & DEFINES
//**************************************************************************
+/* MINGW has adopted the MSVC formatting for 64-bit ints as of gcc 4.4 */
+#if defined(__MINGW32__) || defined(_MSC_VER)
+#define I64FMT "I64"
+#else
+#define I64FMT "ll"
+#endif
// default hard disk sector size
const UINT32 IDE_SECTOR_SIZE = 512;
@@ -99,7 +107,7 @@ const int MODE_GDI = 2;
typedef std::unordered_map<std::string,std::string *> parameters_t;
-static void report_error(int error, const char *format, ...) ATTR_PRINTF(2,3);
+template <typename Format, typename... Params> static void report_error(int error, Format &&fmt, Params &&...args);
static void do_info(parameters_t &params);
static void do_verify(parameters_t &params);
static void do_create_raw(parameters_t &params);
@@ -187,10 +195,10 @@ class chd_rawfile_compressor : public chd_file_compressor
{
public:
// construction/destruction
- chd_rawfile_compressor(core_file *file, UINT64 offset = 0, UINT64 maxoffset = ~0)
+ chd_rawfile_compressor(util::core_file &file, UINT64 offset = 0, UINT64 maxoffset = ~0)
: m_file(file),
m_offset(offset),
- m_maxoffset(MIN(maxoffset, (file != nullptr) ? core_fsize(file) : 0)) { }
+ m_maxoffset((std::min)(maxoffset, file.size())) { }
// read interface
virtual UINT32 read_data(void *dest, UINT64 offset, UINT32 length)
@@ -200,15 +208,15 @@ public:
return 0;
if (offset + length > m_maxoffset)
length = m_maxoffset - offset;
- core_fseek(m_file, offset, SEEK_SET);
- return core_fread(m_file, dest, length);
+ m_file.seek(offset, SEEK_SET);
+ return m_file.read(dest, length);
}
private:
// internal state
- core_file * m_file;
- UINT64 m_offset;
- UINT64 m_maxoffset;
+ util::core_file & m_file;
+ UINT64 m_offset;
+ UINT64 m_maxoffset;
};
@@ -290,14 +298,12 @@ class chd_cd_compressor : public chd_file_compressor
public:
// construction/destruction
chd_cd_compressor(cdrom_toc &toc, chdcd_track_input_info &info)
- : m_file(nullptr),
+ : m_file(),
m_toc(toc),
m_info(info) { }
~chd_cd_compressor()
{
- if (m_file != nullptr)
- core_fclose(m_file);
}
// read interface
@@ -321,12 +327,11 @@ public:
if (offset >= startoffs && offset < endoffs)
{
// if we don't already have this file open, open it now
- if (m_file == nullptr || m_lastfile.compare(m_info.track[tracknum].fname)!=0)
+ if (!m_file || m_lastfile.compare(m_info.track[tracknum].fname)!=0)
{
- if (m_file != nullptr)
- core_fclose(m_file);
+ m_file.reset();
m_lastfile = m_info.track[tracknum].fname;
- file_error filerr = core_fopen(m_lastfile.c_str(), OPEN_FLAG_READ, &m_file);
+ file_error filerr = util::core_file::open(m_lastfile.c_str(), OPEN_FLAG_READ, m_file);
if (filerr != FILERR_NONE)
report_error(1, "Error opening input file (%s)'", m_lastfile.c_str());
}
@@ -349,8 +354,8 @@ public:
}
else
{
- core_fseek(m_file, src_frame_start, SEEK_SET);
- UINT32 count = core_fread(m_file, dest, bytesperframe);
+ m_file->seek(src_frame_start, SEEK_SET);
+ UINT32 count = m_file->read(dest, bytesperframe);
if (count != bytesperframe)
report_error(1, "Error reading input file (%s)'", m_lastfile.c_str());
}
@@ -383,7 +388,7 @@ public:
private:
// internal state
std::string m_lastfile;
- core_file * m_file;
+ util::core_file::ptr m_file;
cdrom_toc & m_toc;
chdcd_track_input_info & m_info;
};
@@ -724,15 +729,11 @@ static const command_description s_commands[] =
// report_error - report an error
//-------------------------------------------------
-static void report_error(int error, const char *format, ...)
+template <typename Format, typename... Params> static void report_error(int error, Format &&fmt, Params &&...args)
{
// output to stderr
- va_list arg;
- va_start(arg, format);
- vfprintf(stderr, format, arg);
- fflush(stderr);
- va_end(arg);
- fprintf(stderr, "\n");
+ util::stream_format(std::cerr, std::forward<Format>(fmt), std::forward<Params>(args)...);
+ std::cerr << std::endl;
// reset time for progress and return the error
lastprogress = 0;
@@ -744,7 +745,7 @@ static void report_error(int error, const char *format, ...)
// progress - generic progress callback
//-------------------------------------------------
-static void ATTR_PRINTF(2,3) progress(bool forceit, const char *format, ...)
+template <typename Format, typename... Params> static void progress(bool forceit, Format &&fmt, Params &&...args)
{
// skip if it hasn't been long enough
clock_t curtime = clock();
@@ -753,11 +754,8 @@ static void ATTR_PRINTF(2,3) progress(bool forceit, const char *format, ...)
lastprogress = curtime;
// standard vfprintf stuff here
- va_list arg;
- va_start(arg, format);
- vfprintf(stderr, format, arg);
- fflush(stderr);
- va_end(arg);
+ util::stream_format(std::cerr, std::forward<Format>(fmt), std::forward<Params>(args)...);
+ std::cerr << std::flush;
}
@@ -1008,11 +1006,11 @@ static void check_existing_output_file(const parameters_t &params, const char *f
{
if (params.find(OPTION_OUTPUT_FORCE) == params.end())
{
- core_file *file;
- file_error filerr = core_fopen(filename, OPEN_FLAG_READ, &file);
+ util::core_file::ptr file;
+ file_error filerr = util::core_file::open(filename, OPEN_FLAG_READ, file);
if (filerr == FILERR_NONE)
{
- core_fclose(file);
+ file.reset();
report_error(1, "Error: file already exists (%s)\nUse --force (or -f) to force overwriting", filename);
}
}
@@ -1185,7 +1183,7 @@ static void compress_common(chd_file_compressor &chd)
// to a CUE file
//-------------------------------------------------
-void output_track_metadata(int mode, core_file *file, int tracknum, const cdrom_track_info &info, const char *filename, UINT32 frameoffs, UINT64 discoffs)
+void output_track_metadata(int mode, util::core_file &file, int tracknum, const cdrom_track_info &info, const char *filename, UINT32 frameoffs, UINT64 discoffs)
{
if (mode == MODE_GDI)
{
@@ -1234,13 +1232,13 @@ void output_track_metadata(int mode, core_file *file, int tracknum, const cdrom_
break;
}
bool needquote = strchr(filename, ' ') != nullptr;
- core_fprintf(file, "%d %d %d %d %s%s%s %" I64FMT "d\n", tracknum+1, frameoffs, mode, size, needquote?"\"":"", filename, needquote?"\"":"", discoffs);
+ file.printf("%d %d %d %d %s%s%s %d\n", tracknum+1, frameoffs, mode, size, needquote?"\"":"", filename, needquote?"\"":"", discoffs);
}
else if (mode == MODE_CUEBIN)
{
// first track specifies the file
if (tracknum == 0)
- core_fprintf(file, "FILE \"%s\" BINARY\n", filename);
+ file.printf("FILE \"%s\" BINARY\n", filename);
// determine submode
std::string tempstr;
@@ -1265,37 +1263,37 @@ void output_track_metadata(int mode, core_file *file, int tracknum, const cdrom_
}
// output TRACK entry
- core_fprintf(file, " TRACK %02d %s\n", tracknum + 1, tempstr.c_str());
+ file.printf(" TRACK %02d %s\n", tracknum + 1, tempstr.c_str());
// output PREGAP tag if pregap sectors are not in the file
if ((info.pregap > 0) && (info.pgdatasize == 0))
{
- core_fprintf(file, " PREGAP %s\n", msf_string_from_frames(tempstr, info.pregap));
- core_fprintf(file, " INDEX 01 %s\n", msf_string_from_frames(tempstr, frameoffs));
+ file.printf(" PREGAP %s\n", msf_string_from_frames(tempstr, info.pregap));
+ file.printf(" INDEX 01 %s\n", msf_string_from_frames(tempstr, frameoffs));
}
else if ((info.pregap > 0) && (info.pgdatasize > 0))
{
- core_fprintf(file, " INDEX 00 %s\n", msf_string_from_frames(tempstr, frameoffs));
- core_fprintf(file, " INDEX 01 %s\n", msf_string_from_frames(tempstr, frameoffs+info.pregap));
+ file.printf(" INDEX 00 %s\n", msf_string_from_frames(tempstr, frameoffs));
+ file.printf(" INDEX 01 %s\n", msf_string_from_frames(tempstr, frameoffs+info.pregap));
}
// if no pregap at all, output index 01 only
if (info.pregap == 0)
{
- core_fprintf(file, " INDEX 01 %s\n", msf_string_from_frames(tempstr, frameoffs));
+ file.printf(" INDEX 01 %s\n", msf_string_from_frames(tempstr, frameoffs));
}
// output POSTGAP
if (info.postgap > 0)
- core_fprintf(file, " POSTGAP %s\n", msf_string_from_frames(tempstr, info.postgap));
+ file.printf(" POSTGAP %s\n", msf_string_from_frames(tempstr, info.postgap));
}
// non-CUE mode
else if (mode == MODE_NORMAL)
{
// header on the first track
if (tracknum == 0)
- core_fprintf(file, "CD_ROM\n\n\n");
- core_fprintf(file, "// Track %d\n", tracknum + 1);
+ file.printf("CD_ROM\n\n\n");
+ file.printf("// Track %d\n", tracknum + 1);
// write out the track type
std::string modesubmode;
@@ -1303,32 +1301,32 @@ void output_track_metadata(int mode, core_file *file, int tracknum, const cdrom_
modesubmode = string_format("%s %s", cdrom_get_type_string(info.trktype), cdrom_get_subtype_string(info.subtype));
else
modesubmode = string_format("%s", cdrom_get_type_string(info.trktype));
- core_fprintf(file, "TRACK %s\n", modesubmode.c_str());
+ file.printf("TRACK %s\n", modesubmode.c_str());
// write out the attributes
- core_fprintf(file, "NO COPY\n");
+ file.printf("NO COPY\n");
if (info.trktype == CD_TRACK_AUDIO)
{
- core_fprintf(file, "NO PRE_EMPHASIS\n");
- core_fprintf(file, "TWO_CHANNEL_AUDIO\n");
+ file.printf("NO PRE_EMPHASIS\n");
+ file.printf("TWO_CHANNEL_AUDIO\n");
}
// output pregap
std::string tempstr;
if (info.pregap > 0)
- core_fprintf(file, "ZERO %s %s\n", modesubmode.c_str(), msf_string_from_frames(tempstr, info.pregap));
+ file.printf("ZERO %s %s\n", modesubmode.c_str(), msf_string_from_frames(tempstr, info.pregap));
// all tracks but the first one have a file offset
if (tracknum > 0)
- core_fprintf(file, "DATAFILE \"%s\" #%d %s // length in bytes: %d\n", filename, UINT32(discoffs), msf_string_from_frames(tempstr, info.frames), info.frames * (info.datasize + info.subsize));
+ file.printf("DATAFILE \"%s\" #%d %s // length in bytes: %d\n", filename, UINT32(discoffs), msf_string_from_frames(tempstr, info.frames), info.frames * (info.datasize + info.subsize));
else
- core_fprintf(file, "DATAFILE \"%s\" %s // length in bytes: %d\n", filename, msf_string_from_frames(tempstr, info.frames), info.frames * (info.datasize + info.subsize));
+ file.printf("DATAFILE \"%s\" %s // length in bytes: %d\n", filename, msf_string_from_frames(tempstr, info.frames), info.frames * (info.datasize + info.subsize));
// tracks with pregaps get a START marker too
if (info.pregap > 0)
- core_fprintf(file, "START %s\n", msf_string_from_frames(tempstr, info.pregap));
+ file.printf("START %s\n", msf_string_from_frames(tempstr, info.pregap));
- core_fprintf(file, "\n\n");
+ file.printf("\n\n");
}
}
@@ -1361,9 +1359,9 @@ static void do_info(parameters_t &params)
printf("Unit Size: %s bytes\n", big_int_string(tempstr, input_chd.unit_bytes()));
printf("Total Units: %s\n", big_int_string(tempstr, input_chd.unit_count()));
printf("Compression: %s\n", compression_string(tempstr, compression));
- printf("CHD size: %s bytes\n", big_int_string(tempstr, core_fsize(input_chd)));
+ printf("CHD size: %s bytes\n", big_int_string(tempstr, static_cast<util::core_file &>(input_chd).size()));
if (compression[0] != CHD_CODEC_NONE)
- printf("Ratio: %.1f%%\n", 100.0 * double(core_fsize(input_chd)) / double(input_chd.logical_bytes()));
+ printf("Ratio: %.1f%%\n", 100.0 * double(static_cast<util::core_file &>(input_chd).size()) / double(input_chd.logical_bytes()));
// add SHA1 output
sha1_t overall = input_chd.sha1();
@@ -1570,11 +1568,11 @@ static void do_verify(parameters_t &params)
static void do_create_raw(parameters_t &params)
{
// process input file
- core_file *input_file = nullptr;
+ util::core_file::ptr input_file;
auto input_file_str = params.find(OPTION_INPUT);
if (input_file_str != params.end())
{
- file_error filerr = core_fopen(input_file_str->second->c_str(), OPEN_FLAG_READ, &input_file);
+ file_error filerr = util::core_file::open(input_file_str->second->c_str(), OPEN_FLAG_READ, input_file);
if (filerr != FILERR_NONE)
report_error(1, "Unable to open file (%s)", input_file_str->second->c_str());
}
@@ -1600,7 +1598,7 @@ static void do_create_raw(parameters_t &params)
// process input start/end (needs to know hunk_size)
UINT64 input_start;
UINT64 input_end;
- parse_input_start_end(params, core_fsize(input_file), hunk_size, hunk_size, input_start, input_end);
+ parse_input_start_end(params, input_file->size(), hunk_size, hunk_size, input_start, input_end);
// process compression
chd_codec_type compression[4];
@@ -1616,7 +1614,7 @@ static void do_create_raw(parameters_t &params)
if (output_parent.opened())
printf("Parent CHD: %s\n", params.find(OPTION_OUTPUT_PARENT)->second->c_str());
printf("Input file: %s\n", input_file_str->second->c_str());
- if (input_start != 0 || input_end != core_fsize(input_file))
+ if (input_start != 0 || input_end != input_file->size())
{
printf("Input start: %s\n", big_int_string(tempstr, input_start));
printf("Input length: %s\n", big_int_string(tempstr, input_end - input_start));
@@ -1630,7 +1628,7 @@ static void do_create_raw(parameters_t &params)
try
{
// create the new CHD
- chd = new chd_rawfile_compressor(input_file, input_start, input_end);
+ chd = new chd_rawfile_compressor(*input_file, input_start, input_end);
chd_error err;
if (output_parent.opened())
err = chd->create(output_chd_str->c_str(), input_end - input_start, hunk_size, compression, output_parent);
@@ -1667,11 +1665,11 @@ static void do_create_raw(parameters_t &params)
static void do_create_hd(parameters_t &params)
{
// process input file
- core_file *input_file = nullptr;
+ util::core_file::ptr input_file;
auto input_file_str = params.find(OPTION_INPUT);
if (input_file_str != params.end())
{
- file_error filerr = core_fopen(input_file_str->second->c_str(), OPEN_FLAG_READ, &input_file);
+ file_error filerr = util::core_file::open(input_file_str->second->c_str(), OPEN_FLAG_READ, input_file);
if (filerr != FILERR_NONE)
report_error(1, "Unable to open file (%s)", input_file_str->second->c_str());
}
@@ -1698,9 +1696,9 @@ static void do_create_hd(parameters_t &params)
UINT64 filesize = 0;
UINT64 input_start = 0;
UINT64 input_end = 0;
- if (input_file != nullptr)
+ if (input_file)
{
- parse_input_start_end(params, core_fsize(input_file), hunk_size, hunk_size, input_start, input_end);
+ parse_input_start_end(params, input_file->size(), hunk_size, hunk_size, input_start, input_end);
filesize = input_end - input_start;
}
else
@@ -1716,10 +1714,10 @@ static void do_create_hd(parameters_t &params)
// process compression
chd_codec_type compression[4];
memcpy(compression, s_default_hd_compression, sizeof(compression));
- if (input_file == nullptr)
+ if (!input_file)
compression[0] = compression[1] = compression[2] = compression[3] = CHD_CODEC_NONE;
parse_compression(params, compression);
- if (input_file == nullptr && compression[0] != CHD_CODEC_NONE)
+ if (!input_file && compression[0] != CHD_CODEC_NONE)
report_error(1, "Blank hard disks must be uncompressed");
// process numprocessors
@@ -1746,7 +1744,7 @@ static void do_create_hd(parameters_t &params)
if (ident_str != params.end())
{
// load the file
- file_error filerr = core_fload(ident_str->second->c_str(), identdata);
+ file_error filerr = util::core_file::load(ident_str->second->c_str(), identdata);
if (filerr != FILERR_NONE)
report_error(1, "Error reading ident file (%s)", ident_str->second->c_str());
@@ -1775,7 +1773,7 @@ static void do_create_hd(parameters_t &params)
// if no CHS values, try to guess them
if (cylinders == 0)
{
- if (input_file == nullptr && filesize == 0)
+ if (!input_file && filesize == 0)
report_error(1, "Blank hard drives must specify either a length or a set of CHS values");
guess_chs((input_file_str != params.end()) ? input_file_str->second : nullptr, filesize, sector_size, cylinders, heads, sectors, sector_size);
}
@@ -1786,10 +1784,10 @@ static void do_create_hd(parameters_t &params)
printf("Output CHD: %s\n", output_chd_str->c_str());
if (output_parent.opened())
printf("Parent CHD: %s\n", params.find(OPTION_OUTPUT_PARENT)->second->c_str());
- if (input_file != nullptr)
+ if (input_file)
{
printf("Input file: %s\n", input_file_str->second->c_str());
- if (input_start != 0 || input_end != core_fsize(input_file))
+ if (input_start != 0 || input_end != input_file->size())
{
printf("Input start: %s\n", big_int_string(tempstr, input_start));
printf("Input length: %s\n", big_int_string(tempstr, filesize));
@@ -1808,7 +1806,7 @@ static void do_create_hd(parameters_t &params)
try
{
// create the new hard drive
- chd = new chd_rawfile_compressor(input_file, input_start, input_end);
+ chd = new chd_rawfile_compressor(*input_file, input_start, input_end);
chd_error err;
if (output_parent.opened())
err = chd->create(output_chd_str->c_str(), UINT64(totalsectors) * UINT64(sector_size), hunk_size, compression, output_parent);
@@ -1832,7 +1830,7 @@ static void do_create_hd(parameters_t &params)
}
// compress it generically
- if (input_file != nullptr)
+ if (input_file)
compress_common(*chd);
delete chd;
}
@@ -2236,11 +2234,11 @@ static void do_extract_raw(parameters_t &params)
}
// catch errors so we can close & delete the output file
- core_file *output_file = nullptr;
+ util::core_file::ptr output_file;
try
{
// process output file
- file_error filerr = core_fopen(output_file_str->second->c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, &output_file);
+ file_error filerr = util::core_file::open(output_file_str->second->c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, output_file);
if (filerr != FILERR_NONE)
report_error(1, "Unable to open file (%s)", output_file_str->second->c_str());
@@ -2257,7 +2255,7 @@ static void do_extract_raw(parameters_t &params)
report_error(1, "Error reading CHD file (%s): %s", params.find(OPTION_INPUT)->second->c_str(), chd_file::error_string(err));
// write to the output
- UINT32 count = core_fwrite(output_file, &buffer[0], bytes_to_read);
+ UINT32 count = output_file->write(&buffer[0], bytes_to_read);
if (count != bytes_to_read)
report_error(1, "Error writing to file; check disk space (%s)", output_file_str->second->c_str());
@@ -2266,7 +2264,7 @@ static void do_extract_raw(parameters_t &params)
}
// finish up
- core_fclose(output_file);
+ output_file.reset();
printf("Extraction complete \n");
}
catch (...)
@@ -2274,7 +2272,7 @@ static void do_extract_raw(parameters_t &params)
// delete the output file
if (output_file != nullptr)
{
- core_fclose(output_file);
+ output_file.reset();
osd_rmfile(output_file_str->second->c_str());
}
throw;
@@ -2329,8 +2327,8 @@ static void do_extract_cd(parameters_t &params)
printf("Input CHD: %s\n", params.find(OPTION_INPUT)->second->c_str());
// catch errors so we can close & delete the output file
- core_file *output_bin_file = nullptr;
- core_file *output_toc_file = nullptr;
+ util::core_file::ptr output_bin_file;
+ util::core_file::ptr output_toc_file;
try
{
int mode = MODE_NORMAL;
@@ -2345,14 +2343,14 @@ static void do_extract_cd(parameters_t &params)
}
// process output file
- file_error filerr = core_fopen(output_file_str->second->c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_NO_BOM, &output_toc_file);
+ file_error filerr = util::core_file::open(output_file_str->second->c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_NO_BOM, output_toc_file);
if (filerr != FILERR_NONE)
report_error(1, "Unable to open file (%s)", output_file_str->second->c_str());
// process output BIN file
if (mode != MODE_GDI)
{
- filerr = core_fopen(output_bin_file_str->c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, &output_bin_file);
+ filerr = util::core_file::open(output_bin_file_str->c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, output_bin_file);
if (filerr != FILERR_NONE)
report_error(1, "Unable to open file (%s)", output_bin_file_str->c_str());
}
@@ -2365,7 +2363,7 @@ static void do_extract_cd(parameters_t &params)
// GDI must start with the # of tracks
if (mode == MODE_GDI)
{
- core_fprintf(output_toc_file, "%d\n", toc->numtrks);
+ output_toc_file->printf("%d\n", toc->numtrks);
}
// iterate over tracks and copy all data
@@ -2386,13 +2384,9 @@ static void do_extract_cd(parameters_t &params)
else
trackbin_name.append(".bin");
- if (output_bin_file)
- {
- core_fclose(output_bin_file);
- output_bin_file = nullptr;
- }
+ output_bin_file.reset();
- filerr = core_fopen(trackbin_name.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, &output_bin_file);
+ filerr = util::core_file::open(trackbin_name.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, output_bin_file);
if (filerr != FILERR_NONE)
report_error(1, "Unable to open file (%s)", trackbin_name.c_str());
@@ -2403,11 +2397,11 @@ static void do_extract_cd(parameters_t &params)
const cdrom_track_info &trackinfo = toc->tracks[tracknum];
if (mode == MODE_GDI)
{
- output_track_metadata(mode, output_toc_file, tracknum, trackinfo, core_filename_extract_base(trackbin_name.c_str()).c_str(), discoffs, outputoffs);
+ output_track_metadata(mode, *output_toc_file, tracknum, trackinfo, core_filename_extract_base(trackbin_name.c_str()).c_str(), discoffs, outputoffs);
}
else
{
- output_track_metadata(mode, output_toc_file, tracknum, trackinfo, core_filename_extract_base(output_bin_file_str->c_str()).c_str(), discoffs, outputoffs);
+ output_track_metadata(mode, *output_toc_file, tracknum, trackinfo, core_filename_extract_base(output_bin_file_str->c_str()).c_str(), discoffs, outputoffs);
}
// If this is bin/cue output and the CHD contains subdata, warn the user and don't include
@@ -2455,8 +2449,8 @@ static void do_extract_cd(parameters_t &params)
// write it out if we need to
if (bufferoffs == buffer.size() || frame == actualframes - 1)
{
- core_fseek(output_bin_file, outputoffs, SEEK_SET);
- UINT32 byteswritten = core_fwrite(output_bin_file, &buffer[0], bufferoffs);
+ output_bin_file->seek(outputoffs, SEEK_SET);
+ UINT32 byteswritten = output_bin_file->write(&buffer[0], bufferoffs);
if (byteswritten != bufferoffs)
report_error(1, "Error writing frame %d to file (%s): %s\n", frame, output_file_str->second->c_str(), chd_file::error_string(CHDERR_WRITE_ERROR));
outputoffs += bufferoffs;
@@ -2468,17 +2462,15 @@ static void do_extract_cd(parameters_t &params)
}
// finish up
- core_fclose(output_bin_file);
- core_fclose(output_toc_file);
+ output_bin_file.reset();
+ output_toc_file.reset();
printf("Extraction complete \n");
}
catch (...)
{
// delete the output files
- if (output_bin_file != nullptr)
- core_fclose(output_bin_file);
- if (output_toc_file != nullptr)
- core_fclose(output_toc_file);
+ output_bin_file.reset();
+ output_toc_file.reset();
osd_rmfile(output_bin_file_str->c_str());
osd_rmfile(output_file_str->second->c_str());
throw;
@@ -2600,8 +2592,8 @@ static void do_extract_ld(parameters_t &params)
chd_error err = input_chd.read_hunk(framenum, nullptr);
if (err != CHDERR_NONE)
{
- UINT64 filepos = core_ftell(input_chd);
- report_error(1, "Error reading hunk %" I64FMT "d at offset %" I64FMT "d from CHD file (%s): %s\n", framenum, filepos, params.find(OPTION_INPUT)->second->c_str(), chd_file::error_string(err));
+ UINT64 filepos = static_cast<util::core_file &>(input_chd).tell();
+ report_error(1, "Error reading hunk %d at offset %d from CHD file (%s): %s\n", framenum, filepos, params.find(OPTION_INPUT)->second->c_str(), chd_file::error_string(err));
}
// write audio
@@ -2609,7 +2601,7 @@ static void do_extract_ld(parameters_t &params)
{
avi_error avierr = avi_append_sound_samples(output_file, chnum, avconfig.audio[chnum], actsamples, 0);
if (avierr != AVIERR_NONE)
- report_error(1, "Error writing samples for hunk %" I64FMT "d to file (%s): %s\n", framenum, output_file_str->second->c_str(), avi_error_string(avierr));
+ report_error(1, "Error writing samples for hunk %d to file (%s): %s\n", framenum, output_file_str->second->c_str(), avi_error_string(avierr));
}
// write video
@@ -2617,7 +2609,7 @@ static void do_extract_ld(parameters_t &params)
{
avi_error avierr = avi_append_video_frame(output_file, fullbitmap);
if (avierr != AVIERR_NONE)
- report_error(1, "Error writing video for hunk %" I64FMT "d to file (%s): %s\n", framenum, output_file_str->second->c_str(), avi_error_string(avierr));
+ report_error(1, "Error writing video for hunk %d to file (%s): %s\n", framenum, output_file_str->second->c_str(), avi_error_string(avierr));
}
}
@@ -2678,7 +2670,7 @@ static void do_add_metadata(parameters_t &params)
dynamic_buffer file;
if (file_str != params.end())
{
- file_error filerr = core_fload(file_str->second->c_str(), file);
+ file_error filerr = util::core_file::load(file_str->second->c_str(), file);
if (filerr != FILERR_NONE)
report_error(1, "Error reading metadata file (%s)", file_str->second->c_str());
}
@@ -2796,21 +2788,21 @@ static void do_dump_metadata(parameters_t &params)
report_error(1, "Error reading metadata: %s", chd_file::error_string(err));
// catch errors so we can close & delete the output file
- core_file *output_file = nullptr;
+ util::core_file::ptr output_file;
try
{
// create the file
if (output_file_str != params.end())
{
- file_error filerr = core_fopen(output_file_str->second->c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, &output_file);
+ file_error filerr = util::core_file::open(output_file_str->second->c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, output_file);
if (filerr != FILERR_NONE)
report_error(1, "Unable to open file (%s)", output_file_str->second->c_str());
// output the metadata
- UINT32 count = core_fwrite(output_file, &buffer[0], buffer.size());
+ UINT32 count = output_file->write(&buffer[0], buffer.size());
if (count != buffer.size())
report_error(1, "Error writing file (%s)", output_file_str->second->c_str());
- core_fclose(output_file);
+ output_file.reset();
// provide some feedback
std::string tempstr;
@@ -2827,8 +2819,7 @@ static void do_dump_metadata(parameters_t &params)
catch (...)
{
// delete the output file
- if (output_file != nullptr)
- core_fclose(output_file);
+ output_file.reset();
osd_rmfile(output_file_str->second->c_str());
throw;
}
diff --git a/src/tools/imgtool/stream.cpp b/src/tools/imgtool/stream.cpp
index 461d2fd99bd..4cc4c9ec2db 100644
--- a/src/tools/imgtool/stream.cpp
+++ b/src/tools/imgtool/stream.cpp
@@ -24,78 +24,112 @@ enum imgtype_t
struct imgtool_stream
{
- imgtype_t imgtype;
- int write_protect;
- const char *name; // needed for clear
- UINT64 position;
- UINT64 filesize;
+ typedef std::unique_ptr<imgtool_stream> ptr;
+
+ imgtool_stream(bool wp)
+ : imgtype(IMG_FILE)
+ , write_protect(wp)
+ , name(nullptr)
+ , position(0)
+ , filesize(0)
+ , file()
+ , buffer(nullptr)
+ {
+ }
+
+ imgtool_stream(
+ bool wp,
+ util::core_file::ptr &&f)
+ : imgtype(IMG_FILE)
+ , write_protect(wp)
+ , name(nullptr)
+ , position(0)
+ , filesize(f->size())
+ , file(std::move(f))
+ , buffer(nullptr)
+ {
+ }
+
+ imgtool_stream(bool wp, std::size_t size)
+ : imgtype(IMG_MEM)
+ , write_protect(wp)
+ , name(nullptr)
+ , position(0)
+ , filesize(size)
+ , file()
+ , buffer(reinterpret_cast<std::uint8_t *>(malloc(size)))
+ {
+ }
+
+ imgtool_stream(bool wp, std::size_t size, void *buf)
+ : imgtype(IMG_MEM)
+ , write_protect(wp)
+ , name(nullptr)
+ , position(0)
+ , filesize(size)
+ , file()
+ , buffer(reinterpret_cast<std::uint8_t *>(buf))
+ {
+ }
- union
+ ~imgtool_stream()
{
- core_file *file;
- UINT8 *buffer;
- } u;
+ free(buffer);
+ }
+
+ imgtype_t imgtype;
+ bool write_protect;
+ const char *name; // needed for clear
+ std::uint64_t position;
+ std::uint64_t filesize;
+
+ util::core_file::ptr file;
+ std::uint8_t *buffer;
};
static imgtool_stream *stream_open_zip(const char *zipname, const char *subname, int read_or_write)
{
- imgtool_stream *imgfile = nullptr;
-// zip_error ziperr;
- zip_file *z = nullptr;
- const zip_file_header *zipent;
- FILE *f;
-
if (read_or_write)
- goto error;
+ return nullptr;
/* check to see if the file exists */
- f = fopen(zipname, "r");
+ FILE *f = fopen(zipname, "r");
if (!f)
- goto error;
+ return nullptr;
fclose(f);
- imgfile = (imgtool_stream *)malloc(sizeof(imgtool_stream));
- if (!imgfile)
- goto error;
+ imgtool_stream::ptr imgfile(new imgtool_stream(true));
- memset(imgfile, 0, sizeof(*imgfile));
imgfile->imgtype = IMG_MEM;
- imgfile->write_protect = 1;
- imgfile->position = 0;
-// ziperr =
+ zip_file *z = nullptr;
+ const zip_file_header *zipent = nullptr;
zip_file_open(zipname, &z);
if (!z)
goto error;
zipent = zip_file_first_file(z);
- while(zipent && subname && strcmp(subname, zipent->filename))
+ while (zipent && subname && strcmp(subname, zipent->filename))
zipent = zip_file_next_file(z);
if (!zipent)
goto error;
imgfile->filesize = zipent->uncompressed_length;
- imgfile->u.buffer = (UINT8*)malloc(zipent->uncompressed_length);
- if (!imgfile->u.buffer)
+ imgfile->buffer = reinterpret_cast<std::uint8_t *>(malloc(zipent->uncompressed_length));
+ if (!imgfile->buffer)
goto error;
- if (zip_file_decompress(z, imgfile->u.buffer, zipent->uncompressed_length))
+ if (zip_file_decompress(z, imgfile->buffer, zipent->uncompressed_length))
goto error;
zip_file_close(z);
- return imgfile;
+ return imgfile.release();
error:
if (z)
zip_file_close(z);
- if (imgfile)
- {
- if (imgfile->u.buffer)
- free(imgfile->u.buffer);
- free(imgfile);
- }
return nullptr;
}
@@ -103,9 +137,6 @@ error:
imgtool_stream *stream_open(const char *fname, int read_or_write)
{
- file_error filerr;
- const char *ext;
- imgtool_stream *imgfile = nullptr;
static const UINT32 write_modes[] =
{
OPEN_FLAG_READ,
@@ -113,118 +144,70 @@ imgtool_stream *stream_open(const char *fname, int read_or_write)
OPEN_FLAG_READ | OPEN_FLAG_WRITE,
OPEN_FLAG_READ | OPEN_FLAG_WRITE | OPEN_FLAG_CREATE
};
- core_file *f = nullptr;
- char *buf = nullptr;
- int len, i;
imgtool_stream *s = nullptr;
char c;
/* maybe we are just a ZIP? */
- ext = strrchr(fname, '.');
+ const char *ext = strrchr(fname, '.');
if (ext && !core_stricmp(ext, ".zip"))
return stream_open_zip(fname, nullptr, read_or_write);
- filerr = core_fopen(fname, write_modes[read_or_write], &f);
+ util::core_file::ptr f = nullptr;
+ auto const filerr = util::core_file::open(fname, write_modes[read_or_write], f);
if (filerr != FILERR_NONE)
{
if (!read_or_write)
{
- len = strlen(fname);
+ int const len = strlen(fname);
/* can't open the file; try opening ZIP files with other names */
- buf = (char*)malloc(len + 1);
- if (!buf)
- goto error;
- strcpy(buf, fname);
+ std::vector<char> buf(len + 1);
+ strcpy(&buf[0], fname);
- for(i = len-1; !s && (i >= 0); i--)
+ for (int i = len-1; !s && (i >= 0); i--)
{
if ((buf[i] == '\\') || (buf[i] == '/'))
{
c = buf[i];
buf[i] = '\0';
- s = stream_open_zip(buf, buf + i + 1, read_or_write);
+ s = stream_open_zip(&buf[0], &buf[i + 1], read_or_write);
buf[i] = c;
}
}
- free(buf);
- buf = nullptr;
if (s)
return s;
}
/* ah well, it was worth a shot */
- goto error;
+ return nullptr;
}
- imgfile = (imgtool_stream *)malloc(sizeof(imgtool_stream));
- if (!imgfile)
- goto error;
+ imgtool_stream::ptr imgfile(new imgtool_stream(read_or_write ? false : true, std::move(f)));
/* Normal file */
- memset(imgfile, 0, sizeof(*imgfile));
- imgfile->imgtype = IMG_FILE;
- imgfile->position = 0;
- imgfile->filesize = core_fsize(f);
- imgfile->write_protect = read_or_write ? 0 : 1;
- imgfile->u.file = f;
imgfile->name = fname;
- return imgfile;
-
-error:
- if (imgfile != nullptr)
- free((void *) imgfile);
- if (f != nullptr)
- core_fclose(f);
- if (buf)
- free(buf);
- return (imgtool_stream *) nullptr;
+ return imgfile.release();
}
imgtool_stream *stream_open_write_stream(int size)
{
- imgtool_stream *imgfile;
-
- imgfile = (imgtool_stream *)malloc(sizeof(imgtool_stream));
- if (!imgfile)
- return nullptr;
-
- imgfile->imgtype = IMG_MEM;
- imgfile->write_protect = 0;
- imgfile->position = 0;
- imgfile->filesize = size;
- imgfile->u.buffer = (UINT8*)malloc(size);
-
- if (!imgfile->u.buffer)
- {
- free(imgfile);
+ imgtool_stream::ptr imgfile(new imgtool_stream(false, size));
+ if (!imgfile->buffer)
return nullptr;
- }
- return imgfile;
+ return imgfile.release();
}
imgtool_stream *stream_open_mem(void *buf, size_t sz)
{
- imgtool_stream *imgfile;
-
- imgfile = (imgtool_stream *)malloc(sizeof(imgtool_stream));
- if (!imgfile)
- return nullptr;
+ imgtool_stream::ptr imgfile(new imgtool_stream(false, sz, buf));
- memset(imgfile, 0, sizeof(*imgfile));
- imgfile->imgtype = IMG_MEM;
- imgfile->position = 0;
- imgfile->write_protect = 0;
-
- imgfile->filesize = sz;
- imgfile->u.buffer = (UINT8*)buf;
- return imgfile;
+ return imgfile.release();
}
@@ -233,36 +216,14 @@ void stream_close(imgtool_stream *s)
{
assert(s != nullptr);
- switch(s->imgtype)
- {
- case IMG_FILE:
- if (s->u.file != nullptr)
- {
- core_fclose(s->u.file);
- s->u.file = nullptr;
- }
- break;
-
- case IMG_MEM:
- if (s->u.buffer != nullptr)
- {
- free(s->u.buffer);
- s->u.buffer = nullptr;
- }
- break;
-
- default:
- assert(0);
- break;
- }
- free((void *) s);
+ delete s;
}
-core_file *stream_core_file(imgtool_stream *stream)
+util::core_file *stream_core_file(imgtool_stream *stream)
{
- return (stream->imgtype == IMG_FILE) ? stream->u.file : nullptr;
+ return (stream->imgtype == IMG_FILE) ? stream->file.get() : nullptr;
}
@@ -275,8 +236,8 @@ UINT32 stream_read(imgtool_stream *stream, void *buf, UINT32 sz)
{
case IMG_FILE:
assert(sz == (UINT32) sz);
- core_fseek(stream->u.file, stream->position, SEEK_SET);
- result = core_fread(stream->u.file, buf, (UINT32) sz);
+ stream->file->seek(stream->position, SEEK_SET);
+ result = stream->file->read(buf, (UINT32) sz);
break;
case IMG_MEM:
@@ -284,7 +245,7 @@ UINT32 stream_read(imgtool_stream *stream, void *buf, UINT32 sz)
if (sz > (stream->filesize - stream->position))
sz = (UINT32) (stream->filesize - stream->position);
- memcpy(buf, stream->u.buffer + stream->position, sz);
+ memcpy(buf, stream->buffer + stream->position, sz);
result = sz;
break;
@@ -312,11 +273,11 @@ UINT32 stream_write(imgtool_stream *s, const void *buf, UINT32 sz)
if (s->filesize < s->position + sz)
{
/* try to expand the buffer */
- if (s->u.buffer) free(s->u.buffer);
+ if (s->buffer) free(s->buffer);
new_buffer = malloc(s->position + sz);
if (new_buffer)
{
- s->u.buffer = (UINT8*)new_buffer;
+ s->buffer = (UINT8*)new_buffer;
s->filesize = s->position + sz;
}
}
@@ -325,14 +286,14 @@ UINT32 stream_write(imgtool_stream *s, const void *buf, UINT32 sz)
if (sz > (s->filesize - s->position))
sz = (UINT32) (s->filesize - s->position);
- memcpy(s->u.buffer + s->position, buf, sz);
+ memcpy(s->buffer + s->position, buf, sz);
result = sz;
}
break;
case IMG_FILE:
- core_fseek(s->u.file, s->position, SEEK_SET);
- result = core_fwrite(s->u.file, buf, sz);
+ s->file->seek(s->position, SEEK_SET);
+ result = s->file->write(buf, sz);
break;
default:
@@ -365,7 +326,7 @@ void *stream_getptr(imgtool_stream *f)
switch(f->imgtype)
{
case IMG_MEM:
- ptr = f->u.buffer;
+ ptr = f->buffer;
break;
default:
@@ -445,7 +406,7 @@ int stream_crc(imgtool_stream *s, unsigned long *result)
switch(s->imgtype)
{
case IMG_MEM:
- *result = crc32(0, (unsigned char *) s->u.buffer, (size_t) s->filesize);
+ *result = crc32(0, (unsigned char *) s->buffer, (size_t) s->filesize);
break;
default:
diff --git a/src/tools/imgtool/stream.h b/src/tools/imgtool/stream.h
index 13e6e0d727f..ee362c9c32b 100644
--- a/src/tools/imgtool/stream.h
+++ b/src/tools/imgtool/stream.h
@@ -20,7 +20,7 @@ imgtool_stream *stream_open(const char *fname, int read_or_write); /* similar p
imgtool_stream *stream_open_write_stream(int filesize);
imgtool_stream *stream_open_mem(void *buf, size_t sz);
void stream_close(imgtool_stream *stream);
-core_file *stream_core_file(imgtool_stream *stream);
+util::core_file *stream_core_file(imgtool_stream *stream);
UINT32 stream_read(imgtool_stream *stream, void *buf, UINT32 sz);
UINT32 stream_write(imgtool_stream *stream, const void *buf, UINT32 sz);
UINT64 stream_size(imgtool_stream *stream);
diff --git a/src/tools/ldresample.cpp b/src/tools/ldresample.cpp
index 771c4e94676..1f04edac3f0 100644
--- a/src/tools/ldresample.cpp
+++ b/src/tools/ldresample.cpp
@@ -554,7 +554,7 @@ int main(int argc, char *argv[])
// open the destination file
chd_resample_compressor dstfile(srcfile, info, INT64(offset * 65536.0 * 256.0), INT64(slope * 65536.0 * 256.0));
err = create_chd(dstfile, dstfilename, srcfile, info);
- if (dstfile == nullptr)
+ if (!dstfile.opened())
{
fprintf(stderr, "Unable to create file '%s'\n", dstfilename);
return 1;
diff --git a/src/tools/pngcmp.cpp b/src/tools/pngcmp.cpp
index dda54ed7730..5103740389b 100644
--- a/src/tools/pngcmp.cpp
+++ b/src/tools/pngcmp.cpp
@@ -72,7 +72,7 @@ static int generate_png_diff(const std::string& imgfile1, const std::string& img
bitmap_argb32 bitmap2;
bitmap_argb32 finalbitmap;
int width, height, maxwidth;
- core_file *file = nullptr;
+ util::core_file::ptr file;
file_error filerr;
png_error pngerr;
int error = 100;
@@ -80,7 +80,7 @@ static int generate_png_diff(const std::string& imgfile1, const std::string& img
int x, y;
/* open the source image */
- filerr = core_fopen(imgfile1.c_str(), OPEN_FLAG_READ, &file);
+ filerr = util::core_file::open(imgfile1.c_str(), OPEN_FLAG_READ, file);
if (filerr != FILERR_NONE)
{
printf("Could not open %s (%d)\n", imgfile1.c_str(), filerr);
@@ -88,8 +88,8 @@ static int generate_png_diff(const std::string& imgfile1, const std::string& img
}
/* load the source image */
- pngerr = png_read_bitmap(file, bitmap1);
- core_fclose(file);
+ pngerr = png_read_bitmap(*file, bitmap1);
+ file.reset();
if (pngerr != PNGERR_NONE)
{
printf("Could not read %s (%d)\n", imgfile1.c_str(), pngerr);
@@ -97,7 +97,7 @@ static int generate_png_diff(const std::string& imgfile1, const std::string& img
}
/* open the source image */
- filerr = core_fopen(imgfile2.c_str(), OPEN_FLAG_READ, &file);
+ filerr = util::core_file::open(imgfile2.c_str(), OPEN_FLAG_READ, file);
if (filerr != FILERR_NONE)
{
printf("Could not open %s (%d)\n", imgfile2.c_str(), filerr);
@@ -105,8 +105,8 @@ static int generate_png_diff(const std::string& imgfile1, const std::string& img
}
/* load the source image */
- pngerr = png_read_bitmap(file, bitmap2);
- core_fclose(file);
+ pngerr = png_read_bitmap(*file, bitmap2);
+ file.reset();
if (pngerr != PNGERR_NONE)
{
printf("Could not read %s (%d)\n", imgfile2.c_str(), pngerr);
@@ -170,14 +170,14 @@ static int generate_png_diff(const std::string& imgfile1, const std::string& img
}
/* write the final PNG */
- filerr = core_fopen(outfilename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, &file);
+ filerr = util::core_file::open(outfilename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, file);
if (filerr != FILERR_NONE)
{
printf("Could not open %s (%d)\n", outfilename.c_str(), filerr);
goto error;
}
- pngerr = png_write_bitmap(file, nullptr, finalbitmap, 0, nullptr);
- core_fclose(file);
+ pngerr = png_write_bitmap(*file, nullptr, finalbitmap, 0, nullptr);
+ file.reset();
if (pngerr != PNGERR_NONE)
{
printf("Could not write %s (%d)\n", outfilename.c_str(), pngerr);
diff --git a/src/tools/regrep.cpp b/src/tools/regrep.cpp
index 16eaa21f7de..b0cad2497ae 100644
--- a/src/tools/regrep.cpp
+++ b/src/tools/regrep.cpp
@@ -148,15 +148,15 @@ static int CLIB_DECL compare_file(const void *file0ptr, const void *file1ptr);
static summary_file *sort_file_list(void);
/* HTML helpers */
-static core_file *create_file_and_output_header(std::string &filename, std::string &templatefile, std::string &title);
-static void output_footer_and_close_file(core_file *file, std::string &templatefile, std::string &title);
+static util::core_file::ptr create_file_and_output_header(std::string &filename, std::string &templatefile, std::string &title);
+static void output_footer_and_close_file(util::core_file::ptr &&file, std::string &templatefile, std::string &title);
/* report generators */
static void output_report(std::string &dirname, std::string &tempheader, std::string &tempfooter, summary_file *filelist);
static int compare_screenshots(summary_file *curfile);
static int generate_png_diff(const summary_file *curfile, std::string &destdir, const char *destname);
static void create_linked_file(std::string &dirname, const summary_file *curfile, const summary_file *prevfile, const summary_file *nextfile, const char *pngfile, std::string &tempheader, std::string &tempfooter);
-static void append_driver_list_table(const char *header, std::string &dirname, core_file *indexfile, const summary_file *listhead, std::string &tempheader, std::string &tempfooter);
+static void append_driver_list_table(const char *header, std::string &dirname, util::core_file &indexfile, const summary_file *listhead, std::string &tempheader, std::string &tempfooter);
@@ -235,7 +235,7 @@ int main(int argc, char *argv[])
/* read the template file into an astring */
std::string tempheader;
- if (core_fload(tempfilename.c_str(), &buffer, &bufsize) == FILERR_NONE)
+ if (util::core_file::load(tempfilename.c_str(), &buffer, bufsize) == FILERR_NONE)
{
tempheader.assign((const char *)buffer, bufsize);
osd_free(buffer);
@@ -560,18 +560,18 @@ static summary_file *sort_file_list(void)
HTML file with a standard header
-------------------------------------------------*/
-static core_file *create_file_and_output_header(std::string &filename, std::string &templatefile, std::string &title)
+static util::core_file::ptr create_file_and_output_header(std::string &filename, std::string &templatefile, std::string &title)
{
- core_file *file;
+ util::core_file::ptr file;
/* create the indexfile */
- if (core_fopen(filename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS | OPEN_FLAG_NO_BOM, &file) != FILERR_NONE)
- return nullptr;
+ if (util::core_file::open(filename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS | OPEN_FLAG_NO_BOM, file) != FILERR_NONE)
+ return util::core_file::ptr();
/* print a header */
std::string modified(templatefile);
strreplace(modified, "<!--TITLE-->", title.c_str());
- core_fwrite(file, modified.c_str(), modified.length());
+ file->write(modified.c_str(), modified.length());
/* return the file */
return file;
@@ -583,12 +583,12 @@ static core_file *create_file_and_output_header(std::string &filename, std::stri
standard footer to an HTML file and close it
-------------------------------------------------*/
-static void output_footer_and_close_file(core_file *file, std::string &templatefile, std::string &title)
+static void output_footer_and_close_file(util::core_file::ptr &&file, std::string &templatefile, std::string &title)
{
std::string modified(templatefile);
strreplace(modified, "<!--TITLE-->", title.c_str());
- core_fwrite(file, modified.c_str(), modified.length());
- core_fclose(file);
+ file->write(modified.c_str(), modified.length());
+ file.reset();
}
@@ -609,7 +609,7 @@ static void output_report(std::string &dirname, std::string &tempheader, std::st
std::string title("MAME Regressions");
std::string tempname;
int listnum, bucknum;
- core_file *indexfile;
+ util::core_file::ptr indexfile;
int count = 0, total;
/* initialize the lists */
@@ -688,7 +688,7 @@ static void output_report(std::string &dirname, std::string &tempheader, std::st
/* output header */
tempname = string_format("%s" PATH_SEPARATOR "%s", dirname.c_str(), "index.html");
indexfile = create_file_and_output_header(tempname, tempheader, title);
- if (indexfile == nullptr)
+ if (!indexfile)
{
fprintf(stderr, "Error creating file '%s'\n", tempname.c_str());
return;
@@ -702,12 +702,12 @@ static void output_report(std::string &dirname, std::string &tempheader, std::st
if (buckethead[curbucket] != nullptr)
{
fprintf(stderr, "Outputting bucket: %s\n", bucket_name[curbucket]);
- append_driver_list_table(bucket_name[curbucket], dirname, indexfile, buckethead[curbucket], tempheader, tempfooter);
+ append_driver_list_table(bucket_name[curbucket], dirname, *indexfile, buckethead[curbucket], tempheader, tempfooter);
}
}
/* output footer */
- output_footer_and_close_file(indexfile, tempfooter, title);
+ output_footer_and_close_file(std::move(indexfile), tempfooter, title);
}
@@ -729,13 +729,13 @@ static int compare_screenshots(summary_file *curfile)
{
std::string fullname;
file_error filerr;
- core_file *file;
+ util::core_file::ptr file;
/* get the filename for the image */
fullname = string_format("%s" PATH_SEPARATOR "snap" PATH_SEPARATOR "%s" PATH_SEPARATOR "final.png", lists[listnum].dir, curfile->name);
/* open the file */
- filerr = core_fopen(fullname.c_str(), OPEN_FLAG_READ, &file);
+ filerr = util::core_file::open(fullname.c_str(), OPEN_FLAG_READ, file);
/* if that failed, look in the old location */
if (filerr != FILERR_NONE)
@@ -744,14 +744,14 @@ static int compare_screenshots(summary_file *curfile)
fullname = string_format("%s" PATH_SEPARATOR "snap" PATH_SEPARATOR "_%s.png", lists[listnum].dir, curfile->name);
/* open the file */
- filerr = core_fopen(fullname.c_str(), OPEN_FLAG_READ, &file);
+ filerr = util::core_file::open(fullname.c_str(), OPEN_FLAG_READ, file);
}
/* if that worked, load the file */
if (filerr == FILERR_NONE)
{
- png_read_bitmap(file, bitmaps[listnum]);
- core_fclose(file);
+ png_read_bitmap(*file, bitmaps[listnum]);
+ file.reset();
}
}
@@ -836,7 +836,7 @@ static int generate_png_diff(const summary_file *curfile, std::string &destdir,
int width, height, maxwidth;
int bitmapcount = 0;
int listnum, bmnum;
- core_file *file = nullptr;
+ util::core_file::ptr file;
file_error filerr;
png_error pngerr;
int error = -1;
@@ -853,13 +853,13 @@ static int generate_png_diff(const summary_file *curfile, std::string &destdir,
tempname = string_format("%s" PATH_SEPARATOR "%s", lists[listnum].dir, srcimgname.c_str());
/* open the source image */
- filerr = core_fopen(tempname.c_str(), OPEN_FLAG_READ, &file);
+ filerr = util::core_file::open(tempname.c_str(), OPEN_FLAG_READ, file);
if (filerr != FILERR_NONE)
goto error;
/* load the source image */
- pngerr = png_read_bitmap(file, bitmaps[bitmapcount++]);
- core_fclose(file);
+ pngerr = png_read_bitmap(*file, bitmaps[bitmapcount++]);
+ file.reset();
if (pngerr != PNGERR_NONE)
goto error;
}
@@ -925,11 +925,11 @@ static int generate_png_diff(const summary_file *curfile, std::string &destdir,
}
/* write the final PNG */
- filerr = core_fopen(dstfilename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, &file);
+ filerr = util::core_file::open(dstfilename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, file);
if (filerr != FILERR_NONE)
goto error;
- pngerr = png_write_bitmap(file, nullptr, finalbitmap, 0, nullptr);
- core_fclose(file);
+ pngerr = png_write_bitmap(*file, nullptr, finalbitmap, 0, nullptr);
+ file.reset();
if (pngerr != PNGERR_NONE)
goto error;
@@ -953,7 +953,7 @@ static void create_linked_file(std::string &dirname, const summary_file *curfile
std::string linkname;
std::string filename;
std::string title;
- core_file *linkfile;
+ util::core_file::ptr linkfile;
int listnum;
/* create the filename */
@@ -970,19 +970,19 @@ static void create_linked_file(std::string &dirname, const summary_file *curfile
}
/* link to the previous/next entries */
- core_fprintf(linkfile, "\t<p>\n");
- core_fprintf(linkfile, "\t<table width=\"100%%\">\n");
- core_fprintf(linkfile, "\t\t<td align=\"left\" width=\"40%%\" style=\"border:none\">");
+ linkfile->printf("\t<p>\n");
+ linkfile->printf("\t<table width=\"100%%\">\n");
+ linkfile->printf("\t\t<td align=\"left\" width=\"40%%\" style=\"border:none\">");
if (prevfile != nullptr)
- core_fprintf(linkfile, "<a href=\"%s.html\"><< %s (%s)</a>", prevfile->name, prevfile->name, prevfile->source);
- core_fprintf(linkfile, "</td>\n");
- core_fprintf(linkfile, "\t\t<td align=\"center\" width=\"20%%\" style=\"border:none\"><a href=\"index.html\">Home</a></td>\n");
- core_fprintf(linkfile, "\t\t<td align=\"right\" width=\"40%%\" style=\"border:none\">");
+ linkfile->printf("<a href=\"%s.html\"><< %s (%s)</a>", prevfile->name, prevfile->name, prevfile->source);
+ linkfile->printf("</td>\n");
+ linkfile->printf("\t\t<td align=\"center\" width=\"20%%\" style=\"border:none\"><a href=\"index.html\">Home</a></td>\n");
+ linkfile->printf("\t\t<td align=\"right\" width=\"40%%\" style=\"border:none\">");
if (nextfile != nullptr)
- core_fprintf(linkfile, "<a href=\"%s.html\">%s (%s) >></a>", nextfile->name, nextfile->name, nextfile->source);
- core_fprintf(linkfile, "</td>\n");
- core_fprintf(linkfile, "\t</table>\n");
- core_fprintf(linkfile, "\t</p>\n");
+ linkfile->printf("<a href=\"%s.html\">%s (%s) >></a>", nextfile->name, nextfile->name, nextfile->source);
+ linkfile->printf("</td>\n");
+ linkfile->printf("\t</table>\n");
+ linkfile->printf("\t</p>\n");
/* output data for each one */
for (listnum = 0; listnum < list_count; listnum++)
@@ -990,34 +990,34 @@ static void create_linked_file(std::string &dirname, const summary_file *curfile
int imageindex = -1;
/* generate the HTML */
- core_fprintf(linkfile, "\n\t<h2>%s</h2>\n", lists[listnum].version);
- core_fprintf(linkfile, "\t<p>\n");
- core_fprintf(linkfile, "\t<b>Status:</b> %s\n", status_text[curfile->status[listnum]]);
+ linkfile->printf("\n\t<h2>%s</h2>\n", lists[listnum].version);
+ linkfile->printf("\t<p>\n");
+ linkfile->printf("\t<b>Status:</b> %s\n", status_text[curfile->status[listnum]]);
if (pngfile != nullptr)
imageindex = get_unique_index(curfile, listnum);
if (imageindex != -1)
- core_fprintf(linkfile, " [%d]", imageindex);
- core_fprintf(linkfile, "\t</p>\n");
+ linkfile->printf(" [%d]", imageindex);
+ linkfile->printf("\t</p>\n");
if (curfile->text[listnum].length() != 0)
{
- core_fprintf(linkfile, "\t<p>\n");
- core_fprintf(linkfile, "\t<b>Errors:</b>\n");
- core_fprintf(linkfile, "\t<pre>%s</pre>\n", curfile->text[listnum].c_str());
- core_fprintf(linkfile, "\t</p>\n");
+ linkfile->printf("\t<p>\n");
+ linkfile->printf("\t<b>Errors:</b>\n");
+ linkfile->printf("\t<pre>%s</pre>\n", curfile->text[listnum].c_str());
+ linkfile->printf("\t</p>\n");
}
}
/* output link to the image */
if (pngfile != nullptr)
{
- core_fprintf(linkfile, "\n\t<h2>Screenshot Comparisons</h2>\n");
- core_fprintf(linkfile, "\t<p>\n");
- core_fprintf(linkfile, "\t<img src=\"%s\" />\n", pngfile);
- core_fprintf(linkfile, "\t</p>\n");
+ linkfile->printf("\n\t<h2>Screenshot Comparisons</h2>\n");
+ linkfile->printf("\t<p>\n");
+ linkfile->printf("\t<img src=\"%s\" />\n", pngfile);
+ linkfile->printf("\t</p>\n");
}
/* output footer */
- output_footer_and_close_file(linkfile, tempfooter, title);
+ output_footer_and_close_file(std::move(linkfile), tempfooter, title);
}
@@ -1026,28 +1026,28 @@ static void create_linked_file(std::string &dirname, const summary_file *curfile
of drivers from a list to an HTML file
-------------------------------------------------*/
-static void append_driver_list_table(const char *header, std::string &dirname, core_file *indexfile, const summary_file *listhead, std::string &tempheader, std::string &tempfooter)
+static void append_driver_list_table(const char *header, std::string &dirname, util::core_file &indexfile, const summary_file *listhead, std::string &tempheader, std::string &tempfooter)
{
const summary_file *curfile, *prevfile;
int width = 100 / (2 + list_count);
int listnum;
/* output a header */
- core_fprintf(indexfile, "\t<h2>%s</h2>\n", header);
+ indexfile.printf("\t<h2>%s</h2>\n", header);
/* start the table */
- core_fprintf(indexfile, "\t<p><table width=\"90%%\">\n");
- core_fprintf(indexfile, "\t\t<tr>\n\t\t\t<th width=\"%d%%\">Source</th><th width=\"%d%%\">Driver</th>", width, width);
+ indexfile.printf("\t<p><table width=\"90%%\">\n");
+ indexfile.printf("\t\t<tr>\n\t\t\t<th width=\"%d%%\">Source</th><th width=\"%d%%\">Driver</th>", width, width);
for (listnum = 0; listnum < list_count; listnum++)
- core_fprintf(indexfile, "<th width=\"%d%%\">%s</th>", width, lists[listnum].version);
- core_fprintf(indexfile, "\n\t\t</tr>\n");
+ indexfile.printf("<th width=\"%d%%\">%s</th>", width, lists[listnum].version);
+ indexfile.printf("\n\t\t</tr>\n");
/* if nothing, print a default message */
if (listhead == nullptr)
{
- core_fprintf(indexfile, "\t\t<tr>\n\t\t\t");
- core_fprintf(indexfile, "<td colspan=\"%d\" align=\"center\">(No regressions detected)</td>", list_count + 2);
- core_fprintf(indexfile, "\n\t\t</tr>\n");
+ indexfile.printf("\t\t<tr>\n\t\t\t");
+ indexfile.printf("<td colspan=\"%d\" align=\"center\">(No regressions detected)</td>", list_count + 2);
+ indexfile.printf("\n\t\t</tr>\n");
}
/* iterate over files */
@@ -1083,10 +1083,10 @@ static void append_driver_list_table(const char *header, std::string &dirname, c
create_linked_file(dirname, curfile, prevfile, curfile->next, (pngdiffname[0] == 0) ? nullptr : pngdiffname, tempheader, tempfooter);
/* create a row */
- core_fprintf(indexfile, "\t\t<tr>\n\t\t\t");
+ indexfile.printf("\t\t<tr>\n\t\t\t");
if (rowspan > 0)
- core_fprintf(indexfile, "<td rowspan=\"%d\">%s</td>", rowspan, curfile->source);
- core_fprintf(indexfile, "<td><a href=\"%s.html\">%s</a></td>", curfile->name, curfile->name);
+ indexfile.printf("<td rowspan=\"%d\">%s</td>", rowspan, curfile->source);
+ indexfile.printf("<td><a href=\"%s.html\">%s</a></td>", curfile->name, curfile->name);
for (listnum = 0; listnum < list_count; listnum++)
{
int unique_index = -1;
@@ -1094,16 +1094,16 @@ static void append_driver_list_table(const char *header, std::string &dirname, c
if (pngdiffname[0] != 0)
unique_index = get_unique_index(curfile, listnum);
if (unique_index != -1)
- core_fprintf(indexfile, "<td><span style=\"%s\">&nbsp;&nbsp;&nbsp;</span> %s [<a href=\"%s\" target=\"blank\">%d</a>]</td>", status_color[curfile->status[listnum]], status_text[curfile->status[listnum]], pngdiffname, unique_index);
+ indexfile.printf("<td><span style=\"%s\">&nbsp;&nbsp;&nbsp;</span> %s [<a href=\"%s\" target=\"blank\">%d</a>]</td>", status_color[curfile->status[listnum]], status_text[curfile->status[listnum]], pngdiffname, unique_index);
else
- core_fprintf(indexfile, "<td><span style=\"%s\">&nbsp;&nbsp;&nbsp;</span> %s</td>", status_color[curfile->status[listnum]], status_text[curfile->status[listnum]]);
+ indexfile.printf("<td><span style=\"%s\">&nbsp;&nbsp;&nbsp;</span> %s</td>", status_color[curfile->status[listnum]], status_text[curfile->status[listnum]]);
}
- core_fprintf(indexfile, "\n\t\t</tr>\n");
+ indexfile.printf("\n\t\t</tr>\n");
/* also print the name and source file */
printf("%s %s\n", curfile->name, curfile->source);
}
/* end of table */
- core_fprintf(indexfile, "</table></p>\n");
+ indexfile.printf("</table></p>\n");
}
diff --git a/src/tools/split.cpp b/src/tools/split.cpp
index a6b97e7175d..f942e1481c2 100644
--- a/src/tools/split.cpp
+++ b/src/tools/split.cpp
@@ -64,7 +64,7 @@ static void compute_hash_as_string(std::string &buffer, void *data, UINT32 lengt
static int split_file(const char *filename, const char *basename, UINT32 splitsize)
{
std::string outfilename, basefilename, splitfilename;
- core_file *outfile = nullptr, *infile = nullptr, *splitfile = nullptr;
+ util::core_file::ptr outfile, infile, splitfile;
std::string computedhash;
void *splitbuffer = nullptr;
int index, partnum;
@@ -81,7 +81,7 @@ static int split_file(const char *filename, const char *basename, UINT32 splitsi
splitsize *= 1024 * 1024;
// open the file for read
- filerr = core_fopen(filename, OPEN_FLAG_READ, &infile);
+ filerr = util::core_file::open(filename, OPEN_FLAG_READ, infile);
if (filerr != FILERR_NONE)
{
fprintf(stderr, "Fatal error: unable to open file '%s'\n", filename);
@@ -89,7 +89,7 @@ static int split_file(const char *filename, const char *basename, UINT32 splitsi
}
// get the total length
- totallength = core_fsize(infile);
+ totallength = infile->size();
if (totallength < splitsize)
{
fprintf(stderr, "Fatal error: file is smaller than the split size\n");
@@ -119,7 +119,7 @@ static int split_file(const char *filename, const char *basename, UINT32 splitsi
splitfilename.assign(basename).append(".split");
// create the split file
- filerr = core_fopen(splitfilename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_NO_BOM, &splitfile);
+ filerr = util::core_file::open(splitfilename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_NO_BOM, splitfile);
if (filerr != FILERR_NONE)
{
fprintf(stderr, "Fatal error: unable to create split file '%s'\n", splitfilename.c_str());
@@ -127,8 +127,8 @@ static int split_file(const char *filename, const char *basename, UINT32 splitsi
}
// write the basics out
- core_fprintf(splitfile, "splitfile=%s\n", basefilename.c_str());
- core_fprintf(splitfile, "splitsize=%d\n", splitsize);
+ splitfile->printf("splitfile=%s\n", basefilename.c_str());
+ splitfile->printf("splitsize=%d\n", splitsize);
printf("Split file is '%s'\n", splitfilename.c_str());
printf("Splitting file %s into chunks of %dMB...\n", basefilename.c_str(), splitsize / (1024 * 1024));
@@ -141,7 +141,7 @@ static int split_file(const char *filename, const char *basename, UINT32 splitsi
printf("Reading part %d...", partnum);
// read as much as we can from the file
- length = core_fread(infile, splitbuffer, splitsize);
+ length = infile->read(splitbuffer, splitsize);
if (length == 0)
break;
@@ -149,13 +149,13 @@ static int split_file(const char *filename, const char *basename, UINT32 splitsi
compute_hash_as_string(computedhash, splitbuffer, length);
// write that info to the split file
- core_fprintf(splitfile, "hash=%s file=%s.%03d\n", computedhash.c_str(), basefilename.c_str(), partnum);
+ splitfile->printf("hash=%s file=%s.%03d\n", computedhash.c_str(), basefilename.c_str(), partnum);
// compute the full filename for this guy
outfilename = string_format("%s.%03d", basename, partnum);
// create it
- filerr = core_fopen(outfilename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, &outfile);
+ filerr = util::core_file::open(outfilename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, outfile);
if (filerr != FILERR_NONE)
{
printf("\n");
@@ -166,15 +166,14 @@ static int split_file(const char *filename, const char *basename, UINT32 splitsi
printf(" writing %s.%03d...", basefilename.c_str(), partnum);
// write the data
- actual = core_fwrite(outfile, splitbuffer, length);
+ actual = outfile->write(splitbuffer, length);
if (actual != length)
{
printf("\n");
fprintf(stderr, "Fatal error: Error writing output file (out of space?)\n");
goto cleanup;
}
- core_fclose(outfile);
- outfile = nullptr;
+ outfile.reset();
printf(" done\n");
@@ -188,17 +187,17 @@ static int split_file(const char *filename, const char *basename, UINT32 splitsi
error = 0;
cleanup:
- if (splitfile != nullptr)
+ if (splitfile)
{
- core_fclose(splitfile);
+ splitfile.reset();
if (error != 0)
remove(splitfilename.c_str());
}
- if (infile != nullptr)
- core_fclose(infile);
- if (outfile != nullptr)
+ if (infile)
+ infile.reset();
+ if (outfile)
{
- core_fclose(outfile);
+ outfile.reset();
if (error != 0)
remove(outfilename.c_str());
}
@@ -218,7 +217,7 @@ static int join_file(const char *filename, const char *outname, int write_output
std::string expectedhash, computedhash;
std::string outfilename, infilename;
std::string basepath;
- core_file *outfile = nullptr, *infile = nullptr, *splitfile = nullptr;
+ util::core_file::ptr outfile, infile, splitfile;
void *splitbuffer = nullptr;
file_error filerr;
UINT32 splitsize;
@@ -227,7 +226,7 @@ static int join_file(const char *filename, const char *outname, int write_output
int index;
// open the file for read
- filerr = core_fopen(filename, OPEN_FLAG_READ, &splitfile);
+ filerr = util::core_file::open(filename, OPEN_FLAG_READ, splitfile);
if (filerr != FILERR_NONE)
{
fprintf(stderr, "Fatal error: unable to open file '%s'\n", filename);
@@ -235,7 +234,7 @@ static int join_file(const char *filename, const char *outname, int write_output
}
// read the first line and verify this is a split file
- if (!core_fgets(buffer, sizeof(buffer), splitfile) || strncmp(buffer, "splitfile=", 10) != 0)
+ if (!splitfile->gets(buffer, sizeof(buffer)) || strncmp(buffer, "splitfile=", 10) != 0)
{
fprintf(stderr, "Fatal error: corrupt or incomplete split file at line:\n%s\n", buffer);
goto cleanup;
@@ -258,7 +257,7 @@ static int join_file(const char *filename, const char *outname, int write_output
outfilename.insert(0, basepath);
// read the split size
- if (!core_fgets(buffer, sizeof(buffer), splitfile) || sscanf(buffer, "splitsize=%d", &splitsize) != 1)
+ if (!splitfile->gets(buffer, sizeof(buffer)) || sscanf(buffer, "splitsize=%d", &splitsize) != 1)
{
fprintf(stderr, "Fatal error: corrupt or incomplete split file at line:\n%s\n", buffer);
goto cleanup;
@@ -268,17 +267,16 @@ static int join_file(const char *filename, const char *outname, int write_output
if (write_output)
{
// don't overwrite the original!
- filerr = core_fopen(outfilename.c_str(), OPEN_FLAG_READ, &outfile);
+ filerr = util::core_file::open(outfilename.c_str(), OPEN_FLAG_READ, outfile);
if (filerr == FILERR_NONE)
{
- core_fclose(outfile);
- outfile = nullptr;
+ outfile.reset();
fprintf(stderr, "Fatal error: output file '%s' already exists\n", outfilename.c_str());
goto cleanup;
}
// open the output for write
- filerr = core_fopen(outfilename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, &outfile);
+ filerr = util::core_file::open(outfilename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, outfile);
if (filerr != FILERR_NONE)
{
fprintf(stderr, "Fatal error: unable to create file '%s'\n", outfilename.c_str());
@@ -289,7 +287,7 @@ static int join_file(const char *filename, const char *outname, int write_output
printf("%s file '%s'...\n", write_output ? "Joining" : "Verifying", outfilename.c_str());
// now iterate through each file
- while (core_fgets(buffer, sizeof(buffer), splitfile))
+ while (splitfile->gets(buffer, sizeof(buffer)))
{
UINT32 length, actual;
@@ -307,7 +305,7 @@ static int join_file(const char *filename, const char *outname, int write_output
// read the file's contents
infilename.insert(0, basepath);
- filerr = core_fload(infilename.c_str(), &splitbuffer, &length);
+ filerr = util::core_file::load(infilename.c_str(), &splitbuffer, length);
if (filerr != FILERR_NONE)
{
printf("\n");
@@ -331,7 +329,7 @@ static int join_file(const char *filename, const char *outname, int write_output
{
printf(" writing...");
- actual = core_fwrite(outfile, splitbuffer, length);
+ actual = outfile->write(splitbuffer, length);
if (actual != length)
{
printf("\n");
@@ -357,13 +355,13 @@ static int join_file(const char *filename, const char *outname, int write_output
error = 0;
cleanup:
- if (splitfile != nullptr)
- core_fclose(splitfile);
- if (infile != nullptr)
- core_fclose(infile);
- if (outfile != nullptr)
+ if (splitfile)
+ splitfile.reset();
+ if (infile)
+ infile.reset();
+ if (outfile)
{
- core_fclose(outfile);
+ outfile.reset();
if (error != 0)
remove(outfilename.c_str());
}
diff --git a/src/tools/src2html.cpp b/src/tools/src2html.cpp
index 557313f1b3e..e95cbe11764 100644
--- a/src/tools/src2html.cpp
+++ b/src/tools/src2html.cpp
@@ -206,12 +206,12 @@ static int recurse_dir(int srcrootlen, int dstrootlen, std::string &srcdir, std:
static int output_file(file_type type, int srcrootlen, int dstrootlen, std::string &srcfile, std::string &dstfile, bool link_to_file, std::string &tempheader, std::string &tempfooter);
// HTML helpers
-static core_file *create_file_and_output_header(std::string &filename, std::string &templatefile, std::string &path);
-static void output_footer_and_close_file(core_file *file, std::string &templatefile, std::string &path);
+static util::core_file::ptr create_file_and_output_header(std::string &filename, std::string &templatefile, std::string &path);
+static void output_footer_and_close_file(util::core_file::ptr &&file, std::string &templatefile, std::string &path);
// path helpers
static std::string &normalized_subpath(std::string &dest, std::string &path, int start);
-static void output_path_as_links(core_file *file, std::string &path, bool end_is_directory, bool link_to_file);
+static void output_path_as_links(util::core_file &file, std::string &path, bool end_is_directory, bool link_to_file);
static bool find_include_file(std::string &srcincpath, int srcrootlen, int dstrootlen, std::string &srcfile, std::string &dstfile, std::string &filename);
@@ -279,7 +279,7 @@ int main(int argc, char *argv[])
// read the template file into an std::string
UINT32 bufsize;
void *buffer;
- if (core_fload(tempfilename.c_str(), &buffer, &bufsize) == FILERR_NONE)
+ if (util::core_file::load(tempfilename.c_str(), &buffer, bufsize) == FILERR_NONE)
{
tempheader.assign((const char *)buffer, bufsize);
osd_free(buffer);
@@ -333,12 +333,12 @@ static int recurse_dir(int srcrootlen, int dstrootlen, std::string &srcdir, std:
// create an index file
std::string indexname;
indexname = string_format("%s%c%s", dstdir.c_str(), PATH_SEPARATOR[0], "index.html");
- core_file *indexfile = create_file_and_output_header(indexname, tempheader, srcdir_subpath);
+ util::core_file::ptr indexfile = create_file_and_output_header(indexname, tempheader, srcdir_subpath);
// output the directory navigation
- core_fprintf(indexfile, "<h3>Viewing Directory: ");
- output_path_as_links(indexfile, srcdir_subpath, true, false);
- core_fprintf(indexfile, "</h3>");
+ indexfile->printf("<h3>Viewing Directory: ");
+ output_path_as_links(*indexfile, srcdir_subpath, true, false);
+ indexfile->printf("</h3>");
// iterate first over directories, then over files
int result = 0;
@@ -398,7 +398,7 @@ static int recurse_dir(int srcrootlen, int dstrootlen, std::string &srcdir, std:
{
// add a header
if (curlist == list)
- core_fprintf(indexfile, "\t<h2>%s</h2>\n\t<ul>\n", (entry_type == ENTTYPE_DIR) ? "Directories" : "Files");
+ indexfile->printf("\t<h2>%s</h2>\n\t<ul>\n", (entry_type == ENTTYPE_DIR) ? "Directories" : "Files");
// build the source filename
std::string srcfile;
@@ -422,7 +422,7 @@ static int recurse_dir(int srcrootlen, int dstrootlen, std::string &srcdir, std:
{
dstfile = string_format("%s%c%s.html", dstdir.c_str(), PATH_SEPARATOR[0], curlist->name.c_str());
if (indexfile != nullptr)
- core_fprintf(indexfile, "\t<li><a href=\"%s.html\">%s</a></li>\n", curlist->name.c_str(), curlist->name.c_str());
+ indexfile->printf("\t<li><a href=\"%s.html\">%s</a></li>\n", curlist->name.c_str(), curlist->name.c_str());
result = output_file(type, srcrootlen, dstrootlen, srcfile, dstfile, srcdir.compare(dstdir) == 0, tempheader, tempfooter);
}
}
@@ -432,14 +432,14 @@ static int recurse_dir(int srcrootlen, int dstrootlen, std::string &srcdir, std:
{
dstfile = string_format("%s%c%s", dstdir.c_str(), PATH_SEPARATOR[0], curlist->name.c_str());
if (indexfile != nullptr)
- core_fprintf(indexfile, "\t<li><a href=\"%s/index.html\">%s/</a></li>\n", curlist->name.c_str(), curlist->name.c_str());
+ indexfile->printf("\t<li><a href=\"%s/index.html\">%s/</a></li>\n", curlist->name.c_str(), curlist->name.c_str());
result = recurse_dir(srcrootlen, dstrootlen, srcfile, dstfile, tempheader, tempfooter);
}
}
// close the list if we found some stuff
if (list != nullptr)
- core_fprintf(indexfile, "\t</ul>\n");
+ indexfile->printf("\t</ul>\n");
// free all the allocated entries
while (list != nullptr)
@@ -451,7 +451,7 @@ static int recurse_dir(int srcrootlen, int dstrootlen, std::string &srcdir, std:
}
if (indexfile != nullptr)
- output_footer_and_close_file(indexfile, tempfooter, srcdir_subpath);
+ output_footer_and_close_file(std::move(indexfile), tempfooter, srcdir_subpath);
return result;
}
@@ -516,36 +516,35 @@ static int output_file(file_type type, int srcrootlen, int dstrootlen, std::stri
is_token[(UINT8)token_chars[toknum]] = true;
// open the source file
- core_file *src;
- if (core_fopen(srcfile.c_str(), OPEN_FLAG_READ, &src) != FILERR_NONE)
+ util::core_file::ptr src;
+ if (util::core_file::open(srcfile.c_str(), OPEN_FLAG_READ, src) != FILERR_NONE)
{
fprintf(stderr, "Unable to read file '%s'\n", srcfile.c_str());
return 1;
}
// open the output file
- core_file *dst = create_file_and_output_header(dstfile, tempheader, srcfile_subpath);
+ util::core_file::ptr dst = create_file_and_output_header(dstfile, tempheader, srcfile_subpath);
if (dst == nullptr)
{
fprintf(stderr, "Unable to write file '%s'\n", dstfile.c_str());
- core_fclose(src);
return 1;
}
// output the directory navigation
- core_fprintf(dst, "<h3>Viewing File: ");
- output_path_as_links(dst, srcfile_subpath, false, link_to_file);
- core_fprintf(dst, "</h3>");
+ dst->printf("<h3>Viewing File: ");
+ output_path_as_links(*dst, srcfile_subpath, false, link_to_file);
+ dst->printf("</h3>");
// start with some tags
- core_fprintf(dst, "\t<pre class=\"source\">\n");
+ dst->printf("\t<pre class=\"source\">\n");
// iterate over lines in the source file
int linenum = 1;
bool in_comment = false;
char srcline[4096];
std::ostringstream dstline;
- while (core_fgets(srcline, ARRAY_LENGTH(srcline), src) != nullptr)
+ while (src->gets(srcline, ARRAY_LENGTH(srcline)) != nullptr)
{
// start with the line number
dstline.str("");
@@ -707,15 +706,14 @@ static int output_file(file_type type, int srcrootlen, int dstrootlen, std::stri
// append a break and move on
dstline.put('\n');
- core_fputs(dst, dstline.str().c_str());
+ dst->puts(dstline.str().c_str());
}
// close tags
- core_fprintf(dst, "\t</pre>\n");
+ dst->printf("\t</pre>\n");
// close the file
- output_footer_and_close_file(dst, tempfooter, srcfile_subpath);
- core_fclose(src);
+ output_footer_and_close_file(std::move(dst), tempfooter, srcfile_subpath);
return 0;
}
@@ -730,17 +728,17 @@ static int output_file(file_type type, int srcrootlen, int dstrootlen, std::stri
HTML file with a standard header
-------------------------------------------------*/
-static core_file *create_file_and_output_header(std::string &filename, std::string &templatefile, std::string &path)
+static util::core_file::ptr create_file_and_output_header(std::string &filename, std::string &templatefile, std::string &path)
{
// create the indexfile
- core_file *file;
- if (core_fopen(filename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS | OPEN_FLAG_NO_BOM, &file) != FILERR_NONE)
- return nullptr;
+ util::core_file::ptr file;
+ if (util::core_file::open(filename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS | OPEN_FLAG_NO_BOM, file) != FILERR_NONE)
+ return util::core_file::ptr();
// print a header
std::string modified(templatefile);
strreplace(modified, "<!--PATH-->", path.c_str());
- core_fwrite(file, modified.c_str(), modified.length());
+ file->write(modified.c_str(), modified.length());
// return the file
return file;
@@ -752,12 +750,12 @@ static core_file *create_file_and_output_header(std::string &filename, std::stri
standard footer to an HTML file and close it
-------------------------------------------------*/
-static void output_footer_and_close_file(core_file *file, std::string &templatefile, std::string &path)
+static void output_footer_and_close_file(util::core_file::ptr &&file, std::string &templatefile, std::string &path)
{
std::string modified(templatefile);
strreplace(modified, "<!--PATH-->", path.c_str());
- core_fwrite(file, modified.c_str(), modified.length());
- core_fclose(file);
+ file->write(modified.c_str(), modified.length());
+ file.reset();
}
@@ -783,7 +781,7 @@ static std::string &normalized_subpath(std::string &dest, std::string &path, int
series of links
-------------------------------------------------*/
-static void output_path_as_links(core_file *file, std::string &path, bool end_is_directory, bool link_to_file)
+static void output_path_as_links(util::core_file &file, std::string &path, bool end_is_directory, bool link_to_file)
{
// first count how deep we are
int srcdepth = 0;
@@ -793,10 +791,10 @@ static void output_path_as_links(core_file *file, std::string &path, bool end_is
srcdepth++;
// output a link to the root
- core_fprintf(file, "<a href=\"");
+ file.printf("<a href=\"");
for (int depth = 0; depth < srcdepth; depth++)
- core_fprintf(file, "../");
- core_fprintf(file, "index.html\">&lt;root&gt;</a>/");
+ file.printf("../");
+ file.printf("index.html\">&lt;root&gt;</a>/");
// now output links to each path up the chain
int curdepth = 0;
@@ -806,10 +804,10 @@ static void output_path_as_links(core_file *file, std::string &path, bool end_is
std::string substr(path, lastslash, slashindex - lastslash);
curdepth++;
- core_fprintf(file, "<a href=\"");
+ file.printf("<a href=\"");
for (int depth = curdepth; depth < srcdepth; depth++)
- core_fprintf(file, "../");
- core_fprintf(file, "index.html\">%s</a>/", substr.c_str());
+ file.printf("../");
+ file.printf("index.html\">%s</a>/", substr.c_str());
lastslash = slashindex + 1;
}
@@ -817,11 +815,11 @@ static void output_path_as_links(core_file *file, std::string &path, bool end_is
// and a final link to the current directory
std::string substr(path, lastslash, -1);
if (end_is_directory)
- core_fprintf(file, "<a href=\"index.html\">%s</a>", substr.c_str());
+ file.printf("<a href=\"index.html\">%s</a>", substr.c_str());
else if (link_to_file)
- core_fprintf(file, "<a href=\"%s\">%s</a>", substr.c_str(), substr.c_str());
+ file.printf("<a href=\"%s\">%s</a>", substr.c_str(), substr.c_str());
else
- core_fprintf(file, "<a href=\"%s.html\">%s</a>", substr.c_str(), substr.c_str());
+ file.printf("<a href=\"%s.html\">%s</a>", substr.c_str(), substr.c_str());
}
@@ -866,11 +864,11 @@ static bool find_include_file(std::string &srcincpath, int srcrootlen, int dstro
srcincpath.append(PATH_SEPARATOR).append(filename.substr(lastsepindex, -1));
// see if we can open it
- core_file *testfile;
- if (core_fopen(srcincpath.c_str(), OPEN_FLAG_READ, &testfile) == FILERR_NONE)
+ util::core_file::ptr testfile;
+ if (util::core_file::open(srcincpath.c_str(), OPEN_FLAG_READ, testfile) == FILERR_NONE)
{
// close the file
- core_fclose(testfile);
+ testfile.reset();
// find the longest matching directory substring between the include and source file
lastsepindex = 0;
diff --git a/src/tools/unidasm.cpp b/src/tools/unidasm.cpp
index 13eabe31c59..f69de2b0864 100644
--- a/src/tools/unidasm.cpp
+++ b/src/tools/unidasm.cpp
@@ -512,7 +512,7 @@ int main(int argc, char *argv[])
return 1;
// load the file
- filerr = core_fload(opts.filename, &data, &length);
+ filerr = util::core_file::load(opts.filename, &data, length);
if (filerr != FILERR_NONE)
{
fprintf(stderr, "Error opening file '%s'\n", opts.filename);
diff --git a/tests/LICENSE b/tests/LICENSE
new file mode 100644
index 00000000000..4d9210d10e1
--- /dev/null
+++ b/tests/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2016, MAME Development Team
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of bsd3 nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/tests/README.md b/tests/README.md
new file mode 100644
index 00000000000..a7a0e9e85a3
--- /dev/null
+++ b/tests/README.md
@@ -0,0 +1,5 @@
+# **Tests** #
+
+Cointains code by various developers and it is used to test MAME
+
+Licensed under [The BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause)
diff --git a/tests/lib/util/corestr.cpp b/tests/lib/util/corestr.cpp
index fa2dcabf48b..3da0bc75541 100644
--- a/tests/lib/util/corestr.cpp
+++ b/tests/lib/util/corestr.cpp
@@ -1,6 +1,3 @@
-// license:BSD-3-Clause
-// copyright-holders:Miodrag Milanovic
-
#include "gtest/gtest.h"
#include "corestr.h"
diff --git a/tests/main.cpp b/tests/main.cpp
index a3ba19293f9..5a07b837186 100644
--- a/tests/main.cpp
+++ b/tests/main.cpp
@@ -1,6 +1,3 @@
-// license:BSD-3-Clause
-// copyright-holders:Miodrag Milanovic
-
#include <stdio.h>
#include "gtest/gtest.h"